Anda di halaman 1dari 42

1

UNIVERSIDADE FEDERAL DE GOIS

ESCOLA DE ENGENHARIA ELTRICA

MICROCONTROLADOR 8051

Notas de Aula

Prof. Jos Wilson Lima Nerys

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
2

1 ESTRUTURA DO MICROCONTROLADOR 8051

1.1 Microcontrolador Microprocessador

Microcontrolador

Microprocessador (CPU)
ROM
Contador de Programa (PC)

Acumulador Outros Registradores RAM


A ou ACC

Registrador de Unidade de Serial


Instrues (IR) Decodificao de
Instrues
Timers
(Temporizadores)
Unidade Lgica e Aritmtica (ALU)

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.

Quanto linguagem assembly do 8051, a ttulo de ilustrao e comparao superficial (nesse


momento), um mesmo problema resolvido a seguir usando a linguagem assembly do 8085 e a
linguagem assembly do 8051.

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

(a) Fluxograma mais adequado para o 8085

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

(b) Fluxograma mais adequado para o 8051

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.

Label Mnemnico 8085 Label Mnemnico 8051


LXI SP,20C0 h $MOD51
MVI A,02 h ORG 00 H
OUT 20 h LJMP INICIO
MVI B,01h
MVI C,00 h INICIO: ORG 50 H
MOV SP,#3F H
L chaves: IN 21 h MOV R0,#01 H
ANI 88 h MOV R1,#00 H
CPI 88 h
JNZ testa Ch7 REPETE: JNB P1.7, PULA2
MOV A,C JNB P1.3, PULA
OUT 22 h MOV A,R1
CMA MOV P2,A
MOV C,A CPL A
JMP L chaves MOV R1,A
SJMP REPETE
testa Ch7: CPI 80 h
JNZ testa Ch3 PULA: MOV A,R0
MOV A,B MOV P2,A
RRC RRC
OUT 22 h MOV R0,A
MOV B,A SJMP REPETE
JMP L chaves
PULA2: JNB P1.3, REPETE
testa Ch3: CPI 08 h MOV A,R0
JNZ L chaves MOV P2,A
MOV A,B RLC
RLC MOV R0,A
OUT 22 h LJMP REPETE
MOV B,A
JMP L chaves END

1.2 Diagrama de Blocos


A figura 1 mostra o diagrama de blocos do Microcontrolador 8051, com memria ROM de 4
kbytes, memria RAM de 128 bytes, 2 temporizadores/contadores de 16 bits, 1 porta de comunicao
serial, 4 portas paralelas (de entrada e sada) de 8 bits e 2 fontes de interrupo externas. A porta P0
a nica porta com coletor aberto. Isso significa que um resistor pull-up necessrio para a utilizao
dessa porta.

COMPONENTES DA FAMLIA 8051

ROM RAM Verso sem Verso com Verso com


CI Interna Interna ROM EPROM Memria
Interna Interna Flash
8051 4k 128 8031 8751 8951

8052 8k 256 8032 8752 8952

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
5

Diagrama de Blocos do Microcontrolador 8051


1.3 Pinagem do 8051

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.

Pinagem do Microcontrolador 8051 no encapsulamento DIP 40

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
6

Funes especiais dos pinos da porta P3:


P3.0 RxD - Entrada serial
P3.1 TxD - Sada Serial
P3.2 INTO\ - Interrupo externa 0
P3.3 INT1\ - Interrupo externa 1
P3.4 T0 - Entrada externa para o Temporizador/Contador 0
P3.5 T1 - Entrada externa para o Temporizador/Contador 1
P3.6 WR\ - Strobe (sinalizador) de escrita na memria de dados externa
P3.7 RD\ - Strobe (sinalizador) de leitura da memria de dados externa

1.4 Organizao das Memrias ROM e RAM do 8051


FFFF h FFFF h
Sinal Sinal
PSEN\ PSEN\
ROM
externa

1000 h ROM
EXTERNA
0FFF h
ou
ROM
INTERNA
Pino EA\ = 1 Pino EA\ = 0
0000 h 0000 h

Memrias ROM interna e externa

Pino PSEN\ = 1 - Habilita leitura da memria ROM interna


Pino PSEN\ = 0 - Habilita leitura da memria ROM externa
Pino EA\ = 1 - Seleciona a memria ROM interna
Pino EA\ = 0 - Seleciona a memria ROM externa

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

RAM INTERNA (De 00h a 7F h)

byte 35h 80 bytes

16 bytes

32 bytes

Subdiviso da Memria RAM interna

1.5 Noes de Endereamento Direto e Indireto


Exemplos de Endereamento Direto:

MOV A,35h - carrega acumulador com contedo da posio de memria interna 35h

MOV A,#35h - carrega acumulador com valor hexadecimal 35h

MOV A,#35 - carrega acumulador com valor decimal 35, que corresponde ao valor hexadecimal 23.

MOV A,#00110101b - carrega acumulador com valor hexadecimal 35h

Exemplos de endereamento indireto:

MOV R0,#35h - carrega registrador R0 com valor hex 35h


MOV A,@R0 - carrega acumulador com contedo da posio de memria cujo endereo est em R0,
ou seja, end. 35h.
Somente R0 e R1 de cada banco de registradores podem ser usados para endereamento indireto

MOV R0,#20h - carrega registrador R0 com valor hex 20h


MOVX @R0,A - copia contedo do acumulador no endereo 20h da RAM externa

Obs: A RAM externa sempre acessada atravs de endereamento indireto.

MOV usado para a RAM interna, enquanto que


MOVX usado para a RAM externa

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
8

1.6 Banco de Registradores


A parte mais baixa da memria RAM constitui o Banco de Registradores, que est melhor
detalhado na tabela a seguir. Os bits RS1 e RS0 do registrador PSW definem que Banco ser usado a
partir do comando que limpa ou seta RS1 e RS0. No havendo nenhum comando especial, o Banco 0
usado.

Bits do Reg. PSW Posio de Nome do


Banco RS1 RS0 Memria (hexa) Registrador
1F R7
1E R6
1D R5
3 1 1 1C R4
1B R3
1A R2
19 R1
18 R0
17 R7
16 R6
15 R5
2 1 0 14 R4
13 R3
12 R2
11 R1
10 R0
0F R7
0E R6
0D R5
1 0 1 0C R4
0B R3
0A R2
09 R1
08 R0
07 R7
06 R6
05 R5
0 0 0 04 R4
03 R3
02 R2
01 R1
00 R0

Bancos de registradores (Memria RAM)

Registro Especial PSW (Program Status Word) - Enderevel por bit

CY AC FD RS1 RS0 0V P
bit 4 bit 3

Carry Uso Geral Overflow Paridade

Auxiliar de RS1 RS0 Banco Selecionado


Carry 0 0 0
0 1 1
1 0 2
1 1 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.

1.7 Regio de Endereamento por Bit e por Byte


Dentro da memria RAM e acima do banco de registradores, tem um regio composta por 128
bits que podem ser usados individualmente, ou atravs de seus 16 bytes correspondentes. Essa regio
vai do byte 20h ao byte 2Fh.

Os bytes dessa regio so: 20h, 21h, 22h, 23h, 2Fh


Os endereos dos bits so: 00h, 01h, 02h, 7Fh

Os bits podem ainda ser referenciados pela posio dele em cada byte:

Bit 00h 20.0h; bit 01h 20.1h bit 07h 20.7h


Bit 08h 21.0h; bit 09h 21.1h bit 0Fh 21.7h
Bit 10h 22.0h; bit 11h 22.1h bit 17h 22.7h
bit 7Fh 2F.7h
MOV C,21.1h = MOV C,09h - carrega flag de transposrte (carry) com o contedo binrio do bit 09h,
que o bit 1 do byte 21h. O registrador C j indica operao com bit, pois a flag de carry.

Bits endereveis na RAM interna

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
10

1.8 Registros de Funes Especiais

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)

MOV RO,#80h carrega acumulador com o contedo da posio de


MOV A,@RO memria RAM apontada por R0, ou seja, 80h

Endereos das portas: Porta P0: 80h


Porta P1: 90h
Porta P2: A0h
Porta P3: B0h

Endereo do acumulador (que tambm pode ser denominado de a, A ou ACC): E0h

Endereo do registrador B: F0h

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:

TH1 : 8Dh Registros de dados do TH0 : 8Ch Registros de dados do


TL1 : 8Bh temporizador 1 TL0 : 8Ah temporizador 0
TCON : 88h Registro de controle dos TMOD : 89h Registro do modo de operao
temporizadores dos temporizadores

Porta Serial: SCON : 98h - Registro de controle da porta serial


SBUF : 99h - Registro dos dados transmitidos e recebidos pela porta serial

Interrupes: IE : A8h - Registro para habilitao/desabilitao das interrupes


IP : B8h - Registro para definir a prioridade das interrupes

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
12

2 RESET, CLOCK E CICLO DE MQUINA DO 8051

A colocao de um capacitor de 10F em srie com um resistor de 8,2k conectados ao pino


9 do 8051, conforme mostra a figura, garante que o pino 9 fique em nvel lgico alto por pelo menos 2
ciclos de mquina (24 perodos do oscilador) na energizao do sistema. Com isso, os registradores
assumem os valores mostrados na tabela a seguir, e o 8051 est pronto para iniciar o processamento. O
boto em paralelo com o capacitor usado para o Reset forado.

5V

8051

10F
Pino 9

8,2 k

Circuito de Reset do 8051.

Obs.: Caso o Microcontrolador seja o 80C51, no necessrio o resistor de 8,2 k, por j


existir um resistor interno.

Valores dos registradores especiais aps o Reset


Registro Valor Registro Valor
PC 0000h TCON 00h
A 00h TH0 00h
B 00h TL0 00h
PSW 00h TH1 00h
SP 07h TL1 00h
DPTR 0000h SCON 00h
P0 - P3 FFh SBUF Indeterminado
IP xxx00000b PCON(NMOS) 0xxxxxxxb
IE 0xx00000b PCON(CMOS) 0xxx0000b
TMOD 00h

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

Pino XTAL1 - pino 19

12MHz

Pino XTAL2 - pino 18


22pF 22pF

Conexo do cristal oscilador

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 :

T(ciclo de mquina) = 12*T(clock) = 1 s

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 CONJUNTO DE INSTRUES DO 8051

Instrues do 8051 e modos de endereamento


Classificao das Instrues Tipo de Instruo e Endereamento Exemplo
Instrues de Transferncia de dados Endereamento Imediato MOV A,#05H
Endereamento direto MOV A,15H
Endereamento por Registrador MOV A,R1
Endereamento Especfico a Registrador RL A
Endereamento Indireto por Registrador MOV R0,#20H
MOV @R0,#55H
Endereamento Indexado por Registrador MOV DPTR,#200H
MOVC A,@A+DPTR
Transferncia orientada pelo Apontador de MOV A,#45
Pilha PUSH ACC
POP B
Instrues de Troca XCH A,B
Transferncia de dados orientada por Bit MOV P1.1,C
Instrues de Processamento de Instrues Aritmticas ADD A,R1
Dados
Instrues Lgicas ANL A,BYTE
Instrues de Controle de Fluxo de Desvio Incondicional SJMP desvio
Programa
Desvio Condicional JNZ desvio
Chamadas de Subrotina LCALL subrotina

INSTRUES DE TRANSFERNCIA DE DADOS

1. Endereamento Imediato: Um valor constante diretamente transferido para o registrador indicado.

2. Endereamento Direto: Nesse modo os registradores internos e os registradores especiais so


referidos pelos seus endereos hexadecimais.

3. Endereamento por Registrador: Endereamento que envolve um ou mais dos oito registradores R0
a R7 (bancos 0 a 3).

4. Endereamento Especfico a Registrador (Registrador Implcito): So instrues em que o


registrador est implcito no cdigo operacional (opcode), no havendo necessidade de
especificar endereo. Normalmente constituda de apenas 1 opcode.

5. Endereamento Indireto por Registrador: Os registradores R0 e R1 (do banco de registradores que


estiver ativo) so usados para endereamento indireto.

6. Endereamento Indireto por Registrador: Os registradores R0 e R1 (do banco de registradores que


estiver ativo) so usados para endereamento indireto.

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.

9. Instrues de Troca: Os contedos do acumulador e de registradores podem ser trocados sem a


necessidade de armazenagem intermediria. H duas instrues de troca no 8051: XCH - troca
entre o byte o acumulador e a de um dos registradores do banco selecionado. XCHD - troca
entre nibbles do acumulador e um dos registradores.

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.

INSTRUES DE PROCESSAMENTO DE DADOS

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.

INSTRUES DE CONTROLE DE FLUXO DE PROGRAMA

So instrues que permitem ao microcontrolador tomar diferentes aes durante o


processamento. Elas so divididas aqui em trs grupos: Instrues de Desvio Incondicional, Desvio
Condicional, Chamadas de Subrotina.

ALGUMAS INSTRUES COMENTADAS

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

add A,R1 Adiciona o contedo de R1 ao contedo do acumulador: A = A + R1


subb a,byte Subtrai o contedo do acumulador do byte. A = A - byte
inc reg Incrementa contedo do registrador reg.
dec reg Decrementa contedo do registrador reg.
anl A,BYTE Faz uma operao AND entre acumulador e BYTE. A = A (AND) BYTE
orl A,byte Faz uma operao OR entre o acumulador e byte. A = A (OR) byte
sjmp desvio Desvio curto (short jump) relativo. Pula at 127 bytes para a frente e 128 para trs
ajmp desvio Instruo de desvio para distncias correspondentes a at 2048 bytes. (endereo de 11
bits).
ljmp desvio Desvia para qualquer posio da memria de programa. Endereo de 16 bits.
jnz desvio Instruo de desvio condicional: (Jump if Not Zero). Vai para desvio se a operao
anterior no for zero.
lcall subrotina Chamada de subrotina. Retorna para a posio seguinte quando encontra ret.
djnz reg,desvio Decrementa registrador reg e pula para desvio se o resultado no for zero. uma
combinao das instrues DEC e JNZ.
cjne a,#dado,desvio Compara contedo do acumulador com dado e pula para desvio se no forem iguais
jb bit,desvio Desvia para desvio, caso o bit esteja setado.
jnb bit,desvio Desvia para desvio, caso o bit NO esteja setado.
jc desvio Desvia para desvio, caso a flag de CARRY esteja setada
jnc desvio Desvia para desvio, caso a flag de CARRY esteja zerada
cpl a Complementa o contedo do acumulador. Se for 1 passa para zero, e vice-versa.
swap a Faz a troca dos nibbles do acumulador, ou seja, o nibble mais significativo passa a
ocupar o quatro primeiros bits do acumulador e o nibble menos significativo passa a
ocupar os quatro ltimos bits.
da a Faz o ajuste decimal do acumulador
mul ab Multiplica o contedo de A pelo contedo de B. O resultado est em B A.
div ab Divide o contedo de A pelo contedo de B. A recebe o quociente e B o resto
setb bit Seta o bit
clr bit Limpa o bit

PLATAFORMA DE SIMULAO E GRAVAO

A plataforma utilizada o programa AsmEditor, cujo ambiente permite:

1. Digitar o mnemnico do programa desejado


2. Compilar o programa desejado usando o compilador ASM51
3. Verificar erros, inclusive com a listagem do programa compilado
4. Simular usando o Simulador AVSIM51
5. Gravar usando uma gravadora e o programa Ez3
6. Gravar usando o programa AEC_ISP, que permite gravar sem a necessidade de retirar o
microcontrolador do sistema mnimo.

As figuras a seguir mostram o ambiente da plataforma AsmEditor e a tela principal do


simulador AVSIM51.

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
17

Acumulador A, Flag de Carry C,


contador de programa PC e Temporizadores 0 e 1
apontador de pilha SP

Memria ROM Registradores R0 a R7, Memria RAM Interrupes 0 e 1 e Portas de sada


DPTR e B porta serial

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.

1. Programa que faz uma contagem hexadecimal crescente ininterrupta de 00 h a FF h.


Rtulo Mnemnico Comentrio sobre o Efeito da Operao
$mod51 Diretiva para incluso de arquivo com variveis pr-definidas
INCIO org 00h Diretiva que indica que a prxima instruo estar no ender. 00h
ljmp inicio Pula para o endereo indicado com o rtulo inicio
org 30h Diretiva que indica que a prxima instruo estar no ender. 30h
A 00 h
inicio: mov a,#00h Carrega acumulador com valor 00h
volta: mov P1,a Transfere para a porta P1 o contedo do acumulador
P1 A inc a Incrementa o contedo do acumulador
AA+1 sjmp volta Pula para o endereo indicado pelo rtulo volta
end Instruo obrigatria no fim de todo programa

2. Programa que faz uma contagem hexadecimal ininterrupta na seqncia 00 30 h 00 h.

INCIO

A 00 h

P1 A
AA+1

N A = 30 ?
S
P1 A
AA-1

N S
A = 00 ?

Rtulo Mnemnico Comentrio sobre o Efeito da Operao


$mod51 Diretiva para incluso de arquivo com variveis pr-definidas
org 00h Diretiva que indica que a prxima instruo estar no endereo 00h
ljmp inicio Pula para o endereo indicado com o rtulo inicio
org 30h Diretiva que indica que a prxima instruo estar no endereo 30h
inicio: mov a,#00h Carrega acumulador com valor 00h
volta: mov P1,a Transfere para a porta P1 o contedo do acumulador
inc a Incrementa o contedo do acumulador
cjne a,#30h,volta Compara contedo do acumulador com 30h. Caso no seja igual, volta
volta2: mov P1,a Transfere para a porta P1 o contedo do acumulador
djnz acc,volta2 Decrementa contedo do acumulador e vai para volta2 se no for zero
sjmp volta Pula para volta. No precisa usar LJMP porque a distncia curta.
end Instruo obrigatria no fim de todo programa

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
19

3. Programa que faz uma contagem decimal crescente interrupta de 0 a 59.

INCIO

A 00 h

P1 A
AA+1
Corrige decimal

N S
A = 60 ?

Rtulo Mnemnico Comentrio sobre o Efeito da Operao


$mod51 Diretiva para incluso de arquivo com variveis pr-definidas
org 00h Diretiva que indica que a prxima instruo estar no endereo 00h
ljmp inicio Pula para o endereo indicado com o rtulo inicio
org 30h Diretiva que indica que a prxima instruo estar no endereo 30h
inicio: mov sp,#2Fh Carrega apontador de pilha SP com valor 2Fh
mov a,#00h Carrega acumulador com valor 00h
volta: mov P1,a Transfere contedo do acumulador para a porta P1
add a,#01h Adiciona 01 ao contedo do acumulador
da a Faz o ajuste decimal do contedo do acumulador
cjne a,#60h,volta Compara contedo do acumulador com 60h. Caso seja diferente, volta
sjmp inicio Pula para inicio
End Instruo obrigatria no fim de todo programa

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.

Rtulo Mnemnico No. No. Comentrio sobre o Efeito da Operao


ciclos vezes
atraso: mov R0,#10 1 1 Carrega R0 com 10 decimal
repete: mov R1,#100 1 10 Carrega R1 com 100 decimal. Repete instruo 10 vezes.
djnz R1,$ 2 1000 Decrementa R1 1000 vezes: 10 passagens com 100 decrementos
djnz R0,repete 2 10 Decrementa R0 10 vezes
ret 2 1

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 ?

Rtulo Mnemnico Comentrio sobre o Efeito da Operao


$mod51 Diretiva para incluso de smbolos usados pelo compilador
org 00h Diretiva que indica que a prxima instruo ser alocada no endereo 00h
ljmp inicio Pula para o incio do programa
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,#60h Carrega acumulador com valor 60h
volta: add a,#99 Aciona 99 ao acumulador
da a Corrige para decimal
mov P1,a Transfere contedo do acumulador para a Porta P1
cjne a,#00h,volta Compara contedo do acumulador com 00h, se for diferente, pula para volta
sjmp inicio Pula (Short Jump) para inicio
end

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

Rtulo Mnemnico Comentrio sobre o Efeito da Operao


$mod51 Diretiva para incluso de smbolos usados pelo compilador
org 00h Diretiva que indica que a prxima instruo ser alocada no endereo 00h
ljmp inicio Pula para o incio do programa
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,#10000000b Carrega acumulador com valor binrio 10000000b
volta: rl a Rotaciona para a esquerda o contedo do acumulador
mov P1,a Transfere para a porta P1 o contedo do acumulador
lcall atraso Chama subrotina de atraso de tempo
cjne a,#80h,volta Compara acumulador com 80h, caso seja diferente, volta
volta2: rr a Rotaciona para a direita o contedo do acumulador
mov P1,a Transfere para a porta P1 o contedo do acumulador
lcall atraso Chama subrotina de atraso
cjne a,#01h,volta2 Compara acumulador com 01h, caso no seja igual, volta2
sjmp volta Pula para volta
end

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

SP 2F h, DPTR incio da tabela,


A 00, R0 00h

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

Rtulo Mnemnico Comentrio sobre o Efeito da Operao


$mod51 Diretiva para incluso de smbolos usados pelo compilador
org 00h Diretiva que indica que a prxima instruo ser alocada no endereo 00h
ljmp inicio Pula para o incio do programa

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

7. Adapte o programa 6 para mostrar em P1 o menor nmero contido na tabela.

8. Adapte o programa 6 para mostrar em P1os nmeros mpares da tabela.

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
23

4 INTERRUPES

Interrupo o processo pelo qual a execuo de um programa interrompida para a execuo


de um outro processamento que pode ser solicitado por uma das trs fontes abaixo:

Interrupo por software (instruo)


Interrupo pedida por perifrico externo
Interrupo pedida por perifrico interno (temporizador/contador, porta serial)

O microcontrolador 8051 pode ser interrompido de cinco maneiras diferentes:

Pela interrupo externa INTO\ - pino 12 (P3.2)


Pelo timer/counter (temporizador/contador) interno TIMER0
Pela interrupo externa INT1\ - pino 13 (P3.3)
Pelo timer/counter (temporizador/contador) interno TIMER1
Pelo canal de comunicao serial (Pinos 10 e 11 = P3.0 e P3.1)

O pedido de interrupo pode ou no ser atendido, de acordo com a condio de certos


registradores. No 8051 os registradores que comandam a interrupo so

Registrador de Habilitao: IE (Interrupt Enable) = Reg. A8h


Registrador de Prioridades: IP (Interrupt Priority) = Reg. B8h
Registrador de Controlador: TCON (Timer Control) = Reg. 88h

Registrador IE: Bit 7 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


(Reg. A8h) EA x x ES ET1 EX1 ET0 EX0

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.

ET0 (Enable Timer 0) - Quando ET0 = 0, a interrupo pedida pelo temporizador/contador 0


fica desabilitada. Quando ET0 = 1, a interrupo vinda do
temporizador/contador 0 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.

ET1 (Enable Timer 1) - Quando ET1 = 0, a interrupo pedida pelo temporizador/contador 1


fica desabilitada. Quando ET1 = 1, a interrupo vinda do
temporizador/contador 1 fica habilitada.

ES (Enable Serial) - Quando ES = 0, a interrupo pedida pela porta serial fica dasabilitada.
Quando ES = 1 essa interrupo fica habilitada.

Registrador IP: Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


(Reg. B8h) x x x PS PT1 PX1 PT0 PX0

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 :

Interrupo externa 0 Maior prioridade


Temporizador/contador 0
Interrupo externa 1
Temporizador/contador 1
Canal serial Menor prioridade

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.

Registrador TCON: Controle do Temporizador Bit 3 Bit 2 Bit 1 Bit 0


(Reg. 88h) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

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).

ENDEREOS DE DESVIO DAS INTERRUPES

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

EXEMPLOS COM INTERRUPO

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.

Rtulo Mnemnico Comentrio sobre o Efeito da Operao


$mod51
org 00h
ljmp inicio
org 03h Endereo de desvio quando h um pedido da interrupo INT0 (pino P3.2).
ljmp atende Quando h um pedido de interrupo atravs do pino P3.2, desvia para atende

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.

atende: mov P1,a Subrotina de atendimento da interrupo INT0. Faz P1 = a


inc a Incrementa valor de A
lcall atraso Chama subrotina de atraso
cjne a,#00h,atende Compara a com 00h. Se for diferente, vai para atende
mov a,#01h Quando a = 00h, na linha anterior, ento faz A = 01h, nesta linha.
reti Retorna da subrotina de interrupo

atraso: mov r0,#10 Subrotina de atraso de tempo


repete: mov r1,#100
djnz r1, $ Repete a instruo que decrementa r1 at zerar r1
djnz r0, repete
ret
fim: nop
end

Obs.: O pedido de interrupo atendido quando pino P3.2 do microcontrolador passa de 1 para 0.

2. Programa com as interrupes externas 0 e 1. Neste programa, quando a interrupo INT0


acionada atravs do pino P3.2, o processamento desviado para uma subrotina que faz uma
contagem crescente na porta P1. Quando a interrupo INT1 solicitada atravs do pino P3.3, uma
contagem decrescente enviada tambm para a porta P1. Lembrar de guardar o acumulador na
pilha em cada atendimento de subrotina, uma vez que ele utilizado nas duas subrotinas.

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
26

Rtulo Mnemnico Comentrio sobre o Efeito da Operao


$mod51
org 00h
ljmp inicio
org 03h
ljmp atende0 Desvia para a subrotina de atendimento da interrupo INT0
org 13h
ljmp atende1 Desvia para a subrotina de atendimento da interrupo INT1
org 30h
inicio: mov sp, #2Fh
mov ie, #85h Habilita interrupes externas 0 e 1 (EA = 1, EX0 = 1 e EX1 = 1)
mov tcon, #05h INT0 e INT1 por transio de 1 para 0 (IT0 = 1 e IT1 = 1).
mov a, #00h
sjmp $ aguarda interrupo num loop infinito nessa linha

atende0: push acc Subrotina de atendimento da interrupo 0. Guarda acumulador na pilha


mov a,#00h
volta: mov P1,a
inc a
lcall atraso
cjne a,#00h,volta Compara a com 00h. Se for diferente volta
pop acc Recupera da pilha o contedo do acumulador
reti retorna de subrotina de interrupo

atende1: push acc Subrotina de atendimento da interrupo 1. Guarda acumulador na pilha


mov a,#0FFh
volta2: mov P1,a
lcall atraso
dec a Decrementa contedo do acumulador
cjne a,#0FFh,volta2 Compara A com FFh. Se for diferente volta2
pop acc Recupera contedo do acumulador que foi guardado na pilha
reti

atraso: mov r0,#10


repete: mov r1,#100
djnz r1, $
djnz r0, repete
ret

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

Rtulo Mnemnico Comentrio sobre o Efeito da Operao


$mod51
org 00h
ljmp inicio
org 03h
ljmp atende0 Desvia para a subrotina de atendimento da interrupo INT0
org 13h
ljmp atende1 Desvia para a subrotina de atendimento da interrupo INT1
org 30h
inicio: mov sp, #2Fh
mov ie, #85h Habilita interrupes externas 0 e 1 (EA = 1, EX0 = 1 e EX1 = 1)
mov tcon, #05h INT0 e INT1 por transio de 1 para 0 (IT0 = 1 e IT1 = 1).
mov a, #00h
sjmp $ aguarda interrupo num loop infinito nessa linha

atende0: push acc Subrotina de atendimento da interrupo 0. Guarda acumulador na pilha


mov a,#01h
volta: mov P1,a
lcall atraso
rl a Rotaciona para a esquerda o contedo do acumulador
cjne a,#01h,volta Compara a com 01h. Se for diferente volta
pop acc Recupera da pilha o contedo do acumulador
reti retorna de subrotina de interrupo

atende1: push acc Subrotina de atendimento da interrupo 1. Guarda acumulador na pilha


mov a,#80h
volta2: mov P1,a
lcall atraso
rr a Rotaciona para a direita o contedo do acumulador
cjne a,#80h,volta2 Compara A com 80h. Se for diferente volta2
pop acc
reti

atraso: mov r0,#10


repete: mov r1,#100
djnz r1, $
djnz r0, repete
ret

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:

Modo 0: Contador/Temporizador de 8 bits com divisor de freqncia de at 32 vezes (pode


contar at 8192 = 32 x 255)
Modo 1: Contador/Temporizador de 16 bits (pode contar at 65535)
Modo 2: 2 contadores/temporizadores de 8 bits com recarga automtica.
Modo 3: 2 contadores/temporizadores independentes de 8 bits
(Modo 3 no vale para Contador/Temporizador 1, que fica inativo)

Diagrama de blocos simplificado do temporizador/contador 0

O diagrama acima auxilia a anlise do funcionamento do temporizador/contador. O bit C/T# do


registrador TMOD, por exemplo, define se o funcionamento como contador (C/T# = 1), ou como
temporizador (C/T# = 0). Como temporizador, o clock interno, vindo do oscilador. A freqncia
1/12 da freqncia do cristal oscilador. Como contador, o clock externo, vindo atravs de T0 (P3.4).

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.

Exemplos usando Temporizadores:

Exemplo 1: Subrotina de atraso usando temporizador

Rtulo Mnemnico Comentrio sobre o Efeito da Operao


$mod51
org 00h
ljmp inicio

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

atraso: mov r0,#20 Registrador R0 recebe valor 20 decimal


volta: mov th0,#3Ch TH0 recebe valor 3Ch
mov tl0,#0AFh TL0 recebe valor AFh. Contador conta de 15535 at 65535 = 50000 pulsos
setb tr0 TR0 = 1 dispara o temporizador 0
espera: jnb tf0, espera Espera a flag de fim de contagem ser setada Espera TF0 = 1.
clr tf0 Limpa flag que indica fim da contagem.
djnz r0, volta Decrementa R0 e volta se no for zero
clr tr0 Pra contador aps o fim de 20 x 50000 contagens = 1.000.000 pulsos.
ret Retorna da subrotina. Se cada pulso corresponder a 1 s atraso 1 s

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.

Rtulo Mnemnico Comentrio sobre o Efeito da Operao


$mod51
org 00h
ljmp inicio
org 1Bh Endereo de desvio para a interrupo do temporizador 1.
ljmp atende1 Desvia para a subrotina que atende o temporizador 1.

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:

Seqncia 1: Imprimir 55h e AAh na porta P1, em intervalos regulares.

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
30

Seqncia 2: Imprimir 00h e FFh na porta P1, em intervalos regulares.

Obs.1: Comear o programa principal no endereo 30h.

Obs.2: Sugesto para as primeiras linhas do programa:

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

6.1 Noes Bsicas da Comunicao Serial


A comunicao serial consiste em enviar ou receber pacotes de informao bit a bit. No caso do
8051 o canal de comunicao serial do tipo full duplex, o que significa que ele pode, ao mesmo
tempo, receber e transmitir dados.
Uma grande questo da transmisso serial como informar o receptor do incio e do final do
pacote de informao, ou seja, qual o primeiro bit da informao e qual o ltimo. Assim, existem dois
tipos de comunicao: sncrona e assncrona.

Na comunicao serial sncrona, so utilizados dois canais: um para transmitir os dados e um


outro para transmitir um sinal de sincronismo. O transmissor, portanto, o responsvel pela
sincronizao. A cada sinal de sincronismo recebido o receptor l o canal de dados.

No caso do 8051 a transmisso e tambm a recepo sncrona de dados so feitas atravs do


pino RxD (pino P3.0). O pino TxD (pino P3.1) usado para o sinal de sincronismo. Na transmisso
serial sncrona via MODEM, que no o caso tratado aqui, a informao de sincronismo enviada
junto com os dados. Para isso existem tcnicas especiais, tais como codificao NRZ (Non-Return-to-
Zero) e codificao Manchester.
Na comunicao assncrona no h um sinal de sincronismo e, portanto, alguns cuidados
especiais devem ser tomados:
As taxas de recepo e de transmisso devem ser iguais
Um bit de incio da transmisso deve ser enviado
Um bit de fim de transmisso deve ser enviado

Assim, um pacote de informaes pode ser ilustrado como a seguir:

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:

No projeto de irrigao desenvolvido na EEEC/UFG dois pacotes de informao so utilizados:


no primeiro pacote cada byte de dados (presso numa tubulao de gua) do transmissor 1 enviado
juntamente com seu complementar. O primeiro byte um byte que indica incio dos dados (foi
escolhido o byte 13h) e o ltimo byte indica fim do pacote (foi escolhido o byte 01h).

O segundo pacote de informaes composto pelos dados do transmissor 1 e os dados do


transmissor 2. Para o byte de incio foi escolhido o byte 17h e o byte de fim escolhido foi o byte 01h.
Novamente o complemento dos dados enviado. Na recepo os dados so verificados. Se for
detectado erro de transmisso, os dados so enviados novamente.

O sistema utilizado no projeto de irrigao mostrado na figura a seguir.

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
33

Sistema de controle usado no projeto de irrigao desenvolvido na EEEC/UFG

necessrio destacar um outro ponto da comunicao serial: normalmente a comunicao serial


entre dois dispositivos se d usando o padro ASCII. Um exemplo o display de cristal lquido
(LCD). Para mostrar o nmero 1 no display LCD deve-se enviar seu cdigo ASCII, ou seja, 31h.
Da mesma forma, na comunicao entre o computador e o 8051, o cdigo ASCII utilizado. A tabela
ASCII mostrada a seguir.

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
34

(SCON) = SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0 SM1 Modo Descrio Baud Rate


0 0 0 Registrador de Deslocamento fosc./12
0 1 1 UART de 8 bits varivel
1 0 2 UART de 9 bits fosc./64 ou fosc./32
1 1 3 UART de 9 bits varivel
Smbolo Nome e Significado
SM2 Habilita a caracterstica de comunicao de multiprocessadores no modo 2 e 3. Nesses
modos, se SM2=1, RI no ser ativado se o nono bit de dado recebido for igual a 0. No
modo 1, se SM2=1, RI no ser ativado se um stop bit vlido no for recebido. No modo 0,
dever ser 0.
REN Bit habitador da recepo serial. Setado/limpado por software para habilitar ou desabilitar
a recepo serial.
TB8 o nono bit de dado que ser transmitido no modo 2 e 3. Setado ou limpado por software.
RB8 No modo 2 e 3, o nono bit de dado que foi recebido. No modo 1, se SM2=0, RB8 o stop
bit que foi recebido. No modo 0, RB8 no usado.
TI o flag de interrupo de transmisso. Setado por hardware no final do tempo do 8 bit no
modo 0 ou no incio do stop bit em outros modos, em qualquer transmisso serial. Dever
ser limpado por software.
RI o flag de interrupo de recepo. Setado por hardware no final do tempo do 8 bit no
modo 0 ou na metade do tempo do stop bit em outros modos, em qualquer recepo serial.
Dever ser limpado por software.

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

EXEMPLOS DE PROGRAMA DE COMUNICAO SERIAL

Exemplo 1: Programa que recebe dados via serial no modo sncrono.

Rtulo Mnemnico Descrio


$mod51
org 00h
ljmp inicio

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.

Rtulo Mnemnico Descrio


$mod51
org 00h
ljmp inicio

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.

2. YERALAN, Sencer e AHLUWALIA, Ashutosh, "Programming and Interfacing the 8051


Microcontroller," Addison Wesley, Reading, 1995.

3. FLEURY, Cludio A. e BARBACENA, Ilton L., "Microcontrolador 8051", Goinia, Maro


1997.

4. MACKENZIE, I. Scott, The 8051 Microcontroller, Prentice Hall, New Jersey, 1995.

5. GIMENEZ, Salvador P., "Microcontrolador 8051," Prentice Hall, 2002.

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
38

8 LABORATRIOS RELATIVOS AO 8051


Experimento 8

Introduo ao Microcontrolador 8051

Objetivo: Uso das ferramentas disponveis para a programao com microcontroladores da famlia
8051.

Material: Microcomputador com programas de simulao e de gravao, gravadora do


microcontrolador, microcontroladores AT89S8252 e AT89C52, protoboard, programa
AsmEditor e programa PonyProg2000.

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

org 00h org 00h


ljmp inicio ljmp inicio
5
org 30h org 30h
inicio: cpl P1.0 inicio: mov a,#55h 5V
lcall atraso repete:mov P2,a
sjmp inicio lcall atraso 10 330
cpl a
atraso: mov r0,#50 sjmp repete LED
djnz r0,$
ret atraso: mov r0,#255 12MH
end volta: mov r1,#255 10 k
djnz r1,$ 33pF BC548
djnz r0,volta 33pF
ret
end

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);

4) Veja num osciloscpio a onda gerada no pino P1.0 (pino 1).

5) Repita o procedimento usado para escrever, compilar e simular o programa 2;

6) Use o programa PonyProg2000 para gravar o programa 2 no microcontrolador AT89S8252;

7) Veja nos LEDs o resultado do programa 2;

8) Use o programa AVSIM51, a partir do AsmEditor, para simular o programa 1. Na simulao


deve-se usar a extenso .hex. O nome do programa no pode ter mais de 8 caracteres.

9) Faa a simulao de ambos os programas 1 e 2 usando o simulador PEQui.

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys
39

Experimento 9

Acionamento de Motor de Passo 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 passo

Material: Microcomputador com programa de simulao, gravadora de EEPROM, microcontrolador


AT89S8252, protoboard, programa AsmEditor, driver para motor de passo e um motor de passo.

Teoria Bsica 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:

Qual o efeito da mudana de programa (Programa 1 e Programa 2) sobre o funcionamento do motor de


passo?
Qual o efeito da mudana no tempo de atraso sobre o funcionamento do motor de passo?

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.).

Material: Microcomputador com programa de simulao PEQui, gravadora de EEPROM, microcontrolador


89C52, protoboard, programa AsmEditor, driver para motor de corrente contnua.

Teoria Bsica de Motor de Passo:

O motor de corrente contnua consiste de um enrolamento de campo estacionrio e um enrolamento de armadura


rotativo. O enrolamento de campo pode ser acionado por corrente contnua, ou ainda consistir de um estator de
m permanente, no sendo necessrio alimentao. A armadura acionada com corrente contnua atravs de
escovas e um anel comutador. A figura a seguir mostra o circuito bsico de um motor CC, onde os enrolamentos
de campo e de armadura so alimentados de forma independente. As expresses bsicas tambm so dadas.

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

org 00h ; ====== Subrotina para aumentar a velocidade ======


ljmp inicio
org 03h aumenta_speed:
ljmp aumenta_speed; Inter. INT0 aumenta velocidade clr ex0 ; desabilita INT0
org 0bh clr cy ; limpa flag de carry
ljmp atende_temp0 ; Inter. TEMP0 controla velocidade mov a,Ton ; faz A = periodo ligado
org 13h add a,#0Ah ; faz A = A + 10;
ljmp diminui_speed; Inter. INT1 diminui velocidade jnc pula ; se cy = 0 entao pula
org 30h mov a,#0FEh ; faz A = FEh, se cy = 1
inicio: mov sp,#2Fh pula:mov Ton,a ; faz periodo ligado = A
mov ie,#87h ; habilita INT0, INT1 e TEMP0 cpl a ; encontra perodo desligado
mov tcon,#05h ; INT0 e INT1 so por transio mov Toff,a ; define perodo desligado
mov ip,#02h ; faz TEMP0 com prioridade 1 setb ex0 ; reabilita INT0
mov tmod,#02h ; TEMP0 no modo 2 com recarga reti
mov Ton, #01h ; periodo ligado Ton = 01h
clr sada ; DESLIGA MOTOR ; ======= Subrotina para diminuir a velocidade ======
clr ligado ; limpa flag que indica motor ligado/desligado
mov TL0,Ton ; TL0 = periodo ligado diminui_speed:
mov a,Ton ; faz A = periodo ligado clr ex1 ; desabilita INT1
cpl a ; acha periodo desligado clr cy ; limpa flag de carry
mov TH0,a ; TH0 = periodo desligado mov a,Toff ; faz A = periodo desligado
setb tr0 ; inicia temporizador TEMP0 a partir de Ton add a,#0Ah ; faz A = A + 10;
sjmp $ ; lao de espera. Temp0 s sai quando TF0=1. jnc pula2 ; se cy = 0 entao pula
mov a,#0FEh ; faz A = FEh, se cy = 1
; === Subrotina para controlar o funcionamento do motor === pula2:mov Toff,a ; faz periodo desligado = A
atende_temp0: cpl a ; encontra perodo ligado
jb ligado, desliga ; se motor est ligado desliga mov Ton,a ; define perodo ligado
setb saida ; liga motor, que estava desligado setb ex1 ; reabilita INT1
setb ligado ; seta flag que indica motor ligado reti
mov TH0,Ton ; TH0 = periodo ligado. Valor de recarga
reti end

Notas de Aula sobre o Microcontrolador 8051 Prof. Jos Wilson Lima Nerys

Anda mungkin juga menyukai