Buscar

apostila8051

Prévia do material em texto

Mi
ro
ontroladores 8051
Prof. Eduardo G. Bertonha (M.S
.)
26 de junho de 2007
Departamento A
adêmi
o de Eletr�ni
a - DAELN
Universidade Te
nológi
a Federal do Paraná - UTFPR
Correspondên
ia
Prof. Eduardo Giometti Bertonha (MS
)
Departamento de Eletr�ni
a
Universidade Te
nológi
a Federal do Paraná - UTFPR
Av. Sete de Setembro, 3.165 - Curitiba - PR - Cep: 80230-901
Página Web:
pessoal.
efetpr.br/ebertogna
email: ebertonha�utfpr.edu.br
2
Sumário
1 Introdução 6
1.1 Con
eitos Importantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.1 Des
rição dos Cir
uitos de um Sistema Mínimo . . . . . . . . . . . 6
1.1.2 Mi
ro
ontroladores . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Sistemas Mi
ro
ontrolados . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2 A Família 8051 de Mi
ro
ontroladores 9
2.1 Cara
terísti
as Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Arquitetura Interna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Pinagem do 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.1 Des
rição dos Pinos . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 A
esso à Memória Externa . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5 Organização da Memória do 8051 . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.1 Memória de Programa do 8051 . . . . . . . . . . . . . . . . . . . . 14
2.5.2 Memória de Dados do 8051 . . . . . . . . . . . . . . . . . . . . . . 15
Memória de Dados Externa . . . . . . . . . . . . . . . . . . . . . . 15
Memória de Dados Interna . . . . . . . . . . . . . . . . . . . . . . . 16
Registros de Uso Geral e Pilha . . . . . . . . . . . . . . . . . . . . . 16
Registros de Funções Espe
iais . . . . . . . . . . . . . . . . . . . . 17
Registros de Status do 8051 - PSW . . . . . . . . . . . . . . . . . . 18
2.6 Portas de Entrada e Saída do 8051 . . . . . . . . . . . . . . . . . . . . . . 19
2.7 Interrupções no 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.7.1 Registro de Habilitação de Interrupções - IE . . . . . . . . . . . . . 21
2.7.2 Registro de Controle de Prioridade de Interrupção - IP . . . . . . . 22
2.7.3 Ativação das Interrupções Externas por Borda ou Nível - Bits IT0
e IT1 do Registro TCON . . . . . . . . . . . . . . . . . . . . . . . . 23
2.8 Temporizadores/Contadores 0 e 1 . . . . . . . . . . . . . . . . . . . . . . . 23
2.8.1 Registros de Carga do Valor Ini
ial de Contagem
(TH0/TL0 e TH1/TL1) . . . . . . . . . . . . . . . . . . . . . . . . 24
2.8.2 Registro de Controle dos T/C's - TCON . . . . . . . . . . . . . . . 24
2.8.3 Registro de Controle de Modo dos T/C's -TMOD . . . . . . . . . . 25
T/C no Modo 0 - Contagem em 8 bits 
om Pres
aler de 32x . . . . 25
3
Sumário
T/C no Modo 1 - Contagem em 16 bits . . . . . . . . . . . . . . . . 25
T/C no Modo 2 - Contagem em 8 bits 
om Re
arga Automáti
a . . 26
T/C no Modo 3 - Contagem em 8 bits em TH0 e Temporizador de
8 bits em TL0 . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.9 Canal Serial do 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.9.1 Registro de Controle do Canal Serial - SCON . . . . . . . . . . . . 26
Modo 0 do Canal Serial - Registrador de Deslo
amento . . . . . . . 27
Modo 1 do Canal Serial - UART de 8 bits e Taxa Variável . . . . . 27
Modo 2 do Canal Serial - UART de 9 bits e Taxa Fixa . . . . . . . 28
Modo 3 do Canal Serial - UART de 9 bits e Taxa Variável . . . . . 28
2.9.2 Tabela de Referên
ia p/ Programar o Baud Rate . . . . . . . . . . 28
2.10 Modos de Baixo Consumo . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.10.1 Registro de Controle de Potên
ia - PCON . . . . . . . . . . . . . . 29
2.10.2 Modo Idle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.10.3 Modo Power-Down . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3 Programação em Assembly do 8051 31
3.1 Conjunto de Instruções do 8051 . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1.1 Modos de Endereçamento . . . . . . . . . . . . . . . . . . . . . . . 31
Endereçamento Direto . . . . . . . . . . . . . . . . . . . . . . . . . 32
Endereçamento Indireto . . . . . . . . . . . . . . . . . . . . . . . . 32
Endereçamento via Registrador . . . . . . . . . . . . . . . . . . . . 32
Constante Imediata . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Endereçamento Indexado . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2 Estudo das Instruções do 8051 . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.1 Transferên
ia de Dados . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.2 Instruções Aritméti
as . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.3 Instruções Lógi
as . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.4 Booleanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2.5 Desvio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4 Exemplos de Apli
ação 38
4.1 Geração de Onda Quadrada . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.2 Controle de Temperatura de um Forno . . . . . . . . . . . . . . . . . . . . 39
4.3 Geração de 2 Ondas Quadradas Simultâneas . . . . . . . . . . . . . . . . . 41
4.4 Interfa
e 
om Conversor A/D R2R . . . . . . . . . . . . . . . . . . . . . . 42
4.5 Interfa
e 
om ADC0804 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.6 Interfa
e 
om LCD Inteligente . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.6.1 Interfa
e 8051/LCD em 8 bits . . . . . . . . . . . . . . . . . . . . . 46
4.6.2 Interfa
e 8051/LCD em 4 bits . . . . . . . . . . . . . . . . . . . . . 48
4
Sumário
4.6.3 Interfa
e 8051/LCD 
/ Registrador de Deslo
amento . . . . . . . . 52
4.6.4 Interfa
e 8051/LCD Mapeado em Memória . . . . . . . . . . . . . . 55
4.7 Interfa
e 8051 
om Te
lado Matri
ial . . . . . . . . . . . . . . . . . . . . . 58
4.8 Interfa
e 
om Motor de Passo Unipolar . . . . . . . . . . . . . . . . . . . . 65
4.9 Expansão das Interrupções Externas . . . . . . . . . . . . . . . . . . . . . 67
4.10 Envio de Dados via Canal Serial . . . . . . . . . . . . . . . . . . . . . . . . 69
4.11 Rotina de Geração de Beep . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.12 Dimmer Mi
ro
ontrolado 
om AT89C2051 . . . . . . . . . . . . . . . . . . 71
4.13 Programas Propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Programa Proposto 5: . . . . . . . . . . . . . . . . . . . . . . . . . 74
Programa Proposto 6: . . . . . . . . . . . . . . . . . . . . . . . . . 74
5 IDE KEIL uVision2 75
5.1 A Interfa
e Grá�
a do uVision2 . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2 Criação de um Projeto no uVision2 . . . . . . . . . . . . . . . . . . . . . . 76
5
1 Introdução
1.1 Con
eitos Importantes
O diagrama em blo
os da �gura 1.1, abaixo ilustra um sistema mínimo mi
ropro
essado,
om seus blo
os 
onstituintes, os quais serão des
ritos na sequên
ia.
Figura 1.1: Sistema Mi
ropro
essado Mínimo
1.1.1 Des
rição dos Cir
uitos de um Sistema Mínimo
• Mi
ropro
essador: Responsável pelo 
ontrole de todas as operações do sistema,
e exe
ução de instruções do programa gravado na memória de programa. Estas
instruções podem estar rela
ionadas 
om operações lógi
as, aritméti
as, de a
esso
as portas de entrada e saída do sistema, e a
esso a memória de dados ou programa.
Também 
hamada de CPU (Central Pro
essing Unit).
• Memória de Programa: é nesta memória do tipo não volátil (ou seja do tipo ROM,
EPROM, ou FLASH) que o programa a ser exe
utado pelo mi
ropro
essador �
a ar-
mazenado. Esteprograma, gravado em memória não volátil, é 
hamado de �rmware.
• Memória de Dados: é nesta memória do tipo volátil (RAM) que os dados a serem
pro
essados �
am temporariamente armazenados. Estes dados podem ser proveni-
6
1 Introdução
entes das portas de entrada, por exemplo um te
lado, ou então podem ser gerados
através de operações lógi
as ou aritméti
as 
om outros dados.
• Cir
uito de Clo
k: Responsável pelo forne
imento de um sinal de 
lo
k ou relógio
para que o Mi
ropro
essador possa operar.
• Cir
uito de Power-On/Reset: Responsável pelo forne
imento de um sinal de RESET
para que a CPU possa ini
ializar seus registros internos, e 
omeçar a exe
utar as
instruções do �rmware.
• Cir
uito de Seleção: Responsável pelo forne
imento dos sinais de seleção, e habili-
tação para as memórias de dados (RAM), para as memórias de programa (ROM) e
para as portas de entrada e saída. Sempre de 
onformidade 
om as instruções que
estão sendo exe
utadas pela CPU.
• Bus de Dados: Representam as linhas de dados que interligam a CPU as portas de
entrada e saída, e as memórias. Este 
onjunto de linhas são bidire
ionais, e a CPU
as utiliza para leitura ou es
rita em dispositivos de E/S ou memórias.
• Bus de Endereços: Representam as linhas de endereços que interligam a CPU as
memórias e ao 
ir
uito de seleção. Este 
onjunto de linhas são unidire
ionais, e é a
CPU que forne
e endereços em resposta as instruções do �rmware.
• Bus de Controle: Representam as linhas de 
ontrole que interligam a CPU as memó-
rias, periféri
os, e ao 
ir
uito de seleção, e a CPU sempre forne
e sinais de 
ontrole,
em resposta as instruções do �rmware.
1.1.2 Mi
ro
ontroladores
Em um sistema mínimo, 
omo mostrado na �gura 1.1, muitos 
ir
uitos são ne
essários,
o que o torna de difí
il implementação, 
om muitas inter
onexões entre os vários blo
os
(representados pelos buses), pla
as de 
ir
uito impresso grandes e 
om muitas trilhas, o
que resulta em 
ustos elevados. Quando se deseja implementar um sistema de 
omputação
omplexo não há maneira de evitar estas di�
uldades, e o 
usto benefí
io é razoável.
Porém, quando se deseja implementar um sistema simples, 
om a �nalidade de apenas
ontrolar uma máquina, por exemplo: uma máquina de lavar roupa, um sistema mínimo
omo o mostrado a
ima se mostra máximo, gerando pla
as de 
ir
uito impresso grandes e
om muitos 
omponentes, in
ompatível 
om a apli
ação destinada. Para solu
ionar este
problema existe uma outra 
lasse de dispositivos que substitui o sistema mínimo anterior,
hamam-se �Mi
ro
ontroladores�.
Os mi
ro
ontroladores são sistemas mi
ropro
essados en
apusulados na forma de um
úni
o 
ir
uito integrado. Eles são produzidos de forma a ofere
er uma variedade muito
grande de dispositivos, o que 
ara
teriza uma família de dispositivos, alguns deles sendo
7
1 Introdução
de fato um sistema mínimo, 
om o mínimo ne
essário em termos de memória, e portas de
E/S, e periféri
os, outros porém, in
orporam periféri
os so�sti
ados, e já não podem ser
hamados de sistemas mínimos.
Existem várias famílias de mi
ro
ontroladores 
omer
iais, entre eles os mais importantes
são:
• Família 8051 - Originalmente produzido pela INTEL, 
om inúmeros fabri
antes,
omo Texas, Philips, Dallas, Atmel, et
.
• Família 68HC - Produzido pela Motorola
• Família PIC - Produzido pela Mi
ro
hip
• Família AVR - Produzido pela Atmel
1.2 Sistemas Mi
ro
ontrolados
Os sistemas mi
ro
ontrolados tem 
omo prin
ipal vantagem a fa
ilidade que ofere
e para
a implementação de sistemas das mais variadas apli
ações, 
omo sistemas de 
ontrole
de dispositivos e máquinas, sistemas de automação de pro
essos, sistemas de aquisição e
pro
essamento de dados, só para 
itar algumas possíveis apli
ações.
Esta fa
ilidade se baseia, 
omo já dissemos, no fato de muitos 
ir
uitos ne
essários para
o fun
ionamento de um sistema mi
ropro
essado já estar integrado dentro do mi
ro
on-
trolador, simpli�
ando em muito a 
onstrução do sistema �nal, e liberando tempo para o
projeto do �rmware, que normalmente é a tarefa mais pesada, e demorada.
Vamos estudar aqui os mi
ro
ontroladores da família 8051, por ser o mais popular, e por
ofere
er mais re
ursos em termos de desenvolvimento de protótipos, 
omo ambientes de
desenvolvimento integrado (IDE), kits de desenvolvimento baratos, grande disponibilidade
de dispositivos no mer
ado na
ional, e obviamente o 
usto atrativo. Além disto, existe
uma grande profusão de informações a respeito desta família na internet, e muitos títulos
de livros publi
ados.
8
2 A Família 8051 de
Mi
ro
ontroladores
2.1 Cara
terísti
as Gerais
A família 8051 é 
onstituída de uma série grande de dispositivos, de vários fabri
antes im-
portantes, apresentando estes 
ara
terísti
as diversas, 
om um grande número de opções
de es
olha, e todos 
ompatíveis em termos de software.
Os elementos da família 8051 podem trazer (dependendo do dispositivo em questão)
integrados em um úni
o 
hip os seguintes 
ir
uitos:
• CPU de 8 bits;
• Memória SRAM interna de 128 ou 256 bytes;
• Memória OTPROM/EPROM/Flash interna de 4K a 16K bytes;
• Memória EEPROM;
• Cir
uito de Clo
k;
• 2 Interrupções externas;
• 32 Pinos de E/S, ou seja: 4 Portas de 8 bits de entrada e saída (P0, P1, P2, P3);
• 2 ou 3 Temporizadores / Contadores (T/C0, T/C1, T/C2);
• 1 Interfa
e serial;
• Cir
uito Wat
hdog;
• Conversor A/D de 8 bits;
• et
, et
...
Além disto a maioria deles pode endereçar até 64KB de RAM externa e até 64KB de
ROM/EPROM externa. Podem operar a freqüên
ias de 
lo
k de até 33MHz, e operar em
modo de baixo 
onsumo (Power Down), além de serem base para muitos outros disposi-
tivos 
om re
ursos espe
iais 
omo interfa
es CAN, SPI, USB, e Ethernet.
Na tabela 2.1 a seguir estão sumarizados alguns dispositivos populares da família 8051,
dentre eles dispositivos de 40 e 20 pinos, 
om e sem memória de programa interna:
9
2 A Família 8051 de Mi
ro
ontroladores
Modelo Cara
terísti
as Prin
ipais
8031 128B de RAM, 2 Timer/Counter, 1 Serial, 32 Pinos de E/S
8032 256B de RAM, 2 Timer/Counter, 1 Serial, 32 Pinos de E/S
8051 128B de RAM, 2 Timer/Counter, 1 Serial, 4 Kbytes de ROM, 32 Pinos de E/S
8052 256B de RAM, 3 Timer/Counter, 1 Serial, 8 Kbytes de ROM, 32 Pinos de E/S
87C51 128B de RAM, 2 Timer/Counter, 1 Serial, 4 Kbytes de EPROM, 32 Pinos de E/S
87C52 256B de RAM, 3 Timer/Counter, 1 Serial, 8 Kbytes de EPROM, 32 Pinos de E/S
89C51 128B de RAM, 2 Timer/Counter, 1 Serial, 4 Kbytes de Flash, 32 Pinos de E/S
89C52 256B de RAM, 3 Timer/Counter, 1 Serial, 8 Kbytes de Flash, 32 Pinos de E/S
AT89S51 128B de RAM, 2 Timer/Counter, 1 Serial, 4KB de Flash ISP, 32 Pinos de E/S,
Wat
hdog, operação estáti
a de 0 a 33MHz
AT89S52 256B de RAM, 3 Timer/Counter, 1 Serial, 8KB de Flash ISP, 32 Pinos de E/S,
Wat
hdog, operação estáti
a de 0 a 33MHz
AT89S53 256B de RAM, 3Timer/Counter, 1Serial, 12KB Flash ISP, 32 Pinos de E/S,
Wat
hdog, SPI, operação estáti
a de 0 a 24MHz
AT89S8252 256B de RAM, 3 Timer/Counter, 1 Serial, 8KB de Flash ISP, 2KB de EEPROM,
32 Pinos de E/S, Wat
hdog, SPI, opera de 0-24MHz
AT89C1051 128B de RAM, 2 Timer/Counter, 1 Serial, 1 Kbytes de Flash, 15 Pinos de E/S
AT89C2051 128B de RAM, 2 Timer/Counter, 1 Serial, 2 Kbytes de Flash, 15 Pinos de E/S
AT89C4051 128B de RAM, 2 Timer/Counter, 1 Serial, 4 Kbytes de Flash, 15 Pinos de E/S
Tabela 2.1: Família 8051 de Mi
ro
ontroladores
2.2 Arquitetura Interna
O diagrama em blo
os da �gura 2.1 abaixo apresenta a arquitetura interna da famí-
lia 8051. Neste diagrama, que mostra uma arquitetura bastantesimples, se observa
os 
ir
uitos prin
ipais 
omo a ULA, as memórias de dados (SRAM) e de programa
(ROM/EPROM/Flash), as 4 portas de 8 bits, os 2 temporizadores/
ontadores, e o 
a-
nal serial. Não apare
em neste diagrama o os
ilador interno, 
ir
uito de Reset, e blo
os
adi
ionais presentes em alguns modelos mais so�sti
ados, 
omo memória EEPROM, SPI,
Wat
hdog, Conversores A/D, PWM, et
.
10
2 A Família 8051 de Mi
ro
ontroladores
Figura 2.1: Arquitetura Interna 8051
2.3 Pinagem do 8051
A pinagem dos elemento da família 8051 de 40 e 20 pinos pode ser vista na �gura 2.2, a
seguir.
Figura 2.2: Pinagem do 8051
11
2 A Família 8051 de Mi
ro
ontroladores
2.3.1 Des
rição dos Pinos
• V
 - Tensão de Alimentação
• GND - Referên
ia de Terra
• PO.0...P0.7 - Porta de 8 bits bidire
ional de entrada e saída, em dreno aberto. Quanto 1's
são es
ritos nestes pinos estes estarão em tri-state e poderão ser usados 
omo entradas em
alta impedân
ia. Além disto a porta 0 tem a função alternativa de multiplexar dados 
om
o byte inferior de endereços durante o a
esso à memória externa de dados ou programa.
• P1.0...P1.7 - Porta de 8 bits bidire
ional de entrada e saída, apresentando resistores
de pull-up internos. Quanto 1's são es
ritos nestes pinos estes poderão ser usados 
omo
entrada, e quando levados a zero pelo dispositivo externo o pino forne
erá 
orrente através
dos resistores de pull-up.
• P2.0...P2.7 - Porta de 8 bits bidire
ional de entrada e saída, apresentando resistores
de pull-up internos. Quanto 1's são es
ritos nestes pinos estes poderão ser usados 
omo
entrada, e quando levados a zero pelo dispositivo externo o pino forne
erá 
orrente através
dos resistores de pull-up. Além disto a porta 2 tem a função alternativa de forne
er o byte
superior de endereços durante o a
esso à memória externa de dados ou programa.
• P3.0...P3.7 - Porta de 8 bits bidire
ional de entrada e saída, apresentando resistores
de pull-up internos. Quanto 1's são es
ritos nestes pinos estes poderão ser usados 
omo
entrada, e quando levados a zero pelo dispositivo externo o pino forne
erá 
orrente através
dos resistores de pull-up. Estes pinos ofere
em funções alternativas, 
onforme a seguir:
RXD P3.0 Entrada de dados seriais na re
epção serial
TXD P3.1 Saída de dados seriais na transmissão serial
INTO P3.2 Entrada de interrupção externa 0
INT1 P3.3 Entrada de interrupção externa 1
TO P3.4 Entrada de 
lo
k do temporizador/
ontador 0
T1 P3.5 Entrada de 
lo
k do temporizador/
ontador 1
WR P3.6 Saída do sinal de es
rita em memória externa
RD P3.7 Saída do sinal de leitura em memória externa
• RESET - Entrada de Reset ativo em alto, devendo permane
er em pelo menos 2 
i
los de
máquina (24 
i
los de 
lo
k). Para um Reset de Ini
ialização (Power-On Reset) este pino
poderá ter apenas um 
apa
itor externo de 10uF ligado a V
 já que possui um resistor
interno ligado a GND.
• XTAL1 - Entrada do ampli�
ador inversor do os
ilador interno.
• XTAL2 - Saída do ampli�
ador inversor do os
ilador interno.
• ALE - Saída de habilitação do registro de demultiplexação externo usado para demulti-
plexar dados e endereços na porta P0.
12
2 A Família 8051 de Mi
ro
ontroladores
• PSEN - Saída de habilitação da memória de programa externa.
• EA - Saída de seleção de a
esso à memória externa ou interna.
2.4 A
esso à Memória Externa
Comomensionado antes, o 8051 é 
apaz de endereçar até 64 KB de memória RAM externa,
além de até mais 64 KB de memória ROM externa. Quando o sistema mi
ro
ontrolado
�zer uso de alguma memória externa as portas P0 e P2 estarão exer
endo a segunda
função asso
iada a elas, qual seja o interfa
eamento 
om estas memórias RAM e ROM
externas, 
onforme a �gura 2.3 abaixo.
Figura 2.3: Memória Externa
Neste 
aso a porta P0 será usada 
omo barramento de dados / endereços multiplexados,
e seus pinos serão designados agora 
omo AD0-AD7, transferindo dados e forne
endo, de
forma multiplexada 
om estes, o byte inferior de endereço. A porta P2, por sua vez,
forne
erá o byte superior de endereços A8-A15, simultâneamente ao forne
imento do byte
inferior pela porta P0. Os sinais de 
ontrole de leitura e es
rita RD\ e WR\, são forne
idos
por dois pinos da porta P3, e o sinal que permite ao hardware sele
ionar a memória ROM
de programa em lugar da RAM é o sinal de 
ontrole 
hamado PSEN\ (Program Status
Enable). Outro sinal do 8051 envolvido no a
esso à memória externa é o sinal ALE
(Address Lat
h Enable) que é responsável pelo travamento do byte A0-A7 de endereço no
lat
h 
olo
ado entre a porta P0 e as linhas de endereços da memória, pro
esso este que
o
orre quando da demultilpexação de dados e endereços através da porta P0.
13
2 A Família 8051 de Mi
ro
ontroladores
2.5 Organização da Memória do 8051
Os elementos da família 8051 
ommemória de programa interna, que são a grande maioria,
tem 
apa
idades variadas de memória do tipo OTPROM, EPROM, ou Flash, que vão
desde 4KB até 32KB em alguns elementos, mas na maioria dos dispositivos esta será de
4KB do tipo Flash.
Em termos de memória de dados, tipi
amente, os elementos da família 8051 
ontém
128B ou 256B de SRAM.
Quanto à memória externa, podem endereçar até 64KB de memória de programa, e
64KB de memória de dados, 
omo expli
ado no item 2.4.
2.5.1 Memória de Programa do 8051
Em relação à memória de programa, o primeiro 
aso a se 
onsiderar é aquele no qual o
mi
ro
ontrolador da família 8051 ofere
e o re
urso de ROM/EPROM/Flash interna, 
om
a 
apa
idade de 4KB.
Considerando a 
ondição a
ima, esta memória será a
essada 
aso o pino EA\ (External
A
ess) esteja em nível lógi
o alto, ou seja desativado. Caso se deseje, além destes 4KB
de memória de programa interna, pode-se estender o espaço de endereçamento para até
64KB, os 60KB adi
ionais serão a
essados da memória de programa externa. A exe
ução
do programa pelo mi
ro
ontrolador ini
iará na posição zero da ROM interna.
Figura 2.4: Memória de Programa Interna do 8051
O segundo 
aso, é aquele em que o mi
ro
ontrolador não possui memória de programa
interna, e esta é ex
lusivamente externa. Neste 
aso deve-se 
olo
ar o pino EA\=0, ou
seja ativado, indi
ando que o a
esso à memória de programa será sempre externo. Mesmo
que o mi
ro
ontrolador possua memória de programa interna esta não será a
essada, e
14
2 A Família 8051 de Mi
ro
ontroladores
sua presença será ignorada, sendo a exe
ução do programa ini
iada na posição zero da
ROM externa.
Figura 2.5: Memória de Programa Externa do 8051
2.5.2 Memória de Dados do 8051
A memória de dados do 8051 se 
onstitui de memória SRAM interna, 
om 
apa
idade de
128 ou 256 bytes, e SRAM externa de até 64KB, esta quando existente.
Memória de Dados Externa
Na �gura a seguir está ilustrado a memória de dados externa, eviden
iando-se o a
esso
de até 64KB através dos pinos de RD e WR, P3.6 e P3.7.
Figura 2.6: Memória de Dados Externa do 8051
15
2 A Família 8051 de Mi
ro
ontroladores
Os a
essos à SRAM interna e externa são efetuadas através de instruções diferentes,
sendo este o diferen
ial entre os dois tipos de a
essos. Por exemplo a instrução MOV é
usada para leitura/es
rita da SRAM interna, enquanto a instrução MOVX é a 
ontrapar-
tida relativa a memória SRAM externa, maiores detalhes destas instruções serão vistas
no 
apítulo 3, no item 3.2.1.
Memória de Dados Interna
Os a
essos à SRAM interna do 8051 podem ter diferentes 
ara
terísti
as dependendo da
região desta que está sendo a
essada. Na região da SRAM interna 
ompreendida entre
os endereços 0 e 127, está a área dos Registros deUso Geral e Pilha, enquanto a área de
128 a 255 é onde estão lo
alizados os Registros de Funções Espe
iais, ver �gura 2.7 a seguir.
Figura 2.7: Memória de Dados Interna do 8051
Registros de Uso Geral e Pilha
A área da SRAM interna denominada de Registros de Uso Geral e Pilha, 
uja função é
de alo
ar as variáveis do programa, e a pilha, está dividida em seis segmentos diferentes,
identi�
ados na �gura 2.8. Como pode ser notado desta �gura, as regiões 
ompreendem
os quatro ban
os de registros: ban
o 0 a ban
o 3, região bit e byte endereçável, e região
somente byte endereçável. Cada uma destas regiões ofere
em re
ursos diferentes 
onforme
dis
utido adiante.
Cada um dos 4 ban
o de registro possui 8 registros denominados de R0 a R7, sendo que
a seleção do ban
o é feita através dos bits RS0 e RS1 do registro PSW (Program Status
Word), 
onforme a tabela mostrada na �gura 2.8.
O uso destes registros (R0...R7) nas instruções provê uma instrução 
om um byte a
menos já que um dos operandos já está espe
i�
ado na instrução.
Como exemplo a instrução:
MOV R0, A; move para o registro R0 o 
onteúdo do a
umulador.
16
2 A Família 8051 de Mi
ro
ontroladores
Além disto em algumas instruções o registro poderá 
onter o endereço do dado, daí
resultando em um tipo de a
esso indireto via registrador.
Como exemplo a instrução:
MOV �R0, A; move para o endereço apontado por R0 o 
onteúdo de A
A outra faixa de endereços de 20H a 7FH (32 a 127) se 
ara
teriza por a
esso via
espe
i�
ação do endereço, ou seja sem o uso dos registros R0...R7, sendo que o endereço
na SRAM é diretamente 
olo
ado na instrução. Cabe ainda ressaltar que a região entre
os endereços 20H e 2FH tem 
omo 
ara
terísti
a espe
ial a possibilidade de se endereçar
um bit qualquer dentro deste espaço.
Figura 2.8: Registros de Uso Geral e Pilha
Registros de Funções Espe
iais
Os a
essos à RAM interna do 8051 na faixa de 128 a 255, a
essam os registros de funções
espe
iais, que estão asso
iados aos diversos registros asso
iados aos vários re
ursos do
8051 tais 
omo: portas de entrada e saída, 
ontadores/temporizadores, interfa
e serial,
ontrole de interrupção, et
., ver tabela 2.2.
O 
onhe
imento da estrutura de 
ada um destes registro é de suma importân
ia, visto
que permite programar os vários periféri
os 
omo 
anal serial, temporizadores/
ontadores,
ontrolar 
ara
terísti
as da CPU 
omo modos de baixo 
onsumo, interrupções, e a
essar as
17
2 A Família 8051 de Mi
ro
ontroladores
portas de entrada e saída. Assim após apresentar a lista de registros de funções espe
iais,
eles serão dis
utidos, um a um, nos itens que se seguem.
Endereço Registro de Função Espe
ial
F0H Registro B
E0H A
umulador - A
D0H Program Status Word - PSW
B8H Interrupt Priority - IP
B0H Porta 3 de E/S - P3
A8H Interrupt Enable - IE
A0H Porta 2 de E/S - P2
90H Porta 1 de E/S - P1
99H Serial Bu�er - BUF
98H Serial Control - SCON
8DH Timer High 1 - H1
8CH Timer High 0 - H0
8BH Timer Low 1 - TL1
8AH Timer Low 0 - TL0
89H Timer Mode - TMOD
88H Timer Control - TCON
87H Power Control - PCON
83H Data Pointer High - DPH
82H Data Pointer Low - DPL
81H Sta
k Pointer - SP
80H (128) Porta 0 de E/S - P0
Tabela 2.2: Registros de Funções Espe
iais
Registros de Status do 8051 - PSW
Este registro de 8 bits indi
a o Status do pro
essador, ou seja, indi
a a o
orrên
ia de
ondições espe
í�
as asso
iadas ao pro
essamento. O formato do registro é o apresentado
a seguir:
CY AC F0 RS1 RS0 OV � P
• bit Cy: Setado indi
a a o
orrên
ia de um Carry (vai-um);
• bit A
: Setado indi
a a o
orrên
ia de um Carry Auxiliar em operação BCD;
• bit F0: Bit disponível para uso geral;
• bit RS1: Juntamente 
om RS0 permite 
odi�
ar o ban
o de registros no qual os
registros R0 a R7 estarão alo
ados;
18
2 A Família 8051 de Mi
ro
ontroladores
• bit RS0: Juntamente 
om RS1 permite 
odi�
ar o ban
o de registros no qual os
registros R0 a R7 estarão alo
ados;
• bit OV: Setado indi
a a o
orrên
ia de um over�ow em operações 
om números
sinalizados
• bit P: Indi
a a paridade do a
umulador
2.6 Portas de Entrada e Saída do 8051
O esquema geral interno simpli�
ado dos bits de E/S das Portas do 8051 é apresentado a
seguir:
Figura 2.9: Esquema Simpli�
ado de um Bit da Porta 1
Observa-se desta �gura que os pinos das portas são 
onstituidos basi
amente de um
lat
h (�ip-�op tipo D), dois bu�ers tri-state, e um driver de saída. Para se levar um
pino de saída de uma porta a nível lógi
o 1 ou 0, as instruções exe
utam uma es
rita no
lat
h, que 
ontrola o fet do driver de saída através do sinal de saída Q 
omplementada,
obviamente que quando o fet de saída está em ON o pino apresentará nível lógi
o 0 na
saída, e em OFF, nível lógi
o 1.
Constata-se da �gura que a leitura de um bit de uma porta de E/S apresenta um de-
talhe adi
ional: existem dois sinais de leitura. Um destes sinais 
omanda a leitura do
estado do pino, através do bu�er inferior na �gura, o outro 
omanda a leitura do lat
h,
através do bu�er superior da �gura. Con
lui-se então, que existem instruções que não
lêem o pino, mas ao invés disto lêem a saída do lat
h, e um 
uidado adi
ional deve ser
tomado quando se usar tais instruções. Como regra as instruções que exe
utam a sequên-
ia Lê-Modi�
a-Es
reve, são aquelas que lêem o lat
h ao invés do pino, exemplos de tais
isntruções são:
19
2 A Família 8051 de Mi
ro
ontroladores
ANL ; E lógi
o, ex: ANL P1,A SETB Pn.i ; Seta Pn.i, ex: SETB P2.3
ORL ; OU lógi
o, ex: ORL P1,A CLR Pn.i ; Reseta Pn.i, ex: CLR P3.0
XRL ; OU Ex
l., ex: XRL P1,A MOV Pn.i,C ; Move �ag C p/ Pn.i,
JBC ; E lógi
o, ex: ANL P1,A ; ex: MOV P2.0,C
CPL ; Complemento, ex: CPL P1.0 DJNZ ; De
r. e Desvia se 6=0,
INC ; In
remento, ex: INC P1 ; ex: DJNZ P3,Label
DEC ; De
remento, ex: DEC P2
O 
onjunto 
ompleto das instruções do 8051 será visto no 
apítulo 3, portanto o leitor
não deve se preo
upar em entender plenamente as instruções a
ima apresentadas.
A razão de existir instruções que lêem o pino da porta, enquanto outras lêem o lat
h,
é para que não haja uma falsa interpretação da tensão presente no pino. Como exemplo,
se um pino de uma porta estiver 
one
tado à base de um transistor, ao se es
rever 1
neste pino, o transistor é saturado, porém, se efetuada uma leitura posterior neste pino o
mesmo apresentará a tensão de base do transistor saturado, o que será interpretado 
omo
nível lógi
o 0.
Todas as 4 portas de 8 bits do 8051, P0, P1, P2, e P3, podem ter seus pinos individu-
almente usados 
omo entrada ou saída, 
one
tados, por exemplo, à dispositivos simples
omo 
haves e leds, 
omo também podem ser usadas 
omo barramentos de 8 bits, e inter-
fa
ear dispositivos periféri
os 
omo displays inteligentes, 
onversores A/D, e D/A. Deve-se
lembrar, porém, que as portas P0 e P2 �
am destinadas a geração de endereços A0...A7
em P0, e A8...A15 em P2, quando a
essando memória externa, e a porta P3 apresenta
seus pinos dotados de funções alternativas, então 
ertos pinos poderão estar indisponíveis
em alguma apli
ação parti
ular.
Uma parti
ularidade que a porta P0 apresenta é sua saída 
on�gurada 
omo dreno
aberto, ao 
ontrário demais portas que apresentam o pull-up interno. Esta 
ara
terísti
a
faz 
om que a porta tenha seus pinos �utuando quando em aberto. Como 
onsequên
ia
deste fato, a porta P0 poderá drenar até 8 
argas TTL, ao 
ontrário das demais portas
que suportam uma 
arga máxima de 4 gates TTL.
Quando se deseja que os pinos das portas P1, P2, ou P3, atuem 
omo entradas, o estado
do lat
h interno deveráestar em 1, o que deixa o driver de saída em OFF, então o estado
do pino �
ará em a1 pelo pull-up interno, podendo ser levado a 0 por uma fonte externa.
Como visto antes 
ada uma das portas está mapeada na região dos Registros de Funções
Espe
iais da memória SRAM interna, 
om endereços espe
í�
os que podem ser referidos
nas instruções (ver tabela 2.2), porém é mais 
onveniênte se referir ao nome da porta
nestas instruções, o que assegura uma maior legibilidade ao 
ódigo fonte. Por exemplo a
instrução:
MOV A, P1 ; Lê a porta P1 e guarda o valor lido no a
umulador.
Cabe também lembrar, que os bits das portas tem endereços espe
í�
os, uma vez que
estão em uma região de memória bit endereçável. Portanto, quando se deseja a
essar um
20
2 A Família 8051 de Mi
ro
ontroladores
bit de uma porta, pode-se referir ao endereço deste bit, ou usar a notação Porta.Bit, 
omo
no exemplo abaixo onde o �ag de 
arry (C) re
ebe o estado do bit 0 da porta 1 (P1.0):
MOV C, P1.0 ; Flag C re
ebe estado de P1.0
2.7 Interrupções no 8051
São 5 fontes distintas de interrupções no 8051, sendo duas externas, geradas a partir dos
pinos INT0 e INT1 da porta 3, e três internas, geradas pelos temporizadores/
ontadores
e interfa
e serial. Os vetores de interrupção, ou seja o endereço de desvio para estas 5
fontes são �xos, sendo apresentados na tabela 2.3.
Fonte Cara
terísti
as Prin
ipais Endereço
de desvio
INT0 Interrupção externa gerada pelo pino P3.2 da porta P3, ativo baixo. 0003H
INT1 Interrupção externa gerada pelo pino P3.3 da porta P3, ativo baixo. 0013H
T/C0 Interrupção do Temporizador/Contador0 gerada quando o 
ontador 000BH
atinge o máximo valor de 
ontagem, e o bit TF0 é setado.
T/C1 Interrupção do Temporizador/Contador1 gerada quando o 
ontador 001BH
atinge o máximo valor de 
ontagem e o bit TF1 é setado.
Serial Canal Serial. A interrupção o
orre quando o bu�er do 
anal serial 0023H
está vazio na transmissão, ou 
heio na re
epção.
Tabela 2.3: Fontes de Interrupção do 8051
A es
ala de prioridades de atendimento da interrupção existente entre as várias fontes
é a seguinte:
INT0 > T/C0 > INT1 > T/C1 > Serial
2.7.1 Registro de Habilitação de Interrupções - IE
É através deste registro de 8 bits que se pode sele
ionar a habilitar/desabilitar as inter-
rupções individualmente. O formato do registro é o apresentado a seguir:
EA � � ES ET1 EX1 ET0 EX0
• bit EA: Setado permite habilitar as fontes de interrupção que forem individualmente
sele
ionadas através dos bits ES, ET1, EX1, ET0, e EX0. Resetado desabilita toda
e qualquer interrupção de ser gerada;
• bit ES: Setado permite sele
ionar a interrupção da interfa
e serial para ser usada
quando EA for setado;
21
2 A Família 8051 de Mi
ro
ontroladores
• bit ET1: Setado permite sele
ionar a interrupção do temporizador/
ontador1 para
ser usada quando EA for setado;
• bit EX1: Setado permite sele
ionar a interrupção externa 1 para ser usada quando
EA for setado;
• bit ET0: Setado permite sele
ionar a interrupção do temporizador/
ontador0 para
ser usada quando EA for setado;
• bit EX0: Setado permite sele
ionar a interrupção externa 0 para ser usada quando
EA for setado.
Como exemplo, se fosse ne
essário habilitar as duas interrupções externas, o registro IE
deveria ter os bits EX0, EX1, e EA setados, assim a instrução a seguir poderia ser usado
para tal:
MOV IE, #10000101B
Ou ainda, as três linhas de programa podem ser usadas, desde que os demais bits do
registro IE estejam resetados:
SETB EX0
SETB EX1
SETB EA
2.7.2 Registro de Controle de Prioridade de Interrupção - IP
É através deste registro de 8 bits que se pode modi�
ar as prioridades de atendimento
das interrupções. O formato do registro é o apresentado a seguir:
� � � PS PT1 PX1 PT0 PX0
• bit PS: Setado permite que a interrupção do 
anal serial tenha a mais alta priori-
dade de atendimento. Resetado mantém a ordem de prioridade de atendimento da
interrupção do 
anal serial inalterada;
• bit PT1: Setado permite sele
ionar a interrupção do temporizador/
ontador1 para
ser a de mais alta prioridade. Resetado mantém a ordem de prioridade de atendi-
mento da interrupção do temporizador/
ontador 1 inalterada;
• bit PX1: Setado permite sele
ionar a interrupção externa 1 para ser a de mais alta
prioridade. Resetado mantém a ordem de prioridade de atendimento da interrupção
externa 1 inalterada;
22
2 A Família 8051 de Mi
ro
ontroladores
• bit PT0: Setado permite sele
ionar a interrupção do temporizador/
ontador0 para
a de mais alta prioridade. Resetado mantém a ordem de prioridade de atendimento
da interrupção do temporizador/
ontador0 inalterada;
• bit PX0: Setado permite sele
ionar a interrupção externa 0 para ser a de mais alta
prioridade. Resetado mantém a ordem de prioridade de atendimento da interrupção
externa 0 inalterada.
2.7.3 Ativação das Interrupções Externas por Borda ou Nível -
Bits IT0 e IT1 do Registro TCON
As interrupções externas INT0 e INT1 podem ser ativadas tanto por nível quanto por
borda de des
ida, e esta seleção pode ser feita através de 4 dos 8 bits do registro TCON.
O formato deste registro é o apresentado a seguir:
� � � � IE1 IT1 IE0 IT0
• bit IE1: Setado por hardware quando o pino INT1 vai de alto para baixo. Resetado
quando a interrupção é atendida;
• bit IT1: Setado permite sele
ionar a ativação da interrupção externa 1 por borda
de des
ida do sinal presente no pino INT1. Resetado sele
iona a ativação de INT1
por nível;
• bit IE0: Setado por hardware quando o pino INT0 vai de alto para baixo. Resetado
quando a interrupção é atendida;
• bit IT0: Setado permite sele
ionar a ativação da interrupção externa 0 por borda
de des
ida do sinal presente no pino INT0. Resetado sele
iona a ativação de INT0
por nível.
2.8 Temporizadores/Contadores 0 e 1
A seguir ilustra-se a arquitetura dos 
ontadores/temporizadores (T/C's) do 8051, eviden-
iando seus registros internos.
23
2 A Família 8051 de Mi
ro
ontroladores
Figura 2.10: Temporizadores Contadores 0 e 1
Observa-se que no diagrama em blo
os da arquitetura dos T/C's, alguns registros tais
omo: TL0/1, TH0/1, TCON e TMOD são referidos em pontos 
haves do diagrama.
Os dois T/C's do 8051 (3 no 8052) fun
ionam independentemente, 
omo 
ontador ou
temporizador, podendo ser programados para operar em 4 modos diferentes, 
onforme
des
rito mais adiante.
O entendimento da função de 
ada um dos registros a
ima men
ionados é fundamental
para que se possa 
ompreender o fun
ionamento geral dos T/C. A seguir estes vários
registros são detalhados:
2.8.1 Registros de Carga do Valor Ini
ial de Contagem
(TH0/TL0 e TH1/TL1)
Estes dois registros de 8 bits, TH0 e TL0, ou TH1 e TL1, são usados para a 
arga
dos valores ini
iais de 
ontagem dos T/C's, sendo sempre de forma 
res
ente até o valor
máximo, que pode ser de 8 ou 16 bits, 
onforme THn e TLn sejam usados separados 
omo
ontadores de 8 bits ou aos pares 
omo um registro de 16 bits. Após este valor máximo de
ontagem ter sido atingido o sinalizador TF0 ou TF1 é setado indi
ando esta o
orrên
ia,
e 
aso a interrupção asso
iada ao T/C em questão esteja habilitada, uma interrupção é
gerada.
2.8.2 Registro de Controle dos T/C's - TCON
Este registro de 8 bits, mostrado abaixo, é usado para 
ontrolar a operação dos T/C's,
e para isto somente os 4 bits mais signi�
ativos são usados para esta função, ver �gura
abaixo, e des
rição dos bits a seguir desta.
24
2 A Família 8051 de Mi
ro
ontroladores
TF1 TR1 TF0 TR0 � � � �
• bit TF1 ou TF0: Setado por hardware sempre que o T/C em questão atingiu o valor
máximo de 
ontagem e o
orreu um timerover�ow. Resetado por software sempre
que se deseja reini
ializar o T/C;
• bit TR1 ou TR0: Setado por software sempre que se deseja ini
iar a 
ontagem pelo
T/C. Resetado por software permite parar a 
ontagem.
2.8.3 Registro de Controle de Modo dos T/C's -TMOD
Este registro de 8 bits, mostrado abaixo, é usado para sele
ionar os modos de operação
do temporizador/
ontador 
onforme des
rito a seguir:
G1 T/C1 M11 M01 G0 T/C0 M10 M00
• bit G0 ou G1: Usado para sele
ionar o tipo de 
ontrole de disparo do T/C, ou seja,
se este é 
ontrolado apenas através do bit TRn (Gn - Resetado), ou através do bit
TRn e do pino INT1 (Gn - Setado);
• bit T/C0 ou T/C1: Usado para sele
ionar a operação do T/C 
omo temporizador
(T/Cn - Resetado) ou 
ontador (T/Cn - Setado);
• bits M0-0/M1-0 ou M0-1/M1-1: Estes dois bits tem 
omo função sele
ionar um
dentre quatro modos de operação dos T/C's, a saber:
M1 M0 Modo - Cara
terísti
as
0 0 0 - T/C de 8 bits 
om pres
aler de até 32x
0 1 1 - T/C de 16 bits
1 0 2 - T/C de 8 bits 
om re
arga automáti
a
1 1 3 - Contador de 8 bits + Temporizador de 8 bits
T/C no Modo 0 - Contagem em 8 bits 
om Pres
aler de 32x
Neste modo o T/C0 ou T/C1 fun
iona em 8 bits, sendo que esta 
ontagem o
orre no
registro TL0 ou TL1, tendo portanto, um máximo valor de 
ontagem de 255. O registro
TH0 ou TH1, neste modo forne
e uma pré divisão (pres
aler) do 
lo
k do 
ontador de até
32 vezes, utilizando para isto 5 bits deste registro.
T/C no Modo 1 - Contagem em 16 bits
Neste modo o T/C0 ou T/C1 fun
iona em 16 bits, ou seja os dois registros TH0 e TL0, ou
TH1 e TL1 são vistos 
omo um úni
o registro de 16 bits, sendo a 
ontagem implementada
neste par de registros, e o valor máximo de 
ontagem de 65.535 ou FFFFH.
25
2 A Família 8051 de Mi
ro
ontroladores
T/C no Modo 2 - Contagem em 8 bits 
om Re
arga Automáti
a
Neste modo o T/C0 ou T/C1 fun
iona em 8 bits, sendo TL0 ou TL1 o registro onde
o
orre a 
ontagem, e TH0 ou TH1 o registro onde o valor ini
ial de 
ontagem, ou neste
aso o valor de re
arga está espe
i�
ado. Sempre que o valor máximo de 
ontagem o
orre
(255 ou FFH) o valor de re
arga é automati
amente 
arregado quando TF0 ou TF1 é
resetado.
T/C no Modo 3 - Contagem em 8 bits em TH0 e Temporizador de 8 bits em
TL0
Neste modo o T/C0, e somente este, pode fun
ionar 
omo temporizador ou 
ontador de
8 bits, usando o registro TH0, e ativando 
aso seja ne
essário a interrupção do T/C1. O
outro registro do T/C0, o TL0 poderá fun
ionar 
omo um temporizador adi
ional de 8
bits usando a interrupção do T/C0.
2.9 Canal Serial do 8051
A interfa
e serial do 8051 pode ser usada de 4 modos diferentes, 
om operações do tipo
sín
rona, assín
rona, 
om taxas de transmissão �xa, ou variável. Os registros asso
iados
a programação do 
anal serial são os seguintes: SBUF - Bu�er do Canal Serial, e SCON
- Controle do Canal Serial. Estes registros são des
ritos mais a diante.
Uma transmissão serial sempre se ini
ia quando um byte é es
rito no registro SBUF,
assim este byte é serializado e enviado pelo pino TXD da porta P3.
A re
epção para ser habilitada deverá ter o bit REN - Re
epção Habilitada, do registro
de 
ontrole SCON, setado e os bits quando re
ebidos pelo pino RXD da porta P3 serão
paralelizados e enviados para o registro SBUF para ser lido.
2.9.1 Registro de Controle do Canal Serial - SCON
Este registro de 8 bits, mostrado abaixo, é usado para sele
ionar os modos de operação
do temporizador/
ontador 
onforme des
rito a seguir:
SM0 SM1 SM2 REN TB8 RB8 TI RI
• bits TI e RI: Requisição de transmissão/re
epção setado por hardware sempre que
uma transmissão/re
epção for ini
iada, e resetado por software;
• bits TB8 e RB8: São usados para inserção de bits de 
ontrole pelo usuário, tais
omo paridade , �ags, et
;
• bit REN: Habilitação da re
epção através do 
anal serial;
26
2 A Família 8051 de Mi
ro
ontroladores
• bits SM0 / SM1: Estes dois bits tem 
omo função sele
ionar um dentre quatro
modos de operação do Canal Serial. Ver tabela a seguir.
• bit SM2: Habilita Comuni
ação Mutipro
essador, nos modos 2 e 3. RI não será
ativado se o 9
◦
bit é zero.
SM1 SM0 Modo do Canal Serial - Cara
terísti
as
0 0 0 - Registrador de Deslo
amento - Taxa Fixa = F
lk/12
1 0 1 - UART de 8 bits e Taxa Variável
0 1 2 - UART de 9 bits e Taxa Fixa = F
lk/32 ou F
lk/64
1 1 3 - UART de 9 bits e Taxa Variável
Modo 0 do Canal Serial - Registrador de Deslo
amento
Neste modo o 
anal serial é 
olo
ado no modo Registrador de Deslo
amento (Shift Regis-
ter) no qual os dados entram e saem serialmente através do pino RXD, e no pino TXD o
lo
k é enviado. Neste 
aso, os termos RXD e TXD não tem mais o signi�
ado original,
uma vez que o pino RXD transmite e re
ebe dados seriais, e o pino TXD nada tem a ver
om transmissão de dados. A transmissão é ini
iada sempre que se es
reve no registro
SBUF. E a re
epção quando o bit REN do registro SCON é setado, e o �ag de re
epção
RI é resetado.
Figura 2.11: Canal Serial no Modo 0
Modo 1 do Canal Serial - UART de 8 bits e Taxa Variável
Neste modo o 
anal serial é 
olo
ado no modo Re
eptor/Transmissor Universal Assín
rono
(UART), onde o dado 
om 8 bits seriais são pre
edidos por um start bit em nível baixo,
e seguido por um stop bit em nível alto. O stop bit é 
opiado no bit RB8 do SCON na
re
epção que tem iní
io quando o start bit é re
ebido no pino RXD sendo sensível a borda
de des
ida. A taxa de transmissão é programada através da taxa de over�ow do Timer 1.
Figura 2.12: Canal Serial no Modo 1
27
2 A Família 8051 de Mi
ro
ontroladores
Modo 2 do Canal Serial - UART de 9 bits e Taxa Fixa
Neste modo o 
anal serial é 
olo
ado no modo UART de 9 bits seriais, que 
omo no modo
anterior são pre
edidos por um start bit em nível baixo, e seguido por um stop bit em
nível alto. Quando da re
epção o bit RB8 do SCON é reservado para re
eber o nono bit
da palavra de dado, ao invés de re
eber o stop bit 
omo no modo 1. Na transmissão o bit
TB8 re
ebe o nono bit que pode ser um bit de paridade, por exemplo.
Figura 2.13: Canal Serial no Modo 2
Modo 3 do Canal Serial - UART de 9 bits e Taxa Variável
Neste modo o 
anal serial é 
olo
ado no modo UART de 9 bits seriais exatamente 
omo
no modo anterior, ex
eto que a taxa de transmissão é programada pelo timer 1, 
omo no
modo 1.
2.9.2 Tabela de Referên
ia p/ Programar o Baud Rate
A tabela a seguir poderá ser usada na programação do Canal Serial para a geração de
taxas de transmissão (Baud Rate) típi
as 
omo aquelas nela apresentadas. Para tanto o
Timer/Counter 1 deve ser usado 
omo temporizador no modo 2, ou seja modo autoreload,
e os valores de 
ontagem ini
iais em TH1 são aqueles mostrados na última 
oluna da
tabela.
Taxa Cristal Bit Taxa Erro T/C1 Modo 2
(bps) (MHz) SMOD Real (%) Valor TH1
9600 12 1 8923 7 F9H (-7)
2400 12 0 2404 0,16 F3H (-13)
1200 12 0 1202 0,16 E6H (-26)
19200 11.0592 1 19200 0 FDH (-3)
9600 11.0592 0 9600 0 FDH (-3)
2400 11.0592 0 2400 0 F4H (-12)
1200 11.0592 0 1200 0 E8H (-24)
Tabela 2.4: Tabela de Referên
ia para Baud Rate
28
2 A Família 8051 de Mi
ro
ontroladores
O exemplo de apli
ação 4.10 ilustra a programação do 
anal serial em 9600bps onde as
letras de 'a' até 'z' são enviadas 
onse
utivamente e de forma 
ontínua para um mi
ro-
omputador PC.
2.10 Modos de Baixo Consumo
Quando um sistema mi
ro
ontrolado tem 
omo requisito bási
o o baixo 
onsumo de ener-
gia, por exemplo, no 
aso de equipamentos portáteis e alimentados por baterias, pode-se
ontar 
om os dispositivos da família 8051 
om te
nologia CMOS,que ofere
em dois mo-
dos de operação de baixo 
onsumo: o modo Idle e o modo Power-Down, programados
pelos bits de 
ontrole IDL e PD, do registro de 
ontrole de potên
ia PCON, mostrado a
seguir.
2.10.1 Registro de Controle de Potên
ia - PCON
Este registro de 8 bits, mostrado abaixo, é usado para sele
ionar os modos de operação de
baixo 
onsumo do mi
ro
ontrolador, e abriga ainda o bits de 
ontrole de modo do 
anal
serial SMOD, já dis
utido no item 2.9, além de dois bits de sinalização de uso geral GF0
e GF1, 
onforme des
rito a seguir:
SMOD - - - GF1 GF0 PD IDL
• bit GF0 ou GF1: Usado para sinalização de uso geral;
• bit SMOD: Usado pelo 
anal serial, ver item 2.9;
• bits PD e IDL: Estes dois bits tem 
omo função sele
ionar o modo de operação em
baixo 
onsumo: Power-Down e Idle, des
ritos a seguir.
2.10.2 Modo Idle
Neste modo de operação, que pode ser ativado setando-se o bit de 
ontrole IDL, lo
alizado
no registro de função espe
ial de Controle de Potên
ia - PCON, o dispositivo bloqueia o
forne
imento do sinal de 
lo
k para os 
ir
uitos da UCP, porém os 
ir
uitos de Interrupção,
Temporizadores/Contadores, e Porta Serial 
ontinuam a re
eber este sinal.
Quando o mi
ro
ontrolador entra no modo Idle, após a instrução que seta o bit IDL, o
status da UCP é mantido 
omo estava antes da exe
ução desta instrução, e os registros
de status PSW, o 
ontador de programa PC, apontador de pilha SP, além do a
umulador
A, e demais registros se manterão inalterados. Além disto o estado dos pinos das portas
de E/S permane
em no estado que estavam antes de entrar em modo Idle.
Para que o mi
ro
ontrolador possa sair do modo Idle, existem dois me
anismos: através
de uma interrupção préviamente habilitada, ou através de um reset, que 
onsequentemente
reseta o bit IDL.
29
2 A Família 8051 de Mi
ro
ontroladores
No primeiro 
aso, onde uma interrupção é gerada, o bit IDL é automati
amente resetado
quando do atendimento da interrupção, e após a rotina ter sido exe
utada, retornando
através de uma instrução RETI, o programa segue o �uxo exe
utando a instrução que
vem logo após aquela que 
olo
ou o mi
ro
ontrolador no modo Idle.
No segundo 
aso, em que o mi
ro
ontrolador é resetado, o sinal de RESET deve ser
mantido por pelo menos 24 
i
los de 
lo
k, e assim a exe
ução pela UCP, da mesma forma
que no 
aso anterior, segue o �uxo exe
utando a instrução que vem logo após aquela que
olo
ou o mi
ro
ontrolador no modo Idle. Como serão gastos de 2 a 3 
i
los de máquina
para o mi
ro
ontrolador sair do modo Idle, o que 
orresponde ao tempo de exe
ução do
algoritmo de reset interno, este tempo deve ser o
upado por 3 instruções NOP para evitar
que possa surgir resultados erráti
os nos pinos das portas.
2.10.3 Modo Power-Down
Neste outro modo de baixo 
onsumo, ativado quando se leva o bit de 
ontrole PD, também
lo
alizado no registro PCON
30
3 Programação em Assembly do
8051
3.1 Conjunto de Instruções do 8051
A título de estudo, as instruções do 8051 podem ser 
lassi�
adas em 5 tipos diferentes,
onforme abaixo:
• Transferên
ia de Dados
• Aritméti
as
• Lógi
as
• Booleanas
• Desvio
Os tipos de instruções listados a
ima serão estudados em detalhes no item 3.2, porém
antes de estudá-los é ne
essário des
rever os modos de endereçamento de dados existentes
na família 8051.
3.1.1 Modos de Endereçamento
O modo 
omo dados são a
essados nas instruções do 8051, é o que se 
hama de modo de
endereçamento, e são os seguintes:
• Endereçamento Direto
• Endereçamento Indireto
• Endereçamento Via Registrador
• Endereçamento por Constante Imediata
• Endereçamento Indexado
31
3 Programação em Assembly do 8051
Endereçamento Direto
Neste tipo de endereçamento o dado é a
essado na posição de memória diretamente es-
pe
i�
ada na instrução, 
omo no exemplo a seguir:
EX: MOV A,25H ;move para A o 
onteúdo da posição de memória 25H
Endereçamento Indireto
Neste tipo de endereçamento o dado é a
essado na posição de memória apontada por um
dos registros R0 ou R1 espe
i�
ado na instrução, 
omo no exemplo a seguir:
EX: MOV A,�R1 ;move p/ A 
onteúdo posição de mem. apontada por R1
Endereçamento via Registrador
Neste tipo de endereçamento o dado é a
essado na através de um registro espe
i�
ado na
instrução, 
omo no exemplo a seguir:
EX: MOV R1,A ;move para R1 o 
onteúdo do registro A
Constante Imediata
Neste tipo de endereçamento o dado é imediatamente espe
i�
ada na instrução, 
omo no
exemplo a seguir:
EX: MOV A,#25H ;move para A o 
onteúdo da posição de memória 25H
Endereçamento Indexado
Neste tipo de endereçamento o dado é a
essado na posição de memória espe
i�
ada 
omo
a soma de um endereço de 16 bits 
ontido no registro PC ou DPTR, 
omo o valor 
ontido
em A. Neste endereço assim 
onstituído o registro A pode ser variado para fazer indexa-
ções. Pode-se apli
ar tal modo de endereçamento no a
esso à memória de 
ódigo, para
por exemplo a
essar posições de uma tabela de dados.
EX.1: MOVC A,�A+DPTR ;move p/ A 
onteúdo pos. mem. (DPTR+A)
EX.2: MOVC A, �A+PC ; move p/ A 
onteúdo pos. mem. (PC+A)
3.2 Estudo das Instruções do 8051
Nos itens que se segue, os vários tipos de instruções serão apresentados na forma de
tabelas, e estas 
onterão todas as instruções existentes.
32
3 Programação em Assembly do 8051
3.2.1 Transferên
ia de Dados
São basi
amente as instruções de move, 
ujos mnem�ni
os existentes são: mov, movx, e
mov
, além das instruções de operação 
om a pilha: push e pop, e de tro
a ex
hange,
ujos mnem�ni
os existentes são: x
h e x
hd.
O formato geral da instrução move é o seguinte:
mov <destino>,<origem>
As instruções de transferên
ia de dados estão listadas na tabela 3.1 a seguir.
Instrução Des
rição Exemplo B* Clk
MOV A,Rn Move Registro p/ A
umulador MOV A,R2 1 12
MOV A,direto Move byte direto p/ A
umulador MOV A,7FH 2 12
MOV A,�Ri Move RAM indireto p/ A
umulador MOV A,�R4 1 12
MOV A, #dado Move dado imediato p/ A
umulador MOV A, #20 2 12
MOV Rn,A Move A
umulador p/ Registro MOV R7,A 1 12
MOV Rn, direto Move byte direto p/ Registro MOV R3, 7FH 2 24
MOV Rn,#dado Move dado imediato p/ Registro MOV R6,#200 2 12
MOV direto,A Move A
umulador p/ byte direto MOV 30H,A 2 12
MOV direto,Rn Move registro p/ byte direto MOV 30H,R2 2 24
MOV direto,direto Move byte direto p/ byte direto MOV 30H,31H 3 24
MOV direto, �Ri Move RAM indireto p/ byte direto MOV 7FH, �R0 2 24
MOV direto,#dado Move dado imediato p/ byte direto MOV 40H,#100 2 24
MOV �Ri, A Move A
umulador p/ RAM indireto MOV �R0, A 1 12
MOV �Ri, direto Move byte direto p/ RAM indireto MOV �R5, 20H 2 24
MOV �Ri, #dado Move dado imediato p/ RAM indireto MOV �R0, #0FH 2 12
MOV DPTR,#dado16 Move 2 bytes p/ data pointer MOV DPTR, #2000H 3 24
MOVX A,�Ri Move XRAM (end. 8 bits) p/ A MOVX A,�R1 1 24
MOVX A,�DPTR Move XRAM (end. 16 bits) p/ A MOVX A,�DPTR 1 24
MOVX A,�Ri,A Move A p/ XRAM (end. 8 bits) MOVX A,�R2,A 1 24
MOVX �DPTR, A Move A p/ XRAM (end. 16 bits) MOVX �DPTR, A 1 24
MOVC A,�A+DPTR Move Código relativo a DPTR p/ A MOVC A,�A+DPTR 1 24
MOVC A,�A+PC Move Código relativo a PC p/ A MOVC A,�A+PC 1 24
PUSH direto Move byte direto para a pilha PUSH R0 2 24
POP direto Re
upera byte direto da pilha POP DPH 2 24
XCH A,direto Tro
a byte direto 
om A XCH A, 48H 2 12
XCH A,�Ri Tro
a RAM indireto 
om A XCH A, �R0 1 12
XCHD A, �Ri Tro
a nibble inferior da RAM 
/ A XCHD A, �R0 1 12
* Bytes da Instrução
Tabela 3.1: Instruções de Transferên
ia de Dados
33
3 Programação em Assembly do 8051
3.2.2 Instruções Aritméti
as
São as instruções de soma, subtração, inremento, de
remento, multipli
ação, divisão, em
todas as variantes dos modos de endereçamento, além da instrução de ajuste de
imal para
operações aritméti
as em BCD.
As instruções aritméti
as estão listadas na tabela 3.2, a seguir.
Instrução Des
rição Exemplo B* Clk
ADD A, Rn Soma registro ao A
umulador ADD A, R1 1 12
ADD A, direto Soma byte direto ao A
umulador ADD A, 50H 2 12
ADD A, �Ri Soma RAM indireto ao A
umulador ADD A, �R2 1 12
ADD A,#dado Soma dado imediato ao A
umulador ADD A,#15 2 12
ADDC A, Rn Soma registro ao A
umulador 
/ 
arry ADDC A, R3 1 12
ADDC A, direto Soma byte direto ao A
umulador 
/ 
arry ADDC A, 50H 2 12
ADDC A, �Ri Soma RAM indireto ao A
umulador 
/ 
arry ADDC A, �R4 1 12
ADDC A,#dado Soma dado imediato ao A
umulador 
/ 
arry ADDC A,#15 2 12
SUBB A, Rn Subtrai registro ao A
umulador 
/ borrow SUBB A, R7 1 12
SUBB A, direto Subtrai byte direto ao A
umulador 
/ borrow SUBB A, 50H 2 12
SUBB A, �Ri Subtrai RAM indireto ao A
umulador 
/ borrow SUBB A, �R2 1 12
SUBB A,#dado Subtrai dado imediato ao A
umulador 
/ borrow SUBB A,#10 2 12
INC A In
rementa a
umulador INC A 1 12
INC Rn In
rementa registro INC R3 1 12
INC direto In
rementa byte direto INC 50H 2 12
INC �Ri In
rementa RAM indireto INC �R1 1 12
DEC A De
rementa a
umulador DEC A 1 12
DEC Rn De
rementa registro DEC R4 1 12
DEC direto De
rementa byte direto DEC 50H 2 12
DEC �Ri De
rementa RAM indireto DEC �R2 1 12
INC DPTR In
rementa data pointer INC DPTR 1 24
MUL AB Multipli
a A e B MUL AB 1 48
DIV AB Divide A por B DIV AB 1 48
DA A Ajuste de
imal do a
umulador DA A 1 12
* Bytes da Instrução
Tabela 3.2: Instruções Aritméti
as
3.2.3 Instruções Lógi
as
São as instruções de: E (ANL), OU (OR), e OU Ex
lusivo (XOR), 
om todas as varian-
tes ofere
idas pelos modos de endereçamento, além de CLR, resetar todos bits, e CPL,
omplemento.
As instruções lógi
as estão listadas na tabela 3.3, a seguir.
34
3 Programação em Assembly do 8051
Instrução Des
rição Exemplo B* Clk
ANL A, Rn AND de A 
om registro ANL A, R0 1 12
ANL A, direto AND de A 
om byte direto ANL A, 7FH 2 12
ANL A, �Ri AND de A 
om RAM indireto ANL A, �R0 1 12
ANL A, #dado AND de A 
om dado imediato ANL A, #7FH 2 12
ANL direto, A AND de byte direto 
om a
umulador ANL 7FH, A 2 12
ANL direto, #dado AND de byte direto 
om dado imediato ANL 40H, #7FH 3 24
ORL A, Rn OR de A 
om o registro ORL A, R0 1 12
ORL A, direto OR de A 
om byte direto ORL A, 7FH 2 12
ORL A, �Ri OR de A 
om RAM indireto ORL A, �R0 1 12
ORL A, #dado OR de A 
om dado imediato OR A, #7FH 2 12
ORL direto, A OR de byte direto 
om a
umulador ORL 7FH, A 2 12
ORL direto, #dado OR de byte direto 
om dado imediato ORL 40H, #7FH 3 24
XRL A,Rn XOR de A 
om o registro XRL A,R0 1 12
XRL A,direto XOR de A 
om byte direto XRL A,7FH 2 12
XRL A,�Ri XOR de A 
om RAM indireto XRL A,�R0 1 12
XRL A, #dado XOR de A 
om dado imediato XRL A, #7FH 2 12
XRL direto, A XOR de byte direto 
om a
umulador XRL 7FH, A 2 12
XRL direto, #dado XOR de byte direto 
om dado imediato XRL 40H, #7FH 3 24
CLR A Limpa A
umulador CLR A 1 12
CPL A Complementa A
umulador CPL A 1 12
RL A Rota
iona A à esquerda s/ 
arry RRA 1 12
RLC A Rota
iona A à esquerda 
/ 
arry RRC A 1 12
RR A Rota
iona A à direita s/ 
arry RL A 1 12
RRC A Rota
iona A à direita 
/ 
arry RL C 1 12
SWAP A Tro
a nibbles inferior e superior SWAP A 1 12
* Bytes da Instrução
Tabela 3.3: Instruções Lógi
as
3.2.4 Booleanas
São as instruções que operam sobre bits, lembrando que a RAM interna possui 128 bits
endereçáveis, e que no espaço da RAM interna destinada aos registros de funções espe
iais
existem mais 128 bits endereçáveis, a
essados portanto através de instruções booleanas.
As instruções booleanas estão listadas na tabela 3.4, a seguir.
35
3 Programação em Assembly do 8051
Instrução Des
rição Exemplo B* Clk
CLR C Limpa �ag C CLR C 1 12
CLR bit Limpa bit direto CLR P1.7 2 12
SETB C Seta �ag C SETB C 1 12
SETB bit Seta bit direto SETB P1.7 2 12
CPL C Complementa �ag C CPL C 1 12
CPL bit Complementa bit direto CPL P1.7 2 12
ANL C, bit AND de bit direto 
om o �ag C ANL C, P1.5 2 24
ANL C, /bit AND do 
omplem. de bit direto 
om o �ag C ANL C, P1.5 2 24
ORL C, bit AND de bit direto 
om o �ag C ORL C, P1.5 2 24
ORL C, /bit AND do 
omplem. de bit direto 
om o �ag C ORL C, P1.5 2 24
MOV C, bit Move bit direto para o �ag de 
arry MOV C, P1.0 2 12
MOV bit,C Move o �ag de 
arry o bit direto MOV P1.0,C 2 24
JC relativo Desvia se �ag de 
arry setado JC LOOP 2 24
JNC relativo Desvia se �ag de 
arry não setado JNC DESVIO 2 24
JB bit, relativo Desvia se bit direto setado JB LOOP 2 24
JNB bit, relativo Desvia se bit direto não setado JNB DESVIO 2 24
JBC bit, relativo Desvia se bit direto setado e reseta bit JBC TF0, L1 3 24
* Bytes da Instrução
Tabela 3.4: Instruções booleanas
3.2.5 Desvio
As instruções de desvios são aquelas usadas para o 
ontrole de �uxo do programa e
ompreendem os seguintes tipos de desvios:
• Desvios in
ondi
ionais
• Desvios 
ondi
ionais
• Chamada de rotinas
• Retorno de rotina
• Retorno de rotina de interrupção
As isntruções de desvio estão listadas na tabela 3.5, a seguir.
36
3 Programação em Assembly do 8051
Instrução Des
rição Exemplo B* Clk
ACALL endereço11bits Desvio absoluto para subrotina ACALL DISP 2 24
LCALL endereço16bits Desvio longo para subrotina LCALL TECLAS 3 24
RET Retorno de subrotina RET 1 24
RETI Retorno de rotina de interrupção RETI 1 24
AJMP endereço11bits Desvio absoluto AJMP LOOP 2 24
LJMP endereço16bits Desvio longo LJMP SAIDA 3 24
SJMP relativo Desvio 
urto (relativo) SJMP LOOP1 2 24
JMP �A+DPTR Desvia indireto relativo a DPTR JMP �A+DPTR 1 24
JZ relativo Desvia se A é igual a zero JZ SAI 2 24
JNZ relativo Desvia se A é diferente de zero JNZ REPETE 2 24
CJNE A,direto,relativo Compara byte direto 
/ A e desvia CJNE A,30H,L3 3 24
se 6=byte direto
CJNE A,#dado,relativo Compara dado 
/ A e desvia CJNE A,#10,REP 3 24
se 6= dado
CJNE Rn,#dado,relativo Compara reg. 
/ indireto e desvia CJNE R2,#20,L0 3 24
se 6= dado
CJNE �Rn,#dado,relativo Compara dado 
/ indireto e desvia CJNE �R1,#100,S2 3 24
se 6= dado
DJNZ Rn, relativo De
rementa registro e desvia se 6= 0 DJNZ Rn, REPETE 2 24
DJNZ direto, relativo De
rementa byte direto e desvia DJNZ 5FH, S1 3 24
se 6= 0
NOP Sem operação NOP 1 12
* Bytes da Instrução
Tabela 3.5: Instruções de desvio
37
4 Exemplos de Apli
ação
A seguir serão apresentados exemplos de apli
ações, 
om soluções de hardware e software,
desde programas muito simples ilustrando o uso das Portas de E/S, Interrupções Externas,
e Temporizadores/Contadores, até exemplos um pou
o mais 
omplexos, envolvendo inter-
fa
es entre o 8051 e periféri
os tais 
omo: displays de 
ristal líquido inteligentes (LCD),
te
lados matri
iais, 
onversores A/D e D/A, e 
ir
uitos de a
ionamento de motores de
passo.
Muitos dos exemplos aqui apresentados serão úteis em projetos de sistemas mi
ro
on-
trolados baseados no 8051, onde tais programas podem ser 
onvertidos em rotinas e usados
para 
ontrole de periféri
os.
4.1 Geração de Onda Quadrada
Neste exemplo, bastante simples, será gerada uma onda quadrada de 10KHz no pino P1.0.
Para tanto, será utilizado o T/C0 fun
ionando 
omo temporizador no modo 2, ou seja:
ontagem em 8 bits 
om re
arga automáti
a.
Sendo o 
ristal os
ilador do 
ir
uito de 
lo
k do sistema de 12MHz, a 
ontagem o
orrerá
om um 
lo
k de 1us, uma vez que internamente o T/C divide o 
lo
k do sistema por 12.
A 
ontagem em 8 bits do T/C0 pode gerar tempos de até 256us,superior portanto ao
ne
essário para a geração da onda quadrada de 10KHz que tem um período de 50us, ver
�gura 4.1, a seguir.
Figura 4.1: Onda de 10KHz no pino P1.0
Para se gerar a onda quadrada a 
ada 50us será gerada uma interrupção pelo T/C0 e o
pino P1.0 será 
omplementado na rotina de interrupção usando-se a instrução CPL, indo
de 0 a 1 ou de 1 a 0.
A seguir o 
ódigo do programa:
38
4 Exemplos de Apli
ação
ORG 0 ; INICIO DO CÓDIGO
LJMP INICIO ; DESVIA P/ O INICIO DO PROGRAMA PRINCIPAL
ORG 0BH ; ENDEREÇO DE INICIO DA ROT. INT. DO T/C0
; ********INICIO DA ROTINA DE INTERRUP�O DO T/C0***************************
CPL P1.0 ; GERA�O DA ONDA QUADRADA
RETI ; RETORNO DE INTERRUP�O
ORG 30H ; ENDEREÇO DE INICIO DO PROGRAMA PRINCIPAL
;********INICIO DO PROGRAMA PRINCIPAL*****************************************
INICIO: MOV TMOD,#02H ; T/C0 NO MODO 8 BITS C/ RECARGA AUTOMÁTICA
MOV TH0, #-50 ; VALOR INICIAL DE CONTAGEM É 205 OU -50
SETB TR0 ; DISPARA A CONTAGEM DO T/C0
MOV IE,#82H ; HABILITAS A INTERRUP�O DO T/C0
LOOP: SJMP LOOP ; ESPERA AS INTERRUPÇÕES OCORREREM
END ; FIM DO CÓDIGO
4.2 Controle de Temperatura de um Forno
Neste exemplo um forno elétri
o será 
ontrolado por histerese, entre 100?C e 120?C,
utilizando para isto dois sensores de temperatura 
one
tados aos pinos de interrupção
externa INT0 e INT1. Quando INT0 re
eber o sinal de ativação do sensor de 120?C, o
forno deve ser desligado, uma vez que a temperatura atingiu o valor máximo. Da mesma
forma quando a interrupção INT1 for ativada pelo sensor de 100C, o forno deverá ser
ligado por estar na temperatura limite inferior, ver �gura 4.2, a seguir.
Figura 4.2: Controle da temperatura de um forno entre 100 e 120 graus
O 
ódigo do programa resultante é muito simples, 
omo pode ser 
onstatado na lista-
gem a seguir:
39
4 Exemplos de Apli
ação
ORG 0 ; INICIO DO CÓDIGO
LJMP INICIO ; DESVIA P/ O INICIO DO PROGRAMA PRINCIPAL
ORG 03H ; ENDEREÇO DE INICIO DA ROT. INT. EXTERNA 0
;******** INICIO DA ROT. DA INT. EXTERNA 0**************************************
CLR P1.7 ; DESLIGA O FORNO
RETI ; RETORNO DE INTERRUP�O
ORG 13H ; ENDEREÇO DE INICIO DA ROT. INT. EXTERNA 1
;******** INICIO DA ROT. DA INT. EXTERNA 1**************************************
SETB P1.7 ; LIGA O FORNO
RETI ; RETORNA DA INTERRUP�O
ORG 30H ; ENDEREÇO DE INICIO DO PROGRAMA PRINCIPAL
;******** INICIO DO PROGRAMA PRINCIPAL***************************************
INICIO: MOV IE, #85H ; HABILITAS AS INTERRUPÇÕES EXTERNAS
SETB IT0 ; ATIVA�O DA INT0 NA BORDA DE DESCIDA
SETB IT1 ; ATIVA�O DA INT1 NA BORDA DE DESCIDA
SETB P1.7 ; LIGA O FORNO
JB INT0, LOOP ; VERIFICA SE O SENSOR DE 120
o
C ESTÁ ATIVO
CLR P1.7 ; DESLIGA O FORNO CASO INT0=0
;******** LOOP INFINITO DE ESPERA DAS INTERRUPÇÕES************************
LOOP: SJMP LOOP ; ESPERA AS INTERRUPÇÕES OCORREREM
END ; FIM DO CÓDIGO
Pode-se, 
omo alternativa, elaborar um 
ódigo para o 
ontrole do forno em questão
sem o uso do re
urso de interrupções. Para isto, os bits sinalizadores de ativação dos
pinos de interrupção, IE0 e IE1, lo
alizados no registro TCON (ver item 2.7.3), poderão
ser monitorados, e 
aso alguns destes pinos INT0/INT1 for de 1 para 0, o sinalizador é
setado, e é exe
utada a ação de ligar/desligar o forno, 
onforme já expli
ado.
Embora o 
ódigo gerado usando este enfoque seja mais simple que o anterior que utili-
zava interrupções, este não apresenta a mesma �exibilidade que o primeiro, uma vez que
não permite que outras tarefas possam ser realizadas em paralelo ao monitoramento dos
pinos de interrupção. Veri�
a-se que no 
aso do uso de interrupções, onde o programa
�
a em loop in�nito esperando a o
orrên
ia das interrupções, sem fazer absolutamente
nada de útil, é plenamente possível embutir algum 
ódigo no lugar deste loop in�nito, e
então outras tarefas em paralelo poderão ser exe
utadas.
O 
ódigo que implementa a alternativa de 
ontrole do forno, sem o uso de interrupções
está apresentado na página seguinte.
40
4 Exemplos de Apli
ação
ORG 0000 ; INICIO DO CÓDIGO
SETB P1.7 ; LIGA O FORNO
JB INT0, LOOP ; VERIFICA SE O SENSOR DE 120
o
C ESTÁ ATIVO
CLR P1.7 ; DESLIGA O FORNO
; ********* MONITORAMENTO DA ATIVA�O DE INT0 E INT1 ***********************
LOOP: JB IE0, LIGA ; VERIFICA SE O SENSOR DE 120
o
C ESTÁ ATIVO
JB IE1, DESLIGA ; VERIFICA SE O SENSOR DE 100
o
C ESTÁ ATIVO
SJMP LOOP ; VOLTA A VERIFICAR IE0 E IE1
; ********* ATIVA�O DE INT0: LIGAR O FORNO ************************************
LIGA: SETB P1.7 ; LIGA O FORNO
CLR IE0 ; RESETA IE0
SJMP LOOP ; VOLTA A VERIFICAR IE0 E IE1
; ********* ATIVA�O DE INT1: DESLIGAR O FORNO ********************************
DESLIGA: CLR P1.7 ; DESLIGA O FORNO
CLR IE1 ; RESETA IE1
SJMP LOOP ; VOLTA A VERIFICAR IE0 E IE1
END ; FIM DO CÓDIGO
4.3 Geração de 2 Ondas Quadradas Simultâneas
Neste exemplo serão geradas 2 ondas quadradas simultâneas nos pinos P1.7 e P1.6 de
10KHz e 1KHz, respe
tivamente, 
onforme mostrado na �gura 4.3, a seguir.
Figura 4.3: Geração de duas ondas quadradas simultâneas
Como a onda de 10KHz possui um período de 100us, pela mesma razão apresentada
antes será usado o T/C0 no modo 2, isto 
onsiderando-se um 
lo
k de 12MHz para o
mi
ro
ontrolador.
A 
apa
idade de gerar tempo dos T/C's no modo 2 é de no máximo 256us, ou 0,256mS,
e pelo fato da onda de 1KHz possuir um período de 1ms, o que ex
ede esta 
apa
idade o
T/C1 deverá operar no modo 1, 
om 
ontagem em 16 bits, o que possibilita um tempo
onsideravelmente maior, ou seja de 65.536uS, ou 65,536ms. Mais uma vez as interrupções
serão habilitadas e então geradas para atuar nos pinos P1.6 e P1.7 onde o estado destes
serão 
omplementados para a geração das ondas quadradas.
41
4 Exemplos de Apli
ação
A seguir o 
ódigo do programa:
ORG 0000 ; INICIO DO CÓDIGO
LJMP INICIO ; DESVIA P/ O INICIO DO PROGRAMA PRINCIPAL
ORG 000BH ; ENDEREÇO DE INICIO DA ROT. INT. DO T/C0
LJMP T0INT ; DESVIO P/ CORPO DA ROT. INT. DO T/C0
ORG 001BH ; ENDEREÇO DE INICIO DA ROT. INT. DO T/C1
LJMP T1INT ; DESVIO P/ CORPO DA ROT. INT. DO T/C1
;******** INICIO DO PROGRAMA PRINCIPAL********************************************
ORG 0030H ; ENDEREÇO DE INICIO DO PROGRAMA PRINCIPAL
INICIO: MOV TMOD, #12H ; T/C0: 8BITS AUTORELOAD, E T/C1: 16BITS
MOV TH0, #-50 ; VALOR INICIAL DE CONTAGEM DO
MOV TL0, #-50 ; T/C0 P/ TEMPO DE 50us
MOV TH1,#HIGH(-500) ; VALOR INICIAL DE CONTAGEM DO
MOV TL1,#LOW(-500) ; T/C1 P/ TEMPO DE 500us
SETB TR0 ; INICIA A CONTAGEM DO T/C0
SETB TR1 ; INICIA A CONTAGEM DO T/C1
MOV IE, #8AH ; HABILITA AS INTERRUPÇÕES DOS T/C'S
LOOP: SJMP LOOP ; ESPERA AS INTERRUPÇÕES OCORREREM
;******** INICIO DA ROTINA DE INTERRUP�O DO T/C0******************************
T0INT: CPL P1.7 ; GERA�O DA ONDA QUADRADA
RETI ; RETORNA DA INTERRUP�O
; ********INICIO DA ROTINA DE INTERRUP�O DO T/C1******************************
T1INT: CPL P1.6 ; GERA�O DA ONDA QUADRADA
CLR TR1 ; PARA A CONTAGEM DO T/C1
MOV TH1,#HIGH(-500) ; VALOR INICIAL DE CONTAGEM DO
MOV TL1,#LOW(-500) ; T/C1 P/ TEMPO DE 500us
SETB TR1 ; INICIA CONTAGEM DO T/C1
RETI ; RETORNA DA INTERRUP�O
END ; FIM DO CÓDIGO
4.4 Interfa
e 
om Conversor A/D R2R
Um modo simples e barato de 
onverter valores de uma variável analógi
a para palavras
digitais é utilizar um 
onversor A/D do tipo R2R. A �gura 4.4, ilustra 
omo se imple-
mentar uma interfa
e entre um 8051 e um 
onversor A/D R2R.
Para se efetuar a 
onversão da tensão de entrada analógi
a para uma palavra digital,
neste exemplo se utilizou uma rede R2R 
om resolução de 7 bits, o que resulta em um
degrau de Vm/127, onde Vm é a máxima tensão de entrada.Para determinadas apli
a-
ções esta resolução pode ser pobre, porém para a maioria das apli
ações em 
ontrole de
42
4 Exemplos de Apli
ação
pro
essos tal resolução é mais que su�
iênte. De qualquer forma, 
aso seja ne
essário uma
resolução maior, pode-se utilizar um 
onversor A/D 
omer
ial de 8, 10, ou 12bits. No item
4.5, um destes 
onversores A/D 
omer
ial, o ADC0804, é mostrado sendo interfa
eado
om um 8051.
Figura 4.4: Interfa
e 8051 
om Conversor A/D tipo R2R
A seguir o 
ódigo em assembly da rotina do 
onversor A/D R2R é apresentado.
;******** INICIO DA ROTINA DO CONVERSOR A/D R2R****************************
ADCR2R: MOV P1, #FFH ; INICIALIZA P1.7 COMO ENTRADA
MOV R0, #7FH ; VALOR MÁXIMO DA REDE R2R
REDER2R: MOV P1, R0 ; ENVIA VALOR DE CONTAGEM P/ A REDE
NOP ; ESPERA ALGUM TEMPO P/ ESTABILIZA�O
JBC P1.7,SAIR2R ; VERIFICA SAÍDA DO COMPARADOR LM311
DJNZ R0, REDER2R ; ESPERA ALGUM TEMPO P/ ESTABILIZA�O
SAIR2R: RETI ; RETORNO DE ROTINA
4.5 Interfa
e 
om ADC0804
Aqui um 
onversor A/D do tipo ADC0804 de 8 bits será 
one
tado na porta P1 do 8051,
e o 
omando de ini
io de 
onversão (pino WR do ADC0804) será forne
ido a 
ada 1
segundo, pelo pino P3.0 do 8051. Este sinal em P3.0 (STARTADC) sempre que for de
alto para baixo ini
ia uma nova 
onversão. Após o �nal da 
onversão, o 
onversor envia
um sinal pelo seu pino INTR que está 
one
tado ao pino INT0 do 8051. A rotina da
interrupção externa INT0 por sua vez pro
ede a leitura do ADC0804 enviando o valor
lido para um bu�er 
ir
ular na memória externa (XRAM).
43
4 Exemplos de Apli
ação
A �gura 4.4, a seguir ilustra a 
onexão entre os pinos de dados e 
ontrole do ADC0804
om o 8051.
Figura 4.5: Interfa
e 8051/ADC0804
A seguir é apresentada a listagem do programa expli
ado a
ima, sem a rotina do bu�er
ir
ular implementada. Tal rotina deve ser es
rita de a
ordo 
om as restrições de memória
do sistema implementado.
STARTADC EQU P3.0 ; PINO DE WRITE DO ADC0804
ORG 0000 ; ENDEREÇO DE RESET
LJMP INICIO ; DESVIA P/ INICIO PROGR. PRINCIPAL
;***********INICIO DA ROT. INT. EXT.0**********************************************
MOV A,P1 ; PROCEDE A LEITURA DO ADC
ACALL BUFF_CIRC ; GRAVA NO BUFFER CIRC. DA XRAM
RETI ; RETORNO DE INTERRUP�O
;***********INICIO DA ROT. INT. DO T/C0********************************************
ORG 000BH ; END. INICIO DA ROT. INT. DO T/C0
CLR TR0 ; PARA A CONTAGEM DO T/C0
MOV TH0,#HIGH(-50000) ; VALOR INICIAL DE CONTAGEM
MOV TL0,#LOW(-50000) ; TEMPO DE 50ms EM 12MHz
SETB TR0 ; REINICIA A CONTAGEM
DJNZ R0,SAIDA ; APÓS 20X DE 50ms TEM-SE 1,0s
MOV R0,#20 ; RECARGA DO CONTADOR R0 C/ 20
CLR STARTADC ; STARTADC
SETB STARTADC ; PREPARA SINAL INÍCIO DE CONV.
SAIDA: RETI ; RETORNO DE ROTINA
44
4 Exemplos de Apli
ação
;***********INICIO DO PROG. PRINCIPAL*****************************************
INICIO: SETB STARTADC ; PREPARA O SINAL DE INÍCIO DE CONVERS�O
MOV P1,#0FFH ; CONFIGURA P1 COMO ENTRADA
MOV TMOD,#01H ; T/C0 NO MODO 16BITS P/ GERAR 50ms
SETB IT0 ; INT0 ATIVA NA BORDA DE DESCIDA
MOV IE, #10000011B ; INTERRUPÇÕES INT0 E T/C0 HABILITADAS
MOV R0,#20 ; R0 C/ 20 PERMITE CONTAR 20 X 50ms = 1,0 SEG.
SETB TF0 ; PROVOCA A INTERRUP�O DO T/C0
LOOP: SJMP LOOP ; DESVIA P/ NOVA CONVERS�O
END ; FIM DO CÓDIGO
4.6 Interfa
e 
om LCD Inteligente
O usos de um display de 
ristal líquido (LCD) inteligente em um sistema mi
ro
ontrolado
é uma das formas mais efetivas de prover uma interfa
e homem-máquina de baixo 
usto
e fá
il implementação, sendo portanto utilizado em um grande número de apli
ações.
Os LCD's inteligentes mais populares são os do padrão Hita
h, 
om 1 ou 2 linhas de 16
ara
teres 
ada. Estes 
omponentes 
ontém um 
ir
uito 
ontrolador (HD44780) que ge-
ren
ia a es
rita das mensagens no display, sendo apenas ne
essário que o mi
ro
ontrolador
programe o dispositivo e envie os 
ara
teres da mensagem no padrão ASCII.
A 
onexão do LCD 
om o mi
ro
ontrolador pode ser feita através de 4 ou 8 linhas de
dados (D4...D7 ou D0...D7), além de 3 sinais de 
ontrole: o sinal de habilitação (EN), o
de seleção de es
rita ou leitura (RW), e o sinal de seleção de registro de 
ontrole ou de
dado (RS). A pinagem de um LCD padrão Hita
hi é o seguinte:
Pino Sigla Função
1 GND Terra
2 V
 Alimentação de +5V
3 Pot Terminal 
entral do trimpot
4 RS Register Sele
t - Seleção de Registro
5 RW Read/Write - Sinal de Leitura e Es
rita
6 EN Enable - Sinal de Habilitação
7 D0 Sinal de dados D0 (LSB)
8 D1 Sinal de dados D1
9 D2 Sinal de dados D2
10 D3 Sinal de dados D3
11 D4 Sinal de dados D4
12 D5 Sinal de dados D5
13 D6 Sinal de dados D6
14 D7 Sinal de dados D7 (MSB)
Tabela 4.1: Pinagem do LCD padrão
Os modos de fun
ionamento do LCD devem ser programados através de palavras de
45
4 Exemplos de Apli
ação
ontrole próprias, que permitem 
on�gurar várias 
ara
terísti
as deste, tais 
omo:
• Seleção do modo de entrada de dados em 4 ou 8 bits;
• In
remento automáti
o da posição do 
ursor após es
rita;
• Ligar o LCD/Cursor
• Desligar o LCD/Cursor
• Pis
ar 
ursor.
Para se pro
eder a programação do LCD os sinais RS e RW devem sele
ionar a es
rita no
registro de 
ontrole, e o sinal de habilitação deve ser ativado. Então palavras de 
ontrole
adequadas devem ser es
ritas neste registro, para se programar o modo 
omo o LCD irá
fun
ionar. Dentre estes modos de operação estão os modos de interfa
e em 4 ou 8 bits de
dados, 
ujas palavras de 
ontrole são 28H e 38H, respe
tivamente.
Para maiores detalhes de operação dos LCD's padrão Hita
h, 
onsultar do
umentação
própria do fabri
ante.
4.6.1 Interfa
e 8051/LCD em 8 bits
A seguir será apresentado um programa para es
rita da mensagem �Hello World� no LCD,
ontrolado em 8 bits. O esquema de 
onexão entre o LCD e o 8051 em 8bits é mostrado
na �gura 4.5.
Figura 4.6: Interfa
e 8051/LCD em 8 bits
O 
ódigo que implementa a es
rita da mensgem � Hello World� é apresentado a seguir.
46
4 Exemplos de Apli
ação
;*********DEFINIÇÕES P/ O LCD *****************************************************
EN EQU P3.4 ; ENABLE ATIVO NA BORDA DE DESCIDA
RS EQU P3.2 ; SELE�O REGISTRO: DADO-1, COMANDO-0
RW EQU P3.3 ; READ/WRITE: LEITURA-1, ESCRITA-0
DADO EQU P1 ; LCD CONECTADO NA PORTA P1
CONFIG EQU 38H ; 20H(FUN�O)+10H(8BITS)+08H(2LINHAS)
LCD_ON EQU 0EH ; 0CH(LCD ON)+02H(Cursor ON)
ENTRY EQU 06H ; 06H(DESLOCA A DIREITA A CADA ESCRITA)
CLR_LCD EQU 01H ; LIMPA LCD
;********INICIO DO PROGRAMA PRINCIPAL******************************************
LCALL INICLCD ; INICIALIZA O LCD
LCALL TEXTO ; ENVIA MENSAGEM PARA O LCD
LOOP SJMP LOOP ; LOOP INFINITO
;*********INICIALIZA�O DO LCD ***************************************************
INICLCD: MOV A, #CONFIG ; PREPARA PALAVRA DE CONTROLE DO LCD
LCALL WR_CMD ; ENVIA CONTROLE P/ O LCD
MOV A, #LCD_ON ; PREPARA PALAVRA DE CONTROLE DO LCD
LCALL WR_CMD ; CHAMA ROT. ENVIO DE CONTROLE P/ LCD
MOV A, #ENTRY ; PREPARA PALAVRA DE CONTROLE DO LCD
LCALL WR_CMD ; CHAMA ROT. ENVIO DE CONTROLE P/ LCD
MOV A, #CLR_LCD ; PREPARA PALAVRA DE CONTROLE DO LCD
LCALL WR_CMD ; CHAMA ROT. ENVIO DE CONTROLE P/ LCD
RET ; RETORNO DE ROTINA
;*********ESCREVE CONTROLE NO LCD*********************************************
WR_CMD: SETB EN ; PREPARA SINAL DE ENABLE DO LCD
CLR RS ; SELECIONA REGISTRO DE CONTR. DO LCD
MOV DADO, A ; ENVIA PALAVRA DE CONTROLE P/ O LCD
CLR EN ; ATIVA SINAL DE ENABLE DO LCD
LCALL WAIT5MS ; ESPERA 5MILISEGUNDOS
RET ; RETORNO DE ROTINA
;*********ESCREVA CARACTER NO LCD*********************************************
WR_TEXT: SETB EN ; PREPARA SINAL DE ENABLE
SETB RS

Continue navegando

Outros materiais