MICROCONTROLADOR 8051
Notas de Aula
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
2
Microcontrolador
Microprocessador (CPU)
ROM
Contador de Programa (PC)
Portas de Entrada
Unidade de Controle e Sada (I/O)
Em termos de hardware, o esquema acima deixa claro onde acaba o microprocessador e quais as
unidades adicionais presentes num microcontrolador. Assim, enquanto o microprocessador mais
freqentemente usado no processamento de informaes em computadores, onde so complementados
com os drivers e perifricos que compem o sistema, um microcontrolador mais adequado para
sistemas de controle, onde deseja-se um sistema com um mnimo de componentes perifricos e um
programa gravado em ROM.
Problema:
Faa um programa onde dois pinos de uma porta de entrada pr-definida sejam usados para
definir o sentido de rotao de LEDs conectados a uma porta de sada. Quando o pino 7 da porta de
entrada estiver em nvel alto os LEDs devem girar para a direita; quando o pino 3 estiver em nvel
alto os LEDs devem girar para a esquerda e quando ambas estiverem em nvel alto todos os LEDs
devem ligar e desligar, alternadamente.
Solues:
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
3
Incio
Configuraes iniciais:
SP = 20C0h
Habilita sada no LED
B 01 h, C 00 h
Ler chaves
AC
Ch7 e Ch3 S OUT Porta
Complementa A
ligadas?
CA
N
N Ch7
ligada?
N S
Ch3
ligada?
AB
S OUT Porta
Direita
AB BA
OUT Porta
Esquerda
BA
Incio
Configuraes iniciais:
SP = 3F h
R0 01 h
R1 00 h
N Ch7 S
ligada?
N Ch3 S Ch3
ligada? ligada?
S N
A R0 A R1 A R0
OUT Porta OUT Porta OUT Porta
Esquerda Complementa A Direita
R0 A R1 A R0 A
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
4
(b) Programa usando o assembly do 8085 (para o ABACUS) e o assembly do 8051. A subrotina de
atraso no foi includa.
Obs.: Para o 8051 as chaves esto conectadas porta P1 (Ch7 = P1.7 e Ch3 = P1.3) e os LEDs
porta P2.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
5
A figura 2 mostra os pinos do 8051 no encapsulamento DIP com 40 pinos. As portas paralelas so
designadas por P0 (bits P0.0, P0.1, , P0.7), P1 (bits P1.0, P1.1, P1.7), P2 (P2.0, P2.1, , P2.7) e
P3 (P3.0, P3.1, , P3.7). Destaca-se, na figura, os pinos da porta paralela P3, porque eles tem dupla
funo.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
6
1000 h ROM
EXTERNA
0FFF h
ou
ROM
INTERNA
Pino EA\ = 1 Pino EA\ = 0
0000 h 0000 h
FF h FF h FFFF h
8031/8051/8751
Somente
8032/8052/8752 Enderaamento
Somente Direto
Enderaamento
Indireto Registros de
Funes
Especiais RAM
80 h 80 h
EXTERNA
7F h
8031/8051/8751
8032/8052/8752
Enderaamento
Direto e Indireto
00 h 0000 h
(a) (b)
Memrias RAM (a) interna e (b) externa
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
7
16 bytes
32 bytes
MOV A,35h - carrega acumulador com contedo da posio de memria interna 35h
MOV A,#35 - carrega acumulador com valor decimal 35, que corresponde ao valor hexadecimal 23.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
8
CY AC FD RS1 RS0 0V P
bit 4 bit 3
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
9
O registrador (PSW) enderevel por bit e, alm de guardar as flags de carry, auxiliar de carry,
de paridade, de overflow e uma flag de uso geral , ele contm o par de bits (RS1 e RS2) usados para
selecionar o banco de registradores a ser utilizado.
Exemplos:
MOV PSW,#10h - seleciona o Banco 2, cujos registradores vo do endereo 10h a 17h.
MOV A,R5 - carrega acumulador com contedo de R5 do banco de registradores 2 (endereo 15h)
MOV R7,B - copia contedo do registrador B no registrador R7 (endereo 17h) do Banco 2.
MOV A,@R1 - carrega acumulador com contedo do endereo apontador pelo registrador R1 do
banco 2.
Os bits podem ainda ser referenciados pela posio dele em cada byte:
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
10
A tabela a seguir mostra os registros de funes especiais. Alguns so enderaveis apenas por
byte e outros (os terminados em 0 e 8) so enderaveis por byte e por bit.
Os registros especiais ocupam os endereos de 80h a FFh, que coincide com os 128 bytes
superiores da RAM interna do 8032, 8052 e 8752.
A diferena entre o acesso aos Registros especiais e a parte superior da RAM interna o tipo de
endereamento. Os registros especiais so acessados sempre por endereamento direto, enquanto a
parte superior da RAM interna acessada somente por endereamento indireto.
Exemplos:
MOV A,80h - carrega o acumulador com o contedo do registro especial 80h (Porta P0)
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
11
Apontador de Pilha (Stack Pointer): SP: 81h - Como valor default, SP aponta para o endereo
hexadecimal 07h da memria RAM interna. Ao contrrio do Microprocessador 8085, o
endereo do apontador de pilha incrementado a cada endereo guardado na pilha e o byte
menos significativo guardado primeiro.
Palavra de Status de Programa: PSW: D0h - Contm as flags do 8051 e os bits de escolha do banco de
registradores.
Registradores DPH : 83h e DPL : 82h - Equivalem aos registradores H e L 8085, que juntos formam
o par HL. No 8051 eles formam o registrador de 16 bits DPTR, usado principalmente no
manuseio de tabelas.
Temporizadores/Contadores:
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
12
5V
8051
10F
Pino 9
8,2 k
A figura abaixo ilustra a conexo do oscilador (cristal) que definir a freqncia de clock do
microcontrolador e o ciclo de mquina. A freqncia de oscilao do cristal deve estar na faixa de 3.5
MHz a 12 MHz. Os valores recomendados para os capacitores no caso de oscilador a cristal so entre
20 F e 40 F.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
13
12MHz
Um ciclo de mquina corresponde a uma seqncia de 6 estados (S1 a S6), cada um equivalente
a 2 perodos do oscilador ( 1 ciclo de mquina = 12 perodos do oscilador). Se o oscilador (cristal) for
de 12 MHz, 1 ciclo de clock corresponde a
1 1
Tclock = =
f clock 12MHz
E o ciclo de mquina :
S1 S2 S3 S4 S5 S6
Ciclo de mquina
Cada instruo executada em pelo menos 1 ciclo de mquina. Isso significa que, com um
cristal de 12 MHz, o tempo mnimo de execuo de qualquer instruo do 8051 1 s. Por exemplo, a
instruo MOV executada em 1 ciclo de mquina e, portanto, 1 s. A instruo DJNZ executada
em 2 ciclos de mquina e, portanto, 2 s.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
14
3. Endereamento por Registrador: Endereamento que envolve um ou mais dos oito registradores R0
a R7 (bancos 0 a 3).
7. Endereamento Indexado por Registrador: usada principalmente para a leitura de dados de uma
tabela. Neste modo, a fonte ou o destino podem ser obtidos pela adio do valor armazenado
no acumulador com um endereo base. Pode ser usado tanto o apontador de dados DPTR
quanto o contador de programa PC.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
15
8. Transferncia orientada pelo Apontador de Pilha: uma outra forma de endereamento indireto,
implementada usando as instrues PUSH e POP. O contedo de SP o endereo de destino
da instruo PUSH e endereo fonte da instruo POP. O valor de SP incrementado antes da
transferncia de dados feita por PUSH, e decrementado aps a instruo POP. Os valores
tpicos de SP vo de 2Fh a 6Fh na inicializao do programa. O byte de endereo 2Fh o
ltimo do grupo de bytes que so endereados por bit e por byte.
10. Transferncia de dados orientada por Bit: Vrios registradores do 8051 permitem o acesso direto a
cada um dos oito bits. Os registradores que so endereveis por bit e por byte vo do
endereo 20h ao endereo 2Fh da RAM interna e os registradores especiais cujos bytes de
endereos terminam com 0 ou 8h. Nas operaes com bits a flag de transporte faz o papel do
acumulador.
1. Instrues Aritmticas: So as instrues de adio e subtrao, dentre outras. Elas afetam as flags.
A tabela abaixo mostra a lista das instrues aritmticas do microcontrolador 8051. A flag de
transporte C setada se o resultado da operao exceder FFh. A flag auxiliar de transporte AC
setada se houver transporte do bit 3 para o bit 4, ou seja, do nibble inferior para o nibble
superior. A flag de estouro (overflow) setada se houver transporte do bit 6 para o bit 7, mas
no ocorrer do bit 7, ou se houver transporte do bit 7, mas no ocorrer transporte do bit 6 para o
bit 7. til nas operaes com nmeros com sinal representados na forma de complemento de
2.
2. Instrues Lgicas: A tabela a seguir mostra as instrues dessa categoria. Esto includas
instrues de rotao, complemento, zerar e outras. Elas no afetam as flags.
Instruo Descrio
mov a,#dado Carrega no acumulador o valor de dado. O smbolo # necessrio para diferencia
dado de registrador.
mov a,reg Copia no acumulador o contedo do registrador reg. reg = R0, R1, ... , R7.
mov reg1,reg2 Copia no registrador reg1 o contedo do registrador reg2.
mov a,15h Copia no acumulador o contedo do registrador cujo endereo 15h, ou seja,
corresponde ao registrador R5 do banco 2 de registradores.
mov R0,#20h Carrega registrador R0 com valor 20h
mov @R0,#55h Copia o valor 55h na posio apontada pelo registrador R0. Se R0 = 20h, ento copia
valor 55h na posio 20h, ou seja, na primeira posio acima do banco de registradores.
mov dptr,#200h Carrega registrador de 16 bits dptr com valor 200h.
movc a,@a+dptr Carrega acumulador com o contedo da posio apontada por a+dptr
rl a Rotaciona o contedo do acumulador para a esquerda (rotate left)
rr a Rotaciona o contedo do acumulador para a direita (rotate right)
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
16
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
17
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
18
EXEMPLOS GERAIS:
Simule cada um dos programas a seguir no modo passo a passo e anote o efeito da instruo. Na
execuo no modo direto seria necessrio incluir uma subrotina de atraso de tempo. Utilize as
ferramentas oferecidas no laboratrio para verificar na prtica os programas a seguir. No esquecer da
subrotina de atraso de tempo.
INCIO
A 00 h
P1 A
AA+1
N A = 30 ?
S
P1 A
AA-1
N S
A = 00 ?
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
19
INCIO
A 00 h
P1 A
AA+1
Corrige decimal
N S
A = 60 ?
Acrescente ao programa acima a subrotina de atraso de tempo dada abaixo. Inclua a chamada de
subrotina lcall atraso logo aps a instruo mov P1,a.
Supondo que a freqncia de clock seja 12 MHz e, portanto, o perodo do ciclo de mquina seja 1 s,
e sabendo que o nmero de ciclos de mquina para cada instruo aquele dado na tabela acima,
considere o nmero de vezes que cada instruo executada e calcule o tempo total de atraso
provocado pela subrotina acima.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
20
4. Programa que faz uma contagem decimal decrescente interrupta de 59 a 0. Acrescente a subrotina
de atraso dada anteriormente.
Incio
A 60 h
AA-1
Corrige decimal
P1 A
A = 00 ?
5. Programa que rotaciona um bit alto na porta P1 para a esquerda e para a direita de forma
ininterrupta.
Incio
SP 2Fh
A 10000000 b
Esquerda
P1 A
Atraso de tempo
N
A = 80 h ?
S
Rotaciona direita
P1 A
Atraso de tempo
N S
A = 01 h ?
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
21
6. Programa que l os valores de uma tabela e mostra na porta P1 o maior desses valores. O maior
valor ser guardado em R0. O ltimo elemento da tabela FFh. DPTR aponta o incio da tabela.
Incio
Guarda contador A
A (A + DPTR)
S
A = FF h ?
N Mostra R0 em P1
S
A >= R0 ?
FIM
R0 A
N
Retorna contador A
AA+1
Obs.:
(a) A diretiva db indica que o caractere a seguir um dado e no uma instruo
(b) A instruo MOV DPTR,#TABELA faz com que o registrador de 16 bits DPTR assuma o
valor correspondente ao endereo inicial da tabela.
(c) Antes de fazer SUBB A,R0 fez-se necessrio guardar em B o valor de A, para o caso de A
ser menor que R0. Porque, nesse caso, preciso trocar o valor de R0 pelo valor de A (que
agora est em B).
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
22
org 30h Diretiva que indica que a prxima instruo ser alocada no endereo 30h
inicio: mov sp,#2Fh Define a pilha na posio 2Fh da memria RAM
mov a,#00h Carrega acumulador com valor 00h
mov R0,#00h Carrega registrador R0 com valor 00h
mov dptr,#tabela faz DPTR igual ao endereo inicial da tabela, que nesse programa 100h
volta: push acc Guarda na pilha o contedo do acumulador
movc a,@a+dptr transfere para o acumulador o contedo da posio (a + dptr)
cjne a,#0FFh,pula Compara o contedo de a com FFh. Se for diferente pula
mov P1,R0 Transfere para a porta P1 o contedo de R0
ljmp fim sjmp no funcionaria aqui porque o pulo seria maior que 127 bytes. Observe
que a tabela comea na posio 100h e o fim aps a tabela.
pula: mov b,a guarda em B o contedo do acumulador, para recuper-lo aps SUBB A,R0
subb a,R0 Faz a subtrao: A = A R0
jc pula2 Vai para pula2 caso a flag de carry esteja setada
mov R0,b Carrega R0 com o contedo de b
pula2: pop acc Recupera da pilha o contedo do acumulador
inc a Incrementa o contedo do acumulador
sjmp volta Pula para volta
org 100h Diretiva que indica que a tabela de dados comea na posio 100h
tabela: db 05h Primeiro valor da tabela de dados
db 35h
db 12h
db 98h
db 0A1h Os dados que comeam com letra devem ser precedidos de 0
db 0B5h Os dados que comeam com letra devem ser precedidos de 0
db 5Ah
db 09h
db 72h
db 40h Ultimo dado de interesse da tabela
db 0FFh Valor usado para indicar fim da tabela
fim: nop
end
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
23
4 INTERRUPES
EA (Enable All) - Quando est zerado (EA = 0), todos as interrupes esto desabilitadas
(mascaradas), independentemente de seus bits individuais de controle.
Quanto est setada (EA = 1), cada uma das interrupes pode ser habilitada
ou desabilitada fazendo seus bits de controle 1 ou 0.
EX0 (Enable External Interrupt 0) - Quando est zerado (EX0 = 0) a interrupo externa, cujo
pedido vem atravs do pino INT0\ est desabilitada. Quando est setado
(EX0 = 1), a interrupo INT0\ fica habilitada.
EX1 (Enable External Interrupt 1) - Quando est zerado (EX1 = 0) a interrupo externa, cujo
pedido vem atravs do pino INT1\ est desabilitada. Quando est setado
(EX1 = 1), a interrupo INT1\ fica habilitada.
ES (Enable Serial) - Quando ES = 0, a interrupo pedida pela porta serial fica dasabilitada.
Quando ES = 1 essa interrupo fica habilitada.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
24
PX0 (Priority of External Interrupt 0) - Quando PX0 = 1 a interrupo externa INT0\ recebe
prioridade alta.
PT0 (Priority of Timer/Counter Interrupt 0) - Quando PT0 = 1 a interrupo pedida pelo
temporizador/contador 0 recebe prioridade alta.
PX1 (Priority of External Interrupt 1) - Quando PX1 = 1 a interrupo externa INT1\ recebe
prioridade alta.
PT1 (Priority of Timer/Counter Interrupt 1) - Quando PT1 = 1 a interrupo pedida pelo
temporizador/contador 1 recebe prioridade alta.
PS (Priority of Serial Port Interrupt) - Quando PS = 1 a interrupo pedida atravs da porta
serial recebe prioridade alta.
Quando PX0, PT0, PX1, PT1 e PS so zero, elas so de prioridade baixa. Caso uma interrupo
de prioridade 1 seja solicitada durante a execuo de uma de prioridade 0, o processamento
interrompido para o atendimento da interrupo de prioridade maior.
No caso de todas as interrupes terem a mesma prioridade (0 ou 1), a ordem de atendimento
das interrupes :
As interrupes externas podem ser ajustadas para serem detectadas por nvel 0 ou pela
transio do nvel 1 para o nvel 0. O ajuste feito atravs o registrador TCON, dado abaixo.
IT0 (Interrupt 0 Type) - Quando IT0 = 1 a interrupo externa 0 ser reconhecida pela transio
de 1 para 0 no pino INTO\. Quando IT0 = 0, a interrupo reconhecida
quando o sinal no pino INTO\ est em nvel baixo (0).
IE0 (Interrupt 0 Edge Flag) - setado pelo hardware quando uma interrupo externa atravs
de INT0\ detectada. zerada quando da execuo da instruo RETI
(retorno da subrotina de atendimento).
IT1 (Interrupt 1 Type) - Quando IT1 = 1 a interrupo externa 1 ser reconhecida pela transio
de 1 para 0 no pino INT1\. Quando IT1 = 0, a interrupo reconhecida
quando o sinal no pino INT1\ est em nvel baixo (0).
IE1 (Interrupt 1 Edge Flag) - setado pelo hardware quando uma interrupo externa atravs
de INT1\ detectada. zerada quando da execuo da instruo RETI
(retorno da subrotina de atendimento).
Quando ocorre uma das cinco interrupes do 8051 o processamento desviado para os
endereos abaixo. Como h pouco espao em bytes nesses endereos, deve-se usar uma instruo de
desvio para um outro endereo onde seja possvel escrever toda a rotina de atendimento da
interrupo.
Interrupo Solicitada Endereo de desvio
Reset 0000h
INT0\ 0003h
Timer/counter 0 000Bh
INT1\ 0013h
Timer/counter 1 001Bh
Canal Serial 0023h
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
25
1. Programa com interrupo externa 0. Quando a interrupo INT0 solicitada atravs do pino P3.2
o processamento desviado para a posio 03 h da memria ROM e, em seguida, desviado para
uma subrotina que manda uma contagem crescente para a porta P1.
org 30h
inicio: mov sp, #2Fh
mov ie, #81h Habilita a interrupo externa 0 (EA = 1 e EX0 = 1)
mov tcon, #01h INT0\ reconhecida pela transio de 1 para 0 (IT0 = 1). Poderia ser SETB IT0
mov a, #00h
cjne a,#01h, $ Aguarda interrupo. Enquanto a 01h, fica aguardando nessa linha.
sjmp fim O caractere $ indica desvio para a mesma linha.
Obs.: O pedido de interrupo atendido quando pino P3.2 do microcontrolador passa de 1 para 0.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
26
end
3. Este programa funciona como o anterior, mas ao invs de uma contagem crescente e uma
decrescente, ele faz um deslocamento esquerda dos bits da porta P1 para um pedido de INT0 e
um deslocamento direita dos mesmos bits para um pedido de INT1.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
27
end
Obs.:
1. Lembrar que, na simulao, o pedido de interrupo feito posicionando o cursor nos bits 2 e 3 da
porta P3 e digitando 0 no lugar do 1 presente. As interrupes sero atendidas sempre na transio de
1 para zero, uma vez que tcon = 05h.
2. Durante uma das contagens simule dois pedidos de interrupo simultneos fazendo a transio de 1
para 0 nos pinos P3.2 e P3.3. Verifique ento que a interrupo INT0 ser atendida primeira, porque
ela tem prioridade sobre a INT1.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
28
5 TEMPORIZADORES / CONTADORES
O 8051 tem dois temporizadores/contadores de 16 bits que podem trabalhar em 4 modos distintos:
O pino Gate# define se o sinal de disparo do contador/temporizador vem atravs de software (bit
TR0), ou de um sinal externo, atravs do pino INT0# (P3.2). Se Gate# = 0, o comando setb tr0
dispara o contador/temporizador e clr tr0 interrompe.
org 30h
inicio: mov sp, #2Fh
mov tmod,#01h Temporizador 0 no modo de 16 bits (modo 1)
lcall atraso Chama subrotina de atraso de tempo
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
29
sjmp fim
fim: nop
end
Exemplo 2: Uso do temporizador 1 no modo 2, com interrupo. Nesse exemplo, a cada vez que o
temporizador 1 chega ao final da contagem (FFh), h um desvio para a subrotina atende1, onde o
pino 0 da porta P1 complementado e valor da recarga TH1 incrementado de 1. Deve-se observar no
laboratrio que o efeito de incrementar TH1 e complementar P1.0 uma onda quadrada com perodo
ligado e desligado varivel.
org 30h
inicio: mov sp, #2Fh
mov tmod,#20h Temporizador 1 no modo de recarga automtica (modo 2)
mov TH1,#00H Carrega registrador de recarga TH1 com valor 00h
mov TL1,TH1 Transfere para TL1 o contedo do registrador TH1. TL1 o contador no modo 2.
setb TR1 D incio contagem do temporizador 1
sjmp $ Fica num loop infinito, saindo a cada fim de contagem do temporizador 1
atende1: cpl P1.0 Complementa o bit zero da porta P1 a cada fim de contagem do TEMP1
inc TH1 Incrementa TH1, de modo que cada contagem comece 1 unidade acima da anterior
reti Retorna da subrotina que atende a interrupo do temporizador 1.
end
Tarefa 1:
Fazer um programa que executa duas seqncias distintas (uma de cada vez) na porta P1. Estas
seqncias devero ser alternadas a cada pedido de interrupo 0. Em outras palavras, a primeira
seqncia executada at o primeiro pedido de interrupo 0, a partir do qual a segunda seqncia
passa a ser executada. Esta nova seqncia tambm executada at um novo pedido da mesma
interrupo 0. As seqncias a serem executadas so:
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
30
org 00h
ljmp inicio
org 03h
atende_int0
org 30h
inicio: mov sp,#2Fh
Obs.3: Use um bit de um registrador para decidir qual seqncia deve ser executada de cada vez.
Assim, a cada vez que a interrupo chamada esse bit complementado.
Tarefa 2:
Enviar para a porta P1 as sequncias abaixo (valores em binrio), pelo tempo indicado.
Sequncias Tempo
0000 0111 5s
0001 1000 2s
1110 0000 3s
Tarefa 3:
Alternar a rotao dos bits da porta P1 esquerda e direita utilizando uma das interrupes externas.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
31
6 COMUNICAO SERIAL
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
32
Observe que o bit de incio de transmisso zero, isto porque o canal normalmente fica em
repouso no nvel lgico alto. Assim, a primeira passagem para zero, aps a habilitao da transmisso,
interpretada como o sinal de incio. O sinal de parada de nvel lgico alto, aps serem recebidos a
quantidade de bits especificada. Observe ainda que, alm do bit de incio (Start bit) e do bit de fim
(Stop bit), tambm pode existir um terceiro bit extra, que o bit de paridade, usado para verificar a
consistncia dos dados. Assim, se houver erro na transmisso que implique na alterao da paridade,
esse bit extra detecta o erro.
A verificao de erros atravs do bit de paridade no detecta erro quando h inverso, por
exemplo, de dois bits de dados. Assim, normalmente so utilizados outros mtodos de verificao de
erros, principalmente quando a informao constituda de vrios bytes. So utilizados ainda os
chamados protocolos de comunicao, que garantiro uma transmisso serial mais segura.
Um mtodo utilizado para deteco de erros na transmisso de vrios bytes o mtodo do
checksum, onde o complemento de 2 da soma dos dados acrescentada ao pacote de informaes.
Assim, na recepo, o processador adiciona todos os bytes e verifica se o resultado zero. Caso no
seja, houve um erro na transmisso. Veja a exemplificao abaixo:
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
33
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
34
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
35
O canal serial do 8051 pode operar em 4 modos diferentes, definidos atravs do registrador
especial SCON (mostrado na tabela acima), cujos bits podem ser manipulados individualmente. O
modo 0 uma comunicao sncrona. Os demais modos so do tipo assncrono.
Modo 0:
Taxa de transmisso fixa e igual freqncia de clock dividida por 12. A recepo tem incio
com REN = 1 e RI = 0. Ao final da recepo o bit RI setado por hardware e o contedo recebido
transferido para um registrador denominado por SBUF. RI deve ser ressetado antes da prxima
recepo.
A transmisso iniciada automaticamente quando o contedo do acumulador transferido para
o SBUF. Quanto ao registrador SBUF da transmisso, embora tenha o mesmo nome do registrador da
recepo, trata-se de um outro registrador especfico para a transmisso. Ao final da transmisso o bit
TI setado por hardware. TI deve ser ressetado antes da prxima transmisso.
Modo 1:
Comunicao assncrona com taxa de transmisso a ser definida pelo usurio. So transmitidos
8 bits de dados, alm de um bit de incio e um bit de fim. A recepo tem incio quando h uma
transio do nvel lgico 1 para 0 no pino RxD (pino P3.0) e o bit RI est zerado. Ao final da recepo
o RI setado por hardware.
A transmisso iniciada quando h uma transferncia de dados para SBUF. Ao final da
transmisso o bit TI setado.
Modo 2:
Modo assncrono onde 11 bits so transmitidos (bit de incio + 9 bits de dados + bit de fim). A
taxa de transmisso/recepo pode ser 1/32 ou 1/64 da freqncia de clock. A recepo tem incio
quando h uma transio do nvel lgico 1 para 0 no pino RxD (pino P3.0) e o bit RI est zerado. Ao
final da recepo o bit RI setado por hardware. O nono bit de dados guardado em RB8. Esse bit
pode ser o bit de paridade.
A transmisso iniciada quando h uma transferncia de dados para SBUF. Ao final da
transmisso o bit TI setado. O nono bit a ser transmitido guardado em TB8. Esse bit pode ser o bit
de paridade. Expresso que define a taxa de transmisso no modo 2.
f osc
Baud rate = 2 SMOD * (bits / s )
64
Se o bit SMOD for zero, a taxa 1/64, caso seja igual a 1, a taxa 1/32.
Modo 3:
semelhante ao modo 1; a diferena est no bit a mais de dados no modo 3. Tanto no modo 1
quanto no modo 3 a taxa de transmisso definida pelo usurio, seguindo a equao a seguir:
2 SMOD f osc
Baud rate = * (bits / s)
32 12 * (256 TH 1)
Nesses dois modos (1 e 3) o temporizador 1 deve ser configurado para operar no modo de
recarga automtica (modo 2). O valor da recarga (TH1), juntamente com o bit SMOD, que define a
freqncia de comunicao (transmisso e recepo). A tabela a seguir fornece alguns dos valores
mais comuns de taxa de transmisso.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
36
T im er 1
B a u d R a te (bits/seg ) F req . O sc. (M H z) SM OD C /T b a rra M o d o V alo r R ecar.
M o d o 0 M x : 1 M Hz 12 X X X X
M o d o 2 M x : 3 7 5 K 12 1 X X X
M o d o 1 , 3 : 6 2 ,5 K 12 1 0 2 FFh
1 9 ,2 K 1 1 ,0 5 9 1 0 2 FDh
9 ,6 K 1 1 ,0 5 9 0 0 2 FDh
4 ,8 K 1 1 ,0 5 9 0 0 2 F Ah
2 ,4 K 1 1 ,0 5 9 0 0 2 F 4h
1 .2 K 1 1 ,0 5 9 0 0 2 E8h
1 3 7 ,5 1 1 ,0 5 9 0 0 2 1D h
110 6 0 0 2 72h
110 12 0 0 1 FEEBh
org 30h
inicio: mov sp,#2fh
setb REN Seta o bit REN, que habilita a recepo via serial
loop: jnb RI,loop Loop de espera. Quando RI = 1, a recepo chegou ao final.
clr RI Limpa o bit RI, para permitir uma nova recepo via serial
mov a,SBUF Transfere para o acumulador o contedo recebido pela serial.
mov P1,a Transfere para a porta P1 o contedo do acumulador
sjmp loop Volta para a espera de um novo byte via serial
end
Exemplo 2: Programa que transmite contagem crescente via serial no modo sncrono.
org 30h
inicio: mov sp,#2fh
mov a,#00h O acumulador recebe o valor 00h
loop: mov SBUF,a SBUF recebe o contedo de A, o que inicia automaticamente a
transmisso via serial
jnb TI,$ Loop de espera. Quando TI = 1, a transmisso chegou ao final.
clr TI Limpa o bit TI, para permitir uma nova transmisso via serial
mov P1,a Transfere para a porta P1 o contedo do acumulador
inc a Incrementa valor de a
sjmp loop Volta para a transmisso do prximo dado.
end
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
37
7 BIBLIOGRAFIA
1. SILVA JNIOR, Vidal Pereira da, "Aplicaes Prticas do Microcontrolador 8051," rica, So
Paulo, 1994.
4. MACKENZIE, I. Scott, The 8051 Microcontroller, Prentice Hall, New Jersey, 1995.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
38
Objetivo: Uso das ferramentas disponveis para a programao com microcontroladores da famlia
8051.
Desenvolvimento:
1) Usar o programa AsmEditor para escrever o programa 1 abaixo. Salvar o programa e compilar;
Programa 1 Programa 2 5V
$mod51 $mod51 AT89S8252
2) Use o programa Ez3, a partir do programa AsmEditor, para transferir o programa .hex para o
microcontrolador AT89C52;
3) Monte num protoboard o circuito mostrado a seguir, usando o microcontrolador gravado com o
programa 1. Use 8 circuitos para acionamento de LEDs, idnticos ao mostrado. Conecte-os aos 8
pinos da porta P2 (pinos 21 a 28);
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
39
Experimento 9
Objetivo: Uso das ferramentas para edio, simulao e gravao de programas para o microcontrolador 8051 e
aplicao no acionamento de motor de passo
O motor de passo consiste de um estator contendo bobinas que so acionadas usando corrente contnua e um
rotor de m permanente, que gira a cada mudana das bobinas acionadas. Embora nas figuras a seguir as quatro
bobinas sejam mostradas como nicas (concentradas), na prtica elas so distribudas ao longo do estator. Assim,
pode-se obter um passo bem pequeno entre um pedao de bobina e outro. O ngulo de passo tpico de um
motor de passo 1,8o. As figuras a seguir ilustram, de maneira simplificada, o funcionamento de um motor de
passo. Observe que, na figura, uma volta completa do motor alcanada aps percorrer todas as bobinas uma
vez. Na prtica, uma volta completa conseguida aps uma passagem por todas as partes de cada bobina. Se
cada passo for de 1,8o, uma volta completa alcanada com 200 passos.
Na figura principal so mostrados os transistores usados no acionamento. Nas demais figuras apenas as bobinas
so mostradas, para simplificao. So mostradas duas tabelas: a primeira para acionamento a cada meio-passo e
a segunda para acionamento com passo completo. Observe que o passo completo caracterizado com o ncleo
passando do alinhamento com uma bobina para o alinhamento com a prxima. O meio-passo tem um ponto
intermedirio entre as bobinas.
Meio-passo
Passo T0 T1 T2 T3 HEX
S 1 1 0 1 0 0A
P2.3 T3 2 0 0 1 0 02
N 3 0 1 1 0 06
4 0 1 0 0 04
N 5 0 1 0 1 05
S N N S 6 0 0 0 1 01
S 1 0 0 1
7 09
8 1 0 0 0 08
N 9 1 0 1 0 0A
P2.0 T0 9V T1 P2.1
S
Passo completo
Passo T0 T1 T2 T3 HEX
P2.2 T2 1 1 0 1 0 0A
2 0 1 1 0 06
3 0 1 0 1 05
4 1 0 0 1 09
5 1 0 1 0 0A
Seqncia de acionamento com meio-passo. Para o passo completo, usar os passos mpares da seqncia
mostrada.
T3 T3 T3
N
N N
T0 S N T1 T0 T1 T0 N S T1
S S
S
N N N
S S S
T2 T2 T2
Passo T0 T1 T2 T3 HEX Passo T0 T1 T2 T3 HEX Passo T0 T1 T2 T3 HEX
1 1 0 1 0 0A 2 0 0 1 0 02 3 0 1 1 0 06
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
40
T3 T3 T3
S S
N N
S
S
T0 N S N S T1 T0 N S T1 T0 T1
N
N
T2 T2 T2
Passo T0 T1 T2 T3 HEX Passo T0 T1 T2 T3 HEX Passo T0 T1 T2 T3 HEX
4 0 1 0 0 04 5 0 1 0 1 05 6 0 0 0 1 01
T3 T3 T3
S
S N
T0 S N T1 T0 S N S N T1 T0 S N T1
N S
S
T2 T2 T2
Passo T0 T1 T2 T3 HEX Passo T0 T1 T2 T3 HEX Passo T0 T1 T2 T3 HEX
7 1 0 0 1 09 8 1 0 0 0 08 9 1 0 1 0 0A
Desenvolvimento:
- Montar o circuito a seguir para acionamento de motor de passo. Os pinos P2.0 a P2.3 so os pinos
de acionamento do motor.
5V
89C52 Programa Principal Subrotina de Atraso
$mod51
atraso:mov R0,#7Fh
org 00h volta: mov R1,#7Fh
2004
ljmp inicio djnz R1,$
Driver Motor de Passo
djnz R0,volta
org 30h ret
inicio:mov sp,#2Fh
repete:mov P2,#0Ah end
lcall atraso
mov P2,#06h
lcall atraso
mov P2,#05h
lcall atraso
Acionar motor
mov P2,#09h
de passo
33pF lcall atraso
sjmp repete
33pF
- Usar o programa AsmEditor para escrever o programa dado. Salvar o programa, compilar e gravar usando o
programa Ez3, a partir do AsmEditor, ou o programa PonyProg2000. Verifique o funcionamento.
- Mude o programa para acionamento a meio-passo, compile e grave no microcontrolador AT89S8252.
Verifique o funcionamento;
- Mude o tempo da subrotina de atraso, diminuindo o valor de um dos registradores. Compile, grave no
AT89S8252 e verifique o efeito da mudana no funcionamento do motor de passo.
Questes:
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
41
Experimento 10
Acionamento de Motor de Corrente Contnua com o Microcontrolador 8051
Objetivo: Uso das ferramentas para edio, simulao e gravao de programas para o microcontrolador 8051 e
aplicao no acionamento de motor de corrente contnua (CC); acionar um motor CC usando
modulao por largura de pulso (modulao PWM.).
Ra Rf
E = k a
Ia
Va E If Vf Va = Ra I a + E
Va Ra I a
a =
k
Para variar a velocidade de um motor CC mostrado necessrio apenas a variao da tenso de armadura. Uma
forma de variar a tenso aplicada armadura usar modulao PWM, que consiste na definio de um perodo
de acionamento fixo e, dentro desse perodo, estabelecer um perodo ligado e outro desligado. A figura a seguir
ilustra esse processo. O motor usado de 12 V e, portanto, a tenso de alimentao deve variar de zero a 12 V
para obter-se variao de velocidade de zero ao valor mximo. Isso feito chaveando-se um transistor a uma
freqncia alta, 5 kHz, por exemplo, que corresponde a um perodo de 0,2 ms ou 200 s.
T
Vmax Vmax
Tligado Va
Va = Vmax
T
Tligado Tdesligado
Pode-se preferir definir o perodo, 255 s, por exemplo, o que corresponde a uma freqncia de chaveamento de
3,92 kHz. A variao de velocidade pode ento ser obtida variando-se o perodo ligado de 0 a 255 s, ao mesmo
tempo em que o perodo desligado deve variar de 255 s a 0, para manter constante o perodo total.
O temporizador do microcontrolador 8051 pode ser usado no modo 2 (com recarga automtica), onde a
contagem comea no valor de TL e o valor de TH usado para definir o incio da prxima contagem. Se o
temporizador comea sempre no valor dado em TL e vai at FFh (255), e sendo Ton = T Toff, e sendo ainda
escolhido T = 255, o procedimento usado no programa :
1. Para o perodo ligado faz-se TL = Toff; dessa forma, o temporizador conta de Toff at 255, o que corresponde
ao perodo ligado;
2. Para o perodo desligado faz-se TL = Ton; dessa forma, o temporizador conta de Ton at 255, o que
corresponde ao perodo desligado.
3. No incio do programa desliga-se o motor (clr saida) e faz-se TL = Ton = 01h, o que faz com que o
temporizador, na primeira contagem j conte o perodo desligado, que comea em Ton e vai at 255.
4. Aps fazer TL = Ton, encontra-se o complementar de Ton (cpl a), ou seja, Toff, e carrega-se em TH. Dessa
forma, a prxima contagem comear em Toff, o que significa que o temporizador contar o perodo ligado.
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
42
5. Cada vez que a subrotina de controle executada define-se o prximo valor de recarga, TH.
6. Para aumentar a velocidade aumenta-se o perodo ligado Ton. Para diminuir aumenta-se Toff.
Desenvolvimento:
10) Montar o circuito a seguir para acionamento de motor de passo. Os pinos P2.0 a P2.3 so os pinos de
acionamento do motor. 5V
89C52 12 V
5
1N4001
10 BC548
10 k
P2.1
INTO INT1 BD139
12MH
33pF acionar motor CC
33pF
11) Usar o programa AsmEditor para escrever o programa dado a seguir. Salvar o programa, compilar e simular
usando o simulador PEQui; Grave o programa no 89C52 e verifique o funcionamento do motor CC;
12) Use a interrupo INT0 para aumentar a velocidade e a interrupo INT1 para diminuir a velocidade do
motor CC;
$mod51 desliga:
saida equ P2.1 ; bit para acionar o motor; 1 => liga clr saida ; motor desligado
ligado bit 00h ; flag que indica motor ligado clr ligado ; limpa flag que indica motor ligado
Ton equ 03h ; periodo ligado mov TH0,Toff ; faz A = periodo desligado
Toff equ 04h ; periodo desligado reti
Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys