Você está na página 1de 90

Mi

ro ontroladores 8051
Prof. Eduardo G. Bertonha (M.S .)

26 de junho de 2007

Departamento A admi o de Eletrni a - DAELN

Universidade Te nolgi a Federal do Paran - UTFPR


Correspondn ia

Prof. Eduardo Giometti Bertonha (MS )

Departamento de Eletrni a

Universidade Te nolgi a Federal do Paran - UTFPR

Av. Sete de Setembro, 3.165 - Curitiba - PR - Cep: 80230-901

Pgina Web:

pessoal. efetpr.br/ebertogna

email: ebertonhautfpr.edu.br

2
Sumrio
1 Introduo 6

1.1 Con eitos Importantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.1.1 Des rio dos Cir uitos de um Sistema Mnimo . . . . . . . . . . . 6

1.1.2 Mi ro ontroladores . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.2 Sistemas Mi ro ontrolados . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2 A Famlia 8051 de Mi ro ontroladores 9

2.1 Cara tersti as Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2 Arquitetura Interna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.3 Pinagem do 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3.1 Des rio dos Pinos . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.4 A esso Memria Externa . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.5 Organizao da Memria do 8051 . . . . . . . . . . . . . . . . . . . . . . . 14

2.5.1 Memria de Programa do 8051 . . . . . . . . . . . . . . . . . . . . 14

2.5.2 Memria de Dados do 8051 . . . . . . . . . . . . . . . . . . . . . . 15

Memria de Dados Externa . . . . . . . . . . . . . . . . . . . . . . 15

Memria de Dados Interna . . . . . . . . . . . . . . . . . . . . . . . 16

Registros de Uso Geral e Pilha . . . . . . . . . . . . . . . . . . . . . 16

Registros de Funes Espe iais . . . . . . . . . . . . . . . . . . . . 17

Registros de Status do 8051 - PSW . . . . . . . . . . . . . . . . . . 18

2.6 Portas de Entrada e Sada do 8051 . . . . . . . . . . . . . . . . . . . . . . 19

2.7 Interrupes no 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.7.1 Registro de Habilitao de Interrupes - IE . . . . . . . . . . . . . 21

2.7.2 Registro de Controle de Prioridade de Interrupo - IP . . . . . . . 22

2.7.3 Ativao das Interrupes Externas por Borda ou Nvel - 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
Sumrio

T/C no Modo 1 - Contagem em 16 bits . . . . . . . . . . . . . . . . 25

T/C no Modo 2 - Contagem em 8 bits om Re arga Automti 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 Varivel . . . . . 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 Varivel . . . . . 28

2.9.2 Tabela de Refern ia p/ Programar o Baud Rate . . . . . . . . . . 28

2.10 Modos de Baixo Consumo . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.10.1 Registro de Controle de Potn ia - PCON . . . . . . . . . . . . . . 29

2.10.2 Modo Idle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.10.3 Modo Power-Down . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3 Programao em Assembly do 8051 31

3.1 Conjunto de Instrues do 8051 . . . . . . . . . . . . . . . . . . . . . . . . 31

3.1.1 Modos de Endereamento . . . . . . . . . . . . . . . . . . . . . . . 31

Endereamento Direto . . . . . . . . . . . . . . . . . . . . . . . . . 32

Endereamento Indireto . . . . . . . . . . . . . . . . . . . . . . . . 32

Endereamento via Registrador . . . . . . . . . . . . . . . . . . . . 32

Constante Imediata . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Endereamento Indexado . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2 Estudo das Instrues do 8051 . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2.1 Transfern ia de Dados . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.2.2 Instrues Aritmti as . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.2.3 Instrues Lgi as . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.2.4 Booleanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.2.5 Desvio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

4 Exemplos de Apli ao 38

4.1 Gerao de Onda Quadrada . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4.2 Controle de Temperatura de um Forno . . . . . . . . . . . . . . . . . . . . 39

4.3 Gerao de 2 Ondas Quadradas Simultneas . . . . . . . . . . . . . . . . . 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
Sumrio

4.6.3 Interfa e 8051/LCD / Registrador de Deslo amento . . . . . . . . 52

4.6.4 Interfa e 8051/LCD Mapeado em Memria . . . . . . . . . . . . . . 55

4.7 Interfa e 8051 om Te lado Matri ial . . . . . . . . . . . . . . . . . . . . . 58

4.8 Interfa e om Motor de Passo Unipolar . . . . . . . . . . . . . . . . . . . . 65

4.9 Expanso das Interrupes Externas . . . . . . . . . . . . . . . . . . . . . 67

4.10 Envio de Dados via Canal Serial . . . . . . . . . . . . . . . . . . . . . . . . 69

4.11 Rotina de Gerao 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 Criao de um Projeto no uVision2 . . . . . . . . . . . . . . . . . . . . . . 76

5
1 Introduo
1.1 Con eitos Importantes
O diagrama em blo os da gura 1.1, abaixo ilustra um sistema mnimo mi ropro essado,

om seus blo os onstituintes, os quais sero des ritos na sequn ia.

Figura 1.1: Sistema Mi ropro essado Mnimo

1.1.1 Des rio dos Cir uitos de um Sistema Mnimo

Mi ropro essador: Responsvel pelo ontrole de todas as operaes do sistema,

e exe uo de instrues do programa gravado na memria de programa. Estas

instrues podem estar rela ionadas om operaes lgi as, aritmti as, de a esso

as portas de entrada e sada do sistema, e a esso a memria de dados ou programa.

Tambm hamada de CPU (Central Pro essing Unit).

Memria de Programa: nesta memria do tipo no voltil (ou seja do tipo ROM,

EPROM, ou FLASH) que o programa a ser exe utado pelo mi ropro essador  a ar-

mazenado. Este programa, gravado em memria no voltil, hamado de rmware.

Memria de Dados: nesta memria do tipo voltil (RAM) que os dados a serem

pro essados  am temporariamente armazenados. Estes dados podem ser proveni-

6
1 Introduo

entes das portas de entrada, por exemplo um te lado, ou ento podem ser gerados

atravs de operaes lgi as ou aritmti as om outros dados.

Cir uito de Clo k: Responsvel pelo forne imento de um sinal de lo k ou relgio

para que o Mi ropro essador possa operar.

Cir uito de Power-On/Reset: Responsvel pelo forne imento de um sinal de RESET

para que a CPU possa ini ializar seus registros internos, e omear a exe utar as

instrues do rmware.

Cir uito de Seleo: Responsvel pelo forne imento dos sinais de seleo, e habili-

tao para as memrias de dados (RAM), para as memrias de programa (ROM) e

para as portas de entrada e sada. Sempre de onformidade om as instrues que

esto sendo exe utadas pela CPU.

Bus de Dados: Representam as linhas de dados que interligam a CPU as portas de

entrada e sada, e as memrias. Este onjunto de linhas so bidire ionais, e a CPU

as utiliza para leitura ou es rita em dispositivos de E/S ou memrias.

Bus de Endereos: Representam as linhas de endereos que interligam a CPU as

memrias e ao ir uito de seleo. Este onjunto de linhas so unidire ionais, e a

CPU que forne e endereos em resposta as instrues do rmware.

Bus de Controle: Representam as linhas de ontrole que interligam a CPU as mem-

rias, perifri os, e ao ir uito de seleo, e a CPU sempre forne e sinais de ontrole,

em resposta as instrues do rmware.

1.1.2 Mi ro ontroladores

Em um sistema mnimo, omo mostrado na gura 1.1, muitos ir uitos so ne essrios,

o que o torna de dif il implementao, om muitas inter onexes entre os vrios 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 omputao

omplexo no h maneira de evitar estas di uldades, e o usto benef io razovel.

Porm, quando se deseja implementar um sistema simples, om a nalidade de apenas

ontrolar uma mquina, por exemplo: uma mquina de lavar roupa, um sistema mnimo

omo o mostrado a ima se mostra mximo, gerando pla as de ir uito impresso grandes e

om muitos omponentes, in ompatvel om a apli ao destinada. Para solu ionar este

problema existe uma outra lasse de dispositivos que substitui o sistema mnimo anterior,

hamam-se Mi ro ontroladores.

Os mi ro ontroladores so sistemas mi ropro essados en apusulados na forma de um

ni o ir uito integrado. Eles so produzidos de forma a ofere er uma variedade muito

grande de dispositivos, o que ara teriza uma famlia de dispositivos, alguns deles sendo

7
1 Introduo

de fato um sistema mnimo, om o mnimo ne essrio em termos de memria, e portas de

E/S, e perifri os, outros porm, in orporam perifri os sosti ados, e j no podem ser

hamados de sistemas mnimos.

Existem vrias famlias de mi ro ontroladores omer iais, entre eles os mais importantes

so:

Famlia 8051 - Originalmente produzido pela INTEL, om inmeros fabri antes,

omo Texas, Philips, Dallas, Atmel, et .

Famlia 68HC - Produzido pela Motorola

Famlia PIC - Produzido pela Mi ro hip

Famlia 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 implementao de sistemas das mais variadas apli aes, omo sistemas de ontrole

de dispositivos e mquinas, sistemas de automao de pro essos, sistemas de aquisio e

pro essamento de dados, s para itar algumas possveis apli aes.

Esta fa ilidade se baseia, omo j dissemos, no fato de muitos ir uitos ne essrios para

o fun ionamento de um sistema mi ropro essado j estar integrado dentro do mi ro on-

trolador, simpli ando em muito a onstruo 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 famlia 8051, por ser o mais popular, e por

ofere er mais re ursos em termos de desenvolvimento de prottipos, omo ambientes de

desenvolvimento integrado (IDE), kits de desenvolvimento baratos, grande disponibilidade

de dispositivos no mer ado na ional, e obviamente o usto atrativo. Alm disto, existe

uma grande profuso de informaes a respeito desta famlia na internet, e muitos ttulos

de livros publi ados.

8
2 A Famlia 8051 de
Mi ro ontroladores
2.1 Cara tersti as Gerais
A famlia 8051 onstituda de uma srie grande de dispositivos, de vrios fabri antes im-

portantes, apresentando estes ara tersti as diversas, om um grande nmero de opes

de es olha, e todos ompatveis em termos de software.

Os elementos da famlia 8051 podem trazer (dependendo do dispositivo em questo)

integrados em um ni o hip os seguintes ir uitos:

CPU de 8 bits;

Memria SRAM interna de 128 ou 256 bytes;

Memria OTPROM/EPROM/Flash interna de 4K a 16K bytes;

Memria EEPROM;

Cir uito de Clo k;

2 Interrupes externas;

32 Pinos de E/S, ou seja: 4 Portas de 8 bits de entrada e sada (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 ...

Alm disto a maioria deles pode enderear at 64KB de RAM externa e at 64KB de

ROM/EPROM externa. Podem operar a freqn ias de lo k de at 33MHz, e operar em

modo de baixo onsumo (Power Down), alm 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 esto sumarizados alguns dispositivos populares da famlia 8051,

dentre eles dispositivos de 40 e 20 pinos, om e sem memria de programa interna:

9
2 A Famlia 8051 de Mi ro ontroladores

Modelo Cara tersti 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, operao estti 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, operao estti a de 0 a 33MHz

AT89S53 256B de RAM, 3Timer/Counter, 1Serial, 12KB Flash ISP, 32 Pinos de E/S,

Wat hdog, SPI, operao estti 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: Famlia 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 bastante simples, se observa

os ir uitos prin ipais omo a ULA, as memrias de dados (SRAM) e de programa

(ROM/EPROM/Flash), as 4 portas de 8 bits, os 2 temporizadores/ ontadores, e o a-

nal serial. No apare em neste diagrama o os ilador interno, ir uito de Reset, e blo os

adi ionais presentes em alguns modelos mais sosti ados, omo memria EEPROM, SPI,

Wat hdog, Conversores A/D, PWM, et .

10
2 A Famlia 8051 de Mi ro ontroladores

Figura 2.1: Arquitetura Interna 8051

2.3 Pinagem do 8051


A pinagem dos elemento da famlia 8051 de 40 e 20 pinos pode ser vista na gura 2.2, a

seguir.

Figura 2.2: Pinagem do 8051

11
2 A Famlia 8051 de Mi ro ontroladores

2.3.1 Des rio dos Pinos

V - Tenso de Alimentao
GND - Refern ia de Terra

PO.0...P0.7 - Porta de 8 bits bidire ional de entrada e sada, em dreno aberto. Quanto 1's
so es ritos nestes pinos estes estaro em tri-state e podero ser usados omo entradas em
alta impedn ia. Alm disto a porta 0 tem a funo alternativa de multiplexar dados om
o byte inferior de endereos durante o a esso memria externa de dados ou programa.

P1.0...P1.7 - Porta de 8 bits bidire ional de entrada e sada, apresentando resistores


de pull-up internos. Quanto 1's so es ritos nestes pinos estes podero ser usados omo
entrada, e quando levados a zero pelo dispositivo externo o pino forne er orrente atravs
dos resistores de pull-up.

P2.0...P2.7 - Porta de 8 bits bidire ional de entrada e sada, apresentando resistores


de pull-up internos. Quanto 1's so es ritos nestes pinos estes podero ser usados omo
entrada, e quando levados a zero pelo dispositivo externo o pino forne er orrente atravs
dos resistores de pull-up. Alm disto a porta 2 tem a funo alternativa de forne er o byte
superior de endereos durante o a esso memria externa de dados ou programa.

P3.0...P3.7 - Porta de 8 bits bidire ional de entrada e sada, apresentando resistores


de pull-up internos. Quanto 1's so es ritos nestes pinos estes podero ser usados omo
entrada, e quando levados a zero pelo dispositivo externo o pino forne er orrente atravs
dos resistores de pull-up. Estes pinos ofere em funes alternativas, onforme a seguir:

RXD P3.0 Entrada de dados seriais na re epo serial

TXD P3.1 Sada de dados seriais na transmisso serial

INTO P3.2 Entrada de interrupo externa 0

INT1 P3.3 Entrada de interrupo 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 Sada do sinal de es rita em memria externa

RD P3.7 Sada do sinal de leitura em memria externa

RESET - Entrada de Reset ativo em alto, devendo permane er em pelo menos 2 i los de
mquina (24 i los de lo k). Para um Reset de Ini ializao (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 - Sada do ampli ador inversor do os ilador interno.

ALE - Sada de habilitao do registro de demultiplexao externo usado para demulti-


plexar dados e endereos na porta P0.

12
2 A Famlia 8051 de Mi ro ontroladores

PSEN - Sada de habilitao da memria de programa externa.


EA - Sada de seleo de a esso memria externa ou interna.

2.4 A esso Memria Externa


Como mensionado antes, o 8051 apaz de enderear at 64 KB de memria RAM externa,

alm de at mais 64 KB de memria ROM externa. Quando o sistema mi ro ontrolado

zer uso de alguma memria externa as portas P0 e P2 estaro exer endo a segunda

funo asso iada a elas, qual seja o interfa eamento om estas memrias RAM e ROM

externas, onforme a gura 2.3 abaixo.

Figura 2.3: Memria Externa

Neste aso a porta P0 ser usada omo barramento de dados / endereos multiplexados,

e seus pinos sero designados agora omo AD0-AD7, transferindo dados e forne endo, de

forma multiplexada om estes, o byte inferior de endereo. A porta P2, por sua vez,

forne er o byte superior de endereos A8-A15, simultneamente ao forne imento do byte

inferior pela porta P0. Os sinais de ontrole de leitura e es rita RD\ e WR\, so forne idos

por dois pinos da porta P3, e o sinal que permite ao hardware sele ionar a memria ROM

de programa em lugar da RAM o sinal de ontrole hamado PSEN\ (Program Status

Enable). Outro sinal do 8051 envolvido no a esso memria externa o sinal ALE

(Address Lat h Enable) que responsvel pelo travamento do byte A0-A7 de endereo no

lat h olo ado entre a porta P0 e as linhas de endereos da memria, pro esso este que

o orre quando da demultilpexao de dados e endereos atravs da porta P0.

13
2 A Famlia 8051 de Mi ro ontroladores

2.5 Organizao da Memria do 8051


Os elementos da famlia 8051 om memria de programa interna, que so a grande maioria,

tem apa idades variadas de memria do tipo OTPROM, EPROM, ou Flash, que vo

desde 4KB at 32KB em alguns elementos, mas na maioria dos dispositivos esta ser de

4KB do tipo Flash.

Em termos de memria de dados, tipi amente, os elementos da famlia 8051 ontm

128B ou 256B de SRAM.

Quanto memria externa, podem enderear at 64KB de memria de programa, e

64KB de memria de dados, omo expli ado no item 2.4.

2.5.1 Memria de Programa do 8051

Em relao memria de programa, o primeiro aso a se onsiderar aquele no qual o

mi ro ontrolador da famlia 8051 ofere e o re urso de ROM/EPROM/Flash interna, om

a apa idade de 4KB.

Considerando a ondio a ima, esta memria ser a essada aso o pino EA\ (External

A ess) esteja em nvel lgi o alto, ou seja desativado. Caso se deseje, alm destes 4KB

de memria de programa interna, pode-se estender o espao de endereamento para at

64KB, os 60KB adi ionais sero a essados da memria de programa externa. A exe uo

do programa pelo mi ro ontrolador ini iar na posio zero da ROM interna.

Figura 2.4: Memria de Programa Interna do 8051

O segundo aso, aquele em que o mi ro ontrolador no possui memria 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 memria de programa ser sempre externo. Mesmo

que o mi ro ontrolador possua memria de programa interna esta no ser a essada, e

14
2 A Famlia 8051 de Mi ro ontroladores

sua presena ser ignorada, sendo a exe uo do programa ini iada na posio zero da

ROM externa.

Figura 2.5: Memria de Programa Externa do 8051

2.5.2 Memria de Dados do 8051

A memria de dados do 8051 se onstitui de memria SRAM interna, om apa idade de

128 ou 256 bytes, e SRAM externa de at 64KB, esta quando existente.

Memria de Dados Externa

Na gura a seguir est ilustrado a memria de dados externa, eviden iando-se o a esso

de at 64KB atravs dos pinos de RD e WR, P3.6 e P3.7.

Figura 2.6: Memria de Dados Externa do 8051

15
2 A Famlia 8051 de Mi ro ontroladores

Os a essos SRAM interna e externa so efetuadas atravs de instrues diferentes,

sendo este o diferen ial entre os dois tipos de a essos. Por exemplo a instruo MOV

usada para leitura/es rita da SRAM interna, enquanto a instruo MOVX a ontrapar-

tida relativa a memria SRAM externa, maiores detalhes destas instrues sero vistas

no aptulo 3, no item 3.2.1.

Memria de Dados Interna

Os a essos SRAM interna do 8051 podem ter diferentes ara tersti as dependendo da

regio desta que est sendo a essada. Na regio da SRAM interna ompreendida entre

os endereos 0 e 127, est a rea dos Registros de Uso Geral e Pilha, enquanto a rea de

128 a 255 onde esto lo alizados os Registros de Funes Espe iais, ver gura 2.7 a seguir.

Figura 2.7: Memria 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 funo

de alo ar as variveis do programa, e a pilha, est dividida em seis segmentos diferentes,

identi ados na gura 2.8. Como pode ser notado desta gura, as regies ompreendem

os quatro ban os de registros: ban o 0 a ban o 3, regio bit e byte enderevel, e regio

somente byte enderevel. Cada uma destas regies 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 seleo do ban o feita atravs 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 instrues prov uma instruo om um byte a

menos j que um dos operandos j est espe i ado na instruo.

Como exemplo a instruo:

MOV R0, A; move para o registro R0 o ontedo do a umulador.

16
2 A Famlia 8051 de Mi ro ontroladores

Alm disto em algumas instrues o registro poder onter o endereo do dado, da

resultando em um tipo de a esso indireto via registrador.

Como exemplo a instruo:

MOV R0, A; move para o endereo apontado por R0 o ontedo de A

A outra faixa de endereos de 20H a 7FH (32 a 127) se ara teriza por a esso via

espe i ao do endereo, ou seja sem o uso dos registros R0...R7, sendo que o endereo

na SRAM diretamente olo ado na instruo. Cabe ainda ressaltar que a regio entre

os endereos 20H e 2FH tem omo ara tersti a espe ial a possibilidade de se enderear

um bit qualquer dentro deste espao.

Figura 2.8: Registros de Uso Geral e Pilha

Registros de Funes Espe iais

Os a essos RAM interna do 8051 na faixa de 128 a 255, a essam os registros de funes

espe iais, que esto asso iados aos diversos registros asso iados aos vrios re ursos do

8051 tais omo: portas de entrada e sada, ontadores/temporizadores, interfa e serial,

ontrole de interrupo, et ., ver tabela 2.2.

O onhe imento da estrutura de ada um destes registro de suma importn ia, visto

que permite programar os vrios perifri os omo anal serial, temporizadores/ ontadores,

ontrolar ara tersti as da CPU omo modos de baixo onsumo, interrupes, e a essar as

17
2 A Famlia 8051 de Mi ro ontroladores

portas de entrada e sada. Assim aps apresentar a lista de registros de funes espe iais,

eles sero dis utidos, um a um, nos itens que se seguem.

Endereo Registro de Funo 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 Buer - 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 Funes 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 orrn ia de

ondies 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 orrn ia de um Carry (vai-um);

bit A : Setado indi a a o orrn ia de um Carry Auxiliar em operao BCD;

bit F0: Bit disponvel para uso geral;

bit RS1: Juntamente om RS0 permite odi ar o ban o de registros no qual os

registros R0 a R7 estaro alo ados;

18
2 A Famlia 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 estaro alo ados;

bit OV: Setado indi a a o orrn ia de um overow em operaes om nmeros

sinalizados

bit P: Indi a a paridade do a umulador

2.6 Portas de Entrada e Sada 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 so onstituidos basi amente de um

lat h (ip-op tipo D), dois buers tri-state, e um driver de sada. Para se levar um

pino de sada de uma porta a nvel lgi o 1 ou 0, as instrues exe utam uma es rita no

lat h, que ontrola o fet do driver de sada atravs do sinal de sada Q omplementada,

obviamente que quando o fet de sada est em ON o pino apresentar nvel lgi o 0 na

sada, e em OFF, nvel lgi 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, atravs do buer inferior na gura, o outro omanda a leitura do lat h,

atravs do buer superior da gura. Con lui-se ento, que existem instrues que no

lem o pino, mas ao invs disto lem a sada do lat h, e um uidado adi ional deve ser

tomado quando se usar tais instrues. Como regra as instrues que exe utam a sequn-

ia L-Modi a-Es reve, so aquelas que lem o lat h ao invs do pino, exemplos de tais

isntrues so:

19
2 A Famlia 8051 de Mi ro ontroladores

ANL ; E lgi o, ex: ANL P1,A SETB Pn.i ; Seta Pn.i, ex: SETB P2.3

ORL ; OU lgi 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 lgi 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 instrues do 8051 ser visto no aptulo 3, portanto o leitor

no deve se preo upar em entender plenamente as instrues a ima apresentadas.

A razo de existir instrues que lem o pino da porta, enquanto outras lem o lat h,

para que no haja uma falsa interpretao da tenso 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, porm, se efetuada uma leitura posterior neste pino o

mesmo apresentar a tenso de base do transistor saturado, o que ser interpretado omo

nvel lgi 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 sada, one tados, por exemplo, dispositivos simples

omo haves e leds, omo tambm podem ser usadas omo barramentos de 8 bits, e inter-

fa ear dispositivos perifri os omo displays inteligentes, onversores A/D, e D/A. Deve-se

lembrar, porm, que as portas P0 e P2  am destinadas a gerao de endereos A0...A7

em P0, e A8...A15 em P2, quando a essando memria externa, e a porta P3 apresenta

seus pinos dotados de funes alternativas, ento ertos pinos podero estar indisponveis

em alguma apli ao parti ular.

Uma parti ularidade que a porta P0 apresenta sua sada ongurada omo dreno

aberto, ao ontrrio demais portas que apresentam o pull-up interno. Esta ara tersti a

faz om que a porta tenha seus pinos utuando quando em aberto. Como onsequn ia

deste fato, a porta P0 poder drenar at 8 argas TTL, ao ontrrio das demais portas

que suportam uma arga mxima 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 sada em OFF, ento 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 regio dos Registros de Funes

Espe iais da memria SRAM interna, om endereos espe  os que podem ser referidos

nas instrues (ver tabela 2.2), porm mais onveninte se referir ao nome da porta

nestas instrues, o que assegura uma maior legibilidade ao digo fonte. Por exemplo a

instruo:

MOV A, P1 ; L a porta P1 e guarda o valor lido no a umulador.

Cabe tambm lembrar, que os bits das portas tem endereos espe  os, uma vez que

esto em uma regio de memria bit enderevel. Portanto, quando se deseja a essar um

20
2 A Famlia 8051 de Mi ro ontroladores

bit de uma porta, pode-se referir ao endereo deste bit, ou usar a notao 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 Interrupes no 8051


So 5 fontes distintas de interrupes no 8051, sendo duas externas, geradas a partir dos

pinos INT0 e INT1 da porta 3, e trs internas, geradas pelos temporizadores/ ontadores

e interfa e serial. Os vetores de interrupo, ou seja o endereo de desvio para estas 5

fontes so xos, sendo apresentados na tabela 2.3.

Fonte Cara tersti as Prin ipais Endereo


de desvio
INT0 Interrupo externa gerada pelo pino P3.2 da porta P3, ativo baixo. 0003H

INT1 Interrupo externa gerada pelo pino P3.3 da porta P3, ativo baixo. 0013H

T/C0 Interrupo do Temporizador/Contador0 gerada quando o ontador 000BH

atinge o mximo valor de ontagem, e o bit TF0 setado.

T/C1 Interrupo do Temporizador/Contador1 gerada quando o ontador 001BH

atinge o mximo valor de ontagem e o bit TF1 setado.

Serial Canal Serial. A interrupo o orre quando o buer do anal serial 0023H

est vazio na transmisso, ou heio na re epo.

Tabela 2.3: Fontes de Interrupo do 8051

A es ala de prioridades de atendimento da interrupo existente entre as vrias fontes

a seguinte:

INT0 > T/C0 > INT1 > T/C1 > Serial

2.7.1 Registro de Habilitao de Interrupes - IE

atravs deste registro de 8 bits que se pode sele ionar a habilitar/desabilitar as inter-

rupes individualmente. O formato do registro o apresentado a seguir:

EA   ES ET1 EX1 ET0 EX0

bit EA: Setado permite habilitar as fontes de interrupo que forem individualmente

sele ionadas atravs dos bits ES, ET1, EX1, ET0, e EX0. Resetado desabilita toda

e qualquer interrupo de ser gerada;

bit ES: Setado permite sele ionar a interrupo da interfa e serial para ser usada

quando EA for setado;

21
2 A Famlia 8051 de Mi ro ontroladores

bit ET1: Setado permite sele ionar a interrupo do temporizador/ ontador1 para

ser usada quando EA for setado;

bit EX1: Setado permite sele ionar a interrupo externa 1 para ser usada quando

EA for setado;

bit ET0: Setado permite sele ionar a interrupo do temporizador/ ontador0 para

ser usada quando EA for setado;

bit EX0: Setado permite sele ionar a interrupo externa 0 para ser usada quando

EA for setado.

Como exemplo, se fosse ne essrio habilitar as duas interrupes externas, o registro IE

deveria ter os bits EX0, EX1, e EA setados, assim a instruo a seguir poderia ser usado

para tal:

MOV IE, #10000101B

Ou ainda, as trs 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 Interrupo - IP

atravs deste registro de 8 bits que se pode modi ar as prioridades de atendimento

das interrupes. O formato do registro o apresentado a seguir:

   PS PT1 PX1 PT0 PX0

bit PS: Setado permite que a interrupo do anal serial tenha a mais alta priori-

dade de atendimento. Resetado mantm a ordem de prioridade de atendimento da

interrupo do anal serial inalterada;

bit PT1: Setado permite sele ionar a interrupo do temporizador/ ontador1 para

ser a de mais alta prioridade. Resetado mantm a ordem de prioridade de atendi-

mento da interrupo do temporizador/ ontador 1 inalterada;

bit PX1: Setado permite sele ionar a interrupo externa 1 para ser a de mais alta

prioridade. Resetado mantm a ordem de prioridade de atendimento da interrupo

externa 1 inalterada;

22
2 A Famlia 8051 de Mi ro ontroladores

bit PT0: Setado permite sele ionar a interrupo do temporizador/ ontador0 para

a de mais alta prioridade. Resetado mantm a ordem de prioridade de atendimento

da interrupo do temporizador/ ontador0 inalterada;

bit PX0: Setado permite sele ionar a interrupo externa 0 para ser a de mais alta

prioridade. Resetado mantm a ordem de prioridade de atendimento da interrupo

externa 0 inalterada.

2.7.3 Ativao das Interrupes Externas por Borda ou Nvel -

Bits IT0 e IT1 do Registro TCON

As interrupes externas INT0 e INT1 podem ser ativadas tanto por nvel quanto por

borda de des ida, e esta seleo pode ser feita atravs 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 interrupo atendida;

bit IT1: Setado permite sele ionar a ativao da interrupo externa 1 por borda

de des ida do sinal presente no pino INT1. Resetado sele iona a ativao de INT1

por nvel;

bit IE0: Setado por hardware quando o pino INT0 vai de alto para baixo. Resetado

quando a interrupo atendida;

bit IT0: Setado permite sele ionar a ativao da interrupo externa 0 por borda

de des ida do sinal presente no pino INT0. Resetado sele iona a ativao de INT0

por nvel.

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 Famlia 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 so 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 funo 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 vrios

registros so 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, so usados para a arga

dos valores ini iais de ontagem dos T/C's, sendo sempre de forma res ente at o valor

mximo, 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. Aps este valor mximo de

ontagem ter sido atingido o sinalizador TF0 ou TF1 setado indi ando esta o orrn ia,

e aso a interrupo asso iada ao T/C em questo esteja habilitada, uma interrupo

gerada.

2.8.2 Registro de Controle dos T/C's - TCON

Este registro de 8 bits, mostrado abaixo, usado para ontrolar a operao dos T/C's,

e para isto somente os 4 bits mais signi ativos so usados para esta funo, ver gura

abaixo, e des rio dos bits a seguir desta.

24
2 A Famlia 8051 de Mi ro ontroladores

TF1 TR1 TF0 TR0    

bit TF1 ou TF0: Setado por hardware sempre que o T/C em questo atingiu o valor

mximo de ontagem e o orreu um timer overow. 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 operao

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 atravs do bit TRn (Gn - Resetado), ou atravs do bit

TRn e do pino INT1 (Gn - Setado);

bit T/C0 ou T/C1: Usado para sele ionar a operao 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 funo sele ionar um

dentre quatro modos de operao dos T/C's, a saber:

M1 M0 Modo - Cara tersti 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 automti 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 mximo valor de ontagem de 255. O registro

TH0 ou TH1, neste modo forne e uma pr diviso (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 so vistos omo um ni o registro de 16 bits, sendo a ontagem implementada

neste par de registros, e o valor mximo de ontagem de 65.535 ou FFFFH.

25
2 A Famlia 8051 de Mi ro ontroladores

T/C no Modo 2 - Contagem em 8 bits om Re arga Automti 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 mximo 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 essrio a interrupo do T/C1. O

outro registro do T/C0, o TL0 poder fun ionar omo um temporizador adi ional de 8

bits usando a interrupo do T/C0.

2.9 Canal Serial do 8051


A interfa e serial do 8051 pode ser usada de 4 modos diferentes, om operaes do tipo

sn rona, assn rona, om taxas de transmisso xa, ou varivel. Os registros asso iados

a programao do anal serial so os seguintes: SBUF - Buer do Canal Serial, e SCON

- Controle do Canal Serial. Estes registros so des ritos mais a diante.

Uma transmisso 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 epo para ser habilitada dever ter o bit REN - Re epo Habilitada, do registro

de ontrole SCON, setado e os bits quando re ebidos pelo pino RXD da porta P3 sero

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 operao

do temporizador/ ontador onforme des rito a seguir:

SM0 SM1 SM2 REN TB8 RB8 TI RI

bits TI e RI: Requisio de transmisso/re epo setado por hardware sempre que

uma transmisso/re epo for ini iada, e resetado por software;

bits TB8 e RB8: So usados para insero de bits de ontrole pelo usurio, tais

omo paridade , ags, et ;

bit REN: Habilitao da re epo atravs do anal serial;

26
2 A Famlia 8051 de Mi ro ontroladores

bits SM0 / SM1: Estes dois bits tem omo funo sele ionar um dentre quatro

modos de operao do Canal Serial. Ver tabela a seguir.

bit SM2: Habilita Comuni ao Mutipro essador, nos modos 2 e 3. RI no ser



ativado se o 9 bit zero.

SM1 SM0 Modo do Canal Serial - Cara tersti as


0 0 0 - Registrador de Deslo amento - Taxa Fixa = F lk/12
1 0 1 - UART de 8 bits e Taxa Varivel
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 Varivel

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 atravs do pino RXD, e no pino TXD o

lo k enviado. Neste aso, os termos RXD e TXD no 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 transmisso de dados. A transmisso ini iada sempre que se es reve no registro

SBUF. E a re epo quando o bit REN do registro SCON setado, e o ag de re epo

RI resetado.

Figura 2.11: Canal Serial no Modo 0

Modo 1 do Canal Serial - UART de 8 bits e Taxa Varivel

Neste modo o anal serial olo ado no modo Re eptor/Transmissor Universal Assn rono

(UART), onde o dado om 8 bits seriais so pre edidos por um start bit em nvel baixo,

e seguido por um stop bit em nvel alto. O stop bit opiado no bit RB8 do SCON na

re epo que tem in io quando o start bit re ebido no pino RXD sendo sensvel a borda

de des ida. A taxa de transmisso programada atravs da taxa de overow do Timer 1.

Figura 2.12: Canal Serial no Modo 1

27
2 A Famlia 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 so pre edidos por um start bit em nvel baixo, e seguido por um stop bit em

nvel alto. Quando da re epo o bit RB8 do SCON reservado para re eber o nono bit

da palavra de dado, ao invs de re eber o stop bit omo no modo 1. Na transmisso 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 Varivel

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 transmisso programada pelo timer 1, omo no

modo 1.

2.9.2 Tabela de Refern ia p/ Programar o Baud Rate

A tabela a seguir poder ser usada na programao do Canal Serial para a gerao de

taxas de transmisso (Baud Rate) tpi 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 so 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 Refern ia para Baud Rate

28
2 A Famlia 8051 de Mi ro ontroladores

O exemplo de apli ao 4.10 ilustra a programao do anal serial em 9600bps onde as

letras de 'a' at 'z' so enviadas onse utivamente e de forma ontnua para um mi ro-

omputador PC.

2.10 Modos de Baixo Consumo


Quando um sistema mi ro ontrolado tem omo requisito bsi o o baixo onsumo de ener-

gia, por exemplo, no aso de equipamentos portteis e alimentados por baterias, pode-se

ontar om os dispositivos da famlia 8051 om te nologia CMOS, que ofere em dois mo-

dos de operao de baixo onsumo: o modo Idle e o modo Power-Down, programados

pelos bits de ontrole IDL e PD, do registro de ontrole de potn ia PCON, mostrado a

seguir.

2.10.1 Registro de Controle de Potn ia - PCON

Este registro de 8 bits, mostrado abaixo, usado para sele ionar os modos de operao 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, alm de dois bits de sinalizao de uso geral GF0

e GF1, onforme des rito a seguir:

SMOD - - - GF1 GF0 PD IDL

bit GF0 ou GF1: Usado para sinalizao de uso geral;

bit SMOD: Usado pelo anal serial, ver item 2.9;

bits PD e IDL: Estes dois bits tem omo funo sele ionar o modo de operao em

baixo onsumo: Power-Down e Idle, des ritos a seguir.

2.10.2 Modo Idle

Neste modo de operao, que pode ser ativado setando-se o bit de ontrole IDL, lo alizado

no registro de funo espe ial de Controle de Potn ia - PCON, o dispositivo bloqueia o

forne imento do sinal de lo k para os ir uitos da UCP, porm os ir uitos de Interrupo,

Temporizadores/Contadores, e Porta Serial ontinuam a re eber este sinal.

Quando o mi ro ontrolador entra no modo Idle, aps a instruo que seta o bit IDL, o

status da UCP mantido omo estava antes da exe uo desta instruo, e os registros

de status PSW, o ontador de programa PC, apontador de pilha SP, alm do a umulador

A, e demais registros se mantero inalterados. Alm 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: atravs

de uma interrupo prviamente habilitada, ou atravs de um reset, que onsequentemente

reseta o bit IDL.

29
2 A Famlia 8051 de Mi ro ontroladores

No primeiro aso, onde uma interrupo gerada, o bit IDL automati amente resetado

quando do atendimento da interrupo, e aps a rotina ter sido exe utada, retornando

atravs de uma instruo RETI, o programa segue o uxo exe utando a instruo que

vem logo aps 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 uo pela UCP, da mesma forma

que no aso anterior, segue o uxo exe utando a instruo que vem logo aps aquela que

olo ou o mi ro ontrolador no modo Idle. Como sero gastos de 2 a 3 i los de mquina

para o mi ro ontrolador sair do modo Idle, o que orresponde ao tempo de exe uo do

algoritmo de reset interno, este tempo deve ser o upado por 3 instrues NOP para evitar

que possa surgir resultados errti 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, tambm

lo alizado no registro PCON

30
3 Programao em Assembly do
8051
3.1 Conjunto de Instrues do 8051
A ttulo de estudo, as instrues do 8051 podem ser lassi adas em 5 tipos diferentes,

onforme abaixo:

Transfern ia de Dados

Aritmti as

Lgi as

Booleanas

Desvio

Os tipos de instrues listados a ima sero estudados em detalhes no item 3.2, porm

antes de estud-los ne essrio des rever os modos de endereamento de dados existentes

na famlia 8051.

3.1.1 Modos de Endereamento

O modo omo dados so a essados nas instrues do 8051, o que se hama de modo de

endereamento, e so os seguintes:

Endereamento Direto

Endereamento Indireto

Endereamento Via Registrador

Endereamento por Constante Imediata

Endereamento Indexado

31
3 Programao em Assembly do 8051

Endereamento Direto

Neste tipo de endereamento o dado a essado na posio de memria diretamente es-

pe i ada na instruo, omo no exemplo a seguir:

EX: MOV A,25H ;move para A o ontedo da posio de memria 25H

Endereamento Indireto

Neste tipo de endereamento o dado a essado na posio de memria apontada por um

dos registros R0 ou R1 espe i ado na instruo, omo no exemplo a seguir:

EX: MOV A,R1 ;move p/ A ontedo posio de mem. apontada por R1

Endereamento via Registrador

Neste tipo de endereamento o dado a essado na atravs de um registro espe i ado na

instruo, omo no exemplo a seguir:

EX: MOV R1,A ;move para R1 o ontedo do registro A

Constante Imediata

Neste tipo de endereamento o dado imediatamente espe i ada na instruo, omo no

exemplo a seguir:

EX: MOV A,#25H ;move para A o ontedo da posio de memria 25H

Endereamento Indexado

Neste tipo de endereamento o dado a essado na posio de memria espe i ada omo

a soma de um endereo de 16 bits ontido no registro PC ou DPTR, omo o valor ontido

em A. Neste endereo assim onstitudo o registro A pode ser variado para fazer indexa-

es. Pode-se apli ar tal modo de endereamento no a esso memria de digo, para

por exemplo a essar posies de uma tabela de dados.

EX.1: MOVC A,A+DPTR ;move p/ A ontedo pos. mem. (DPTR+A)

EX.2: MOVC A, A+PC ; move p/ A ontedo pos. mem. (PC+A)

3.2 Estudo das Instrues do 8051


Nos itens que se segue, os vrios tipos de instrues sero apresentados na forma de

tabelas, e estas ontero todas as instrues existentes.

32
3 Programao em Assembly do 8051

3.2.1 Transfern ia de Dados

So basi amente as instrues de move, ujos mnemni os existentes so: mov, movx, e

mov , alm das instrues de operao om a pilha: push e pop, e de tro a ex hange,

ujos mnemni os existentes so: x h e x hd.

O formato geral da instruo move o seguinte:

mov <destino>,<origem>

As instrues de transfern ia de dados esto listadas na tabela 3.1 a seguir.

Instruo Des rio 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 Cdigo relativo a DPTR p/ A MOVC A,A+DPTR 1 24

MOVC A,A+PC Move Cdigo 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 Instruo

Tabela 3.1: Instrues de Transfern ia de Dados

33
3 Programao em Assembly do 8051

3.2.2 Instrues Aritmti as

So as instrues de soma, subtrao, in remento, de remento, multipli ao, diviso, em

todas as variantes dos modos de endereamento, alm da instruo de ajuste de imal para

operaes aritmti as em BCD.

As instrues aritmti as esto listadas na tabela 3.2, a seguir.

Instruo Des rio 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 Instruo

Tabela 3.2: Instrues Aritmti as

3.2.3 Instrues Lgi as

So as instrues de: E (ANL), OU (OR), e OU Ex lusivo (XOR), om todas as varian-

tes ofere idas pelos modos de endereamento, alm de CLR, resetar todos bits, e CPL,

omplemento.

As instrues lgi as esto listadas na tabela 3.3, a seguir.

34
3 Programao em Assembly do 8051

Instruo Des rio 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 Instruo

Tabela 3.3: Instrues Lgi as

3.2.4 Booleanas

So as instrues que operam sobre bits, lembrando que a RAM interna possui 128 bits

endereveis, e que no espao da RAM interna destinada aos registros de funes espe iais

existem mais 128 bits endereveis, a essados portanto atravs de instrues booleanas.

As instrues booleanas esto listadas na tabela 3.4, a seguir.

35
3 Programao em Assembly do 8051

Instruo Des rio 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 no setado JNC DESVIO 2 24

JB bit, relativo Desvia se bit direto setado JB LOOP 2 24

JNB bit, relativo Desvia se bit direto no setado JNB DESVIO 2 24

JBC bit, relativo Desvia se bit direto setado e reseta bit JBC TF0, L1 3 24

* Bytes da Instruo

Tabela 3.4: Instrues booleanas

3.2.5 Desvio

As instrues de desvios so 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 interrupo

As isntrues de desvio esto listadas na tabela 3.5, a seguir.

36
3 Programao em Assembly do 8051

Instruo Des rio Exemplo B* Clk


ACALL endereo11bits Desvio absoluto para subrotina ACALL DISP 2 24

LCALL endereo16bits Desvio longo para subrotina LCALL TECLAS 3 24

RET Retorno de subrotina RET 1 24

RETI Retorno de rotina de interrupo RETI 1 24

AJMP endereo11bits Desvio absoluto AJMP LOOP 2 24

LJMP endereo16bits 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 se6= 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 operao NOP 1 12

* Bytes da Instruo

Tabela 3.5: Instrues de desvio

37
4 Exemplos de Apli ao
A seguir sero apresentados exemplos de apli aes, om solues de hardware e software,

desde programas muito simples ilustrando o uso das Portas de E/S, Interrupes Externas,

e Temporizadores/Contadores, at exemplos um pou o mais omplexos, envolvendo inter-

fa es entre o 8051 e perifri os tais omo: displays de ristal lquido 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 sero 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 perifri os.

4.1 Gerao 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 automti 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 essrio para a gerao da onda quadrada de 10KHz que tem um perodo 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 interrupo pelo T/C0 e o

pino P1.0 ser omplementado na rotina de interrupo usando-se a instruo CPL, indo

de 0 a 1 ou de 1 a 0.

A seguir o digo do programa:

38
4 Exemplos de Apli ao

ORG 0 ; INICIO DO CDIGO

LJMP INICIO ; DESVIA P/ O INICIO DO PROGRAMA PRINCIPAL

ORG 0BH ; ENDEREO 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 ; ENDEREO DE INICIO DO PROGRAMA PRINCIPAL

;********INICIO DO PROGRAMA PRINCIPAL*****************************************

INICIO: MOV TMOD,#02H ; T/C0 NO MODO 8 BITS C/ RECARGA AUTOMTICA

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 INTERRUPES OCORREREM

END ; FIM DO CDIGO

4.2 Controle de Temperatura de um Forno


Neste exemplo um forno eltri o ser ontrolado por histerese, entre 100?C e 120?C,

utilizando para isto dois sensores de temperatura one tados aos pinos de interrupo

externa INT0 e INT1. Quando INT0 re eber o sinal de ativao do sensor de 120?C, o

forno deve ser desligado, uma vez que a temperatura atingiu o valor mximo. Da mesma

forma quando a interrupo 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 ao

ORG 0 ; INICIO DO CDIGO

LJMP INICIO ; DESVIA P/ O INICIO DO PROGRAMA PRINCIPAL

ORG 03H ; ENDEREO 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 ; ENDEREO 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 ; ENDEREO DE INICIO DO PROGRAMA PRINCIPAL

;******** INICIO DO PROGRAMA PRINCIPAL***************************************

INICIO: MOV IE, #85H ; HABILITAS AS INTERRUPES 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
o
; VERIFICA SE O SENSOR DE 120 C EST ATIVO

CLR P1.7 ; DESLIGA O FORNO CASO INT0=0

;******** LOOP INFINITO DE ESPERA DAS INTERRUPES************************

LOOP: SJMP LOOP ; ESPERA AS INTERRUPES OCORREREM

END ; FIM DO CDIGO

Pode-se, omo alternativa, elaborar um digo para o ontrole do forno em questo

sem o uso do re urso de interrupes. Para isto, os bits sinalizadores de ativao dos

pinos de interrupo, IE0 e IE1, lo alizados no registro TCON (ver item 2.7.3), podero

ser monitorados, e aso alguns destes pinos INT0/INT1 for de 1 para 0, o sinalizador

setado, e exe utada a ao 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 interrupes, este no apresenta a mesma exibilidade que o primeiro, uma vez que

no permite que outras tarefas possam ser realizadas em paralelo ao monitoramento dos

pinos de interrupo. Veri a-se que no aso do uso de interrupes, onde o programa

 a em loop innito esperando a o orrn ia das interrupes, sem fazer absolutamente

nada de til, plenamente possvel embutir algum digo no lugar deste loop innito, e

ento outras tarefas em paralelo podero ser exe utadas.

O digo que implementa a alternativa de ontrole do forno, sem o uso de interrupes

est apresentado na pgina seguinte.

40
4 Exemplos de Apli ao

ORG 0000 ; INICIO DO CDIGO

SETB P1.7 ; LIGA O FORNO

JB INT0, LOOP
o
; VERIFICA SE O SENSOR DE 120 C EST ATIVO

CLR P1.7 ; DESLIGA O FORNO

; ********* MONITORAMENTO DA ATIVA O DE INT0 E INT1 ***********************

LOOP: JB IE0, LIGA


o
; VERIFICA SE O SENSOR DE 120 C EST ATIVO

JB IE1, DESLIGA
o
; VERIFICA SE O SENSOR DE 100 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 CDIGO

4.3 Gerao de 2 Ondas Quadradas Simultneas


Neste exemplo sero geradas 2 ondas quadradas simultneas nos pinos P1.7 e P1.6 de

10KHz e 1KHz, respe tivamente, onforme mostrado na gura 4.3, a seguir.

Figura 4.3: Gerao de duas ondas quadradas simultneas

Como a onda de 10KHz possui um perodo de 100us, pela mesma razo 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 mximo 256us, ou 0,256mS,

e pelo fato da onda de 1KHz possuir um perodo 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 interrupes

sero habilitadas e ento geradas para atuar nos pinos P1.6 e P1.7 onde o estado destes

sero omplementados para a gerao das ondas quadradas.

41
4 Exemplos de Apli ao

A seguir o digo do programa:

ORG 0000 ; INICIO DO CDIGO

LJMP INICIO ; DESVIA P/ O INICIO DO PROGRAMA PRINCIPAL

ORG 000BH ; ENDEREO DE INICIO DA ROT. INT. DO T/C0

LJMP T0INT ; DESVIO P/ CORPO DA ROT. INT. DO T/C0

ORG 001BH ; ENDEREO 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 ; ENDEREO 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 INTERRUPES DOS T/C'S

LOOP: SJMP LOOP ; ESPERA AS INTERRUPES 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 CDIGO

4.4 Interfa e om Conversor A/D R2R


Um modo simples e barato de onverter valores de uma varivel analgi 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 onverso da tenso de entrada analgi a para uma palavra digital,

neste exemplo se utilizou uma rede R2R om resoluo de 7 bits, o que resulta em um

degrau de Vm/127, onde Vm a mxima tenso de entrada. Para determinadas apli a-

es esta resoluo pode ser pobre, porm para a maioria das apli aes em ontrole de

42
4 Exemplos de Apli ao

pro essos tal resoluo mais que su inte. De qualquer forma, aso seja ne essrio uma

resoluo 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 MXIMO 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 SADA 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 onverso (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 onverso. Aps o nal da onverso, o onversor envia

um sinal pelo seu pino INTR que est one tado ao pino INT0 do 8051. A rotina da

interrupo externa INT0 por sua vez pro ede a leitura do ADC0804 enviando o valor

lido para um buer ir ular na memria externa (XRAM).

43
4 Exemplos de Apli ao

A gura 4.4, a seguir ilustra a onexo 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 buer

ir ular implementada. Tal rotina deve ser es rita de a ordo om as restries de memria

do sistema implementado.

STARTADC EQU P3.0 ; PINO DE WRITE DO ADC0804

ORG 0000 ; ENDEREO 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 ; APS 20X DE 50ms TEM-SE 1,0s

MOV R0,#20 ; RECARGA DO CONTADOR R0 C/ 20

CLR STARTADC ; STARTADC

SETB STARTADC ; PREPARA SINAL INCIO DE CONV.

SAIDA: RETI ; RETORNO DE ROTINA

44
4 Exemplos de Apli ao

;***********INICIO DO PROG. PRINCIPAL*****************************************

INICIO: SETB STARTADC ; PREPARA O SINAL DE INCIO 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 ; INTERRUPES 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 CDIGO

4.6 Interfa e om LCD Inteligente


O usos de um display de ristal lquido (LCD) inteligente em um sistema mi ro ontrolado

uma das formas mais efetivas de prover uma interfa e homem-mquina de baixo usto

e f il implementao, sendo portanto utilizado em um grande nmero de apli aes.

Os LCD's inteligentes mais populares so os do padro Hita h, om 1 ou 2 linhas de 16

ara teres ada. Estes omponentes ontm um ir uito ontrolador (HD44780) que ge-

ren ia a es rita das mensagens no display, sendo apenas ne essrio que o mi ro ontrolador

programe o dispositivo e envie os ara teres da mensagem no padro ASCII.

A onexo do LCD om o mi ro ontrolador pode ser feita atravs de 4 ou 8 linhas de

dados (D4...D7 ou D0...D7), alm de 3 sinais de ontrole: o sinal de habilitao (EN), o

de seleo de es rita ou leitura (RW), e o sinal de seleo de registro de ontrole ou de

dado (RS). A pinagem de um LCD padro Hita hi o seguinte:

Pino Sigla Funo

1 GND Terra
2 V Alimentao de +5V
3 Pot Terminal entral do trimpot
4 RS Register Sele t - Seleo de Registro
5 RW Read/Write - Sinal de Leitura e Es rita
6 EN Enable - Sinal de Habilitao
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 padro

Os modos de fun ionamento do LCD devem ser programados atravs de palavras de

45
4 Exemplos de Apli ao

ontrole prprias, que permitem ongurar vrias ara tersti as deste, tais omo:

Seleo do modo de entrada de dados em 4 ou 8 bits;

In remento automti o da posio do ursor aps es rita;

Ligar o LCD/Cursor

Desligar o LCD/Cursor

Pis ar ursor.

Para se pro eder a programao do LCD os sinais RS e RW devem sele ionar a es rita no

registro de ontrole, e o sinal de habilitao deve ser ativado. Ento 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 operao esto os modos de interfa e em 4 ou 8 bits de

dados, ujas palavras de ontrole so 28H e 38H, respe tivamente.

Para maiores detalhes de operao dos LCD's padro Hita h, onsultar do umentao

prpria 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 onexo 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 ao

;*********DEFINIES 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 ; SELECIONA REGISTRO DE DADOS DO LCD

MOV DADO, A ; ENVIA PALAVRA DE DADO P/ O LCD

CLR EN ; ATIVA SINAL DE ENABLE DO LCD

LCALL WAIT5MS ; ESPERA 5MILISEGUNDOS

RET ; RETORNO DE ROTINA

47
4 Exemplos de Apli ao

;*********ESCREVE MENSAGEM NO LCD********************************************

TEXTO: MOV DPH,#HIGH(MSG) ; APONTA DPTR P/ END. DA MENSAGEM

MOV DPL,#LOW(MSG) ; APONTA DPTR P/ END. DA MENSAGEM

OUTRO: CLR A ; ZERA O OFFSET DA INSTRU O MOVC

MOVC A, A+DPTR ; ACESSO AOS CARACTERES DA MENSAGEM

CJNE A, #0, ENVIA ; VERIFICA SE FINAL DE MENSAGEM

SJMP SAI ; SE FOR O FINAL SAI DA ROTINA

ENVIA: LCALL WR_TEXT ; CHAMA ROT. ENVIO DE DADO P/ LCD

INC DPTR ; APONTA P/ O PROX. CARACTER DA MENS.

LJMP OUTRO ; DESVIA P/ TRECHO DE LEITURA DA MENS.

SAI: RET ; RETORNO DE ROTINA

;*********MENSAGEM APRESENTADA NO LCD***************************************

MSG: DB 'HELLO WORLD',0 ; MENSAGEM A SER EXIBIDA NO LCD

;*********ATRASO DE 5MILISEG******************************************************

WAIT5MS: MOV TMOD,#01 ; T/C0 NO MODO 16BITS

MOV TH0,#HIGH(-5000) ; VALOR INICIAL P/ 5,0ms NOS REGISTROS

MOV TL0,#LOW(-5000) ; DE CONTAGEM ALTO E BAIXO

SETB TR0 ; INICIO DE CONTAGEM

JNB TF0, $ ; AGUARDA AT QUE O TEMPO EXPIRE

CLR TF0 ; RESETA TIMER FLAG

CLR TR0 ; PARA A CONTAGEM

RET ; RETORNO DE ROTINA

;*********FINAL DE PROGRAMA****************************************************

END ; FIM DO CDIGO

4.6.2 Interfa e 8051/LCD em 4 bits

Nesta outra verso do exemplo anterior, o LCD interfa eado om o 8051 atravs de 4

bits de dados, poupando assim 4 bits de E/S do mi ro ontrolador, porm s ustas de um

digo um pou o mais extenso.

Somente os pinos de P1.4 a P1.7 so one tados aos pinos de dados mais sigi ativos

do LCD, ou seja DB4 a DB7.

Observar que a palavra de ontrole de ongurao do LCD agora 28H ao invs de

38H.

A seguir apresentado o digo assembly do programa que apresenta a mensagem Hello

World no LCD ontrolado om 4 bits de dados (DB4...DB7).

48
4 Exemplos de Apli ao

;*********DEFINICOES P/ O ********LCD *********************************************

DB4 EQU P1.4 ; BIT DE DADOS MENOS SIGNIF. DO LCD

DB5 EQU P1.5 ; BIT DE DADOS DO LCD

DB6 EQU P1.6 ; BIT DE DADOS DO LCD

DB7 EQU P1.7 ; BIT DE DADOS MAIS SIGNIF. DO LCD

EN EQU P3.2 ; ENABLE DO LCD ATIVO NA BORDA DE DESCIDA

RS EQU P3.3 ; 1 - CARACTER, 0 - CONTROLE

RW EQU P3.4 ; 1 - LEITURA, 0 - ESCRITA

DADO EQU P1

CONFIG EQU 28H ; 20H(FUNCTION SET)+0H(4BITS)+08H(2LINHAS)

LCD_ON EQU 0EH ; 0CH(LCD ON)+02H(CURSOR ON)

ENTRY EQU 06H ; SHIFT RIGHT A CADA ESCR. DE CARACTER

CLR_LCD EQU 01H ; LIMPA LCD

LCD_OFF EQU 08H ; APAGA LCD

;********INICIO DO PROGRAMA PRINCIPAL******************************************

LCALL RSTLCD ; RESETA O LCD

LCALL INICLCD ; INICIALIZA O LCD

LCALL TEXTO ; ENVIA MENSAGEM P/ O LCD

LOOP SJMP LOOP ; LOOP INFINITO

;*********RESET DO LCD ************************************************************

RSTLCD: CLR RS ; RESETA O PINO DE SELE O DE REGISTRO RS

CLR RW ; RESETA O PINO DE ESCRITA NO LCD

CLR EN ; RESETA O PINO DE HABILITA O DO LCD

CLR DB7 ; RESETA O MSB DE DADOS DO LCD

SETB DB5 ; SETA O MSB DE DADOS DO LCD

SETB DB4 ; SETA O BIT 4 DE DADOS DO LCD

SETB EN ; SETA O PINO DE HABILITA O DO LCD

CLR EN ; RESETA O PINO DE HABILITA O DO LCD

LCALL DELAY4MS ; CHAMA ROT. DE ATRASO DE 4ms

SETB EN ; SETA O PINO DE HABILITA O DO LCD

CLR EN ; RESETA O PINO DE HABILITA O DO LCD

LCALL DELAY1MS ; CHAMA ROT. DE ATRASO DE 1ms

SETB EN ; SETA O PINO DE HABILITA O DO LCD

CLR EN ; RESETA O PINO DE HABILITA O DO LCD

LCALL DELAY1MS ; CHAMA ROT. DE ATRASO DE 1ms

CLR DB4 ; RESETA O PINO DE DADOS 4 DO LCD

SETB EN ; SETA O PINO DE HABILITA O DO LCD

CLR EN ; RESETA O PINO DE HABILITA O DO LCD

LCALL DELAY1MS ; CHAMA ROT. DE ATRASO DE 1ms

MOV A, #CONFIG ; COLOCA EM A PALAVRA DE CONTROLE

49
4 Exemplos de Apli ao

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

MOV A, #LCD_OFF ; COLOCA EM A PALAVRA DE CONTROLE

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

MOV A, #CLR_LCD ; COLOCA EM A PALAVRA DE CONTROLE

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

MOV A, #ENTRY ; COLOCA EM A PALAVRA DE CONTROLE

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

LJMP INITLCD ; DESVIAP/ ROT. DE INICIALIZA O DO LCD

;*********INICIALIZACAO DO LCD **************************************************

INITLCD: CLR RS ; SELECIONA REGISTRO DE CONTROLE

CLR RW ; SELECIONA ESCRITA NO LCD

CLR EN ; RESETA O PINO DE HABILITA O DO LCD

MOV A, #CONFIG ; COLOCA EM A PALAVRA DE CONTROLE

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

MOV A, #LCD_ON ; COLOCA EM A PALAVRA DE CONTROLE

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

MOV A, #ENTRY ; COLOCA EM A PALAVRA DE CONTROLE

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

MOV A, #CLR_LCD ; COLOCA EM A PALAVRA DE CONTROLE

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

RET ; RETORNO DE ROTINA

;*********ESCREVE COMANDO NO LCD**********************************************

WR_CMD: CLR EN ; RESETA O PINO DE HABILITA O DO LCD

CLR RS ; SELECIONA REGISTRO DE CONTROLE

CLR RW ; SELECIONA ESCRITA NO LCD

LCALL SENDNIB ; CHAMA ROT. DE ENVIO DE NIBBLE

RET ; RETORNO DE ROTINA

;***********ESCREVE CARACTER ASCII NO LCD*************************************

WR_TEXT: CLR EN ; RESETA PINO DE HABILITA O DO LCD

SETB RS ; SELECIONA REG. DE DADOS DO LCD

CLR RW ; SELECIONA ESCRITA NO LCD

LCALL SENDNIB ; CHAMA ROT. DE ENVIO DE NIBBLE

RET ; RETORNO DE ROTINA

;***********ESCREVE NIBBLE NO LCD***********************************************

SENDNIB: PUSH ACC ; SALVA EM ACC BYTE DO COMANDO

MOV C, ACC.4 ; CARRY COM O BIT 4 DO COMANDO

MOV DB4, C ; PINO DB4 DO LCD RECEBE BIT 4 COMANDO

MOV C, ACC.5 ; CARRY COM O BIT 5 DO COMANDO

MOV DB5, C ; PINO DB5 DO LCD RECEBE BIT 5 COMANDO

50
4 Exemplos de Apli ao

MOV C, ACC.6 ; CARRY COM O BIT 6 DO COMANDO

MOV DB6, C ; PINO DB6 DO LCD COM BIT 6 COMANDO

MOV C, ACC.7 ; CARRY COM O BIT 7 DO COMANDO

MOV DB7, C ; PINO DB7 DO LCD COM BIT 7 COMANDO

SETB EN ; SETA O PINO DE ENABLE

CLR EN ; RESETA O PINO DE ENABLE

MOV C, ACC.0 ; CARRY COM O BIT 0 DO COMANDO

MOV DB4, C ; PINO DB4 DO LCD COM BIT 0 COMANDO

MOV C, ACC.1 ; CARRY COM O BIT 1 DO COMANDO

MOV DB5, C ; PINO DB5 DO LCD COM BIT 1 COMANDO

MOV C, ACC.2 ; CARRY COM O BIT 2 DO COMANDO

MOV DB6, C ; PINO DB6 DO LCD C/ BIT 2 COMANDO

MOV C, ACC.3 ; CARRY COM O BIT 3 DO COMANDO

MOV DB7, C ; PINO DB7 DO LCD C/ BIT 3 COMANDO

LCALL WAIT_LCD ; CHAMA ROT. DE ESPERA RESP. DO LCD

POP ACC ; RESTITUI O VALOR DO ACUMULADOR

RET ; RETORNO DE INTERRUP O

;*********ATRASO DE 1MILISEGUNDO**********************************************

WAIT5MS: MOV TMOD,#01 ; MODO TEMPORIZ. DE 16BITS P/ T/CO

MOV TH0,#HIGH(-1000) ; VALOR INICIAL P/ 1ms

MOV TL0,#LOW(-1000) ; VALOR INICIAL P/ 1ms

SETB TR0 ; DISPARA A CONTAGEM DO T/C0

JNB TF0, $ ; VERIFICA SE CONTAGEM TERMINOU

CLR TF0 ; RESETA FLAG DE FIM DE CONTAGEM

CLR TR0 ; PARA A CONTAGEM DO T/C0

RET ; RETORNO DE ROTINA

;*********VERIFICA SINAL DE WAIT DO LCD*****************************************

WAIT_LCD: CLR EN ; RESETA PINO DE HABILITA O DO LCD

SETB EN ; SETA O PINO DE HABILITA O DO LCD

CLR EN ; RESETA PINO DE HABILITA O DO LCD

MOV DADO, #0FFH ; ENVIA FFH AO BUS DE DADOS DO LCD

SETB RW ; SELECIONA OPERA O ESCR. NO LCD

PUSH ACC ; SALVA NA PILHA O VALOR DO ACC

REPETE: SETB EN ; SETA O PINO DE HABILITA O DO LCD

MOV A, DADO ; PROCEDE A LEITURA DO LCD

CLR EN ; RESETA PINO DE HABILITA O DO LCD

SETB EN ; SETA O PINO DE HABILITA O DO LCD

CLR EN ; RESETA PINO DE HABILITA O DO LCD

JB ACC.7, REPETE ; VERIFICA PINO DE BUSY DO LCD

51
4 Exemplos de Apli ao

POP ACC ; RESTITUI O VALOR ANTERIOR DO ACC

RET ; RETORNO DE ROTINA

;***********ENVIA MENSAGEM P/ O LCD*****************************************

TEXTO: MOV DPH, #HIGH(MSG) ; ENDEREO DA MENSAGEM EM DPTR

MOV DPL, #LOW(MSG) ; ENDEREO DA MENSAGEM EM DPTR

OUTRO: CLR A ; ZERA O INDEXADOR

MOVC A, A+DPTR ; ACC C/ CARACTER DA MENSAG.

CJNE A, #0, ENVIA ; COMPARA C/ CDIGO FIM DE MENS=0

SJMP SAIDA ; DESVIA P/ SAIDA DA ROTINA

ENVIA: LCALL WR_TEXT ; CHAMA ROT. DE ESCR. DE CARACTER

INC DPTR ; INCREMENTA APONTADOR DE CARACT.

SJMP OUTRO ; VOLTA P/ ENVIAR OUTRO CARACTER

SAIDA: RET ; RETORNO DE ROTINA

;***********TEXTO APRESENTADO NO LCD***************************************

MSG: DB ALO MUNDO, 0

;*********FIM DE PROGRAMA*****************************************************

END

4.6.3 Interfa e 8051/LCD / Registrador de Deslo amento

Quando se tem pou os pinos de E/S disponveis em um sistema mi ro ontrolado, e se

ne essita de pinos ad ionais, pode-se re orrer expanso das linhas de sada atravs do

uso de um Registrador de Deslo amento (shift register) do tipo 74HC164, omo visto na

gura 4.7, a seguir, onde um LCD inteligente one tado atravs deste a um 8051.

Figura 4.7: Conexo 8051/LCD om 74HC164

52
4 Exemplos de Apli ao

Como visto na gura 4.7, atravs de 2 linhas da porta P1, so forne idos os bits de

dados serializados, e o sinal de lo k para o registrador de deslo amento, que aps ter

re ebido os 8 bits de dados, em onjunto om os 8 pulsos de lo k, um byte ompleto

forne ido para as linhas de dados do LCD.

A seguir ser apresentado o digo que possibilita o 8051 ontrolar o LCD atravs da

interfa e om um registrador de deslo amento do tipo 74HC164. As rotinas de espera de

40us e 5ms, no sero apresentadas por se tratarem das mesmas dos digos do item 4.6.

; ************DEFINIES P/ O LCD*************************************************

RS EQU P3.2 ; PINO ESCOLHIDO P/ SINAL DE REG. SELECT

EN EQU P3.3 ; PINO ESCOLHIDO P/ SINAL DE ENABLE

DBIT EQU P1.0 ; PINO P/ SINAL DE DADO DO 74HC164

CLK EQU P1.1 ; PINO P/ SINAL DE CLOCK DO 74HC164

CLRLCD EQU 01H ; PALAVRA DE CONTR. P/ LIMPAR O LCD

CONFIG EQU 38H ; PALAVRA DE CONTR. P/ CONFIG. O LCD

LCD_ON EQU 0EH ; PALAVRA DE CONTR. P/ LIGAR O LCD

ENTRY EQU 06H ; PALAVRA DE CONTR. P/ TIPO DE ENTRADA

; ***********INICIO DO PROGRAMA PRINCIPAL**************************************

LCALL INIC_LCD ; CHAMA ROT. DE INICIALIZA O DO LCD

LCALL TEXTO ; CHAMA ROT. DE ESCRITA TEXTO NO LCD

NOP ; DECLARAES DO PROGRAMA PRINCIPAL

SJMP $ ; LOOP INFINITO

;*********ROTINA DE INICIALIZA O DO LCD***************************************

INIC_LCD: MOV A, #CONFIG ; CODIGO DE CONFIGURA O DO LCD EM A

LCALL WR_CMD ; CHAMA ROTINA DE ESCRITA DE COMANDO

MOV A, #LCD_ON ; CODIGO P/ LIGAR O LCD EM A

LCALL WR_CMD ; CHAMA ROTINA DE ESCRITA DE COMANDO

MOV A, #ENTRY ; CODIGO MODO DE ENTRADA DO LCD EM A

LCALL WR_CMD ; CHAMA ROTINA DE ESCRITA DE COMANDO

MOV A, #CLR_LCD ; CODIGO P/ LIMPAR O LCD EM A

LCALL WR_CMD ; CHAMA ROTINA DE ESCRITA DE COMANDO

RET ; RETORNO DE ROTINA

;***********ROTINA DE ESCRITA DE COMANDO NO LCD*****************************

WR_CMD: SETB EN ; PREPARA SINAL DE ENABLE

CLR RS ; SELECIONA REG. DE CONTROLE DO LCD

LCALL SHIFTREG ; CHAMA ROTINA DO SHIFT REGISTER

CLR EN ; ATIVA SINAL DE ENABLE (BORDA DESCIDA)

LCALL WAIT5M ; CHAMA ROTINA DE ATRASO DE 5ms

RET ; RETORNO DE ROTINA

53
4 Exemplos de Apli ao

;***********ROTINA DE ESCRITA DE DADO NO LCD**********************************

WR_DADO: SETB EN ; PREPARA SINAL DE ENABLE

SETB RS ; SELECIONA REGISTRO DE DADOS DO LCD

LCALL SHIFTREG ; CHAMA ROTINA DO SHIFT REGISTER

CLR EN ; ATIVA SINAL DE ENABLE (BORDA DESCIDA)

LCALL WAIT40US ; CHAMA ROTINA DE ATRASO DE 40us

RET ; RETORNO DE ROTINA

; ***********ROTINA DE ESCRITA NO SHIFT REGISTER*******************************

SHIFTREG: SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.7 ; MOVE BIT7 DO ACUMULADOR P/ FLAG C

MOV DBIT, C ; FLAG C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA SINAL DE CLOCK (BORDA DESCIDA)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.6 ; MOVE BIT6 DO ACUMULADOR P/ FLAG C

MOV DBIT, C ; FLAG C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA SINAL DE CLOCK (BORDA DESCIDA)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.5 ; MOVE BIT5 DO ACUMULADOR P/ FLAG C

MOV DBIT, C ; FLAG C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA SINAL DE CLOCK (BORDA DESCIDA)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.4 ; MOVE BIT4 DO ACUMULADOR P/ FLAG C

MOV DBIT, C ; FLAG C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA SINAL DE CLOCK (BORDA DESCIDA)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.3 ; MOVE BIT3 DO ACUMULADOR P/ FLAG C

MOV DBIT, C ; FLAG C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA SINAL DE ENABLE (BORDA DESCIDA)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.2 ; MOVE BIT2 DO ACUMULADOR P/ FLAG C

MOV DBIT, C ; FLAG C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA SINAL DE CLOCK (BORDA DESCIDA)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.1 ; MOVE BIT1 DO ACUMULADOR P/ FLAG C

MOV DBIT, C ; FLAG C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA SINAL DE CLOCK (BORDA DESCIDA)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.0 ; MOVE BIT0 DO ACUMULADOR P/ FLAG C

MOV DBIT, C ; FLAG C P/ O PINO DE DADO DO 74HC164

54
4 Exemplos de Apli ao

CLR CLK ; ATIVA SINAL DE CLOCK (BORDA DESCIDA)

SETB CLK ; PREPARA SINAL DE CLOCK

RET ; RETORNO DE ROTINA

;***********MENSAGEM APRESENTADA NO LCD************************************

MSG: DB ALO MUNDO, 0 ; MENSAGEM DEVE TERMINAR C/ UM 0

;***********ROTINA DE ENVIO DA MENSAGEM P/ O LCD*****************************

TEXTO: MOV DPH, #HIGH(MSG) ; MSB DO ENDEREO DE MSG EM DPH

MOV DPL, #LOW(MSG) ; LSB DO ENDEREO DE MSG EM DPL

OUTRO: MOV A, #0 ; DESLOCAMENTO DE MOVC EM 0

MOVC A, A+DPTR ; LEITURA DOS BYTES DA MENSAGEM P/ A

CJNE A, #0, ENVIA ; SE BYTE LIDO = 0, FINAL DA MENSAGEM

RET ; RETORNO DE ROTINA

ENVIA: LCALL WR_DADO ; CHAMA ROTINA

INC DPTR ; INCREMENTA APONTADOR P/ MENSAGEM

SJMP OUTRO ; REPETE AT TERMINAR A MENSAGEM

;***********FINAL DE PROGRAMA**************************************************

END

4.6.4 Interfa e 8051/LCD Mapeado em Memria

Neste exemplo o LCD interfa eado om o 8051 atravs de Mapeamento de E/S em

Memria, o que pode ser onveninte quando se tem muitos perifri os no sistema, situao

onde os pinos de E/S do mi ro ontrolador se tornam insu intes para interfa ear todos

perifri os.

Trata-se, o mapeamento em memria, da t ni a de enderear perifri os atravs de

endereos de memria, sendo as operaes de leitura e es rita nestes, efetudas omo se

estive a essando memria SRAM externa, usando-se portanto as instrues de MOVX.

Os endereos de es rita e leitura es olhidos para o a esso ao LCD esto mostrados na

tabela a seguir:

Endereo Funo Leitura/Es rita


8000H Es reve Comando no LCD Es rita

8001H Es reve Dado no LCD Es rita

8002H L Status do LCD Leitura

8003H L Dado do LCD Leitura

E o esquema de ligao entre o 8051 e o LCD om mapeamento em memria apresen-

tado na gura 4.8, onde se veri a uma lgi a que onstitui o ir uito de seleo ne essrio

para a gerao do sinal de habilitao do LCD om base nos endereos da tabela anterior.

55
4 Exemplos de Apli ao

Figura 4.8: Interfa e 8051/LCD Mapeado em E/S

Uma restrio ao uso desta t ni a est nos tempos de a esso ao LCD que so mais

lentos que o mximo lo k do 8051, ento a frequn ia de lo k mxima do 8051 no dever

ultrapassar de 10MHz. Um valor de ristal interessante, neste aso, o de 7,3728MHz,

uma vez que permite a programao das taxas de transfern ia padro da omuni ao

serial.

A seguir o digo assembly para o programa Hello World, na verso em que o LCD
usa mapeamento em memria.

;*********DEFINIES DO LCD**********************************************************

CMD_WR EQU 8000H ; ENDEREO DE ESCRITA DE COMANDO

DATA_WR EQU 8001H ; ENDEREO DE ESCRITA DE CARACTER

CMD_RD EQU 8002H ; ENDEREO DE LEITURA DE COMANDO

DATA_RD EQU 8003H ; ENDEREO DE LEITURA DE DADO

CONFIG EQU 38H ; 20H(FUNCTION SET)+10H(8BITS)+08H(2LINHAS)

LCD_ON EQU 0EH ; 0CH(LCD ON)+02H(CURSON ON)

ENTRY EQU 06H ; 06H(SHIFT RIGHT A CADA ESCR. DE CARACT.)

CLR_LCD EQU 01H ; LIMPA LCD

LCD_OFF EQU 08H ; APAGA LCD

;*********INICIO DO PROGRAMA PRINCIPAL********************************************

LCALL INICLCD ; CHAMA ROTINA DE INICIALIZA O DO LCD

LCALL TEXTO ; CHAMA ROTINA DE ESCR. DE TEXTO NO LCD

LOOP: SJMP LOOP ; LOOP INFINITO

56
4 Exemplos de Apli ao

;*********ROTINA DE lNICIALIZA O DO LCD****************************************

INICLCD: MOV A, #CONFIG ; CODIGO DE CONFIG. DO LCD EM A

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

MOV A, #LCD_ON ; CODIGO DE CONFIG. DO LCD EM A

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

MOV A, #ENTRY ; CODIGO DE CONFIG. DO LCD EM A

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

MOV A, #CLR_LCD ; CODIGO DE CONFIG. DO LCD EM A

LCALL WR_CMD ; CHAMA ROT. DE ESCRITA DE COMANDO

RET ; RETORNO DE ROTINA

;***********ROTINA DE ESCRITA DE COMANDO NO LCD******************************

WR_CMD: MOV DPTR,#CMD_WR ; ENDEREO ESCR. COMANDO EM DPTR

MOVX DPTR, A ; ENVIA COMANDO P/ LCD

LCALL WAIT5MS ; ESPERA 5MS

RET ; RETORNO DE ROTINA

;***********ROTINA DE ESCRITA DE DADO NO LCD***********************************

WR_TEXT: MOV DPTR,#DATA_WR ; ENDEREO ESCR. CARACT. EM DPTR

MOVX DPTR, A ; ENVIA CARACTER P/ LCD

LCALL WAIT5MS ; ESPERA 5MS

RET ; RETORNO DE ROTINA

;***********MENSAGEM APRESENTADA NO LCD**************************************

MSG: DB ALO MUNDO, 0 ; MENSAGEM APRESENTADA NO LCD

;***********ROTINA DE ENVIO DA MENSAGEM P/ O LCD******************************

TEXTO: MOV DPH, #HIGH(MSG) ; ENDEREO DA MENSAGEM EM DPTR

MOV DPL, #LOW(MSG) ; ENDEREO DA MENSAGEM EM DPTR

OUTRO: CLR A ; INDEXADOR EM ZERO

MOVC A, A+DPTR ; PROCEDE A LEITURA DE UM CARACTER

CJNE A, #0, ENVIA ; TESTA SE FIM DE MENSAGEM=0

SJMP SAIDA ; SAI DA ROT. ENVIO DE CARACTERES

ENVIA: PUSH DPH ; SALVA ENDEREO CORRENTE NA PILHA

PUSH DPL ; SALVA ENDEREO CORRENTE NA PILHA

LCALL WR_TEXT ; CHAMA ROT. DE ESCRITA DE CARACTER

POP DPL ; RESTITUI O ENDEREO AO DPTR

POP DPH ; RESTITUI O ENDEREO AO DPTR

INC DPTR ; INCREMENTA O ENDEREO EM DPTR

SJMP OUTRO ; VOLTA A BUSCAR OUTRO CARACTER

SAIDA: RET ; ROTORNO DE ROTINA

57
4 Exemplos de Apli ao

;*********ATRASO DE 5MILIGEG*****************************************************

WAIT5MS: MOV TMOD,#01 ; MODO TEMPORIZ. DE 16 BITS P/ O T/C0

MOV TH0,#HIGH(-5000) ; VALOR INICIAL DE CONTAGEM P/ 5ms

MOV TL0,#LOW(-5000) ; COM CLOCK DE 12MHz

SETB TR0 ; DISPARA O T/C0

JNB TF0, $ ; VERIFICA SE CONTAGEM CHEGOU NO MX.

CLR TF0 ; RESETA O FLAG DE FIM DE CONTAGEM

CLR TR0 ; PARA A CONTAGEM

RET ; RETORNO DE ROTINA

;***********FINAL DO PROGRAMA***************************************************

END

4.7 Interfa e 8051 om Te lado Matri ial


Um dos perifri os mais usados em sistemas mi ro ontrolados o te lado matri ial e neste

item ser apresentado uma das muitas maneiras de implementar tal interfa e.

Na gura 4.9, a seguir, pode-se observar que o te lado em questo tem 12 te las or-

ganizadas em uma matriz de 3 olunas e 4 linhas. A matriz est organizada tal que na

primeira linha, mais a ima, esto as te las 1, 2, e 3; na segunda linha as te las 4, 5, e 6;

at que na ltima linha mais abaixo esto as te las *, 0, e #.

Para se efetuar a leitura do te lado, e determinar se h alguma te la pressionada ou

no, e em aso armativo, determinar de qual te la se trata, efetuada uma varredura

sobre este te lado, da seguinte forma:

A oluna 1, na esquerda do te lado, levada a nvel lgi o 0, atravs da es rita da

palavra binria 011 nos pinos P1.0, P1.1, e P1.2;

Em seguida pro ede-se a leitura das 4 linhas do te lado, one tadas aos pinos P1.3

a P1.6. Se algum destes pinos se en ontrar em nvel lgi o 0, a te la orrespondente

a essa linha/ oluna est pressionada;

Ento guarda-se o digo da te la em um registro, e um atraso de 100ms provido.

Caso ontrrio, nenhuma te la da oluna 1 est pressionada;

Passa-se para a oluna 2, levando o pino P1.1 a 0, ou seja enviando a palavra binria

101, em P1.0 a P1.2, repetindo-se os 2 passos anteriores, para veri ar se alguma

te la das 4 linhas est pressionada;

Finalmente, a oluna 3 do te lado re ebe a palavra binria 110, e repetida a

veri ao das linhas;

O pro esso todo ontinua ontinuamente enquanto se desejar efetuar a letura do

te lado.

58
4 Exemplos de Apli ao

Figura 4.9: Interfa e 8051/Te lado Matri ial

A seguir dado o digo assembly de um programa, que utiliza o esquema da gura

4.9, para fazer a leitura de um digo numri o de 6 digitos, atravs do te lado matri ial

3x4. A mensagem ENTRE COD:  ar presente na primeira linha do LCD, e para ada

um dos 6 dgitos re ebidos via te lado um '*' ser olo ado aps a mensagem. Ao nal,

a ttulo de veri ao o digo digitado apresentado na linha de baixo do LCD.

;*********DEFINIES DO LCD*******************************************************

RS EQU P3.4 ; PINO P/ SINAL DE REG. SELECT

EN EQU P3.5 ; PINO P/ SINAL DE ENABLE

DBIT EQU P3.2 ; PINO P/ SINAL DE DADO DO 74HC164

CLK EQU P3.3 ; PINO P/ SINAL DE CLOCK DO 74HC164

CONFIG EQU 38H ; COMANDO P/ LIMPAR O LCD

LCD_ON EQU 0EH ; COMANDO P/ CONFIGURAR O LCD

ENTRY EQU 06H ; COMANDO P/ LIGAR O LCD

CLR_LCD EQU 01H ; COMANDO P/ TIPO DE ENTRADA

;*********DEFINIES DO TECLADO*************************************************

COL1 EQU 11111110B ; ATIVA COLUNA 1 DO TECLADO

COL2 EQU 11111101B ; ATIVA COLUNA 2 DO TECLADO

COL3 EQU 11111011B ; ATIVA COLUNA 3 DO TECLADO

DIGIT EQU 6 ; NR DE DIGITOS DO CDIGO

PONTCOD EQU 48 ; PONTEIRO P/ GUARDAR CD. NA MEMRIA

59
4 Exemplos de Apli ao

;*********INICIO DO PROGRAMA PRINCIPAL*****************************************

ACALL INIC_LCD ; CHAMA ROT. DE INICIALIZ. DO LCD

ACALL TEXTO ; CHAMA ROT. DE ENVIO DE TEXTO P/ LCD

ACALL LECODIGO ; CHAMA ROT. DE LEITURA DO CODIGO

ACALL DISP_COD ; MOSTRA CODIGO NO LCD (P/ DEBUG)

... ... ; DECLARAES DO RESTO DO PROG. PRINC.

... ... ; DECLARAES DO RESTO DO PROG. PRINC.

LOOP: SJMP LOOP ; LOOP INFINITO

;*********ROTINA DE lNICIALIZA O DO LCD****************************************

INICLCD: MOV A, #CONFIG ; CODIGO DE CONFIGURA O DO LCD EM A

ACALL WR_CMD ; CHAMA ROTINA DE ESCRITA DE COMANDO

MOV A, #LCD_ON ; CODIGO P/ LIGAR O LCD EM A

ACALL WR_CMD ; CHAMA ROTINA DE ESCRITA DE COMANDO

MOV A, #ENTRY ; CODIGO MODO DE ENTRADA DO LCD EM A

ACALL WR_CMD ; CHAMA ROTINA DE ESCRITA DE COMANDO

MOV A, #CLR_LCD ; CODIGO P/ LIMPAR O LCD EM A

ACALL WR_CMD ; CHAMA ROTINA DE ESCRITA DE COMANDO

RET ; RETORNO DE ROTINA

;***********ROTINA DE ESCRITA DE COMANDO NO LCD*******************************

WR_CMD: SETB EN ; PREPARA SINAL DE ENABLE

CLR RS ; SELECIONA REG. DE CONTROLE DO LCD

ACALL SHIFTREG ; CHAMA ROTINA DO SHIFT REGISTER

CLR EN ; ATIVA SINAL DE ENABLE (BORDA DESCIDA)

ACALL WAIT5M ; CHAMA ROTINA DE ATRASO DE 5ms

RET ; RETORNO DE ROTINA

;*********ESCREVE DADO NO LCD****************************************************

WR_DADO: SETB EN ; PREPARA SINAL DE ENABLE

SETB RS ; SELECIONA REG. DE CONTROLE DO LCD

ACALL SHIFTREG ; CHAMA ROTINA DO SHIFT REGISTER

CLR EN ; ATIVA SINAL DE ENABLE (BORDA DESCIDA)

ACALL WAIT40U ; CHAMA ROTINA DE ATRASO DE 40us

RET ; RETORNO DE ROTINA

;*********ROTINA DE ESPERA DE 40MICROSEG***************************************

WAIT40U: PUSH 1 ; PRESERVA R1 NA PILHA

MOV R2,#20 ; INICIALIZA CONTADOR P/ 40us

DJNZ R1,$ ; LOOP CONTROLADO P/ GASTAR 40us

POP 1 ; RECUPERA R1 DA PILHA

RET ; RETORNA DE ROTINA

60
4 Exemplos de Apli ao

;*********ROTINA DE ESPERA DE 5MILISEG*****************************************

WAIT5M: PUSH 1 ; PRESERVA R1 NA PILHA

PUSH 2 ; PRESERVA R2 NA PILHA

MOV R2, #20 ; INICIALIZA CONTADOR P/ 20 X 250

AGAIN: MOV R1, #250 ; O QUE DAR 5ms

DJNZ R1, $ ; LOOP CONTROLADO P/ R1

DJNZ R2, AGAIN ; LOOP CONTROLADO P/ R2

POP 2 ; RECUPERA R2 DA PILHA

POP 1 ; RECUPERA R1 DA PILHA

RET ; RETORNA DE ROTINA

;*********ROTINA DE ESPERA DE 100MILISEG***************************************

WAIT01S: PUSH 1 ; PRESERVA R1 NA PILHA

MOV R1, #20 ; INICIALIZA CONTADOR P/ 20 X 5ms = 100ms

MAIS5M: ACALL WAIT5M ; CHAMA ROTINA DE 5ms

DJNZ R1, MAIS5M ; REPETE AT QUE R1 SEJA 0

POP 1 ; RECUPERA R1 DA PILHA

RET ; RETORNA DE ROTINA

; ***********ROTINA DE ESCRITA NO SHIFT REGISTER******************************

SHIFTREG: SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.7 ; MOVE BIT7 DO ACUMULADOR P/ FLAG C

MOV DBIT, C ; FLAG C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA SINAL DE CLOCK (BORDA DESCIDA)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.6 ; MOVE BIT6 DO ACUMULADOR P/ FLAG C

MOV DBIT, C ; FLAG C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA SINAL DE CLOCK (BORDA DESCIDA)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.5 ; MOVE BIT5 DE ACC P/ FLAG C

MOV DBIT, C ; C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA CLOCK (BORDA DESC.)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.4 ; MOVE BIT4 DE ACC P/ FLAG C

MOV DBIT, C ; C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA CLOCK (BORDA DESC.)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.3 ; MOVE BIT3 DE ACC P/ FLAG C

MOV DBIT, C ; C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA CLOCK (BORDA DESC.)

SETB CLK ; PREPARA SINAL DE CLOCK

61
4 Exemplos de Apli ao

MOV C, ACC.2 ; MOVE BIT2 DE ACC P/ FLAG C

MOV DBIT, C ; C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA CLOCK (BORDA DESC.)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.1 ; MOVE BIT1 DE ACC P/ FLAG C

MOV DBIT, C ; C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA CLOCK (BORDA DESC.)

SETB CLK ; PREPARA SINAL DE CLOCK

MOV C, ACC.0 ; MOVE BIT0 DE ACC P/ FLAG C

MOV DBIT, C ; C P/ O PINO DE DADO DO 74HC164

CLR CLK ; ATIVA CLOCK (BORDA DESC.)

SETB CLK ; PREPARA SINAL DE CLOCK

RET ; RETORNA DE ROTINA

;***********MENSAGEM APRESENTADA NO LCD**************************************

MSG: DB ENTRE COD:, 0 ; MENSAGEM DEVE TERMINAR C/ 0

;***********ROTINA DE ENVIO DA MENSAGEM P/ O LCD*****************************

TEXTO: MOV DPH, #HIGH(MSG) ; MSB DO END. DE MSG EM DPH

MOV DPL, #LOW(MSG) ; LSB DO END. DE MSG EM DPL

OUTRO: MOV A, #0 ; DESLOCAMENTO DE MOVC EM 0

MOVC A, A+DPTR ; L BYTES DA MENSAGEM

CJNE A, #0, ENVIA ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

ENVIA: ACALL WR_DADO ; CHAMA ROT. DE ESCRITA DO LCD

INC DPTR ; INCREM. APONT. P/ MENSAGEM

SJMP OUTRO ; REPETE AT TERMINAR MENSAGEM

;***********ROTINA DE LEITURA DE UM CDIGO VIA TECLADO**********************

LECODIGO: MOV P1,#0 ; PORTA 1 COMO ENTRADA

MOV R1,#PONTCOD ; PONTEIRO P/ GUARDAR CODIGO

MOV R0,#0 ; INICIALIZA CONTADOR DE DIGITOS

;***********TESTE DA COLUNA 1 DO TECLADO***************************************

COLUNA1: MOV P1,#COL1 ; ATIVA COLUNA1 DO TECLADO

LINCOL11: JB P1.3,LINCOL21 ; SE N O PRESSIONADO VAI P/ LINHA2

MOV R1,#31H ; CASO CONTRRIO O DGITO 1

MOV A,# ' * ' ; COLOCA UM ' * ' NO LCD

ACALL WR_DADO ; CHAMA ROT. DE ESCRITA NO LCD

INC R1 ; INCREM. POSI O DO PONTEIRO

ACALL WAIT01S ; CHAMA ROT. DE ATRASO DE 100ms

INC R0 ; INCREM. CONTADOR DE DIGITOS

CJNE R0, #DIGIT, COLUNA2 ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

62
4 Exemplos de Apli ao

LINCOL21: JB P1.4,LINCOL31 ; SE N O PRESSIONADO VAI P/ LINHA3

MOV R1,#34H ; CASO CONTRRIO DGITO 4 (34H)

MOV A,# ' * ' ; COLOCA UM ' * ' NO LCD

ACALL WR_DADO ; CHAMA ROTINA DE ESCRITA NO LCD

INC R1 ; INCREMENTA POSI O DO PONTEIRO

ACALL WAIT01S ; CHAMA ROT. DE ATRASO DE 100ms

INC R0 ; INCREM. CONTADOR DE DIGITOS

CJNE R0, #DIGIT, COLUNA2 ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

LINCOL31: JB P1.5,COLUNA2 ; SE N O PRESSIONADO VAI P/ COL.2

MOV R1,#37H ; CASO CONTRRIO O DGITO 7

MOV A,# ' * ' ; COLOCA UM ' * ' NO LCD

ACALL WR_DADO ; CHAMA ROTINA DE ESCRITA NO LCD

INC R1 ; INCREM. POSI O DO PONTEIRO

ACALL WAIT01S ; CHAMA ROT. DE ATRASO DE 100ms

INC R0 ; INCREM. CONTADOR DE DIGITOS

CJNE R0, #DIGIT, COLUNA2 ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

;***********TESTE DA COLUNA 2 DO TECLADO***************************************

COLUNA2: MOV P1,#COL2 ; ATIVA COLUNA2 DO TECLADO

LINCOL12: JB P1.3,LINCOL22 ; SE N O PRESSIONADO VAI P/ LINHA2

MOV R1,#31H ; CASO CONTRRIO O DGITO 2

MOV A,# ' * ' ; COLOCA UM ' * ' NO LCD

ACALL WR_DADO ; CHAMA ROT. DE ESCRITA NO LCD

INC R1 ; INCREM. POSI O DO PONTEIRO

ACALL WAIT01S ; CHAMA ROT. DE ATRASO DE 100ms

INC R0 ; INCREM. CONTADOR DE DIGITOS

CJNE R0, #DIGIT, COLUNA3 ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

LINCOL22: JB P1.4,LINCOL32 ; SE N O PRESSIONADO VAI P/ LINHA3

MOV R1,#35H ; CASO CONTRRIO O DGITO 5

MOV A,# ' * ' ; COLOCA UM ' * ' NO LCD

ACALL WR_DADO ; CHAMA ROT. DE ESCRITA NO LCD

INC R1 ; INCREM. POSI O DO PONTEIRO

ACALL WAIT01S ; CHAMA ROT. DE ATRASO DE 100ms

INC R0 ; INCREM. CONTADOR DE DIGITOS

CJNE R0, #DIGIT, COLUNA3 ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

63
4 Exemplos de Apli ao

LINCOL32: JB P1.5,LINCOL42 ; SE N O PRESSIONADO VAI P/ LINHA4

MOV R1,#38H ; CASO CONTRRIO O DGITO 8

MOV A,# ' * ' ; COLOCA UM ' * ' NO LCD

ACALL WR_DADO ; CHAMA ROTINA DE ESCRITA NO LCD

INC R1 ; INCREM. POSI O DO PONTEIRO

ACALL WAIT01S ; CHAMA ROT. DE ATRASO DE 100ms

INC R0 ; INCREM. CONTADOR DE DIGITOS

CJNE R0, #DIGIT, COLUNA3 ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

LINCOL42: JB P1.6,COLUNA3 ; SE N O PRESSIONADO VAI P/ COL.3

MOV R1,#30H ; CASO CONTRRIO O DGITO 0 (30H)

MOV A,# ' * ' ; COLOCA UM ' * ' NO LCD

ACALL WR_DADO ; CHAMA ROT. DE ESCRITA NO LCD

INC R1 ; INCREM. POSI O DO PONTEIRO

ACALL WAIT01S ; CHAMA ROT. DE ATRASO DE 100ms

INC R0 ; INCREM. CONTADOR DE DIGITOS

CJNE R0, #DIGIT, COLUNA3 ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

;***********TESTE DA COLUNA 3 DO TECLADO***************************************

COLUNA3: MOV P1,#COL3 ; ATIVA COLUNA3 DO TECLADO

LINCOL13: JB P1.3,LINCOL23 ; SE N O PRESSIONADO VAI P/ LINHA2

MOV R1,#33H ; CASO CONTRRIO O DGITO 3

MOV A,# ' * ' ; COLOCA UM ' * ' NO LCD

ACALL WR_DADO ; CHAMA ROTt DE ESCRITA NO LCD

INC R1 ; INCREMt POSI O DO PONTEIRO

ACALL WAIT01S ; CHAMA ROT. DE ATRASO DE 100ms

INC R0 ; INCREM. CONTADOR DE DIGITOS

CJNE R0, #DIGIT, REPVAR ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

LINCOL23: JB P1.4,LINCOL33 ; SE N O PRESSIONADO VAI P/ LINHA3

MOV R1,#36H ; CASO CONTRRIO O DGITO 6

MOV A,# ' * ' ; COLOCA UM ' * ' NO LCD

ACALL WR_DADO ; CHAMA ROT. DE ESCRITA NO LCD

INC R1 ; INCREM. POSI O DO PONTEIRO

ACALL WAIT01S ; CHAMA ROT. DE ATRASO DE 100ms

INC R0 ; INCREM. CONTADOR DE DIGITOS

CJNE R0, #DIGIT, REPVAR ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

64
4 Exemplos de Apli ao

LINCOL33: JB P1.5,REPVAR ; SE NADA PRESSIONADO VAI P/ LINHA4

MOV R1,#38H ; CASO CONTRRIO DGITO 8 (38H)

MOV A,# ' * ' ; COLOCA UM ' * ' NO LCD

ACALL WR_DADO ; CHAMA ROT. DE ESCRITA NO LCD

INC R1 ; INCREM. POSI O DO PONTEIRO

ACALL WAIT01S ; CHAMA ROT. DE ATRASO DE 100ms

INC R0 ; INCREM. CONTADOR DE DIGITOS

CJNE R0, #DIGIT, REPVAR ; SE BYTE LIDO = 0, FIM DE MENSAG.

RET ; RETORNO DE ROTINA

REPVAR: AJMP COLUNA1 ; VAI P/ COLUNA1 NOVAMENTE

;***********TESTE DA COLUNA 3 DO TECLADO**************************************

DISPCOD: MOV A,#0C0H ; POSICIONA CURSOR NA LINHA 2

ACALL WR_CMD ; ENVIA COMANDO P/ O LCD

MOV R0,#0 ; INICIALIZA CONTADOR DE DGITOS

MOV R1,#PONTCOD ; INICIALIZA PONTEIRO DO CDIGO

DISP: MOV A,R1 ; L DGITOS DO CDIGO

ACALL WR_DADO ; ENVIA OS DGITOS P/ O LCD

INC R1 ; INCREM. PONTEIRO DE CDIGO

INC R0 ; INCREM. CONTADOR DE DGITOS

CJNE R0, #DIGIT, DISP ; VERIFICA SE TODOS DIGITOS LIDOS

RET ; RETORNO DE ROTINA

;***********FINAL DO PROGRAMA****************************************************

END

4.8 Interfa e om Motor de Passo Unipolar


Para a interfa e entre um elemento da famlia 8051 om um motor de passo pode-se

utilizar o ir uito integrado ULN2003, bastante popular para este tipo de interfa e. Este

C.I. tem 6 pinos de entrada de sinais lgi os que so usados para o omando de 6 haves

baseadas em transistores darlington. Cada um destes transistores tem uma apa idade

de orrente de 500mA por perodos urtos, e podero ser usados para a ionar as argas

omo: bobinas de rels, bobinas de motores de passo, LED's, et . No aso de argas

indutivas, a ada sada darlington est asso iada um diodo de roda-livre, sendo portanto

eliminada a ne essidade destes.

A gura 4.10 mostra omo se pode one tar um motor de passo unipolar a um ULN2003,

e este aos pinos P1.0 a P1.3 da porta P1 do 8051, e assim ontrolar este motor de passo

energizando-se as suas bobinas atravs do ULN2003 one tado a uma fonte de 12V om

potn ia su inte para a demanda de energia do motor de passo.

65
4 Exemplos de Apli ao

Figura 4.10: A ionamento de Motor de Passo Unipolar

Para que o motor de passo gire no sentido horrio ne essrio que as bobinas (B1...B4)

sejam energizadas onforme a sequn ia apresentada na tabela a seguir:

B4 B2 B3 B1
P1.3 P1.2 P1.1 P1.0

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

1 0 0 0

0 1 0 0

... ... ... ...

O tre ho de programa a seguir ilustra omo se pode fazer o motor de passo girar no

sentido horrio:

;*********DEFINIES PARA O ACIONAMENTO DAS BOBINAS****************************

PASSO1 EQU 8 ; VALOR P/ ACIONAR A BOBINA 1

PASSO2 EQU 4 ; VALOR P/ ACIONAR A BOBINA 2

PASSO3 EQU 2 ; VALOR P/ ACIONAR A BOBINA 3

PASSO4 EQU 1 ; VALOR P/ ACIONAR A BOBINA 4

... ... ...

;*********GIRO NO SENTIDO HORRIO***************************************************

LOOP: MOV P1,#PASSO1 ; ENVIA DADO P/ ACIONAR A BOBINA 1

LCALL ATRASO ; CHAMA ROTINA DE ATRASO

66
4 Exemplos de Apli ao

MOV P1,#PASSO2 ; ENVIA DADO P/ ACIONAR A BOBINA 1

LCALL ATRASO ; CHAMA ROTINA DE ATRASO

MOV P1,#PASSO3 ; ENVIA DADO P/ ACIONAR A BOBINA 1

LCALL ATRASO ; CHAMA ROTINA DE ATRASO

MOV P1,#PASSO4 ; ENVIA DADO P/ ACIONAR A BOBINA 1

LCALL ATRASO ; CHAMA ROTINA DE ATRASO

SJMP LOOP ; LOOP INFINITO

;***********FINAL DO PROGRAMA***********************************************

END

4.9 Expanso das Interrupes Externas


Quando se deseja mais de duas fontes de interrupo externa pode-se usar um artif io de

software no qual alm dos pinos INT0 e INT1 pode-se usar os pinos T0, T1, e RXD para

gerar interrupes externas, possibilitando assim at 5 interrupes externas, usando-se

as rotinas de interrupo dos T/C0 e T/C1, alm do Canal Serial para tratar os sinais

apli ados aos pinos T0, T1, e RXD omo pinos de interrupo externa.

Desta forma as seguintes onsideraes devero ser observadas:

Os T/C0 e/ou T/C1, devero ser programados no modo 2 omo ontadores e om

o valor ini ial de ontagem em FFH;

As interrupes dos T/C0 e/ou T/C1 devero ser habilitadas;

Um pulso negativo apli ado no pino T0 ou T1, imediatamente desvia o programa

para o endereo do vetor de interrupo do T/C0 ou T/C1, respe tavamente;

Ao ser exe utada a rotina de interrupo do T/C0 ou T/C1 dar tratamento ao

perifri o omo sendo originado de uma interrupo externa, no pino T0 ou T1;

Com relao ao Canal Serial, este deve ser olo ado no modo 2, e sua interrupo

habilitada;

Quando houver uma transio de alto para baixo no pino RXD, este desvia o pro-

grama para o endereo do vetor de interrupo do anal serial (23H);

Ao ser exe utada a rotina de interrupo do anal serial, o bit de habilitao de

re epo RI deve ser resetado, e ser dado tratamento ao perifri o omo sendo

originado de uma interrupo externa no pino RXD.

A seguir a listagem ne essria para o esquema expli ado a ima, onde as instrues NOP
devero ser tro adas por instrues espe  as do programa que se deseja exe utar.:

67
4 Exemplos de Apli ao

ORG 0 ; ENDEREO DE RESET

LJMP INICIO ; DESVIA P/ PROGRAMA PRINCIPAL

ORG 3 ; ENDEREO DE DESVIO DA INTERRUP. EXT. 0

AJMP EX0INT ; DESVIA P/ ROT. DE INT. EXT. 0

ORG 0BH ; ENDEREO DE DESVIO DA INTERRUP. T/C0

AJMP T0INT ; DESVIA P/ ROT. DE INT. T/C0

ORG 13H ; ENDEREO DE DESVIO DA INTERRUP. EXT. 1

AJMP EX1INT ; DESVIA P/ ROT. DE INT. EXT. 1

ORG 1BH ; ENDEREO DE DESVIO DA INTERRUP. T/C1

AJMP T1INT ; DESVIA P/ ROT. DE INT. T/C1

ORG 23H ; ENDEREO DE DESVIO DA INTERRUP. SERIAL

AJMP SERINT ; DESVIA P/ ROT. DE INT. DO CANAL SERIAL

;*****************INICIO DO PROGRAMA PRINCIPAL************************

INICIO: MOV SP, #7FH ; PILHA LOCALIZADA NO END. 7FH DA RAM

MOV TMOD,#66H ; MODO 2 P/ OS DOIS T/C'S

MOV A, #0FFH ; VALOR INICIAL P/ OS DOIS T/C'S O MAXIMO

MOV TL0, A ; INICIALIZA VALOR INICIAL P/ O T/C0

MOV TH0, A ; INICIALIZA VALOR INICIAL P/ O T/C0

MOV TL1, A ; INICIALIZA VALOR INICIAL P/ O T/C1

MOV TH1, A ; INICIALIZA VALOR INICIAL P/ O T/C1

SETB ET0 ; SELECIONA A HABILITA O DA INT. DO T/C0

SETB ET1 ; SELECIONA A HABILITA O DA INT. DO T/C1

SETB ES ; SELECIONA A HABILITA O DA INT. DA SERIAL

SETB EA ; HABILITA TODAS AS INTERRUP. SELECIONADAS

SETB TR0 ; DISPARA O T/C0

SETB TR1 ; DISPARA O T/C1

ESPERA: NOP ; DECLARAES DO PROGRAMA PRINCIPAL

JMP ESPERA ; EXECU O DO PROGRAMA PRINCIPAL

;***********ROTINAS DE INTERRUPCAO EXTERNAS ADCIONAIS****************

SERINT: NOP ; DECLARAES DA ROT. DE INTERRUP. ADCIONAL

CLR RI ; RESETA FLAG DE RECEP O

RETI ; RETORNO DE INTERRUP O

T0INT: NOP ; DECLARAES DA ROT. DE INTERRUP. ADCIONAL

RETI ; RETORNO DE INTERRUP O

T1INT: NOP ; DECLARAES DA ROT. DE INTERRUP. ADCIONAL

RETI ; RETORNO DE INTERRUP O

;***********FINAL DO PROGRAMA*********************************************

END

68
4 Exemplos de Apli ao

4.10 Envio de Dados via Canal Serial


O programa a seguir pode ser usado para se testar a omuni ao serial entre o 8051 e

um mi ro omputador PC, e implementa o envio de forma ontnua as letras do alfabeto

de a at z a uma taxa de 9600bps.

ORG 0 ; INCIO DO CDIGO EM 0000H

LJMP INICIO ; DESVIO P/ O PROGRAMA PRINCIPAL

;*****************INICIO DA ROT. DE INT. DO CANAL SERIAL******************

ORG 23H ; ENDEREO DE DESVIO DA INT. DO CANAL SERIAL

CJNE A,#'z',SAIDA ; COMPARA DADO A SER ENVIADO COM 'z'

SAIDA: MOV SBUF, A ; ENVIA PRXIMO CARACTER

INC A ; INCREMENTA A P/ PROXIMO CARACTER

CLR TI ; RESETA FLAG DE TRANSMISS O

RETI ; VOLTA AO PROGRAMA PRINCIPAL

;*****************INICIO DO PROGRAMA PRINCIPAL************************

INICIO: MOV PCON, #0 ; DEIXA BIT SMOD EM 0

MOV TMOD, #20H ; PROGRAMA T/C1 NO MODO AUTORELOAD

MOV TH1, #0FDH ; P/ TAXA DE 9600BPS

MOV TL1, #0FDH ; P/ TAXA DE 9600BPS

SETB TR1 ; INICIA GERA O DO BAUD-RATE

MOV SCON, #40H ; CANAL SERIAL COMO UART C/ TAXA VARIVEL

SETB TI ; INICIALIZA FLAG DE TRANSMISS O

MOV A, #a' ; PRIMEIRO CARACTER A SER ENVIADO

MOV IE, #90H ; INTERRUP O DO CANAL SERIAL HABILITADA

SJMP $ ; LOOP INFINITO

END ; FIM DO CDIGO

4.11 Rotina de Gerao de Beep


Uma rotina de gerao de um Beep gerado num tom de 440Hz por 1 segundo sempre que

uma interrupo externa disparada, pode ser til em um grande nmero de apli aes,

da ser apresentada neste exemplo. Mais uma vez o T/C1 ser usado no modo 1, uma vez

que o perodo da onda de 440Hz esta na faixa dos miligegundos (2,5ms), e somente uma

ontagem em 16 bits apaz de gerar tempos nesta faixa.

O T/C0 aqui tambm estar no modo 1 de 16 bits, uma vez que o tempo de ativao

do tom de 440Hz ser de 1 segundo, o que pode ser gerado por um tempo de 50ms

multipli ado por 20 (50ms x 20 = 1 s). Ento o T/C0 dever gerar 20 interrupes a ada

50ms para totalizar 1 segundo.

A seguir o digo do programa:

69
4 Exemplos de Apli ao

ORG 0 ; INCIO DO CDIGO EM 0000H

LJMP INICIO ; DESVIO P/ O PROGRAMA PRINCIPAL

LJMP EX0INT ; DESVIA P/ ROT. DE INT. EXT. 0

ORG 0BH ; ENDEREO DE DESVIO DA INT. DO T/C 0

LJMP T0INT ; DESVIA P/ ROT. DE INT. T/C 0

ORG 1BH ; ENDEREO DE DESVIO DA INT. DO T/C 1

LJMP T1INT ; DESVIA P/ ROT. DE INT. T/C 1

ORG 30H ; INCIO DO PROGRAMA PRINCIPAL

;*****************INICIO DO PROGRAMA PRINCIPAL************************

INICIO: SETB IT0 ; ATIVA O DA INT0 NA BORDA DE DESC.

MOV TMOD, #11H ; AMBOS OS T/C'S COMO TEMPORIZ. DE 16BITS

MOV IE, #81H ; HABILITA SOMENTE A INT. EXTERNA 0

LOOP: SJMP LOOP ; LOOP INFINITO

;*****************ROTINA DE INTERRUP O INT0*********************

EX0INT: MOV R7,#20 ; R7 C/ VALOR DE CONTAGEM DE REPETI O

SETB TF0 ; DEIXA A INTERRUP O DO T/C0 PENDENTE

SETB TF1 ; DEIXA A INTERRUP O DO T/C1 PENDENTE

SETB ET0 ; SELECIONA A INT. DO T/C0 P/ HABILITA O

SETB ET1 ; SELECIONA A INT. DO T/C1 P/ HABILITA O

RETI ; RETORNO DE INTERRUP O

;*****************ROTINA DE INTERRUP O DO T/C0******************

T0INT: CLR TR0 ; PARA A CONTAGEM NO T/C0

DJNZ R7, SAI ; CONTROLE DE REPETI O DA ROTINA P/ 20X

CLR ET0 ; DESABILITA A INTERRUP O DO T/C0

CLR ET1 ; DESABILITA A INTERRUP O DO T/C0

RETI ; RETORNO DE INTERRUP O

SAI: MOV TH0, #HIGH(-50000) ; RECARREGA O VALOR INICIAL DE CONTAGEM

MOV TL0, #LOW(-50000) ; P/ 50ms EM TH0 E TL0

SETB TR0 ; DISPARA O T/C0 NOVAMENTE

FIM: RETI ; RETORNO DE INTERRUP O

;*****************ROTINA DE INTERRUP O DO T/C1******************

T1INT: CLR TR1 ; PARA A CONTAGEM NO T/C1

MOV TH1,#HIGH(-1250) ; RECARREGA O VALOR INICIAL DE

MOV TL1,#LOW(-1250) ; CONTAGEM P/ 440Hz C/ XTAL DE 12MHz

CPL P1.7 ; GERA A ONDA QUADRADA DE 440Hz

SETB TR1 ; DISPARA O T/C1 NOVAMENTE

RETI ; RETORNO DE INTERRUP O

;*****************FINAL DO PROGRAMA******************************

END

70
4 Exemplos de Apli ao

4.12 Dimmer Mi ro ontrolado om AT89C2051


Neste item apresentado um exemplo ompleto de implementao de um dimmer mi ro-

ontrolado simples.

A gura 4.9, a seguir, apresenta o ir uito do dimmer, onde se observa que 4 haves

push-button sele ionam as potn ias de 100%, 75%, 50% e 0% entregue arga. Como

pode ser visto na gura, este projeto tem omo base o mi ro ontrolador AT89C2051 om

pinagem de 20 pinos, e 15 linhas de E/S, o su inte para a presente apli ao.

O dimmer utiliza um TRIAC TIC226, disparado atravs de um fotoa oplador MOC3011,

e os pulsos de disparo so forne idos pelo pino P1.7 do AT89C2051.

A idia bsi a usar um dos T/C's para gerar os tempos de atraso ne essrios gerao

dos ngulos de disparo do TRIAC orrespondendo s potn ias de 100%, 75%, 50%, e

potn ia de 0% orresponder a inibio o pulso de disparo. O outro T/C ser usado

para a durao do pulso de disparo.

Os valores das onstantes de arga dos registros de ontagem TH0 e TL0 sero bus ados

dos registros R1 e R2, sempre que for ser gerado o atraso de tempo para o disparo, e os

valores que os registros R1 e R2 re ebero estaro rela ionados have push-button

pressionada.

Os valores de atraso de tempo para o disparo foram feitos em 500us para 100% de

potn ia, 2,25ms para 75%, 4,50ms para 50%, e 6,80ms para 25% de potn ia.

Para que os pulsos de disparo do TRIAC sejam sin ronizados om a rede CA, um

ir uito baseado em um reti ador em onda ompleta e um transistor do tipo BC548

forne e os pulsos que orrespondem ao ruzamento da tenso da rede por 0V, sendo estes

enviados ao pino de interrupo INT0 do mi ro ontrolador.

Figura 4.11: Dimmer Mi ro ontrolado

A seguir o digo do programa:

71
4 Exemplos de Apli ao

ORG 0000 ;ENDEREO DE RESET

LJMP INICIO ; DESVIO P/ O PROGR. PRINCIPAL

LJMP EX0INT ; DESVIO P/ A ROTINA DE INTERRUP. EXT. 0

ORG 000BH ; VETOR DE INTERRUP. DO T/C0

LJMP T0INT ; DESVIO P/ A ROT. DE INTERRUP. DO T/C0

;*****************ROTINA DE INTERRUP O T/C1**************************

ORG 001BH ; VETOR DE INTERRUP. DO T/C1

CLR TR1 ; PARA A CONTAGEM DO T/C1

SETB P1.7 ; DESATIVA O PINO DO FOTOACOPLADOR

RETI ; RETORNO DE INTERRUP O

ORG 0030H ; ENDEREO DE INICIO DO PROGR. PRINCIPAL

;*****************INICIO DO PROGRAMA PRINCIPAL************************

INICIO: SETB P1.7 ; DESATIVA O PINO DO FOTOACOPLADOR

MOV TMOD, #11H ; MODO TEMP. DE 16 BITS PARA OS T/C0 E 1

MOV TH1, #HIGH(-800) ; VALOR INICIAL DE CONTAGEM P/ 800us

MOV TL1, #LOW(-800) ; QUE SER A DURA O DO PULSO DE DISPARO

SETB IT0 ; ATIVA O DA INT0 NA BORDA DE DESCIDA

SETB EA ; HABILITA AS INTERRUPES SELECIONADAS

LOOP: JNB P1.2, POT100 ; PUSH-BUTTON DE 100% DE POTENCIA

JNB P1.3, POT75 ; PUSH-BUTTON DE 100% DE POTENCIA

JNB P1.4, POT50 ; PUSH-BUTTON DE 100% DE POTENCIA

JNB P1.5, POT25 ; PUSH-BUTTON DE 100% DE POTENCIA

JNB P1.6, POT0 ; PUSH-BUTTON DE 100% DE POTENCIA

SJMP LOOP ; MONITORA O CONTNUA DOS PUSH-BUTTON

POT100: MOV R1, #0FEH ; CARREGA TEMPO DE ATRASO DA GERA O

MOV R2, #00H ; DO SINAL DE GATILHO (550us)

SETB EX0 ; HABILITA INTERRUP O EXTERNA 0

SJMP LOOP ; VOLTA A MONITORAR AS CHAVES

POT75: MOV R1, #0F7H ; CARREGA TEMPO DE ATRASO DA GERA O

MOV R2, #E2H ; DO SINAL DE GATILHO (2,25ms)

SETB EX0 ; HABILITA INTERRUP O EXTERNA 0

SJMP LOOP ; VOLTA A MONITORAR AS CHAVES

POT50: MOV R1, #0EFH ; CARREGA TEMPO DE ATRASO DA GERA O

MOV R2, #C4H ; DO SINAL DE GATILHO (4,5ms)

SETB EX0 ; HABILITA INTERRUP O EXTERNA 0

SJMP LOOP ; VOLTA A MONITORAR AS CHAVES

72
4 Exemplos de Apli ao

POT25: MOV R1, #0E7H ; CARREGA TEMPO DE ATRASO DA GERA O

MOV R2, #0B1H ; DO SINAL DE GATILHO (6,8ms)

SETB EX0 ; HABILITA INTERRUP O EXTERNA 0

SJMP LOOP ; VOLTA A MONITORAR AS CHAVES

POT0: CLR EX0 ; DESABILITA INTERRUP O EXTERNA 0

CLR ET0 ; DESABILITA INTERRUP O DO T/C0

CLR ET1 ; DESABILITA INTERRUP O DO T/C1

SETB P1.7 ; DESATIVA SINAL DE GATILHO

SJMP LOOP ; VOLTA A MONITORAR AS CHAVES

;*****************ROTINA DE INTERRUP O INT0**************************

EX0INT: MOV TH0, R1 ; CARREGA TEMPO DE ATRASO DA GERA O

MOV TL0, R2 ; DO SINAL DE GATILHO EM TH0 E TL0

SETB ET0 ; HABILITA INTERRUP O DO T/C0

SETB TR0 ; DISPARA O T/C0

RETI ; RETORNA PARA O PROGRAMA PRINCIPAL

;*****************ROTINA DE INTERRUP O DO T/C0******************

T0INT: CLR P1.7 ; ATIVA SINAL DE GATILHO

MOV TH1, #HIGH(-800) ; CARREGA TEMPO DE DURA O DO

MOV TL1, #LOW(-800) ; SINAL DE GATILHO

SETB ET1 ; HABILITA INTERRUP O DO T/C1

SETB TR1 ; DISPARA T/C1

RETI ; RETORNA PARA O PROGRAMA PRINCIPAL

4.13 Programas Propostos


Programa Proposto 1:

Implemente um sistema de aquisio de dados que armazene os valores forne idos por um

sensor de temperatura one tado a um onversor A/D tipo R/2R, omo o do exemplo

4.4, sendo a taxa de amostragem de 2 amostras por minuto, e a amazenagem feita em

uma memria externa do tipo 6264. A memria externa deve ser implementada omo um

buer ir ular, no qual aps as 8192 amostras terem sidos armazenadas, volta-se ao in io

da memria sobrees revendo os dados anteriores.

Programa Proposto 2:

Implemente o mesmo sistema de aquisio anterior, usando um ADC08004 omo no exem-

plo 4.5, e om uma taxa de amostragem de 1 amostra por minuto.

73
4 Exemplos de Apli ao

Programa Proposto 3:

Elabore um sistema baseado nos exemplos propostos anteriores que registre os valores

mximos e mnimos provenientes do onversor A/D tipo ADC0804 one tado ao sensor

de temperatura a ada pa ote de 8KB de dados.

Programa Proposto 4:

Com base no exer io proposto anterior elabore um sistema que apresente ontinuamente

no LCD os valores mximos e mnimos orrentes da temperatura sendo monitorada para

um pa ote de 8KB de dados.

Programa Proposto 5:

Modique o exemplo de apli ao 4.5 para que ao invs de se armazenar os dados em uma

memria SRAM, estes sejam transmitidos serialmente a uma taxa de 9600bps para um

mi ro omputador PC.

Programa Proposto 6:

No exemplo 4.4 foi mostrado um sistema de aquisio de dados baseado em um ADC tipo

R/2R de 7 bits de resoluo, porm se deseja uma resoluo de 8 bits de forma a melhorar

a qualidade dos dados. Faa um novo esquema eltri o e es reva um novo digo para

atender a exign ia a ima.

74
5 IDE KEIL uVision2

5.1 A Interfa e Gr a do uVision2


O Ambinte Integrado de Desenvolvimento (IDE) uVision2, da empresa Keil In ., um

pa ote de apli ativos de desenvolvimento para a plataforma 8051, integrados em uma

interfa e gr a ni a, ontendo os seguintes apli ativos:

Compilador C

Assembler

Linker

Debugger

Link om Monitor em Hardware

Sendo um dos melhores e mais difundidos IDE's para a plataforma 8051, disponveis no

mer ado, possui uma verso de avaliao que pode ser baixada gratuitamente da internet,

e que totalmente fun ional at 2Kbytes de digo.

A gura 4.1 apresenta a interfa e gr a do uVision2, exe utando a simulao de um

programa em linguagem assembly, ujo digo fonte o arquivo onda10k.asm, o qual foi

apresentado no item 3.3.2. O programa tem omo funo gerar uma onda quadrada de

10KHz no pino P1.7 do 8051.

Observa-se da tela da gura 4.1, que o fun ionamento dos perifri os utilizados no

programa fonte, ou seja: Temporizador/Contador0, porta P1, e interrupo do T/C0,

podem ser a ompanhados na simulao, atravs de janelas representando estes perifri os,

possibilitando assim veri ar om pre iso a exe uo do programa, e deteo de qualquer

erro de lgi a.

75
5 IDE KEIL uVision2

Figura 5.1: Aspe to da Interfa e do Usurio do uVision2

Com o propsito de ilustrar todas as etapas envolvidas no desenvolvimento de software

para o 8051 usando o uVision2, ser usado o exemplo da gerao de uma onda quadrada

de 10KHz, referido antes.

Todo o desenvolvimento de software no uVision2 deve seguir as seguintes etapas:

Criao de um novo projeto

Seleo do dispositivo a ser usado no projeto

Edio do digo fonte em assembly ou linguagem C

Adio do digo fonte ao projeto

Gerao do digo exe utvel

Simulao ou Debug

Os itens a seguir ilustram passo a passo o desenvolvimento do projeto a ima referido.

5.2 Criao de um Projeto no uVision2


Ao se ini iar o uVision2, a tela ini ial se mostrar omo na gura 4.2.

76
5 IDE KEIL uVision2

Figura 5.2: Tela ini ial do uVision2

Na barra de ferramentas sele ione a opo Proje t, e sub-opo New, omo mostrado

na gura 4.3.

Figura 5.3: Criao de um novo projeto

A janela Create New Proje t se abre, e nesta deve-se atribuir um nome ao projeto,

espe i ando o diretrio/sub-diretrio de destino, ver gura 4.4.

77
5 IDE KEIL uVision2

Figura 5.4: Atribuindo um nome ao projeto

Na janela seguinte de ttulo: 'Sele t Devi e for Target Target1', uma lista de fabri antes

apresentada, assim omo os dispositivos existentes destes fabri antes.

Figura 5.5: Es olha do dispositivo do projeto

A gura 4.6. mostra a es olha de um fabri ante/dispositivo da famlia 8051 que ser

alvo do desenvolvimento.

78
5 IDE KEIL uVision2

Figura 5.6: Es olha do dispositivo da famlia 8051

Aps a es olha do dispositivo alvo para o desenvolvimento, ser apresentada uma aixa

de mensagem para a es olha da in luso ou no do digo de Start-Up, neste ponto deve-se

es olher a opo No, e assim deixar o digo mais inxuto, gura 4.7.

Figura 5.7: In luso ou no do digo de Start-Up

O passo seguinte a edio do digo fonte, e para isso a barra de ferramentas sele ione

a opo File, sub-opo New, omo na gura 4.8.

79
5 IDE KEIL uVision2

Figura 5.8: Criao do digo fonte

A janela de edio se abrindo, pode-se pro eder a edio do digo fonte em C ou

assembly, ver gura 4.9.

Figura 5.9: Janela de edio do digo fonte

Na gura 4.10, pode-se ver um digo fonte editado e pronto para ser salvo atravs da

opo Save As do menu File. Al um nome om extenso asm deve ser espe i ado.

80
5 IDE KEIL uVision2

Figura 5.10: Cdigo fonte pronto para ser salvo

Cdigo fonte em linguagem assembly, aps salvo deve ser adi ionado ao projeto. Cli-

ando duas vezes no one Target1, da janela Proje t Workspa e, o one Sour e Group1

apare e, ver gura 4.11.

Figura 5.11: In luindo um arquivo fonte

No one Sour e Group1 ao se li ar om o boto direito do mouse, apare e a opo

Add Sour e File, ver gura 4.12.

81
5 IDE KEIL uVision2

Figura 5.12: Adio de arquivo fonte ao projeto

Na janela de seleo de arquivo deve-se sele ionar o arquivo fonte que se deseja in luir

no projeto, aso haja mais de um arquivo fonte deve-se repetir a operao, aso ontrrio

deve-se li ar em Close, ver gura 4.13.

Figura 5.13: Adio de arquivo fonte ao projeto

O(s) arquivo(s) fonte in luido(s) apare ero na lista referente ao one Sour e Group1,

ver gura 4.14.

82
5 IDE KEIL uVision2

Figura 5.14: Criando o arquivo exe utvel

Com o projeto riado, pode-se exe utar os programas assembler e linker, invo ados no

menu Proje t, opo Build Target, ver gura 4.15.

Figura 5.15: Criando o programa exe utvel

Caso o programa fonte ontenha erros/avisos, estes so apresentados na janela Output

Window. A gura 4.16. mostra que no h erros no programa fonte.

83
5 IDE KEIL uVision2

Figura 5.16: Programa exe utvel riado sem erros/warnings

A etapa seguinte a de simulao, ou debug, e identi ar possveis erros de lgi a.

Para isso deve-se no menu Debug es olher a opo Start/Stop Debugging, ver gura 4.17.

Figura 5.17: Ini iando uma sesso de debug

A mensagem mostrada na gura 4.18. apresentada indi ando a limitao em 2KB da

verso de avaliao do uVision2.

84
5 IDE KEIL uVision2

Figura 5.18: Mensagem indi ando a limitao da verso de avaliao

Aps a mensagem de verso avaliao, a janela de digo apresentar uma seta na

primeira instruo do programa indi ando a posio do ontador de programa, ver gura

4.19.

Figura 5.19: Simulao passo a passo

Ao se exe utar o programa passo a passo, atravs da opo Step Into do menu Debug,

a seta segue o uxo de exe uo do programa, ver gura 4.20.

85
5 IDE KEIL uVision2

Figura 5.20: Exe uo passo a passo do programa

Para a ompanhar a habilitao e gerao de interrupes na simulao, uma janela de

interrupes pode ser olo ada no ambinte de trabalho, atravs do menu Peripherals,

opo Interrupts,ver gura 4.21.

Figura 5.21: Controlando as interrupes

A gura 4.22, mostra a janela de Interrupes na rea de trabalho.

86
5 IDE KEIL uVision2

Figura 5.22: Janela do ontrole de interrupes sendo mostrada

Caso se deseje monitorar a porta 1, possvel ter a janela de simulao da porta 1

presente no ambinte de trabalho. Para tanto, no menu Peripherals es olher a opo IO

Ports, sub-opo Port1, ver gura 4.23.

Figura 5.23: Seleo da janela Port1

A gura 4.24 apresenta a rea de trabalhho om a janela que simula a porta 1 possibi-

litando assim a ompanhar a atualizao dos pinos desta porta.

87
5 IDE KEIL uVision2

Figura 5.24: Janela do ontrole de interrupes sendo mostrada

O fun ionamento do Temporizador/Contador0 tambm pode ser a ompanhado, para

isto sele ione no menu Peripherals, a opo Timers, sub-opo Timer0, ver gura 4.24.

Figura 5.25: Janela do ontrole de interrupes sendo mostrada

Finalmente, na gura 4.25, os trs perifri os usados no programa esto disponveis

para visulizao em trs janelas da rea de trabalho.

88
5 IDE KEIL uVision2

Figura 5.26: Perifri os usados no programa sendo visualizados

89
Refern ias Bibliogr as
[1 80C51-Based 8-Bit Mi ro ontrollers - Databook, Philips Semi ondu tors, Julho de

1994;

[2 Appli ation Notes for 80C51-Based 8-Bit Mi ro ontrollers - Databook, Philips Semi-

ondu tors, Julho de 1993;

[3 Apli aes Prti as do Mi ro ontrolador 8051, Silva Jnior, Vidal Pereira da. Editora

ri a, 2003.

[4 Mi ro ontroladores 8051: Teoria do Hardware e do Software/Apli aes em Controle

Digital/Laboratrio e Simulao. Gimenez, Salvador Pinillos. Editora Prenti e Hall,

2002.

[5 The 8051 Mi ro ontroller. Makenzie I. S ott. Prenti e Hall, 1995.

90

Você também pode gostar