Você está na página 1de 89

Colégio Técnico de Campinas – Cotuca – Disciplina - TDM II

Microcontroladores
Família MCS51

Colégio Técnico de Campinas – COTUCA


Disciplina – TDM II- Departamento Eletroeletrônica

TDMII – www.corradi.junior.nom.br - Introdução aos Microcontroladores – MCS51


Sumário
1 Introdução 6

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

1.1.1 Des rição dos Cir uitos de um Sistema Mínimo . . . . . . . . . . . 6

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

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

2 A Família 8051 de Mi ro ontroladores 9

2.1 Cara terísti as Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

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

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

2.3.1 Des rição dos Pinos . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.4 A esso à Memória Externa . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.5 Organização da Memória do 8051 . . . . . . . . . . . . . . . . . . . . . . . 14

2.5.1 Memória de Programa do 8051 . . . . . . . . . . . . . . . . . . . . 14

2.5.2 Memória de Dados do 8051 . . . . . . . . . . . . . . . . . . . . . . 15

Memória de Dados Externa . . . . . . . . . . . . . . . . . . . . . . 15

Memória de Dados Interna . . . . . . . . . . . . . . . . . . . . . . . 16

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

Registros de Funções Espe iais . . . . . . . . . . . . . . . . . . . . 17

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

2.6 Portas de Entrada e Saída do 8051 . . . . . . . . . . . . . . . . . . . . . . 19

2.7 Interrupções no 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.7.1 Registro de Habilitação de Interrupções - IE . . . . . . . . . . . . . 21

2.7.2 Registro de Controle de Prioridade de Interrupção - IP . . . . . . . 22

2.7.3 Ativação das Interrupções Externas por Borda ou Nível - Bits IT0

e IT1 do Registro TCON . . . . . . . . . . . . . . . . . . . . . . . . 23

2.8 Temporizadores/Contadores 0 e 1 . . . . . . . . . . . . . . . . . . . . . . . 23

2.8.1 Registros de Carga do Valor Ini ial de Contagem

(TH0/TL0 e TH1/TL1) . . . . . . . . . . . . . . . . . . . . . . . . 24

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

2.8.3 Registro de Controle de Modo dos T/C's -TMOD . . . . . . . . . . 25

T/C no Modo 0 - Contagem em 8 bits om Pres aler de 32x . . . . 25

3
Sumário

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

T/C no Modo 2 - Contagem em 8 bits om Re arga Automáti a . . 26

T/C no Modo 3 - Contagem em 8 bits em TH0 e Temporizador de

8 bits em TL0 . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.9 Canal Serial do 8051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.9.1 Registro de Controle do Canal Serial - SCON . . . . . . . . . . . . 26

Modo 0 do Canal Serial - Registrador de Deslo amento . . . . . . . 27

Modo 1 do Canal Serial - UART de 8 bits e Taxa Variável . . . . . 27

Modo 2 do Canal Serial - UART de 9 bits e Taxa Fixa . . . . . . . 28

Modo 3 do Canal Serial - UART de 9 bits e Taxa Variável . . . . . 28

2.9.2 Tabela de Referên ia p/ Programar o Baud Rate . . . . . . . . . . 28

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

2.10.1 Registro de Controle de Potên ia - PCON . . . . . . . . . . . . . . 29

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

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

3 Programação em Assembly do 8051 31

3.1 Conjunto de Instruções do 8051 . . . . . . . . . . . . . . . . . . . . . . . . 31

3.1.1 Modos de Endereçamento . . . . . . . . . . . . . . . . . . . . . . . 31

Endereçamento Direto . . . . . . . . . . . . . . . . . . . . . . . . . 32

Endereçamento Indireto . . . . . . . . . . . . . . . . . . . . . . . . 32

Endereçamento via Registrador . . . . . . . . . . . . . . . . . . . . 32

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

Endereçamento Indexado . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2 Estudo das Instruções do 8051 . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2.1 Transferên ia de Dados . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.2.2 Instruções Aritméti as . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.2.3 Instruções Lógi as . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

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

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

4 Exemplos de Apli ação 38

4.1 Geração de Onda Quadrada . . . . . . . . . . . . . . . . . . . . . . . . . . 38

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

4.3 Geração de 2 Ondas Quadradas Simultâneas . . . . . . . . . . . . . . . . . 41

4.4 Interfa e om Conversor A/D R2R . . . . . . . . . . . . . . . . . . . . . . 42

4.5 Interfa e om ADC0804 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

4.6 Interfa e om LCD Inteligente . . . . . . . . . . . . . . . . . . . . . . . . . 45

4.6.1 Interfa e 8051/LCD em 8 bits . . . . . . . . . . . . . . . . . . . . . 46

4.6.2 Interfa e 8051/LCD em 4 bits . . . . . . . . . . . . . . . . . . . . . 48

4
Sumário

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

4.6.4 Interfa e 8051/LCD Mapeado em Memória . . . . . . . . . . . . . . 55

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

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

4.9 Expansão das Interrupções Externas . . . . . . . . . . . . . . . . . . . . . 67

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

4.11 Rotina de Geração de Beep . . . . . . . . . . . . . . . . . . . . . . . . . . 69

4.12 Dimmer Mi ro ontrolado om AT89C2051 . . . . . . . . . . . . . . . . . . 71

4.13 Programas Propostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Programa Proposto 5: . . . . . . . . . . . . . . . . . . . . . . . . . 74

Programa Proposto 6: . . . . . . . . . . . . . . . . . . . . . . . . . 74

5 IDE KEIL uVision2 75

5.1 A Interfa e Grá a do uVision2 . . . . . . . . . . . . . . . . . . . . . . . . 75

5.2 Criação de um Projeto no uVision2 . . . . . . . . . . . . . . . . . . . . . . 76

5
1 Introdução
1.1 Con eitos Importantes
O diagrama em blo os da gura 1.1, abaixo ilustra um sistema mínimo mi ropro essado,

om seus blo os onstituintes, os quais serão des ritos na sequên ia.

Figura 1.1: Sistema Mi ropro essado Mínimo

1.1.1 Des rição dos Cir uitos de um Sistema Mínimo

• Mi ropro essador: Responsável pelo ontrole de todas as operações do sistema,

e exe ução de instruções do programa gravado na memória de programa. Estas

instruções podem estar rela ionadas om operações lógi as, aritméti as, de a esso

as portas de entrada e saída do sistema, e a esso a memória de dados ou programa.

Também hamada de CPU (Central Pro essing Unit).

• Memória de Programa: é nesta memória do tipo não volátil (ou seja do tipo ROM,

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

mazenado. Este programa, gravado em memória não volátil, é hamado de rmware.

• Memória de Dados: é nesta memória do tipo volátil (RAM) que os dados a serem

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

6
1 Introdução

entes das portas de entrada, por exemplo um te lado, ou então podem ser gerados

através de operações lógi as ou aritméti as om outros dados.

• Cir uito de Clo k: Responsável pelo forne imento de um sinal de lo k ou relógio

para que o Mi ropro essador possa operar.

• Cir uito de Power-On/Reset: Responsável pelo forne imento de um sinal de RESET

para que a CPU possa ini ializar seus registros internos, e omeçar a exe utar as

instruções do rmware.

• Cir uito de Seleção: Responsável pelo forne imento dos sinais de seleção, e habili-

tação para as memórias de dados (RAM), para as memórias de programa (ROM) e

para as portas de entrada e saída. Sempre de onformidade om as instruções que

estão sendo exe utadas pela CPU.

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

entrada e saída, e as memórias. Este onjunto de linhas são bidire ionais, e a CPU

as utiliza para leitura ou es rita em dispositivos de E/S ou memórias.

• Bus de Endereços: Representam as linhas de endereços que interligam a CPU as

memórias e ao ir uito de seleção. Este onjunto de linhas são unidire ionais, e é a

CPU que forne e endereços em resposta as instruções do rmware.

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

rias, periféri os, e ao ir uito de seleção, e a CPU sempre forne e sinais de ontrole,

em resposta as instruções do rmware.

1.1.2 Mi ro ontroladores

Em um sistema mínimo, omo mostrado na gura 1.1, muitos ir uitos são ne essários,

o que o torna de difí il implementação, om muitas inter onexões entre os vários blo os

(representados pelos buses), pla as de ir uito impresso grandes e om muitas trilhas, o

que resulta em ustos elevados. Quando se deseja implementar um sistema de omputação

omplexo não há maneira de evitar estas di uldades, e o usto benefí io é razoável.

Porém, quando se deseja implementar um sistema simples, om a nalidade de apenas

ontrolar uma máquina, por exemplo: uma máquina de lavar roupa, um sistema mínimo

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

om muitos omponentes, in ompatível om a apli ação destinada. Para solu ionar este

problema existe uma outra lasse de dispositivos que substitui o sistema mínimo anterior,

hamam-se Mi ro ontroladores.

Os mi ro ontroladores são sistemas mi ropro essados en apusulados na forma de um

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

grande de dispositivos, o que ara teriza uma família de dispositivos, alguns deles sendo

7
1 Introdução

de fato um sistema mínimo, om o mínimo ne essário em termos de memória, e portas de

E/S, e periféri os, outros porém, in orporam periféri os sosti ados, e já não podem ser

hamados de sistemas mínimos.

Existem várias famílias de mi ro ontroladores omer iais, entre eles os mais importantes

são:

• Família 8051 - Originalmente produzido pela INTEL, om inúmeros fabri antes,

omo Texas, Philips, Dallas, Atmel, et .

• Família 68HC - Produzido pela Motorola

• Família PIC - Produzido pela Mi ro hip

• Família AVR - Produzido pela Atmel

1.2 Sistemas Mi ro ontrolados


Os sistemas mi ro ontrolados tem omo prin ipal vantagem a fa ilidade que ofere e para

a implementação de sistemas das mais variadas apli ações, omo sistemas de ontrole

de dispositivos e máquinas, sistemas de automação de pro essos, sistemas de aquisição e

pro essamento de dados, só para itar algumas possíveis apli ações.

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

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

trolador, simpli ando em muito a onstrução do sistema nal, e liberando tempo para o

projeto do rmware, que normalmente é a tarefa mais pesada, e demorada.

Vamos estudar aqui os mi ro ontroladores da família 8051, por ser o mais popular, e por

ofere er mais re ursos em termos de desenvolvimento de protótipos, omo ambientes de

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

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

uma grande profusão de informações a respeito desta família na internet, e muitos títulos

de livros publi ados.

8
2 A Família 8051 de
Mi ro ontroladores
2.1 Cara terísti as Gerais
A família 8051 é onstituída de uma série grande de dispositivos, de vários fabri antes im-

portantes, apresentando estes ara terísti as diversas, om um grande número de opções

de es olha, e todos ompatíveis em termos de software.

Os elementos da família 8051 podem trazer (dependendo do dispositivo em questão)

integrados em um úni o hip os seguintes ir uitos:

• CPU de 8 bits;

• Memória SRAM interna de 128 ou 256 bytes;

• Memória OTPROM/EPROM/Flash interna de 4K a 16K bytes;

• Memória EEPROM;

• Cir uito de Clo k;

• 2 Interrupções externas;

• 32 Pinos de E/S, ou seja: 4 Portas de 8 bits de entrada e saída (P0, P1, P2, P3);

• 2 ou 3 Temporizadores / Contadores (T/C0, T/C1, T/C2);

• 1 Interfa e serial;

• Cir uito Wat hdog;

• Conversor A/D de 8 bits;

• et , et ...

Além disto a maioria deles pode endereçar até 64KB de RAM externa e até 64KB de

ROM/EPROM externa. Podem operar a freqüên ias de lo k de até 33MHz, e operar em

modo de baixo onsumo (Power Down), além de serem base para muitos outros disposi-

tivos om re ursos espe iais omo interfa es CAN, SPI, USB, e Ethernet.

Na tabela 2.1 a seguir estão sumarizados alguns dispositivos populares da família 8051,

dentre eles dispositivos de 40 e 20 pinos, om e sem memória de programa interna:

9
2 A Família 8051 de Mi ro ontroladores

Modelo Cara terísti as Prin ipais


8031 128B de RAM, 2 Timer/Counter, 1 Serial, 32 Pinos de E/S

8032 256B de RAM, 2 Timer/Counter, 1 Serial, 32 Pinos de E/S

8051 128B de RAM, 2 Timer/Counter, 1 Serial, 4 Kbytes de ROM, 32 Pinos de E/S

8052 256B de RAM, 3 Timer/Counter, 1 Serial, 8 Kbytes de ROM, 32 Pinos de E/S

87C51 128B de RAM, 2 Timer/Counter, 1 Serial, 4 Kbytes de EPROM, 32 Pinos de E/S

87C52 256B de RAM, 3 Timer/Counter, 1 Serial, 8 Kbytes de EPROM, 32 Pinos de E/S

89C51 128B de RAM, 2 Timer/Counter, 1 Serial, 4 Kbytes de Flash, 32 Pinos de E/S

89C52 256B de RAM, 3 Timer/Counter, 1 Serial, 8 Kbytes de Flash, 32 Pinos de E/S

AT89S51 128B de RAM, 2 Timer/Counter, 1 Serial, 4KB de Flash ISP, 32 Pinos de E/S,

Wat hdog, operação estáti a de 0 a 33MHz

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

Wat hdog, operação estáti a de 0 a 33MHz

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

Wat hdog, SPI, operação estáti a de 0 a 24MHz

AT89S8252 256B de RAM, 3 Timer/Counter, 1 Serial, 8KB de Flash ISP, 2KB de EEPROM,

32 Pinos de E/S, Wat hdog, SPI, opera de 0-24MHz

AT89C1051 128B de RAM, 2 Timer/Counter, 1 Serial, 1 Kbytes de Flash, 15 Pinos de E/S

AT89C2051 128B de RAM, 2 Timer/Counter, 1 Serial, 2 Kbytes de Flash, 15 Pinos de E/S

AT89C4051 128B de RAM, 2 Timer/Counter, 1 Serial, 4 Kbytes de Flash, 15 Pinos de E/S

Tabela 2.1: Família 8051 de Mi ro ontroladores

2.2 Arquitetura Interna

O diagrama em blo os da gura 2.1 abaixo apresenta a arquitetura interna da famí-

lia 8051. Neste diagrama, que mostra uma arquitetura bastante simples, se observa

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

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

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

adi ionais presentes em alguns modelos mais sosti ados, omo memória EEPROM, SPI,

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

10
2 A Família 8051 de Mi ro ontroladores

Figura 2.1: Arquitetura Interna 8051

2.3 Pinagem do 8051


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

seguir.

Figura 2.2: Pinagem do 8051

11
2 A Família 8051 de Mi ro ontroladores

2.3.1 Des rição dos Pinos

• V - Tensão de Alimentação
• GND - Referên ia de Terra

• PO.0...P0.7 - Porta de 8 bits bidire ional de entrada e saída, em dreno aberto. Quanto 1's
são es ritos nestes pinos estes estarão em tri-state e poderão ser usados omo entradas em
alta impedân ia. Além disto a porta 0 tem a função alternativa de multiplexar dados om
o byte inferior de endereços durante o a esso à memória externa de dados ou programa.

• P1.0...P1.7 - Porta de 8 bits bidire ional de entrada e saída, apresentando resistores


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

• P2.0...P2.7 - Porta de 8 bits bidire ional de entrada e saída, apresentando resistores


de pull-up internos. Quanto 1's são es ritos nestes pinos estes poderão ser usados omo
entrada, e quando levados a zero pelo dispositivo externo o pino forne erá orrente através
dos resistores de pull-up. Além disto a porta 2 tem a função alternativa de forne er o byte
superior de endereços durante o a esso à memória externa de dados ou programa.

• P3.0...P3.7 - Porta de 8 bits bidire ional de entrada e saída, apresentando resistores


de pull-up internos. Quanto 1's são es ritos nestes pinos estes poderão ser usados omo
entrada, e quando levados a zero pelo dispositivo externo o pino forne erá orrente através
dos resistores de pull-up. Estes pinos ofere em funções alternativas, onforme a seguir:

RXD P3.0 Entrada de dados seriais na re epção serial

TXD P3.1 Saída de dados seriais na transmissão serial

INTO P3.2 Entrada de interrupção externa 0

INT1 P3.3 Entrada de interrupção externa 1

TO P3.4 Entrada de lo k do temporizador/ ontador 0

T1 P3.5 Entrada de lo k do temporizador/ ontador 1

WR P3.6 Saída do sinal de es rita em memória externa

RD P3.7 Saída do sinal de leitura em memória externa

• RESET - Entrada de Reset ativo em alto, devendo permane er em pelo menos 2 i los de
máquina (24 i los de lo k). Para um Reset de Ini ialização (Power-On Reset) este pino
poderá ter apenas um apa itor externo de 10uF ligado a V já que possui um resistor
interno ligado a GND.

• XTAL1 - Entrada do ampli ador inversor do os ilador interno.


• XTAL2 - Saída do ampli ador inversor do os ilador interno.

• ALE - Saída de habilitação do registro de demultiplexação externo usado para demulti-


plexar dados e endereços na porta P0.

12
2 A Família 8051 de Mi ro ontroladores

• PSEN - Saída de habilitação da memória de programa externa.


• EA - Saída de seleção de a esso à memória externa ou interna.

2.4 A esso à Memória Externa


Como mensionado antes, o 8051 é apaz de endereçar até 64 KB de memória RAM externa,

além de até mais 64 KB de memória ROM externa. Quando o sistema mi ro ontrolado

zer uso de alguma memória externa as portas P0 e P2 estarão exer endo a segunda

função asso iada a elas, qual seja o interfa eamento om estas memórias RAM e ROM

externas, onforme a gura 2.3 abaixo.

Figura 2.3: Memória Externa

Neste aso a porta P0 será usada omo barramento de dados / endereços multiplexados,

e seus pinos serão designados agora omo AD0-AD7, transferindo dados e forne endo, de

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

forne erá o byte superior de endereços A8-A15, simultâneamente ao forne imento do byte

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

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

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

Enable). Outro sinal do 8051 envolvido no a esso à memória externa é o sinal ALE

(Address Lat h Enable) que é responsável pelo travamento do byte A0-A7 de endereço no

lat h olo ado entre a porta P0 e as linhas de endereços da memória, pro esso este que

o orre quando da demultilpexação de dados e endereços através da porta P0.

13
2 A Família 8051 de Mi ro ontroladores

2.5 Organização da Memória do 8051


Os elementos da família 8051 om memória de programa interna, que são a grande maioria,

tem apa idades variadas de memória do tipo OTPROM, EPROM, ou Flash, que vão

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

4KB do tipo Flash.

Em termos de memória de dados, tipi amente, os elementos da família 8051 ontém

128B ou 256B de SRAM.

Quanto à memória externa, podem endereçar até 64KB de memória de programa, e

64KB de memória de dados, omo expli ado no item 2.4.

2.5.1 Memória de Programa do 8051

Em relação à memória de programa, o primeiro aso a se onsiderar é aquele no qual o

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

a apa idade de 4KB.

Considerando a ondição a ima, esta memória será a essada aso o pino EA\ (External

A ess) esteja em nível lógi o alto, ou seja desativado. Caso se deseje, além destes 4KB

de memória de programa interna, pode-se estender o espaço de endereçamento para até

64KB, os 60KB adi ionais serão a essados da memória de programa externa. A exe ução

do programa pelo mi ro ontrolador ini iará na posição zero da ROM interna.

Figura 2.4: Memória de Programa Interna do 8051

O segundo aso, é aquele em que o mi ro ontrolador não possui memória de programa

interna, e esta é ex lusivamente externa. Neste aso deve-se olo ar o pino EA\=0, ou

seja ativado, indi ando que o a esso à memória de programa será sempre externo. Mesmo

que o mi ro ontrolador possua memória de programa interna esta não será a essada, e

14
2 A Família 8051 de Mi ro ontroladores

sua presença será ignorada, sendo a exe ução do programa ini iada na posição zero da

ROM externa.

Figura 2.5: Memória de Programa Externa do 8051

2.5.2 Memória de Dados do 8051

A memória de dados do 8051 se onstitui de memória SRAM interna, om apa idade de

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

Memória de Dados Externa

Na gura a seguir está ilustrado a memória de dados externa, eviden iando-se o a esso

de até 64KB através dos pinos de RD e WR, P3.6 e P3.7.

Figura 2.6: Memória de Dados Externa do 8051

15
2 A Família 8051 de Mi ro ontroladores

Os a essos à SRAM interna e externa são efetuadas através de instruções diferentes,

sendo este o diferen ial entre os dois tipos de a essos. Por exemplo a instrução MOV é

usada para leitura/es rita da SRAM interna, enquanto a instrução MOVX é a ontrapar-

tida relativa a memória SRAM externa, maiores detalhes destas instruções serão vistas

no apítulo 3, no item 3.2.1.

Memória de Dados Interna

Os a essos à SRAM interna do 8051 podem ter diferentes ara terísti as dependendo da

região desta que está sendo a essada. Na região da SRAM interna ompreendida entre

os endereços 0 e 127, está a área dos Registros de Uso Geral e Pilha, enquanto a área de

128 a 255 é onde estão lo alizados os Registros de Funções Espe iais, ver gura 2.7 a seguir.

Figura 2.7: Memória de Dados Interna do 8051

Registros de Uso Geral e Pilha

A área da SRAM interna denominada de Registros de Uso Geral e Pilha, uja função é

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

identi ados na gura 2.8. Como pode ser notado desta gura, as regiões ompreendem

os quatro ban os de registros: ban o 0 a ban o 3, região bit e byte endereçável, e região

somente byte endereçável. Cada uma destas regiões ofere em re ursos diferentes onforme

dis utido adiante.

Cada um dos 4 ban o de registro possui 8 registros denominados de R0 a R7, sendo que

a seleção do ban o é feita através dos bits RS0 e RS1 do registro PSW (Program Status

Word), onforme a tabela mostrada na gura 2.8.

O uso destes registros (R0...R7) nas instruções provê uma instrução om um byte a

menos já que um dos operandos já está espe i ado na instrução.

Como exemplo a instrução:

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

16
2 A Família 8051 de Mi ro ontroladores

Além disto em algumas instruções o registro poderá onter o endereço do dado, daí

resultando em um tipo de a esso indireto via registrador.

Como exemplo a instrução:

MOV R0, A; move para o endereço apontado por R0 o onteúdo de A

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

espe i ação do endereço, ou seja sem o uso dos registros R0...R7, sendo que o endereço

na SRAM é diretamente olo ado na instrução. Cabe ainda ressaltar que a região entre

os endereços 20H e 2FH tem omo ara terísti a espe ial a possibilidade de se endereçar

um bit qualquer dentro deste espaço.

Figura 2.8: Registros de Uso Geral e Pilha

Registros de Funções Espe iais

Os a essos à RAM interna do 8051 na faixa de 128 a 255, a essam os registros de funções

espe iais, que estão asso iados aos diversos registros asso iados aos vários re ursos do

8051 tais omo: portas de entrada e saída, ontadores/temporizadores, interfa e serial,

ontrole de interrupção, et ., ver tabela 2.2.

O onhe imento da estrutura de ada um destes registro é de suma importân ia, visto

que permite programar os vários periféri os omo anal serial, temporizadores/ ontadores,

ontrolar ara terísti as da CPU omo modos de baixo onsumo, interrupções, e a essar as

17
2 A Família 8051 de Mi ro ontroladores

portas de entrada e saída. Assim após apresentar a lista de registros de funções espe iais,

eles serão dis utidos, um a um, nos itens que se seguem.

Endereço Registro de Função Espe ial


F0H Registro B
E0H A umulador - A
D0H Program Status Word - PSW
B8H Interrupt Priority - IP
B0H Porta 3 de E/S - P3
A8H Interrupt Enable - IE
A0H Porta 2 de E/S - P2
90H Porta 1 de E/S - P1
99H Serial 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 Funções Espe iais

Registros de Status do 8051 - PSW

Este registro de 8 bits indi a o Status do pro essador, ou seja, indi a a o orrên ia de

ondições espe í as asso iadas ao pro essamento. O formato do registro é o apresentado

a seguir:

CY AC F0 RS1 RS0 OV  P

• bit Cy: Setado indi a a o orrên ia de um Carry (vai-um);

• bit A : Setado indi a a o orrên ia de um Carry Auxiliar em operação BCD;

• bit F0: Bit disponível para uso geral;

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

registros R0 a R7 estarão alo ados;

18
2 A Família 8051 de Mi ro ontroladores

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

registros R0 a R7 estarão alo ados;

• bit OV: Setado indi a a o orrên ia de um overow em operações om números

sinalizados

• bit P: Indi a a paridade do a umulador

2.6 Portas de Entrada e Saída do 8051


O esquema geral interno simpli ado dos bits de E/S das Portas do 8051 é apresentado a

seguir:

Figura 2.9: Esquema Simpli ado de um Bit da Porta 1

Observa-se desta gura que os pinos das portas são onstituidos basi amente de um

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

pino de saída de uma porta a nível lógi o 1 ou 0, as instruções exe utam uma es rita no

lat h, que ontrola o fet do driver de saída através do sinal de saída Q omplementada,

obviamente que quando o fet de saída está em ON o pino apresentará nível lógi o 0 na

saída, e em OFF, nível lógi o 1.

Constata-se da gura que a leitura de um bit de uma porta de E/S apresenta um de-

talhe adi ional: existem dois sinais de leitura. Um destes sinais omanda a leitura do

estado do pino, através do buer inferior na gura, o outro omanda a leitura do lat h,

através do buer superior da gura. Con lui-se então, que existem instruções que não

lêem o pino, mas ao invés disto lêem a saída do lat h, e um uidado adi ional deve ser

tomado quando se usar tais instruções. Como regra as instruções que exe utam a sequên-

ia Lê-Modi a-Es reve, são aquelas que lêem o lat h ao invés do pino, exemplos de tais

isntruções são:

19
2 A Família 8051 de Mi ro ontroladores

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

ORL ; OU lógi o, ex: ORL P1,A CLR Pn.i ; Reseta Pn.i, ex: CLR P3.0

XRL ; OU Ex l., ex: XRL P1,A MOV Pn.i,C ; Move ag C p/ Pn.i,

JBC ; E lógi o, ex: ANL P1,A ; ex: MOV P2.0,C

CPL ; Complemento, ex: CPL P1.0 DJNZ ; De r. e Desvia se 6=0,


INC ; In remento, ex: INC P1 ; ex: DJNZ P3,Label

DEC ; De remento, ex: DEC P2

O onjunto ompleto das instruções do 8051 será visto no apítulo 3, portanto o leitor

não deve se preo upar em entender plenamente as instruções a ima apresentadas.

A razão de existir instruções que lêem o pino da porta, enquanto outras lêem o lat h,

é para que não haja uma falsa interpretação da tensão presente no pino. Como exemplo,

se um pino de uma porta estiver one tado à base de um transistor, ao se es rever 1

neste pino, o transistor é saturado, porém, se efetuada uma leitura posterior neste pino o

mesmo apresentará a tensão de base do transistor saturado, o que será interpretado omo

nível lógi o 0.

Todas as 4 portas de 8 bits do 8051, P0, P1, P2, e P3, podem ter seus pinos individu-

almente usados omo entrada ou saída, one tados, por exemplo, à dispositivos simples

omo haves e leds, omo também podem ser usadas omo barramentos de 8 bits, e inter-

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

lembrar, porém, que as portas P0 e P2  am destinadas a geração de endereços A0...A7

em P0, e A8...A15 em P2, quando a essando memória externa, e a porta P3 apresenta

seus pinos dotados de funções alternativas, então ertos pinos poderão estar indisponíveis

em alguma apli ação parti ular.

Uma parti ularidade que a porta P0 apresenta é sua saída ongurada omo dreno

aberto, ao ontrário demais portas que apresentam o pull-up interno. Esta ara terísti a

faz om que a porta tenha seus pinos utuando quando em aberto. Como onsequên ia

deste fato, a porta P0 poderá drenar até 8 argas TTL, ao ontrário das demais portas

que suportam uma arga máxima de 4 gates TTL.

Quando se deseja que os pinos das portas P1, P2, ou P3, atuem omo entradas, o estado

do lat h interno deverá estar em 1, o que deixa o driver de saída em OFF, então o estado

do pino  ará em a1 pelo pull-up interno, podendo ser levado a 0 por uma fonte externa.

Como visto antes ada uma das portas está mapeada na região dos Registros de Funções

Espe iais da memória SRAM interna, om endereços espe í os que podem ser referidos

nas instruções (ver tabela 2.2), porém é mais onveniênte se referir ao nome da porta

nestas instruções, o que assegura uma maior legibilidade ao ódigo fonte. Por exemplo a

instrução:

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

Cabe também lembrar, que os bits das portas tem endereços espe í os, uma vez que

estão em uma região de memória bit endereçável. Portanto, quando se deseja a essar um

20
2 A Família 8051 de Mi ro ontroladores

bit de uma porta, pode-se referir ao endereço deste bit, ou usar a notação Porta.Bit, omo

no exemplo abaixo onde o ag de arry (C) re ebe o estado do bit 0 da porta 1 (P1.0):

MOV C, P1.0 ; Flag C re ebe estado de P1.0

2.7 Interrupções no 8051


São 5 fontes distintas de interrupções no 8051, sendo duas externas, geradas a partir dos

pinos INT0 e INT1 da porta 3, e três internas, geradas pelos temporizadores/ ontadores

e interfa e serial. Os vetores de interrupção, ou seja o endereço de desvio para estas 5

fontes são xos, sendo apresentados na tabela 2.3.

Fonte Cara terísti as Prin ipais Endereço


de desvio
INT0 Interrupção externa gerada pelo pino P3.2 da porta P3, ativo baixo. 0003H

INT1 Interrupção externa gerada pelo pino P3.3 da porta P3, ativo baixo. 0013H

T/C0 Interrupção do Temporizador/Contador0 gerada quando o ontador 000BH

atinge o máximo valor de ontagem, e o bit TF0 é setado.

T/C1 Interrupção do Temporizador/Contador1 gerada quando o ontador 001BH

atinge o máximo valor de ontagem e o bit TF1 é setado.

Serial Canal Serial. A interrupção o orre quando o buer do anal serial 0023H

está vazio na transmissão, ou heio na re epção.

Tabela 2.3: Fontes de Interrupção do 8051

A es ala de prioridades de atendimento da interrupção existente entre as várias fontes

é a seguinte:

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

2.7.1 Registro de Habilitação de Interrupções - IE

É através deste registro de 8 bits que se pode sele ionar a habilitar/desabilitar as inter-

rupções individualmente. O formato do registro é o apresentado a seguir:

EA   ES ET1 EX1 ET0 EX0

• bit EA: Setado permite habilitar as fontes de interrupção que forem individualmente

sele ionadas através dos bits ES, ET1, EX1, ET0, e EX0. Resetado desabilita toda

e qualquer interrupção de ser gerada;

• bit ES: Setado permite sele ionar a interrupção da interfa e serial para ser usada

quando EA for setado;

21
2 A Família 8051 de Mi ro ontroladores

• bit ET1: Setado permite sele ionar a interrupção do temporizador/ ontador1 para

ser usada quando EA for setado;

• bit EX1: Setado permite sele ionar a interrupção externa 1 para ser usada quando

EA for setado;

• bit ET0: Setado permite sele ionar a interrupção do temporizador/ ontador0 para

ser usada quando EA for setado;

• bit EX0: Setado permite sele ionar a interrupção externa 0 para ser usada quando

EA for setado.

Como exemplo, se fosse ne essário habilitar as duas interrupções externas, o registro IE

deveria ter os bits EX0, EX1, e EA setados, assim a instrução a seguir poderia ser usado

para tal:

MOV IE, #10000101B

Ou ainda, as três linhas de programa podem ser usadas, desde que os demais bits do

registro IE estejam resetados:

SETB EX0

SETB EX1

SETB EA

2.7.2 Registro de Controle de Prioridade de Interrupção - IP

É através deste registro de 8 bits que se pode modi ar as prioridades de atendimento

das interrupções. O formato do registro é o apresentado a seguir:

   PS PT1 PX1 PT0 PX0

• bit PS: Setado permite que a interrupção do anal serial tenha a mais alta priori-

dade de atendimento. Resetado mantém a ordem de prioridade de atendimento da

interrupção do anal serial inalterada;

• bit PT1: Setado permite sele ionar a interrupção do temporizador/ ontador1 para

ser a de mais alta prioridade. Resetado mantém a ordem de prioridade de atendi-

mento da interrupção do temporizador/ ontador 1 inalterada;

• bit PX1: Setado permite sele ionar a interrupção externa 1 para ser a de mais alta

prioridade. Resetado mantém a ordem de prioridade de atendimento da interrupção

externa 1 inalterada;

22
2 A Família 8051 de Mi ro ontroladores

• bit PT0: Setado permite sele ionar a interrupção do temporizador/ ontador0 para

a de mais alta prioridade. Resetado mantém a ordem de prioridade de atendimento

da interrupção do temporizador/ ontador0 inalterada;

• bit PX0: Setado permite sele ionar a interrupção externa 0 para ser a de mais alta

prioridade. Resetado mantém a ordem de prioridade de atendimento da interrupção

externa 0 inalterada.

2.7.3 Ativação das Interrupções Externas por Borda ou Nível -

Bits IT0 e IT1 do Registro TCON

As interrupções externas INT0 e INT1 podem ser ativadas tanto por nível quanto por

borda de des ida, e esta seleção pode ser feita através de 4 dos 8 bits do registro TCON.

O formato deste registro é o apresentado a seguir:

    IE1 IT1 IE0 IT0

• bit IE1: Setado por hardware quando o pino INT1 vai de alto para baixo. Resetado

quando a interrupção é atendida;

• bit IT1: Setado permite sele ionar a ativação da interrupção externa 1 por borda

de des ida do sinal presente no pino INT1. Resetado sele iona a ativação de INT1

por nível;

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

quando a interrupção é atendida;

• bit IT0: Setado permite sele ionar a ativação da interrupção externa 0 por borda

de des ida do sinal presente no pino INT0. Resetado sele iona a ativação de INT0

por nível.

2.8 Temporizadores/Contadores 0 e 1
A seguir ilustra-se a arquitetura dos ontadores/temporizadores (T/C's) do 8051, eviden-

iando seus registros internos.

23
2 A Família 8051 de Mi ro ontroladores

Figura 2.10: Temporizadores Contadores 0 e 1

Observa-se que no diagrama em blo os da arquitetura dos T/C's, alguns registros tais

omo: TL0/1, TH0/1, TCON e TMOD são referidos em pontos haves do diagrama.

Os dois T/C's do 8051 (3 no 8052) fun ionam independentemente, omo ontador ou

temporizador, podendo ser programados para operar em 4 modos diferentes, onforme

des rito mais adiante.

O entendimento da função de ada um dos registros a ima men ionados é fundamental

para que se possa ompreender o fun ionamento geral dos T/C. A seguir estes vários

registros são detalhados:

2.8.1 Registros de Carga do Valor Ini ial de Contagem

(TH0/TL0 e TH1/TL1)

Estes dois registros de 8 bits, TH0 e TL0, ou TH1 e TL1, são usados para a arga

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

máximo, que pode ser de 8 ou 16 bits, onforme THn e TLn sejam usados separados omo

ontadores de 8 bits ou aos pares omo um registro de 16 bits. Após este valor máximo de

ontagem ter sido atingido o sinalizador TF0 ou TF1 é setado indi ando esta o orrên ia,

e aso a interrupção asso iada ao T/C em questão esteja habilitada, uma interrupção é

gerada.

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

Este registro de 8 bits, mostrado abaixo, é usado para ontrolar a operação dos T/C's,

e para isto somente os 4 bits mais signi ativos são usados para esta função, ver gura

abaixo, e des rição dos bits a seguir desta.

24
2 A Família 8051 de Mi ro ontroladores

TF1 TR1 TF0 TR0    

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

máximo de ontagem e o orreu um 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 operação

do temporizador/ ontador onforme des rito a seguir:

G1 T/C1 M11 M01 G0 T/C0 M10 M00

• bit G0 ou G1: Usado para sele ionar o tipo de ontrole de disparo do T/C, ou seja,

se este é ontrolado apenas através do bit TRn (Gn - Resetado), ou através do bit

TRn e do pino INT1 (Gn - Setado);

• bit T/C0 ou T/C1: Usado para sele ionar a operação do T/C omo temporizador

(T/Cn - Resetado) ou ontador (T/Cn - Setado);

• bits M0-0/M1-0 ou M0-1/M1-1: Estes dois bits tem omo função sele ionar um

dentre quatro modos de operação dos T/C's, a saber:

M1 M0 Modo - Cara terísti as


0 0 0 - T/C de 8 bits om pres aler de até 32x
0 1 1 - T/C de 16 bits
1 0 2 - T/C de 8 bits om re arga automáti a
1 1 3 - Contador de 8 bits + Temporizador de 8 bits

T/C no Modo 0 - Contagem em 8 bits om Pres aler de 32x

Neste modo o T/C0 ou T/C1 fun iona em 8 bits, sendo que esta ontagem o orre no

registro TL0 ou TL1, tendo portanto, um máximo valor de ontagem de 255. O registro

TH0 ou TH1, neste modo forne e uma pré divisão (pres aler) do lo k do ontador de até

32 vezes, utilizando para isto 5 bits deste registro.

T/C no Modo 1 - Contagem em 16 bits

Neste modo o T/C0 ou T/C1 fun iona em 16 bits, ou seja os dois registros TH0 e TL0, ou

TH1 e TL1 são vistos omo um úni o registro de 16 bits, sendo a ontagem implementada

neste par de registros, e o valor máximo de ontagem de 65.535 ou FFFFH.

25
2 A Família 8051 de Mi ro ontroladores

T/C no Modo 2 - Contagem em 8 bits om Re arga Automáti a

Neste modo o T/C0 ou T/C1 fun iona em 8 bits, sendo TL0 ou TL1 o registro onde

o orre a ontagem, e TH0 ou TH1 o registro onde o valor ini ial de ontagem, ou neste

aso o valor de re arga está espe i ado. Sempre que o valor máximo de ontagem o orre

(255 ou FFH) o valor de re arga é automati amente arregado quando TF0 ou TF1 é

resetado.

T/C no Modo 3 - Contagem em 8 bits em TH0 e Temporizador de 8 bits em

TL0

Neste modo o T/C0, e somente este, pode fun ionar omo temporizador ou ontador de

8 bits, usando o registro TH0, e ativando aso seja ne essário a interrupção do T/C1. O

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

bits usando a interrupção do T/C0.

2.9 Canal Serial do 8051


A interfa e serial do 8051 pode ser usada de 4 modos diferentes, om operações do tipo

sín rona, assín rona, om taxas de transmissão xa, ou variável. Os registros asso iados

a programação do anal serial são os seguintes: SBUF - Buer do Canal Serial, e SCON

- Controle do Canal Serial. Estes registros são des ritos mais a diante.

Uma transmissão serial sempre se ini ia quando um byte é es rito no registro SBUF,

assim este byte é serializado e enviado pelo pino TXD da porta P3.

A re epção para ser habilitada deverá ter o bit REN - Re epção Habilitada, do registro

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

paralelizados e enviados para o registro SBUF para ser lido.

2.9.1 Registro de Controle do Canal Serial - SCON

Este registro de 8 bits, mostrado abaixo, é usado para sele ionar os modos de operação

do temporizador/ ontador onforme des rito a seguir:

SM0 SM1 SM2 REN TB8 RB8 TI RI

• bits TI e RI: Requisição de transmissão/re epção setado por hardware sempre que

uma transmissão/re epção for ini iada, e resetado por software;

• bits TB8 e RB8: São usados para inserção de bits de ontrole pelo usuário, tais

omo paridade , ags, et ;

• bit REN: Habilitação da re epção através do anal serial;

26
2 A Família 8051 de Mi ro ontroladores

• bits SM0 / SM1: Estes dois bits tem omo função sele ionar um dentre quatro

modos de operação do Canal Serial. Ver tabela a seguir.

• bit SM2: Habilita Comuni ação Mutipro essador, nos modos 2 e 3. RI não será

ativado se o 9 bit é zero.

SM1 SM0 Modo do Canal Serial - Cara terísti as


0 0 0 - Registrador de Deslo amento - Taxa Fixa = F lk/12
1 0 1 - UART de 8 bits e Taxa Variável
0 1 2 - UART de 9 bits e Taxa Fixa = F lk/32 ou F lk/64
1 1 3 - UART de 9 bits e Taxa Variável

Modo 0 do Canal Serial - Registrador de Deslo amento

Neste modo o anal serial é olo ado no modo Registrador de Deslo amento (Shift Regis-

ter) no qual os dados entram e saem serialmente através do pino RXD, e no pino TXD o

lo k é enviado. Neste aso, os termos RXD e TXD não tem mais o signi ado original,

uma vez que o pino RXD transmite e re ebe dados seriais, e o pino TXD nada tem a ver

om transmissão de dados. A transmissão é ini iada sempre que se es reve no registro

SBUF. E a re epção quando o bit REN do registro SCON é setado, e o ag de re epção

RI é resetado.

Figura 2.11: Canal Serial no Modo 0

Modo 1 do Canal Serial - UART de 8 bits e Taxa Variável

Neste modo o anal serial é olo ado no modo Re eptor/Transmissor Universal Assín rono

(UART), onde o dado om 8 bits seriais são pre edidos por um start bit em nível baixo,

e seguido por um stop bit em nível alto. O stop bit é opiado no bit RB8 do SCON na

re epção que tem iní io quando o start bit é re ebido no pino RXD sendo sensível a borda

de des ida. A taxa de transmissão é programada através da taxa de overow do Timer 1.

Figura 2.12: Canal Serial no Modo 1

27
2 A Família 8051 de Mi ro ontroladores

Modo 2 do Canal Serial - UART de 9 bits e Taxa Fixa

Neste modo o anal serial é olo ado no modo UART de 9 bits seriais, que omo no modo

anterior são pre edidos por um start bit em nível baixo, e seguido por um stop bit em

nível alto. Quando da re epção o bit RB8 do SCON é reservado para re eber o nono bit

da palavra de dado, ao invés de re eber o stop bit omo no modo 1. Na transmissão o bit

TB8 re ebe o nono bit que pode ser um bit de paridade, por exemplo.

Figura 2.13: Canal Serial no Modo 2

Modo 3 do Canal Serial - UART de 9 bits e Taxa Variável

Neste modo o anal serial é olo ado no modo UART de 9 bits seriais exatamente omo

no modo anterior, ex eto que a taxa de transmissão é programada pelo timer 1, omo no

modo 1.

2.9.2 Tabela de Referên ia p/ Programar o Baud Rate

A tabela a seguir poderá ser usada na programação do Canal Serial para a geração de

taxas de transmissão (Baud Rate) típi as omo aquelas nela apresentadas. Para tanto o

Timer/Counter 1 deve ser usado omo temporizador no modo 2, ou seja modo autoreload,

e os valores de ontagem ini iais em TH1 são aqueles mostrados na última oluna da

tabela.

Taxa Cristal Bit Taxa Erro T/C1 Modo 2


(bps) (MHz) SMOD Real (%) Valor TH1
9600 12 1 8923 7 F9H (-7)
2400 12 0 2404 0,16 F3H (-13)
1200 12 0 1202 0,16 E6H (-26)
19200 11.0592 1 19200 0 FDH (-3)
9600 11.0592 0 9600 0 FDH (-3)
2400 11.0592 0 2400 0 F4H (-12)
1200 11.0592 0 1200 0 E8H (-24)
Tabela 2.4: Tabela de Referên ia para Baud Rate

28
2 A Família 8051 de Mi ro ontroladores

O exemplo de apli ação 4.10 ilustra a programação do anal serial em 9600bps onde as

letras de 'a' até 'z' são enviadas onse utivamente e de forma ontínua para um mi ro-

omputador PC.

2.10 Modos de Baixo Consumo


Quando um sistema mi ro ontrolado tem omo requisito bási o o baixo onsumo de ener-

gia, por exemplo, no aso de equipamentos portáteis e alimentados por baterias, pode-se

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

dos de operação de baixo onsumo: o modo Idle e o modo Power-Down, programados

pelos bits de ontrole IDL e PD, do registro de ontrole de potên ia PCON, mostrado a

seguir.

2.10.1 Registro de Controle de Potên ia - PCON

Este registro de 8 bits, mostrado abaixo, é usado para sele ionar os modos de operação de

baixo onsumo do mi ro ontrolador, e abriga ainda o bits de ontrole de modo do anal

serial SMOD, já dis utido no item 2.9, além de dois bits de sinalização de uso geral GF0

e GF1, onforme des rito a seguir:

SMOD - - - GF1 GF0 PD IDL

• bit GF0 ou GF1: Usado para sinalização de uso geral;

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

• bits PD e IDL: Estes dois bits tem omo função sele ionar o modo de operação em

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

2.10.2 Modo Idle

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

no registro de função espe ial de Controle de Potên ia - PCON, o dispositivo bloqueia o

forne imento do sinal de lo k para os ir uitos da UCP, porém os ir uitos de Interrupção,

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

Quando o mi ro ontrolador entra no modo Idle, após a instrução que seta o bit IDL, o

status da UCP é mantido omo estava antes da exe ução desta instrução, e os registros

de status PSW, o ontador de programa PC, apontador de pilha SP, além do a umulador

A, e demais registros se manterão inalterados. Além disto o estado dos pinos das portas

de E/S permane em no estado que estavam antes de entrar em modo Idle.

Para que o mi ro ontrolador possa sair do modo Idle, existem dois me anismos: através

de uma interrupção préviamente habilitada, ou através de um reset, que onsequentemente

reseta o bit IDL.

29
2 A Família 8051 de Mi ro ontroladores

No primeiro aso, onde uma interrupção é gerada, o bit IDL é automati amente resetado

quando do atendimento da interrupção, e após a rotina ter sido exe utada, retornando

através de uma instrução RETI, o programa segue o uxo exe utando a instrução que

vem logo após aquela que olo ou o mi ro ontrolador no modo Idle.

No segundo aso, em que o mi ro ontrolador é resetado, o sinal de RESET deve ser

mantido por pelo menos 24 i los de lo k, e assim a exe ução pela UCP, da mesma forma

que no aso anterior, segue o uxo exe utando a instrução que vem logo após aquela que

olo ou o mi ro ontrolador no modo Idle. Como serão gastos de 2 a 3 i los de máquina

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

algoritmo de reset interno, este tempo deve ser o upado por 3 instruções NOP para evitar

que possa surgir resultados erráti os nos pinos das portas.

2.10.3 Modo Power-Down

Neste outro modo de baixo onsumo, ativado quando se leva o bit de ontrole PD, também

lo alizado no registro PCON

30
3 Programação em Assembly do
8051
3.1 Conjunto de Instruções do 8051
A título de estudo, as instruções do 8051 podem ser lassi adas em 5 tipos diferentes,

onforme abaixo:

• Transferên ia de Dados

• Aritméti as

• Lógi as

• Booleanas

• Desvio

Os tipos de instruções listados a ima serão estudados em detalhes no item 3.2, porém

antes de estudá-los é ne essário des rever os modos de endereçamento de dados existentes

na família 8051.

3.1.1 Modos de Endereçamento

O modo omo dados são a essados nas instruções do 8051, é o que se hama de modo de

endereçamento, e são os seguintes:

• Endereçamento Direto

• Endereçamento Indireto

• Endereçamento Via Registrador

• Endereçamento por Constante Imediata

• Endereçamento Indexado

31
3 Programação em Assembly do 8051

Endereçamento Direto

Neste tipo de endereçamento o dado é a essado na posição de memória diretamente es-

pe i ada na instrução, omo no exemplo a seguir:

EX: MOV A,25H ;move para A o onteúdo da posição de memória 25H

Endereçamento Indireto

Neste tipo de endereçamento o dado é a essado na posição de memória apontada por um

dos registros R0 ou R1 espe i ado na instrução, omo no exemplo a seguir:

EX: MOV A,R1 ;move p/ A onteúdo posição de mem. apontada por R1

Endereçamento via Registrador

Neste tipo de endereçamento o dado é a essado na através de um registro espe i ado na

instrução, omo no exemplo a seguir:

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

Constante Imediata

Neste tipo de endereçamento o dado é imediatamente espe i ada na instrução, omo no

exemplo a seguir:

EX: MOV A,#25H ;move para A o onteúdo da posição de memória 25H

Endereçamento Indexado

Neste tipo de endereçamento o dado é a essado na posição de memória espe i ada omo

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

em A. Neste endereço assim onstituído o registro A pode ser variado para fazer indexa-

ções. Pode-se apli ar tal modo de endereçamento no a esso à memória de ódigo, para

por exemplo a essar posições de uma tabela de dados.

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

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

3.2 Estudo das Instruções do 8051


Nos itens que se segue, os vários tipos de instruções serão apresentados na forma de

tabelas, e estas onterão todas as instruções existentes.

32
3 Programação em Assembly do 8051

3.2.1 Transferên ia de Dados

São basi amente as instruções de move, ujos mnemni os existentes são: mov, movx, e

mov , além das instruções de operação om a pilha: push e pop, e de tro a ex hange,

ujos mnemni os existentes são: x h e x hd.

O formato geral da instrução move é o seguinte:

mov <destino>,<origem>

As instruções de transferên ia de dados estão listadas na tabela 3.1 a seguir.

Instrução Des rição Exemplo B* Clk


MOV A,Rn Move Registro p/ A umulador MOV A,R2 1 12

MOV A,direto Move byte direto p/ A umulador MOV A,7FH 2 12

MOV A,Ri Move RAM indireto p/ A umulador MOV A,R4 1 12

MOV A, #dado Move dado imediato p/ A umulador MOV A, #20 2 12

MOV Rn,A Move A umulador p/ Registro MOV R7,A 1 12

MOV Rn, direto Move byte direto p/ Registro MOV R3, 7FH 2 24

MOV Rn,#dado Move dado imediato p/ Registro MOV R6,#200 2 12

MOV direto,A Move A umulador p/ byte direto MOV 30H,A 2 12

MOV direto,Rn Move registro p/ byte direto MOV 30H,R2 2 24

MOV direto,direto Move byte direto p/ byte direto MOV 30H,31H 3 24

MOV direto, Ri Move RAM indireto p/ byte direto MOV 7FH, R0 2 24

MOV direto,#dado Move dado imediato p/ byte direto MOV 40H,#100 2 24

MOV Ri, A Move A umulador p/ RAM indireto MOV R0, A 1 12

MOV Ri, direto Move byte direto p/ RAM indireto MOV R5, 20H 2 24

MOV Ri, #dado Move dado imediato p/ RAM indireto MOV R0, #0FH 2 12

MOV DPTR,#dado16 Move 2 bytes p/ data pointer MOV DPTR, #2000H 3 24

MOVX A,Ri Move XRAM (end. 8 bits) p/ A MOVX A,R1 1 24

MOVX A,DPTR Move XRAM (end. 16 bits) p/ A MOVX A,DPTR 1 24

MOVX A,Ri,A Move A p/ XRAM (end. 8 bits) MOVX A,R2,A 1 24

MOVX DPTR, A Move A p/ XRAM (end. 16 bits) MOVX DPTR, A 1 24

MOVC A,A+DPTR Move Código relativo a DPTR p/ A MOVC A,A+DPTR 1 24

MOVC A,A+PC Move Código relativo a PC p/ A MOVC A,A+PC 1 24

PUSH direto Move byte direto para a pilha PUSH R0 2 24

POP direto Re upera byte direto da pilha POP DPH 2 24

XCH A,direto Tro a byte direto om A XCH A, 48H 2 12

XCH A,Ri Tro a RAM indireto om A XCH A, R0 1 12

XCHD A, Ri Tro a nibble inferior da RAM / A XCHD A, R0 1 12

* Bytes da Instrução

Tabela 3.1: Instruções de Transferên ia de Dados

33
3 Programação em Assembly do 8051

3.2.2 Instruções Aritméti as

São as instruções de soma, subtração, in remento, de remento, multipli ação, divisão, em

todas as variantes dos modos de endereçamento, além da instrução de ajuste de imal para

operações aritméti as em BCD.

As instruções aritméti as estão listadas na tabela 3.2, a seguir.

Instrução Des rição Exemplo B* Clk


ADD A, Rn Soma registro ao A umulador ADD A, R1 1 12

ADD A, direto Soma byte direto ao A umulador ADD A, 50H 2 12

ADD A, Ri Soma RAM indireto ao A umulador ADD A, R2 1 12

ADD A,#dado Soma dado imediato ao A umulador ADD A,#15 2 12

ADDC A, Rn Soma registro ao A umulador / arry ADDC A, R3 1 12

ADDC A, direto Soma byte direto ao A umulador / arry ADDC A, 50H 2 12

ADDC A, Ri Soma RAM indireto ao A umulador / arry ADDC A, R4 1 12

ADDC A,#dado Soma dado imediato ao A umulador / arry ADDC A,#15 2 12

SUBB A, Rn Subtrai registro ao A umulador / borrow SUBB A, R7 1 12

SUBB A, direto Subtrai byte direto ao A umulador / borrow SUBB A, 50H 2 12

SUBB A, Ri Subtrai RAM indireto ao A umulador / borrow SUBB A, R2 1 12

SUBB A,#dado Subtrai dado imediato ao A umulador / borrow SUBB A,#10 2 12

INC A In rementa a umulador INC A 1 12

INC Rn In rementa registro INC R3 1 12

INC direto In rementa byte direto INC 50H 2 12

INC Ri In rementa RAM indireto INC R1 1 12

DEC A De rementa a umulador DEC A 1 12

DEC Rn De rementa registro DEC R4 1 12

DEC direto De rementa byte direto DEC 50H 2 12

DEC Ri De rementa RAM indireto DEC R2 1 12

INC DPTR In rementa data pointer INC DPTR 1 24

MUL AB Multipli a A e B MUL AB 1 48

DIV AB Divide A por B DIV AB 1 48

DA A Ajuste de imal do a umulador DA A 1 12

* Bytes da Instrução

Tabela 3.2: Instruções Aritméti as

3.2.3 Instruções Lógi as

São as instruções de: E (ANL), OU (OR), e OU Ex lusivo (XOR), om todas as varian-

tes ofere idas pelos modos de endereçamento, além de CLR, resetar todos bits, e CPL,

omplemento.

As instruções lógi as estão listadas na tabela 3.3, a seguir.

34
3 Programação em Assembly do 8051

Instrução Des rição Exemplo B* Clk


ANL A, Rn AND de A om registro ANL A, R0 1 12

ANL A, direto AND de A om byte direto ANL A, 7FH 2 12

ANL A, Ri AND de A om RAM indireto ANL A, R0 1 12

ANL A, #dado AND de A om dado imediato ANL A, #7FH 2 12

ANL direto, A AND de byte direto om a umulador ANL 7FH, A 2 12

ANL direto, #dado AND de byte direto om dado imediato ANL 40H, #7FH 3 24

ORL A, Rn OR de A om o registro ORL A, R0 1 12

ORL A, direto OR de A om byte direto ORL A, 7FH 2 12

ORL A, Ri OR de A om RAM indireto ORL A, R0 1 12

ORL A, #dado OR de A om dado imediato OR A, #7FH 2 12

ORL direto, A OR de byte direto om a umulador ORL 7FH, A 2 12

ORL direto, #dado OR de byte direto om dado imediato ORL 40H, #7FH 3 24

XRL A,Rn XOR de A om o registro XRL A,R0 1 12

XRL A,direto XOR de A om byte direto XRL A,7FH 2 12

XRL A,Ri XOR de A om RAM indireto XRL A,R0 1 12

XRL A, #dado XOR de A om dado imediato XRL A, #7FH 2 12

XRL direto, A XOR de byte direto om a umulador XRL 7FH, A 2 12

XRL direto, #dado XOR de byte direto om dado imediato XRL 40H, #7FH 3 24

CLR A Limpa A umulador CLR A 1 12

CPL A Complementa A umulador CPL A 1 12

RL A Rota iona A à esquerda s/ arry RRA 1 12

RLC A Rota iona A à esquerda / arry RRC A 1 12

RR A Rota iona A à direita s/ arry RL A 1 12

RRC A Rota iona A à direita / arry RL C 1 12

SWAP A Tro a nibbles inferior e superior SWAP A 1 12

* Bytes da Instrução

Tabela 3.3: Instruções Lógi as

3.2.4 Booleanas

São as instruções que operam sobre bits, lembrando que a RAM interna possui 128 bits

endereçáveis, e que no espaço da RAM interna destinada aos registros de funções espe iais

existem mais 128 bits endereçáveis, a essados portanto através de instruções booleanas.

As instruções booleanas estão listadas na tabela 3.4, a seguir.

35
3 Programação em Assembly do 8051

Instrução Des rição Exemplo B* Clk


CLR C Limpa ag C CLR C 1 12

CLR bit Limpa bit direto CLR P1.7 2 12

SETB C Seta ag C SETB C 1 12

SETB bit Seta bit direto SETB P1.7 2 12

CPL C Complementa ag C CPL C 1 12

CPL bit Complementa bit direto CPL P1.7 2 12

ANL C, bit AND de bit direto om o ag C ANL C, P1.5 2 24

ANL C, /bit AND do omplem. de bit direto om o ag C ANL C, P1.5 2 24

ORL C, bit AND de bit direto om o ag C ORL C, P1.5 2 24

ORL C, /bit AND do omplem. de bit direto om o ag C ORL C, P1.5 2 24

MOV C, bit Move bit direto para o ag de arry MOV C, P1.0 2 12

MOV bit,C Move o ag de arry o bit direto MOV P1.0,C 2 24

JC relativo Desvia se ag de arry setado JC LOOP 2 24

JNC relativo Desvia se ag de arry não setado JNC DESVIO 2 24

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

JNB bit, relativo Desvia se bit direto não setado JNB DESVIO 2 24

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

* Bytes da Instrução

Tabela 3.4: Instruções booleanas

3.2.5 Desvio

As instruções de desvios são aquelas usadas para o ontrole de uxo do programa e

ompreendem os seguintes tipos de desvios:

• Desvios in ondi ionais

• Desvios ondi ionais

• Chamada de rotinas

• Retorno de rotina

• Retorno de rotina de interrupção

As isntruções de desvio estão listadas na tabela 3.5, a seguir.

36
3 Programação em Assembly do 8051

Instrução Des rição Exemplo B* Clk


ACALL endereço11bits Desvio absoluto para subrotina ACALL DISP 2 24

LCALL endereço16bits Desvio longo para subrotina LCALL TECLAS 3 24

RET Retorno de subrotina RET 1 24

RETI Retorno de rotina de interrupção RETI 1 24

AJMP endereço11bits Desvio absoluto AJMP LOOP 2 24

LJMP endereço16bits Desvio longo LJMP SAIDA 3 24

SJMP relativo Desvio urto (relativo) SJMP LOOP1 2 24

JMP A+DPTR Desvia indireto relativo a DPTR JMP A+DPTR 1 24

JZ relativo Desvia se A é igual a zero JZ SAI 2 24

JNZ relativo Desvia se A é diferente de zero JNZ REPETE 2 24

CJNE A,direto,relativo Compara byte direto / A e desvia CJNE A,30H,L3 3 24

se 6=byte direto
CJNE A,#dado,relativo Compara dado / A e desvia CJNE A,#10,REP 3 24

se 6= dado
CJNE Rn,#dado,relativo Compara reg. / indireto e desvia CJNE R2,#20,L0 3 24

se 6= dado
CJNE Rn,#dado,relativo Compara dado / indireto e desvia CJNE R1,#100,S2 3 24

se 6= dado
DJNZ Rn, relativo De rementa registro e desvia 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 operação NOP 1 12

* Bytes da Instrução

Tabela 3.5: Instruções de desvio

37
4 Exemplos de Apli ação
A seguir serão apresentados exemplos de apli ações, om soluções de hardware e software,

desde programas muito simples ilustrando o uso das Portas de E/S, Interrupções Externas,

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

fa es entre o 8051 e periféri os tais omo: displays de ristal líquido inteligentes (LCD),

te lados matri iais, onversores A/D e D/A, e ir uitos de a ionamento de motores de

passo.

Muitos dos exemplos aqui apresentados serão úteis em projetos de sistemas mi ro on-

trolados baseados no 8051, onde tais programas podem ser onvertidos em rotinas e usados

para ontrole de periféri os.

4.1 Geração de Onda Quadrada


Neste exemplo, bastante simples, será gerada uma onda quadrada de 10KHz no pino P1.0.

Para tanto, será utilizado o T/C0 fun ionando omo temporizador no modo 2, ou seja:

ontagem em 8 bits om re arga automáti a.

Sendo o ristal os ilador do ir uito de lo k do sistema de 12MHz, a ontagem o orrerá

om um lo k de 1us, uma vez que internamente o T/C divide o lo k do sistema por 12.

A ontagem em 8 bits do T/C0 pode gerar tempos de até 256us, superior portanto ao

ne essário para a geração da onda quadrada de 10KHz que tem um período de 50us, ver

gura 4.1, a seguir.

Figura 4.1: Onda de 10KHz no pino P1.0

Para se gerar a onda quadrada a ada 50us será gerada uma interrupção pelo T/C0 e o

pino P1.0 será omplementado na rotina de interrupção usando-se a instrução CPL, indo

de 0 a 1 ou de 1 a 0.

A seguir o ódigo do programa:

38
4 Exemplos de Apli ação

ORG 0 ; INICIO DO CÓDIGO

LJMP INICIO ; DESVIA P/ O INICIO DO PROGRAMA PRINCIPAL

ORG 0BH ; ENDEREÇO DE INICIO DA ROT. INT. DO T/C0

; ********INICIO DA ROTINA DE INTERRUPÇ O DO T/C0***************************

CPL P1.0 ; GERAÇ O DA ONDA QUADRADA

RETI ; RETORNO DE INTERRUPÇ O

ORG 30H ; ENDEREÇO DE INICIO DO PROGRAMA PRINCIPAL

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

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

MOV TH0, #-50 ; VALOR INICIAL DE CONTAGEM É 205 OU -50

SETB TR0 ; DISPARA A CONTAGEM DO T/C0

MOV IE,#82H ; HABILITAS A INTERRUPÇ O DO T/C0

LOOP: SJMP LOOP ; ESPERA AS INTERRUPÇÕES OCORREREM

END ; FIM DO CÓDIGO

4.2 Controle de Temperatura de um Forno


Neste exemplo um forno elétri o será ontrolado por histerese, entre 100?C e 120?C,

utilizando para isto dois sensores de temperatura one tados aos pinos de interrupção

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

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

forma quando a interrupção INT1 for ativada pelo sensor de 100C, o forno deverá ser

ligado por estar na temperatura limite inferior, ver gura 4.2, a seguir.

Figura 4.2: Controle da temperatura de um forno entre 100 e 120 graus

O ódigo do programa resultante é muito simples, omo pode ser onstatado na lista-

gem a seguir:

39
4 Exemplos de Apli ação

ORG 0 ; INICIO DO CÓDIGO

LJMP INICIO ; DESVIA P/ O INICIO DO PROGRAMA PRINCIPAL

ORG 03H ; ENDEREÇO DE INICIO DA ROT. INT. EXTERNA 0

;******** INICIO DA ROT. DA INT. EXTERNA 0**************************************

CLR P1.7 ; DESLIGA O FORNO

RETI ; RETORNO DE INTERRUPÇ O

ORG 13H ; ENDEREÇO DE INICIO DA ROT. INT. EXTERNA 1

;******** INICIO DA ROT. DA INT. EXTERNA 1**************************************

SETB P1.7 ; LIGA O FORNO

RETI ; RETORNA DA INTERRUPÇ O

ORG 30H ; ENDEREÇO DE INICIO DO PROGRAMA PRINCIPAL

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

INICIO: MOV IE, #85H ; HABILITAS AS INTERRUPÇÕES EXTERNAS

SETB IT0 ; ATIVAÇ O DA INT0 NA BORDA DE DESCIDA

SETB IT1 ; ATIVAÇ O DA INT1 NA BORDA DE DESCIDA

SETB P1.7 ; LIGA O FORNO

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

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

;******** LOOP INFINITO DE ESPERA DAS INTERRUPÇÕES************************

LOOP: SJMP LOOP ; ESPERA AS INTERRUPÇÕES OCORREREM

END ; FIM DO CÓDIGO

Pode-se, omo alternativa, elaborar um ódigo para o ontrole do forno em questão

sem o uso do re urso de interrupções. Para isto, os bits sinalizadores de ativação dos

pinos de interrupção, IE0 e IE1, lo alizados no registro TCON (ver item 2.7.3), poderão

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

setado, e é exe utada a ação de ligar/desligar o forno, onforme já expli ado.

Embora o ódigo gerado usando este enfoque seja mais simple que o anterior que utili-

zava interrupções, este não apresenta a mesma exibilidade que o primeiro, uma vez que

não permite que outras tarefas possam ser realizadas em paralelo ao monitoramento dos

pinos de interrupção. Veri a-se que no aso do uso de interrupções, onde o programa

 a em loop innito esperando a o orrên ia das interrupções, sem fazer absolutamente

nada de útil, é plenamente possível embutir algum ódigo no lugar deste loop innito, e

então outras tarefas em paralelo poderão ser exe utadas.

O ódigo que implementa a alternativa de ontrole do forno, sem o uso de interrupções

está apresentado na página seguinte.

40
4 Exemplos de Apli ação

ORG 0000 ; INICIO DO CÓDIGO

SETB P1.7 ; LIGA O FORNO

JB INT0, LOOP
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 CÓDIGO

4.3 Geração de 2 Ondas Quadradas Simultâneas


Neste exemplo serão geradas 2 ondas quadradas simultâneas nos pinos P1.7 e P1.6 de

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

Figura 4.3: Geração de duas ondas quadradas simultâneas

Como a onda de 10KHz possui um período de 100us, pela mesma razão apresentada

antes será usado o T/C0 no modo 2, isto onsiderando-se um lo k de 12MHz para o

mi ro ontrolador.

A apa idade de gerar tempo dos T/C's no modo 2 é de no máximo 256us, ou 0,256mS,

e pelo fato da onda de 1KHz possuir um período de 1ms, o que ex ede esta apa idade o

T/C1 deverá operar no modo 1, om ontagem em 16 bits, o que possibilita um tempo

onsideravelmente maior, ou seja de 65.536uS, ou 65,536ms. Mais uma vez as interrupções

serão habilitadas e então geradas para atuar nos pinos P1.6 e P1.7 onde o estado destes

serão omplementados para a geração das ondas quadradas.

41
4 Exemplos de Apli ação

A seguir o ódigo do programa:

ORG 0000 ; INICIO DO CÓDIGO

LJMP INICIO ; DESVIA P/ O INICIO DO PROGRAMA PRINCIPAL

ORG 000BH ; ENDEREÇO DE INICIO DA ROT. INT. DO T/C0

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

ORG 001BH ; ENDEREÇO DE INICIO DA ROT. INT. DO T/C1

LJMP T1INT ; DESVIO P/ CORPO DA ROT. INT. DO T/C1

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

ORG 0030H ; ENDEREÇO DE INICIO DO PROGRAMA PRINCIPAL

INICIO: MOV TMOD, #12H ; T/C0: 8BITS AUTORELOAD, E T/C1: 16BITS

MOV TH0, #-50 ; VALOR INICIAL DE CONTAGEM DO

MOV TL0, #-50 ; T/C0 P/ TEMPO DE 50us

MOV TH1,#HIGH(-500) ; VALOR INICIAL DE CONTAGEM DO

MOV TL1,#LOW(-500) ; T/C1 P/ TEMPO DE 500us

SETB TR0 ; INICIA A CONTAGEM DO T/C0

SETB TR1 ; INICIA A CONTAGEM DO T/C1

MOV IE, #8AH ; HABILITA AS INTERRUPÇÕES DOS T/C'S

LOOP: SJMP LOOP ; ESPERA AS INTERRUPÇÕES OCORREREM

;******** INICIO DA ROTINA DE INTERRUPÇ O DO T/C0******************************

T0INT: CPL P1.7 ; GERAÇ O DA ONDA QUADRADA

RETI ; RETORNA DA INTERRUPÇ O

; ********INICIO DA ROTINA DE INTERRUPÇ O DO T/C1******************************

T1INT: CPL P1.6 ; GERAÇ O DA ONDA QUADRADA

CLR TR1 ; PARA A CONTAGEM DO T/C1

MOV TH1,#HIGH(-500) ; VALOR INICIAL DE CONTAGEM DO

MOV TL1,#LOW(-500) ; T/C1 P/ TEMPO DE 500us

SETB TR1 ; INICIA CONTAGEM DO T/C1

RETI ; RETORNA DA INTERRUPÇ O

END ; FIM DO CÓDIGO

4.4 Interfa e om Conversor A/D R2R


Um modo simples e barato de onverter valores de uma variável analógi a para palavras

digitais é utilizar um onversor A/D do tipo R2R. A gura 4.4, ilustra omo se imple-

mentar uma interfa e entre um 8051 e um onversor A/D R2R.

Para se efetuar a onversão da tensão de entrada analógi a para uma palavra digital,

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

degrau de Vm/127, onde Vm é a máxima tensão de entrada. Para determinadas apli a-

ções esta resolução pode ser pobre, porém para a maioria das apli ações em ontrole de

42
4 Exemplos de Apli ação

pro essos tal resolução é mais que su iênte. De qualquer forma, aso seja ne essário uma

resolução maior, pode-se utilizar um onversor A/D omer ial de 8, 10, ou 12bits. No item

4.5, um destes onversores A/D omer ial, o ADC0804, é mostrado sendo interfa eado

om um 8051.

Figura 4.4: Interfa e 8051 om Conversor A/D tipo R2R

A seguir o ódigo em assembly da rotina do onversor A/D R2R é apresentado.

;******** INICIO DA ROTINA DO CONVERSOR A/D R2R****************************

ADCR2R: MOV P1, #FFH ; INICIALIZA P1.7 COMO ENTRADA

MOV R0, #7FH ; VALOR MÁXIMO DA REDE R2R

REDER2R: MOV P1, R0 ; ENVIA VALOR DE CONTAGEM P/ A REDE

NOP ; ESPERA ALGUM TEMPO P/ ESTABILIZAÇ O

JBC P1.7,SAIR2R ; VERIFICA SAÍDA DO COMPARADOR LM311

DJNZ R0, REDER2R ; ESPERA ALGUM TEMPO P/ ESTABILIZAÇ O

SAIR2R: RETI ; RETORNO DE ROTINA

4.5 Interfa e om ADC0804


Aqui um onversor A/D do tipo ADC0804 de 8 bits será one tado na porta P1 do 8051,

e o omando de ini io de onversão (pino WR do ADC0804) será forne ido a ada 1

segundo, pelo pino P3.0 do 8051. Este sinal em P3.0 (STARTADC) sempre que for de

alto para baixo ini ia uma nova onversão. Após o nal da onversão, o onversor envia

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

interrupção externa INT0 por sua vez pro ede a leitura do ADC0804 enviando o valor

lido para um buer ir ular na memória externa (XRAM).

43
4 Exemplos de Apli ação

A gura 4.4, a seguir ilustra a onexão entre os pinos de dados e ontrole do ADC0804

om o 8051.

Figura 4.5: Interfa e 8051/ADC0804

A seguir é apresentada a listagem do programa expli ado a ima, sem a rotina do buer

ir ular implementada. Tal rotina deve ser es rita de a ordo om as restrições de memória

do sistema implementado.

STARTADC EQU P3.0 ; PINO DE WRITE DO ADC0804

ORG 0000 ; ENDEREÇO DE RESET

LJMP INICIO ; DESVIA P/ INICIO PROGR. PRINCIPAL

;***********INICIO DA ROT. INT. EXT.0**********************************************

MOV A,P1 ; PROCEDE A LEITURA DO ADC

ACALL BUFF_CIRC ; GRAVA NO BUFFER CIRC. DA XRAM

RETI ; RETORNO DE INTERRUPÇ O

;***********INICIO DA ROT. INT. DO T/C0********************************************

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

CLR TR0 ; PARA A CONTAGEM DO T/C0

MOV TH0,#HIGH(-50000) ; VALOR INICIAL DE CONTAGEM

MOV TL0,#LOW(-50000) ; TEMPO DE 50ms EM 12MHz

SETB TR0 ; REINICIA A CONTAGEM

DJNZ R0,SAIDA ; APÓS 20X DE 50ms TEM-SE 1,0s

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

CLR STARTADC ; STARTADC

SETB STARTADC ; PREPARA SINAL INÍCIO DE CONV.

SAIDA: RETI ; RETORNO DE ROTINA

44
4 Exemplos de Apli ação

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

INICIO: SETB STARTADC ; PREPARA O SINAL DE INÍCIO DE CONVERS O

MOV P1,#0FFH ; CONFIGURA P1 COMO ENTRADA

MOV TMOD,#01H ; T/C0 NO MODO 16BITS P/ GERAR 50ms

SETB IT0 ; INT0 ATIVA NA BORDA DE DESCIDA

MOV IE, #10000011B ; INTERRUPÇÕES INT0 E T/C0 HABILITADAS

MOV R0,#20 ; R0 C/ 20 PERMITE CONTAR 20 X 50ms = 1,0 SEG.

SETB TF0 ; PROVOCA A INTERRUPÇ O DO T/C0

LOOP: SJMP LOOP ; DESVIA P/ NOVA CONVERS O

END ; FIM DO CÓDIGO

4.6 Interfa e om LCD Inteligente


O usos de um display de ristal líquido (LCD) inteligente em um sistema mi ro ontrolado

é uma das formas mais efetivas de prover uma interfa e homem-máquina de baixo usto

e fá il implementação, sendo portanto utilizado em um grande número de apli ações.

Os LCD's inteligentes mais populares são os do padrão Hita h, om 1 ou 2 linhas de 16

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

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

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

A onexão do LCD om o mi ro ontrolador pode ser feita através de 4 ou 8 linhas de

dados (D4...D7 ou D0...D7), além de 3 sinais de ontrole: o sinal de habilitação (EN), o

de seleção de es rita ou leitura (RW), e o sinal de seleção de registro de ontrole ou de

dado (RS). A pinagem de um LCD padrão Hita hi é o seguinte:

Pino Sigla Função

1 GND Terra
2 V Alimentação de +5V
3 Pot Terminal entral do trimpot
4 RS Register Sele t - Seleção de Registro
5 RW Read/Write - Sinal de Leitura e Es rita
6 EN Enable - Sinal de Habilitação
7 D0 Sinal de dados D0 (LSB)
8 D1 Sinal de dados D1
9 D2 Sinal de dados D2
10 D3 Sinal de dados D3
11 D4 Sinal de dados D4
12 D5 Sinal de dados D5
13 D6 Sinal de dados D6
14 D7 Sinal de dados D7 (MSB)

Tabela 4.1: Pinagem do LCD padrão

Os modos de fun ionamento do LCD devem ser programados através de palavras de

45
4 Exemplos de Apli ação

ontrole próprias, que permitem ongurar várias ara terísti as deste, tais omo:

• Seleção do modo de entrada de dados em 4 ou 8 bits;

• In remento automáti o da posição do ursor após es rita;

• Ligar o LCD/Cursor

• Desligar o LCD/Cursor

• Pis ar ursor.

Para se pro eder a programação do LCD os sinais RS e RW devem sele ionar a es rita no

registro de ontrole, e o sinal de habilitação deve ser ativado. Então palavras de ontrole

adequadas devem ser es ritas neste registro, para se programar o modo omo o LCD irá

fun ionar. Dentre estes modos de operação estão os modos de interfa e em 4 ou 8 bits de

dados, ujas palavras de ontrole são 28H e 38H, respe tivamente.

Para maiores detalhes de operação dos LCD's padrão Hita h, onsultar do umentação

própria do fabri ante.

4.6.1 Interfa e 8051/LCD em 8 bits

A seguir será apresentado um programa para es rita da mensagem Hello World no LCD,

ontrolado em 8 bits. O esquema de onexão entre o LCD e o 8051 em 8bits é mostrado

na gura 4.5.

Figura 4.6: Interfa e 8051/LCD em 8 bits

O ódigo que implementa a es rita da mensgem  Hello World é apresentado a seguir.

46
4 Exemplos de Apli ação

;*********DEFINIÇÕES P/ O LCD *****************************************************

EN EQU P3.4 ; ENABLE ATIVO NA BORDA DE DESCIDA

RS EQU P3.2 ; SELEÇ O REGISTRO: DADO-1, COMANDO-0

RW EQU P3.3 ; READ/WRITE: LEITURA-1, ESCRITA-0

DADO EQU P1 ; LCD CONECTADO NA PORTA P1

CONFIG EQU 38H ; 20H(FUNÇ O)+10H(8BITS)+08H(2LINHAS)

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

ENTRY EQU 06H ; 06H(DESLOCA A DIREITA A CADA ESCRITA)

CLR_LCD EQU 01H ; LIMPA LCD

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

LCALL INICLCD ; INICIALIZA O LCD

LCALL TEXTO ; ENVIA MENSAGEM PARA O LCD

LOOP SJMP LOOP ; LOOP INFINITO

;*********INICIALIZAÇ O DO LCD ***************************************************

INICLCD: MOV A, #CONFIG ; PREPARA PALAVRA DE CONTROLE DO LCD

LCALL WR_CMD ; ENVIA CONTROLE P/ O LCD

MOV A, #LCD_ON ; PREPARA PALAVRA DE CONTROLE DO LCD

LCALL WR_CMD ; CHAMA ROT. ENVIO DE CONTROLE P/ LCD

MOV A, #ENTRY ; PREPARA PALAVRA DE CONTROLE DO LCD

LCALL WR_CMD ; CHAMA ROT. ENVIO DE CONTROLE P/ LCD

MOV A, #CLR_LCD ; PREPARA PALAVRA DE CONTROLE DO LCD

LCALL WR_CMD ; CHAMA ROT. ENVIO DE CONTROLE P/ LCD

RET ; RETORNO DE ROTINA

;*********ESCREVE CONTROLE NO LCD*********************************************

WR_CMD: SETB EN ; PREPARA SINAL DE ENABLE DO LCD

CLR RS ; SELECIONA REGISTRO DE CONTR. DO LCD

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

CLR EN ; ATIVA SINAL DE ENABLE DO LCD

LCALL WAIT5MS ; ESPERA 5MILISEGUNDOS

RET ; RETORNO DE ROTINA

;*********ESCREVA CARACTER NO LCD*********************************************

WR_TEXT: SETB EN ; PREPARA SINAL DE ENABLE

SETB RS ; 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 ação

;*********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 CÓDIGO

4.6.2 Interfa e 8051/LCD em 4 bits

Nesta outra versão do exemplo anterior, o LCD é interfa eado om o 8051 através de 4

bits de dados, poupando assim 4 bits de E/S do mi ro ontrolador, porém às ustas de um

ódigo um pou o mais extenso.

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

do LCD, ou seja DB4 a DB7.

Observar que a palavra de ontrole de onguração do LCD agora é 28H ao invés 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 ação

;*********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 ação

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 ação

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 ação

POP ACC ; RESTITUI O VALOR ANTERIOR DO ACC

RET ; RETORNO DE ROTINA

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

TEXTO: MOV DPH, #HIGH(MSG) ; ENDEREÇO DA MENSAGEM EM DPTR

MOV DPL, #LOW(MSG) ; ENDEREÇO 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/ CÓDIGO 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 disponíveis em um sistema mi ro ontrolado, e se

ne essita de pinos ad ionais, pode-se re orrer à expansão das linhas de saída através 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 através deste a um 8051.

Figura 4.7: Conexão 8051/LCD om 74HC164

52
4 Exemplos de Apli ação

Como visto na gura 4.7, através de 2 linhas da porta P1, são forne idos os bits de

dados serializados, e o sinal de lo k para o registrador de deslo amento, que após 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 através da

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

40us e 5ms, não serão apresentadas por se tratarem das mesmas dos ódigos do item 4.6.

; ************DEFINIÇÕES 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 ; DECLARAÇÕES 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 ação

;***********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 ação

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 ENDEREÇO DE MSG EM DPH

MOV DPL, #LOW(MSG) ; LSB DO ENDEREÇO 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 Memória

Neste exemplo o LCD é interfa eado om o 8051 através de Mapeamento de E/S em

Memória, o que pode ser onveniênte quando se tem muitos periféri os no sistema, situação

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

periféri os.

Trata-se, o mapeamento em memória, da té ni a de endereçar periféri os através de

endereços de memória, sendo as operações de leitura e es rita nestes, efetudas omo se

estive a essando memória SRAM externa, usando-se portanto as instruções de MOVX.

Os endereços de es rita e leitura es olhidos para o a esso ao LCD estão mostrados na

tabela a seguir:

Endereço Função 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 ligação entre o 8051 e o LCD om mapeamento em memória é apresen-

tado na gura 4.8, onde se veri a uma lógi a que onstitui o ir uito de seleção ne essário

para a geração do sinal de habilitação do LCD om base nos endereços da tabela anterior.

55
4 Exemplos de Apli ação

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

Uma restrição ao uso desta té ni a está nos tempos de a esso ao LCD que são mais

lentos que o máximo lo k do 8051, então a frequên ia de lo k máxima do 8051 não deverá

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

uma vez que permite a programação das taxas de transferên ia padrão da omuni ação

serial.

A seguir o ódigo assembly para o programa Hello World, na versão em que o LCD
usa mapeamento em memória.

;*********DEFINIÇÕES DO LCD**********************************************************

CMD_WR EQU 8000H ; ENDEREÇO DE ESCRITA DE COMANDO

DATA_WR EQU 8001H ; ENDEREÇO DE ESCRITA DE CARACTER

CMD_RD EQU 8002H ; ENDEREÇO DE LEITURA DE COMANDO

DATA_RD EQU 8003H ; ENDEREÇO 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 ação

;*********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 ; ENDEREÇO 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 ; ENDEREÇO 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) ; ENDEREÇO DA MENSAGEM EM DPTR

MOV DPL, #LOW(MSG) ; ENDEREÇO 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 ENDEREÇO CORRENTE NA PILHA

PUSH DPL ; SALVA ENDEREÇO CORRENTE NA PILHA

LCALL WR_TEXT ; CHAMA ROT. DE ESCRITA DE CARACTER

POP DPL ; RESTITUI O ENDEREÇO AO DPTR

POP DPH ; RESTITUI O ENDEREÇO AO DPTR

INC DPTR ; INCREMENTA O ENDEREÇO EM DPTR

SJMP OUTRO ; VOLTA A BUSCAR OUTRO CARACTER

SAIDA: RET ; ROTORNO DE ROTINA

57
4 Exemplos de Apli ação

;*********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 MÁX.

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 periféri 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 questão 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, estão as te las 1, 2, e 3; na segunda linha as te las 4, 5, e 6;

até que na última linha mais abaixo estão as te las *, 0, e #.

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

não, 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 nível lógi o 0, através da es rita da

palavra binária 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 nível lógi o 0, a te la orrespondente

a essa linha/ oluna está pressionada;

• Então guarda-se o ódigo da te la em um registro, e um atraso de 100ms é provido.

Caso ontrário, 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 binária

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 binária 110, e é repetida a

veri ação das linhas;

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

te lado.

58
4 Exemplos de Apli ação

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 numéri o de 6 digitos, através do te lado matri ial

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

um dos 6 dígitos re ebidos via te lado um '*' será olo ado após a mensagem. Ao nal,

a título de veri ação o ódigo digitado é apresentado na linha de baixo do LCD.

;*********DEFINIÇÕES 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

;*********DEFINIÇÕES 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 CÓDIGO

PONTCOD EQU 48 ; PONTEIRO P/ GUARDAR CÓD. NA MEMÓRIA

59
4 Exemplos de Apli ação

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

... ... ; DECLARAÇÕES DO RESTO DO PROG. PRINC.

... ... ; DECLARAÇÕES 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 ação

;*********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 ação

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 CÓDIGO 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 CONTRÁRIO O DÍGITO É 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 ação

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

MOV R1,#34H ; CASO CONTRÁRIO DÍGITO É 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 CONTRÁRIO O DÍGITO É 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 CONTRÁRIO O DÍGITO É 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 CONTRÁRIO O DÍGITO É 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 ação

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

MOV R1,#38H ; CASO CONTRÁRIO O DÍGITO É 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 CONTRÁRIO O DÍGITO É 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 CONTRÁRIO O DÍGITO É 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 CONTRÁRIO O DÍGITO É 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 ação

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

MOV R1,#38H ; CASO CONTRÁRIO DÍGITO É 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 DÍGITOS

MOV R1,#PONTCOD ; INICIALIZA PONTEIRO DO CÓDIGO

DISP: MOV A,R1 ; LÊ DÍGITOS DO CÓDIGO

ACALL WR_DADO ; ENVIA OS DÍGITOS P/ O LCD

INC R1 ; INCREM. PONTEIRO DE CÓDIGO

INC R0 ; INCREM. CONTADOR DE DÍGITOS

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 família 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 lógi os que são usados para o omando de 6 haves

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

de orrente de 500mA por períodos urtos, e poderão ser usados para a ionar as argas

omo: bobinas de relês, bobinas de motores de passo, LED's, et . No aso de argas

indutivas, a ada saída 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 através do ULN2003 one tado a uma fonte de 12V om

potên ia su iênte para a demanda de energia do motor de passo.

65
4 Exemplos de Apli ação

Figura 4.10: A ionamento de Motor de Passo Unipolar

Para que o motor de passo gire no sentido horário é ne essário que as bobinas (B1...B4)

sejam energizadas onforme a sequên 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 horário:

;*********DEFINIÇÕES 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 HORÁRIO***************************************************

LOOP: MOV P1,#PASSO1 ; ENVIA DADO P/ ACIONAR A BOBINA 1

LCALL ATRASO ; CHAMA ROTINA DE ATRASO

66
4 Exemplos de Apli ação

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 Expansão das Interrupções Externas


Quando se deseja mais de duas fontes de interrupção externa pode-se usar um artifí io de

software no qual além dos pinos INT0 e INT1 pode-se usar os pinos T0, T1, e RXD para

gerar interrupções externas, possibilitando assim até 5 interrupções externas, usando-se

as rotinas de interrupção dos T/C0 e T/C1, além do Canal Serial para tratar os sinais

apli ados aos pinos T0, T1, e RXD omo pinos de interrupção externa.

Desta forma as seguintes onsiderações deverão ser observadas:

• Os T/C0 e/ou T/C1, deverão ser programados no modo 2 omo ontadores e om

o valor ini ial de ontagem em FFH;

• As interrupções dos T/C0 e/ou T/C1 deverão ser habilitadas;

• Um pulso negativo apli ado no pino T0 ou T1, imediatamente desvia o programa

para o endereço do vetor de interrupção do T/C0 ou T/C1, respe tavamente;

• Ao ser exe utada a rotina de interrupção do T/C0 ou T/C1 dará tratamento ao

periféri o omo sendo originado de uma interrupção externa, no pino T0 ou T1;

• Com relação ao Canal Serial, este deve ser olo ado no modo 2, e sua interrupção

habilitada;

• Quando houver uma transição de alto para baixo no pino RXD, este desvia o pro-

grama para o endereço do vetor de interrupção do anal serial (23H);

• Ao ser exe utada a rotina de interrupção do anal serial, o bit de habilitação de

re epção RI deve ser resetado, e será dado tratamento ao periféri o omo sendo

originado de uma interrupção externa no pino RXD.

A seguir a listagem ne essária para o esquema expli ado a ima, onde as instruções NOP
deverão ser tro adas por instruções espe í as do programa que se deseja exe utar.:

67
4 Exemplos de Apli ação

ORG 0 ; ENDEREÇO DE RESET

LJMP INICIO ; DESVIA P/ PROGRAMA PRINCIPAL

ORG 3 ; ENDEREÇO DE DESVIO DA INTERRUP. EXT. 0

AJMP EX0INT ; DESVIA P/ ROT. DE INT. EXT. 0

ORG 0BH ; ENDEREÇO DE DESVIO DA INTERRUP. T/C0

AJMP T0INT ; DESVIA P/ ROT. DE INT. T/C0

ORG 13H ; ENDEREÇO DE DESVIO DA INTERRUP. EXT. 1

AJMP EX1INT ; DESVIA P/ ROT. DE INT. EXT. 1

ORG 1BH ; ENDEREÇO DE DESVIO DA INTERRUP. T/C1

AJMP T1INT ; DESVIA P/ ROT. DE INT. T/C1

ORG 23H ; ENDEREÇO 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 ; DECLARAÇÕES DO PROGRAMA PRINCIPAL

JMP ESPERA ; EXECUÇ O DO PROGRAMA PRINCIPAL

;***********ROTINAS DE INTERRUPCAO EXTERNAS ADCIONAIS****************

SERINT: NOP ; DECLARAÇÕES DA ROT. DE INTERRUP. ADCIONAL

CLR RI ; RESETA FLAG DE RECEPÇ O

RETI ; RETORNO DE INTERRUPÇ O

T0INT: NOP ; DECLARAÇÕES DA ROT. DE INTERRUP. ADCIONAL

RETI ; RETORNO DE INTERRUPÇ O

T1INT: NOP ; DECLARAÇÕES DA ROT. DE INTERRUP. ADCIONAL

RETI ; RETORNO DE INTERRUPÇ O

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

END

68
4 Exemplos de Apli ação

4.10 Envio de Dados via Canal Serial


O programa a seguir pode ser usado para se testar a omuni ação serial entre o 8051 e

um mi ro omputador PC, e implementa o envio de forma ontínua as letras do alfabeto

de a até z a uma taxa de 9600bps.

ORG 0 ; INÍCIO DO CÓDIGO EM 0000H

LJMP INICIO ; DESVIO P/ O PROGRAMA PRINCIPAL

;*****************INICIO DA ROT. DE INT. DO CANAL SERIAL******************

ORG 23H ; ENDEREÇO DE DESVIO DA INT. DO CANAL SERIAL

CJNE A,#'z',SAIDA ; COMPARA DADO A SER ENVIADO COM 'z'

SAIDA: MOV SBUF, A ; ENVIA PRÓXIMO 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 VARIÁVEL

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 CÓDIGO

4.11 Rotina de Geração de Beep


Uma rotina de geração de um Beep gerado num tom de 440Hz por 1 segundo sempre que

uma interrupção externa é disparada, pode ser útil em um grande número de apli ações,

daí ser apresentada neste exemplo. Mais uma vez o T/C1 será usado no modo 1, uma vez

que o período 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 também estará no modo 1 de 16 bits, uma vez que o tempo de ativação

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). Então o T/C0 deverá gerar 20 interrupções a ada

50ms para totalizar 1 segundo.

A seguir o ódigo do programa:

69
4 Exemplos de Apli ação

ORG 0 ; INÍCIO DO CÓDIGO EM 0000H

LJMP INICIO ; DESVIO P/ O PROGRAMA PRINCIPAL

LJMP EX0INT ; DESVIA P/ ROT. DE INT. EXT. 0

ORG 0BH ; ENDEREÇO DE DESVIO DA INT. DO T/C 0

LJMP T0INT ; DESVIA P/ ROT. DE INT. T/C 0

ORG 1BH ; ENDEREÇO DE DESVIO DA INT. DO T/C 1

LJMP T1INT ; DESVIA P/ ROT. DE INT. T/C 1

ORG 30H ; INÍCIO 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 ação

4.12 Dimmer Mi ro ontrolado om AT89C2051


Neste item é apresentado um exemplo ompleto de implementação 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 potên 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 iênte para a presente apli ação.

O dimmer utiliza um TRIAC TIC226, disparado através de um fotoa oplador MOC3011,

e os pulsos de disparo são forne idos pelo pino P1.7 do AT89C2051.

A idéia bási a é usar um dos T/C's para gerar os tempos de atraso ne essários à geração

dos ângulos de disparo do TRIAC orrespondendo às potên ias de 100%, 75%, 50%, e

à potên ia de 0% orresponderá a inibição o pulso de disparo. O outro T/C será usado

para a duração do pulso de disparo.

Os valores das onstantes de arga dos registros de ontagem TH0 e TL0 serão 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 eberão estarão rela ionados à have push-button

pressionada.

Os valores de atraso de tempo para o disparo foram feitos em 500us para 100% de

potên ia, 2,25ms para 75%, 4,50ms para 50%, e 6,80ms para 25% de potên 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 tensão da rede por 0V, sendo estes

enviados ao pino de interrupção INT0 do mi ro ontrolador.

Figura 4.11: Dimmer Mi ro ontrolado

A seguir o ódigo do programa:

71
4 Exemplos de Apli ação

ORG 0000 ;ENDEREÇO 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 ; ENDEREÇO 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 INTERRUPÇÕES 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 CONTÍNUA 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 ação

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 aquisição 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 memória externa do tipo 6264. A memória externa deve ser implementada omo um

buer ir ular, no qual após as 8192 amostras terem sidos armazenadas, volta-se ao iní io

da memória sobrees revendo os dados anteriores.

Programa Proposto 2:

Implemente o mesmo sistema de aquisição 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 ação

Programa Proposto 3:

Elabore um sistema baseado nos exemplos propostos anteriores que registre os valores

máximos e mínimos 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 máximos e mínimos orrentes da temperatura sendo monitorada para

um pa ote de 8KB de dados.

Programa Proposto 5:

Modique o exemplo de apli ação 4.5 para que ao invés de se armazenar os dados em uma

memória 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 aquisição de dados baseado em um ADC tipo

R/2R de 7 bits de resolução, porém se deseja uma resolução de 8 bits de forma a melhorar

a qualidade dos dados. Faça um novo esquema elétri o e es reva um novo ódigo para

atender a exigên ia a ima.

74
5 IDE KEIL uVision2

5.1 A Interfa e Grá a do uVision2


O Ambiênte 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, disponíveis no

mer ado, possui uma versão de avaliação 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 simulação 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 função 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 periféri os utilizados no

programa fonte, ou seja: Temporizador/Contador0, porta P1, e interrupção do T/C0,

podem ser a ompanhados na simulação, através de janelas representando estes periféri os,

possibilitando assim veri ar om pre isão a exe ução do programa, e deteção de qualquer

erro de lógi a.

75
5 IDE KEIL uVision2

Figura 5.1: Aspe to da Interfa e do Usuário do uVision2

Com o propósito de ilustrar todas as etapas envolvidas no desenvolvimento de software

para o 8051 usando o uVision2, será usado o exemplo da geração de uma onda quadrada

de 10KHz, referido antes.

Todo o desenvolvimento de software no uVision2 deve seguir as seguintes etapas:

• Criação de um novo projeto

• Seleção do dispositivo a ser usado no projeto

• Edição do ódigo fonte em assembly ou linguagem C

• Adição do ódigo fonte ao projeto

• Geração do ódigo exe utável

• Simulação ou Debug

Os itens a seguir ilustram passo a passo o desenvolvimento do projeto a ima referido.

5.2 Criação 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 opção Proje t, e sub-opção New, omo mostrado

na gura 4.3.

Figura 5.3: Criação 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 diretório/sub-diretório de destino, ver gura 4.4.

77
5 IDE KEIL uVision2

Figura 5.4: Atribuindo um nome ao projeto

Na janela seguinte de título: '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 família 8051 que será

alvo do desenvolvimento.

78
5 IDE KEIL uVision2

Figura 5.6: Es olha do dispositivo da família 8051

Após a es olha do dispositivo alvo para o desenvolvimento, será apresentada uma aixa

de mensagem para a es olha da in lusão ou não do ódigo de Start-Up, neste ponto deve-se

es olher a opção No, e assim deixar o ódigo mais inxuto, gura 4.7.

Figura 5.7: In lusão ou não do ódigo de Start-Up

O passo seguinte é a edição do ódigo fonte, e para isso a barra de ferramentas sele ione

a opção File, sub-opção New, omo na gura 4.8.

79
5 IDE KEIL uVision2

Figura 5.8: Criação do ódigo fonte

A janela de edição se abrindo, pode-se pro eder a edição do ódigo fonte em C ou

assembly, ver gura 4.9.

Figura 5.9: Janela de edição do ódigo fonte

Na gura 4.10, pode-se ver um ódigo fonte editado e pronto para ser salvo através da

opção Save As do menu File. Alí um nome om extensão asm deve ser espe i ado.

80
5 IDE KEIL uVision2

Figura 5.10: Código fonte pronto para ser salvo

Código fonte em linguagem assembly, após 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 botão direito do mouse, apare e a opção

Add Sour e File, ver gura 4.12.

81
5 IDE KEIL uVision2

Figura 5.12: Adição de arquivo fonte ao projeto

Na janela de seleção 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 operação, aso ontrário

deve-se li ar em Close, ver gura 4.13.

Figura 5.13: Adição de arquivo fonte ao projeto

O(s) arquivo(s) fonte in luido(s) apare erão na lista referente ao í one Sour e Group1,

ver gura 4.14.

82
5 IDE KEIL uVision2

Figura 5.14: Criando o arquivo exe utável

Com o projeto riado, pode-se exe utar os programas assembler e linker, invo ados no

menu Proje t, opção Build Target, ver gura 4.15.

Figura 5.15: Criando o programa exe utável

Caso o programa fonte ontenha erros/avisos, estes são apresentados na janela Output

Window. A gura 4.16. mostra que não há erros no programa fonte.

83
5 IDE KEIL uVision2

Figura 5.16: Programa exe utável riado sem erros/warnings

A etapa seguinte é a de simulação, ou debug, e identi ará possíveis erros de lógi a.

Para isso deve-se no menu Debug es olher a opção Start/Stop Debugging, ver gura 4.17.

Figura 5.17: Ini iando uma sessão de debug

A mensagem mostrada na gura 4.18. é apresentada indi ando a limitação em 2KB da

versão de avaliação do uVision2.

84
5 IDE KEIL uVision2

Figura 5.18: Mensagem indi ando a limitação da versão de avaliação

Após a mensagem de versão avaliação, a janela de ódigo apresentará uma seta na

primeira instrução do programa indi ando a posição do ontador de programa, ver gura

4.19.

Figura 5.19: Simulação passo a passo

Ao se exe utar o programa passo a passo, através da opção Step Into do menu Debug,

a seta segue o uxo de exe ução do programa, ver gura 4.20.

85
5 IDE KEIL uVision2

Figura 5.20: Exe ução passo a passo do programa

Para a ompanhar a habilitação e geração de interrupções na simulação, uma janela de

interrupções pode ser olo ada no ambiênte de trabalho, através do menu Peripherals,

opção Interrupts,ver gura 4.21.

Figura 5.21: Controlando as interrupções

A gura 4.22, mostra a janela de Interrupções na área de trabalho.

86
5 IDE KEIL uVision2

Figura 5.22: Janela do ontrole de interrupções sendo mostrada

Caso se deseje monitorar a porta 1, é possível ter a janela de simulação da porta 1

presente no ambiênte de trabalho. Para tanto, no menu Peripherals es olher a opção IO

Ports, sub-opção Port1, ver gura 4.23.

Figura 5.23: Seleção 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 atualização dos pinos desta porta.

87
5 IDE KEIL uVision2

Figura 5.24: Janela do ontrole de interrupções sendo mostrada

O fun ionamento do Temporizador/Contador0 também pode ser a ompanhado, para

isto sele ione no menu Peripherals, a opção Timers, sub-opção Timer0, ver gura 4.24.

Figura 5.25: Janela do ontrole de interrupções sendo mostrada

Finalmente, na gura 4.25, os três periféri os usados no programa estão disponíveis

para visulização em três janelas da área de trabalho.

88
5 IDE KEIL uVision2

Figura 5.26: Periféri os usados no programa sendo visualizados

89
Referên 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 ações Práti as do Mi ro ontrolador 8051, Silva Júnior, Vidal Pereira da. Editora

Éri a, 2003.

[4℄ Mi ro ontroladores 8051: Teoria do Hardware e do Software/Apli ações em Controle

Digital/Laboratório e Simulação. 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