Buscar

microcontrolador

Prévia do material em texto

MCS51 
 Prof. Celso 
 
 1
MICROCONTROLADOR 
 
 
 A figura abaixo mostra a diferença entre um microprocessador e um 
microcontrolador. O microprocessador (ou CPU) é o gerenciador de um sistema 
microcontrolado, possui internamente a unidade lógica aritmética (ULA), 
registradores e a unidade de controle (UC). O microprocessador necessita de unidades 
de memórias (ROM e/ou RAM) e de dispositivos de entrada e saída (I/O) para se 
comunicar com o ambiente externo. 
 O microcontrolador é um dispositivo que possui internamente um 
microprocessador, unidades de memórias e interface com o mundo externo (porta 
serial, porta paralela, temporizadores). Na figura abaixo o retângulo marrom 
corresponde ao microprocessador e retângulo azul corresponde ao microcontrolador. 
 O microcontrolador é utilizado para sistemas dedicados, tais como: injeção 
eletrônica, ignição eletrônica, computador de bordo, relógios microcontrolados, 
sistemas de automação. Num chão de fábrica é muito utilizado o CLP, sendo que este 
equipamento possui internamente um microcontrolador. 
 
 
 
 
FAMÍLIA MCS-51 
 
 Existem vários microcontroladores disponíveis no mercado. Um dos mais 
utilizados se refere à família MCS-51. Estes microcontroladores possuem a vantagem 
de serem produzidos por vários fabricantes (Atmel, Philips, Texas...) que mantém 
núcleo base (core) e diferem em outras características: uns apresentam conversores 
analógicos digitais (A/D), outros variam na quantidade de memória, no tipo de 
memória (flash, eeprom), uns possuem PWM, comunicação SPI, I2C, Ethernet, clocks 
que variam de 2 a 100 MHz. 
 MCS51 
 Prof. Celso 
 
 2
 A figura abaixo apresenta o diagrama de um microcontrolador 8051: 
 
 
 
 
O 8051 possui um conjunto de 111 instruções, sendo que 98% destas são 
instruções de 1 ou de 2 ciclos de máquina, o que fornece uma maior velocidade de 
processamento. A figura abaixo mostra o encapsulamento de 40 pinos do 8051: 
 
 
 
 
 MCS51 
 Prof. Celso 
 
 3
MEMÓRIA EXTERNA 
 
 O contador de endereço do 8051 (PC) é de 16 bits, portanto pode ser 
adicionado até: 
64 Kbytes de memória de dados (Pinos RD e WR) 
64 Kbytes de memória de programa (Pino PSEN) 
 
 
 A habilitação da memória externa de programa é feita através do pino EA: 
 
 EA = 0 utiliza a memória externa de programa (até 64 Kbytes) 
 EA =1 utiliza a princípio a memória interna (4 Kbytes) e depois a memória 
 externa. 
 
 Para o uso de memórias externas, os seguintes pinos devem ser utilizados: 
 
Pino 17 (RD) – utilizado para leitura na memória de dados (RAM) externa. 
Pino 16 (WR) – utilizado para escrita na memória de dados (RAM) externa. 
Pino 29 (PSEN) – utilizado para leitura na memória de programa (ROM) externa. 
Pino 30 (ALE) – sinal para demultiplexar a porta P0 (enable latch). 
Pino 31 (EA) – habilita o acesso externo da memória de programa (external Access) 
 
Pinos de 1 a 8 (porta 0) – bus multiplexado endereços (A0-A7) e dados (D0-D7). 
Pinos de 21 a 28 (porta 2) – contém os endereços de A8 a A15. 
 
 
Esquema para ligar uma ROM externa de 64kbytes: 
 
 
 
 
 
 MCS51 
 Prof. Celso 
 
 4
Esquema para ligar uma RAM de 64 Kbytes: 
 
 
 
 
 
Esquema simplificado para ligar uma ROM de 64 Kbytes e uma RAM de 64 
Kbytes: 
 
 
 
 
 
ORGANIZAÇÃO DA MEMÓRIA RAM INTERNA 
 MCS51 
 Prof. Celso 
 
 5
 
 O diagrama abaixo mostra a organização interna da memória RAM: 
 
 
 
 É mostrado no diagrama acima que a memória interna RAM é dividida em: 
- 128 bytes superiores (de 80h a FFh) que são utilizados pelos registradores de 
funções especiais (acumulador, psw, sp, dptr....). 
- 128 bytes superiores (de 80h a FFH) com os mesmos endereço do SFR. Esta 
memória está presentes apenas nos microcontroladores 8032, 8052 e 8752. 
- 128 bytes inferiores de uso geral (de 00h a 7Fh) divididos em: 
 - 80 bytes de uso geral 
 - 16 bytes que podem ser endereçados bit a bit 
 - 4 bancos (banco 0, Banco 1, Banco 2 e Banco 3) de 8 bytes cada. 
 Pelo diagrama anterior nota-se que os 8 bytes de cada Banco possui uma 
denominação comum: R0, R1, R2, R3, R4, R5, R6 e R7. Desta forma, deve-se definir 
qual banco está se utilizando, se nenhum banco for definido o microntrolador 
trabalhará com o banco 0 (default). 
 MCS51 
 Prof. Celso 
 
 6
Exemplo: O comando MOV é utilizado para transferência (movimento) de dados 
entre memórias. O movimento é sempre para, de: 
 
1) Se o banco 0 for selecionado a instrução: 
 
MOV A, R0 ; isto movimenta o valor que está em R0 do banco 0 (2Eh, no exemplo 
; acima) para o acumulador (que é o principal registrador). 
 
Neste comando teríamos: 
 
(A) 2Eh os parênteses indicam que o valor no registrador A recebe o valor 
constante 2Eh. 
 
 
Outra forma de acessar os valores nos registradores sem selecionar o banco 
seria através da sua posição de memória. Por exemplo, acessando o registrador R0 
através de seu endereço: 
 
MOV A, 00h ; isto movimenta o valor que está na posição de memória 00h (2Eh, no 
;exemplo acima) para o acumulador (que é o principal registrador). 
 
Neste comando teríamos: 
 
(A) (00h) os parênteses indicam que o valor no registrador A recebe o valor que 
está na posição de memória 00h (que é 2Eh). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Exercício 1) Qual os valores que serão movidos para o acumulador quando for dada a 
instrução: 
 MOV A, R6 
 
e como esses valores poderiam ser acessados pela posição de memória: 
 
Se for selecionado o banco 0:_________ ou _______________ 
 o banco 1:_________ ou _______________ 
 o banco 2:_________ ou _______________ 
 o banco 3:_________ ou _______________ 
 
 
Exercício 2) Qual os valores que serão movidos para o acumulador: 
 
 MOV A, 15h (A) 
 MOV A, 0CH (A) 
 MOV A, 06h (A) 
 MOV A, 0Eh (A) 
 MOV A, 2Eh (A) 
 MCS51 
 Prof. Celso 
 
 7
REGISTRO DE FUNÇÕES ESPECIAIS (SFR) 
 
 O mapa abaixo mostram os registradores de funções especiais bem como os 
valores que eles assumem após o sinal de reset: 
 
 
 
 
0F8h 0FFh 
0F0h B 
00000000 
 0F7h 
0E8h 0EFh 
0E0h ACC 
00000000 
 0E7h 
0D8h 0DFh 
0D0h PSW 
00000000 
 0D7h 
0C8h 0CFh 
0C0h 0C7h 
0B8h IP 
XX000000 
 0BFh 
0B0h P3 
11111111 
 0B7h 
0A8h IE 
0X000000 
 0AFh 
0A0h P2 
11111111 
 0A7h 
98h SCON 
00000000 
SBUF 
XXXXXXXX 
 9Fh 
90h P1 
11111111 
 97h 
88h TCON 
00000000 
TMOD 
00000000 
TL0 
00000000 
TL1 
00000000 
TH0 
00000000 
TH1 
00000000 
 8Fh 
80h PO 
11111111 
SP 
00000111 
DPL 
00000000 
DPH 
00000000 
 PCON 
0XXX0000 
87h 
Registros que podem ser 
acessados bit a bit 
Endereço 
Final 
Endereço 
Inicial 
 
 
 
 
 
Pelo mapa, temos os endereços: 
 
P0 - Porta 0, endereço 80h 
P1 - Porta 1, endereço 90h 
P2 – Porta 2, endereço A0h 
P3 – Porta 3, endereço B0h 
 
SP (stack point) – pilha, endereço 81h 
DPTR – ponteiro para endereçar dados externos, é dividido em DPL (82h) e DPH 
(83h), como cada registro possui 8 bits, o DPTR possui 16 bits, sendo possível com 
isso acessar 64 Kbytes de memória externa. 
PCON – controle de potência, endereço 87h 
 MCS51 
 Prof. Celso 
 
 
TCON – controle do timer/contador, endereço 88h 
TMOD – modo de controle do timer/contador, endereço 89h 
TL0 – byte baixo do timer/contador 0, endereço 8Ah 
TL1 – byte baixo do timer/contador 1, endereço 8BhTH0 – byte alto do timer/contador 0, endereço 8Ch 
TH1 – byte alto do timer/contador 1, endereço 8Dh 
 
SCON – controle da porta serial, endereço 98h 
SBUF – porta de dados serial, endereço 99h 
 
IE – habilita interrupção, endereço A8h 
IP – controle de prioridade de interrupção, endereço B8h 
 
ACC – acumulador, endereço E0h registrador mais importante contém os 
resultados das operações aritméticas e lógicas. 
B – registrador B, endereço F0h utilizado para realizar multiplicação e divisão 
 
PSW – contém os flags de estado e os bits para selecionar o banco de registradores, 
endereço D0h. 
 
 O PSW é mostrado abaixo: 
 
Uso geral Seleção do Banco 
Carry auxiliar Overflow 
Carry Paridade 
 
CY AC F0 RS1 RS0 OV - P 
 0 0 banco 0 
 0 1 banco 1 
 1 0 banco 2 
 1 1 banco 3 
 
Exemplo: mover o conteúdo do acumulador (A) para o registrador R1 do banco 2. 
Para isso, o primeiro passo é selecionar o banco de interesse, no caso o banco 2. Para 
isso RS1=1 e RS0=0: 
 PSW: 
CY AC F0 RS1 RS0 OV - P 
0 0 0 1 0 0 0 0 
 
 MOV PSW,#10H ; selecionando o banco 2 
 MOV R1, A ; o conteúdo de R1 recebe o conteúdo do acumulador 
; (R1) (A) 
 
 
 
 
 
 
 
 
Exercício 3): Selecione o banco 1 e faça o acumulador receber o valor de R3, 
depois selecione o banco 3 e faça o registrador R3 receber o valor do acumulador:
________________________ 
________________________ 
________________________ 
8
 MCS51 
 Prof. Celso 
 
 9
CICLO DE MÁQUINA 
 
 No 8051, cada ciclo de máquina possui 6 estados (de S1 a S6), cada estado 
possui 2 períodos do oscilador, portanto: 
 
 1 ciclo de máquina no 8051 possui 12 períodos de clock. 
 
 Se for utilizado um cristal de 12 Mhz, o ciclo de máquina será: 
 
 
s
Mhzfcristal
máquinadeTciclo µ1
12
1*121*12__ === 
 
 1 ciclo de máquina – 1 byte (Ex.: inc A) 
 O 8051 possui instruções de 2 ciclos de máquina – 2 bytes (Ex.: add a,#dado) 
 2 ciclos de máquina – 1 byte (Ex.: inc dptr) 
 
 Abaixo é mostrado o diagrama de tempo da leitura da memória externa de 
programa: 
 
 
 
 Para leitura de memória externa de dados, o diagrama é mostrado abaixo: 
 
 
 MCS51 
 Prof. Celso 
 
 10
RESET 
 Para iniciar o processamento, o microcontrolador necessita de um sinal de 
reset. Este sinal faz a CPU procurar o endereço 00h da memória de programa para 
iniciar o programa armazenado nela. No 8051 este sinal corresponde a uma borda de 
descida no pino 9 (RST), que pode ser feita automaticamente através do seguinte 
esquema: 
 
 O valor do capacitor e do resistor pode ser calculado utilizando o tempo de 
carga no capacitor e considerando que seja necessário: 
 
10 ms para estabilizar a tensão de alimentação 
10 ms para partida do oscilador 
24 período de clock para inicialização do sistema. 
 
No diagrama de tempo, vr corresponde a tensão de referência (3,5 V – acima 
deste valor é considerado nível alto). Considerando que seja utilizado um cristal de 1 
MHz, o período do clock será” 
 
s
MHz
Tcristal 610
1
1 −== 
 
portanto seria necessário um tempo de 20,024 ms (10 m + 10 m + 24 * 1 µs). 
 A tensão no capacitor é dada por: 
 
RC
t
eVccVr
−
= * aplicando ln 
RC
t
VVreVVcceVccVr RC
t
−=
==+=
−
5ln5,3ln
5,35)ln()ln()ln(
 
RCt
RCt
3566,0
)5,3ln5(ln
=
−=
 
 
Como o tempo t é conhecido (20,024 ms), será necessário assumir um valor 
para o capacitor (C=10 µF) e calcular o valor do Resistor: 
 
625
10.10.3566,010.034,20
3566,0
63
kR
R
RCt
=
=
=
−− ou utilizando um valor comercial R = 6k8.

Continue navegando