Sie sind auf Seite 1von 137

ESCOLA TCNICA ESTADUAL GETLIO VARGAS

PROFESSOR: MILTON BARREIRO JUNIOR

Microcontrolador 8051 Teoria e Prtica

So Paulo
2006

Microcontrolador 8051 Teoria e Prtica

ii

ESCOLA TCNICA ESTADUAL GETLIO VARGAS

PROFESSOR: MILTON BARREIRO JUNIOR

Microcontrolador 8051 Teoria e Prtica

Apostila sobre Microcontroladores famlia 8051, apresentada


aos cursos de Eletrnica, Telecomunicaes e Automao Industrial
da Escola Tcnica Estadual Getlio Vargas, com o propsito de
auxiliar nas aulas tericas e prticas.

So Paulo
2006
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

iii

SUMRIO

1 INTRODUO........................................................................................... 1
2 ARQUITETURA BSICA DE UM MICROCONTROLADOR GENRICO.. 2
3 A FAMLIA 8051......................................................................................... 3
3.1 Organizao de Memria................................................................ 4
3.2 Memria de Programa.....................................................................
6
3.3 Memria de Dados.......................................................................... 8
3.4 Conjunto de Instrues da Famlia 8051....................................... 10
3.5 Registrador da palavra de controle (Program Status Word)......... 10
3.6 Modos de Endereamento............................................................ 11
3.7 Instrues Aritmticas................................................................... 12
3.8 Instrues Lgicas........................................................................ 14
3.9 Transferncia de Dados Interna e Externa................................... 15
3.10 Instrues Booleanas.................................................................. 17
3.11 Instrues de Salto..................................................................... 18
3.12 Oscilador Interno......................................................................... 20
3.13 Estrutura de Interrupes............................................................ 21
4 DESCRIO DO HARDWARE................................................................ 24
4.1 Registradores de funo especial (SFR)...................................... 24
4.2 Acumulador (ACC)......................................................................... 25
4.3 Registrador B (B)............................................................................ 25
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

iv

4.4 Registrador da palavra de controle (PSW).................................... 25


4.5 Stack Pointer (SP) e Data Pointer (DPTR).....................................
26
4.6 Buffer Serial (SBUF)....................................................................... 26
4.7 Ports de I/O (P0, P1, P2, P3)........................................................ 28
4.8 Registradores de Timer e de Controle........................................... 29
4.9 Estrutura e operao dos ports de I/O........................................... 32
4.10 Acesso memria externa.......................................................... 35
4.11 Temporizadores e Contadores..................................................... 35
4.12 Modos de operao..................................................................... 36
4.13 Interface Serial............................................................................. 38
4.14 Modos de Operao..................................................................... 38
4. 15 Registrador de Controle.............................................................. 43
4.16 Baud Rates................................................................................... 43
4.17 Interrupes................................................................................. 44
4.18 Estrutura de prioridades............................................................... 46
4.19 Interrupes externas.................................................................. 46
4.20 Circuitos de Controle.................................................................... 47
4.21 Reset............................................................................................ 47
4.22 Clock............................................................................................ 48
4.23 Operao passo a passo............................................................. 49
4.24 Descrio da pinagem................................................................. 50
5 PROGRAMAO E SIMULAO............................................................ 52
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

5.1 Compilao E Linkagem............................................................


52
5.2 Diretivas (Ou Pseudo-Instrues).................................................. 53
5.3 Uso Do Compilador E Do Linker (Passo A Passo)........................ 54
5.4 Simulador dos Microcontroladores da famlia 8051....................... 55
5.5 Operao bsica do simulador...................................................... 56
6 TABELA DE INSTRUES COMPLETA................................................. 58
7 ESQUEMA DA CPU MNIMA PARA TESTE E CARREGAMENTO DE
PROGRAMA.............................................................................................................. 70
8 PROGRAMA TESTE DO SISTEMA MNIMO........................................... 71
9 REFERNCIAS BIBLIOGRFICAS......................................................... 72
APNDICE A............................................................................................................. 73
APNDICE B............................................................................................................. 80
ANEXO 1................................................................................................................... 84

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

1 Introduo
Podemos considerar os microcontroladores, como sendo uma CPU dedicada
e incorporada em um s chip, ou seja, todos os perifricos que nos
microprocessadores se encontravam em chips independentes, assim como
memrias,

temporizadores,

portas

de

comunicao

serial,

dispositivos

de

entrada/sada, esto presentes em um nico componente.


Isso torna o projeto mais compacto, mais dinmico e com o custo final
reduzido, devido aos dispositivos integrados em um s chip.
O chip a ser apresentado nessa apostila ser o microcontrolador da famlia
8051, o qual ser estudado com mais detalhes nos captulos a seguir.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

2 Arquitetura bsica de um microcontrolador genrico


Um microcontrolador genrico composto pelos seguintes blocos:

Unidade Central de Processamento (CPU);

Memria de Programa (ROM ou EPROM);

Memria de dados (RAM);

Linhas de I/O (PORTs);

Controle de interrupes;

Gerador de clock;

Temporizadores (Timers) e Contadores (counters).

representada na figura abaixo constituio clssica de um microcontrolador


contendo os blocos citados e suas respectivas interligaes.
As diferenas bsicas entre os diversos tipos de microcontroladores
disponveis no mercado so relacionadas capacidade e tipos de memrias, na
quantidade de ports disponveis, velocidade de operao, e alguns recursos
especficos como por exemplo, portas seriais, maior nmero de contadores, opo
de baixo consumo, entre outros.
Existem tambm, os componentes chamados derivativos que, como o prprio
nome diz, so microcontroladores derivados dos tipos mais comuns (8048 e 8051),
ou seja, a clula bsica o microcontrolador e este acrescido de outros
componentes de acordo com as necessidades.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

3 A Famlia 8051
Quando temos vrios microcontroladores utilizando uma mesma clula,
chamamos esse conjunto de componentes de famlia. Desta forma temos vrias
famlias como, por exemplo, a famlia do 8048, do 8051, do 8096, entre outras.
Vamos tratar aqui da famlia do 8051, que ser utilizado em nossas
aplicaes. A tabela abaixo descreve os principais componentes dessa famlia:
Nome do
Chip

Verso sem
ROM

Verso
EPROM

Bytes de
ROM

Bytes de
RAM

Timers
16 Bits

Tipo de
Circuito

8051

8031

8751

4K

128

NMOS

80C51

80C31

87C51

4K

128

HMOS

4K

128

SACMOS

8K

256

NMOS

80CL51
8052

8032

80C52

80C32

87C52

8K

256

CMOS

83C528

80C528

87C528

32K

512

3+1

CMOS

83C652

80C652

87C652

8K

256

CMOS

87C751

2K

64

CMOS

87C452

8K

256

CMOS

83C751
83C452

80C452

O elemento bsico desta famlia o chip 8051, cujo diagrama interno serviu
como ilustrao quando falamos sobre um microcontrolador genrico. Os outros
componentes desta famlia esto descritos nos manuais dos fabricantes.
Atualmente, a tendncia mundial no uso de componentes de baixo consumo, torna
sensvel o desenvolvimento de projetos baseados na tecnologia CMOS, facilitando
assim a interligao de seus blocos. Todos os componentes que apresentarem um
C em seu cdigo (80C31, 87C452, etc) pertencem a esta famlia, a qual representa
o que existe de mais avanado em microcontroladores de 8 bits, permitindo a
continuidade de sua linha de produo por um longo perodo.
As caractersticas desta famlia so:

CPU de 8 bits com conjunto de instrues otimizado para aplicaes


de controle de processos;

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Capacidade de processamento Booleano (manipulao de bit


individualmente);

32 linhas de I/O bidirecionais e individualmente endereveis;

128 bytes de RAM on-chip (mnimo);

Dois contadores / temporizadores programveis de 16 bits;

Interface serial full-duplex;

Estrutura de interrupes com at 5 entradas permitindo 2 nveis de


prioridade;

Gerador de clock;

Mnimo de 4Kbytes de memria de programa (ROM ou EPROM);

Capacidade de endereamento externo de at 64Kbytes.

3.1 Organizao de Memria


O 8051 possui intervalos de endereos separados para a memria de
programa e para a memria de dados. Esta separao lgica permite que os dados
acessados pelos endereos de 8 bits sejam armazenados e manipulados mais
rapidamente.

possvel tambm enderear 16 bits, utilizando para isso, o

registrador DPTR, que ser estudado posteriormente.


A figura abaixo ilustra a estrutura de memria utilizada num microcontrolador
8051:

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Nota: a RAM externa no endereada diretamente pela CPU. O


endereo de acesso deve estar em um registrador usado pela CPU como
ndice.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

A memria de programa do tipo ROM e no podemos escrever dados nela.


Podemos ter at 64Kbytes de memria, e normalmente encontramos pelo menos 4K
de memria interna no chip em forma de ROM, EPROM ou OTP (One Time
Program). Os tipos OTP representam uma opo economicamente atraente, pois
so mais baratos comparados aos do modelo EPROM, e podem ser programados
pelo usurio.

Nas verses ROMLESS, esta memria encontra-se externa ao

microcontrolador.

O pulso de leitura para a memria externa o sinal PSEN

(Program Store Enable).


A memria de dados ocupa um espao de endereamento separado da
memria de programa. At 64Kbytes de memria externa podem ser endereados,
e a CPU gera sinais de read e write, necessrios durante o acesso memria
externa.
3.2 Memria de Programa
A figura abaixo mostra o mapa da parte inferior da memria de programa.
Aps o reset, a CPU comea a executar as instrues a partir do endereo 0000H.

Como pode ser visto na figura, cada interrupo alocada num endereo fixo
da memria de programa. A interrupo direciona o contador de programa da CPU
para o seu respectivo endereo, onde se encontra a rotina de interrupo, conforme
controle proporcionado pelo vetor de interrupes.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Os primeiros 4Kbytes de memria podem estar localizados no chip, ou num


chip (ROM ou EPROM) externo. O controle de acesso interno/externo feito pelo
sinal EA (External Access). O sinal de strobe para acesso memria externa o
sinal PSEN, ativo apenas quando da ocorrncia de acessos externos (EA ligado a
terra), no sendo, portanto utilizado quando se utiliza apenas a rea de memria
interna.
A configurao de hardware necessria para acesso memria externa
ilustrada a seguir. Note que 16 linhas de I/O (port 0 e port 2) so dedicadas
transio de sinais durante buscas memria externa. O port 0 opera como um
barramento de dados endereo multiplexado, emitindo o byte low do program
counter como endereo e aguarda o recebimento do byte de cdigo da memria de
programa. Durante o tempo em que o byte low est vlido no port 0, o sinal ALE
coloca este byte no latch de endereos, enquanto o port 2 emite o byte alto de
endereos. O sinal PSEN pulsa, e o cdigo de byte lido pelo microcontrolador.

O endereo de memria de programa sempre de 16 bits, mesmo quando a


quantidade de memria externa inferior 64Kbytes. Desta forma, sempre que
utilizarmos memria externa, dois ports (port 0 e port 2) sero sacrificados em
funo do endereamento das mesmas.
possvel utilizarmos tambm os portos que foram sacrificados, porm, no
uma operao to confortvel.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

3.3 Memria de dados


A figura abaixo mostra o hardware necessrio para o acesso memria RAM
externa.

A CPU, neste caso est executando um programa a partir da ROM interna. O


port 0 serve como um barramento multiplexado de dados/endereo para a RAM, e 3
linhas do port 2 so utilizadas para as pginas da RAM. Os sinais de RD e WR so
gerados pela CPU para comandar as operaes.
Podemos enderear at 64Kbytes de memria RAM, em endereos de 1 ou 2
bytes. Os endereos de 1 byte so geralmente utilizados em conjunto com 1 ou
mais linhas de I/O, para definir a pgina que est sendo utilizada na RAM.
Endereos de 2 bytes, quando utilizados demandam que o port 2 gere o byte alto de
endereos.
A memria de dados interna est mapeada como indica a figura a seguir. O
espao de memria est dividido em 3 blocos, normalmente denominados, Lower
128, Upper 128 e SFR (Special Function Register). A memria de dados interna tem
sempre 1 byte de endereamento apenas, o que significa que temos um mximo de
256 bytes de memria interna.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Entretanto, os modos de endereamento permitem o uso de at 384 bytes


utilizando um truque simples. Atravs de endereamento direto, acessamos um
espao de memria e atravs de endereamento indireto, acessamos um espao de
memria diferente. Desta forma, os registradores de funo especial (SFR) e os
ltimos 128 bytes (Upper Space) so acessados nos mesmos endereos (de 80H
at FFH) apesar de serem fisicamente separados. Nas clulas bsicas 8051, a rea
de memria alta no existe no chip, desta forma, consideramos apenas a rea de
memria baixa (Lower Space) para as nossas experincias (melhores referencias a
estas reas altas podem ser encontradas nos manuais dos fabricantes).
Os primeiros 128 bytes de memria interna esto mapeados como indica a
figura abaixo:

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

10

Os primeiros 32 bytes esto agrupados em 4 bancos de 8 registradores,


chamados R0 at R7.

Dois bits no registrador da palavra de controle (PSW)

selecionam qual o banco de registradores est em uso. Este recurso permite um


uso mais eficiente do espao de cdigo.
Os prximos 16 bytes acima do banco de registradores formam o bloco
conhecido como memria enderevel por bit (bit addressable space). O conjunto
de instrues do 8051 inclui vrios tipos de instrues de um s bit, e os 128 bits
presentes nessa rea podem ser diretamente endereados por estas instrues.
Todos os bytes nos primeiros 128 bytes de memria podem ser endereados
direta ou indiretamente.

Os prximos 128 bytes s podem ser acessados

indiretamente nos dispositivos que os possuem.


A rea de memria acima de 128 bytes constitui o registrador de funes
especiais (SFR) cuja descrio detalhada faremos posteriormente.
3.4 Conjunto de Instrues da famlia 8051
Todos os membros da famlia 8051 executam o mesmo conjunto de
instrues. Este conjunto composto por instrues otimizadas para aplicaes de
controle, facilitando as operaes de dados atravs de vrios modos de
endereamento.

Capacita ainda a operao de variveis de um bit, permitindo

operao em sistemas que demandam processamento booleano. Vamos descrever


rapidamente o modo de operao de vrias das instrues contidas neste conjunto.
Maiores informaes podem ser encontradas nos manuais dos fabricantes, os quais
descrevem detalhadamente o conjunto de instrues.
3.5 Registrador da palavra de controle (Program Status Word)
O registrador da palavra de controle (PSW) contm vrios bits de status que
indicam o estado atual da CPU. A tabela a seguir indica a posio dos bits dentro do
registrador.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

CY
AC
CY (PSW7):
AC (PSW6):
F0 (PSW5):
RS1 (PSW4):
RS0 (PSW3):
OV (PSW2):
(PSW1):
P
(PSW0):

11

F0
RS1
RS0
OV
P
Carry flag, indica vai um nas operaes aritmticas.
Auxiliary carry flag, auxilia nas operaes de adio.
Flag de uso geral.
Seleo do banco de registradores.
Seleo do banco de registradores.
Overflow em operaes aritmticas.
Flag definvel pelo usurio.
Flag de paridade

O bit de carry, entre outras funes serve como vai um em operaes


aritmticas, e tambm como acumulador para um nmero de operao booleana.
Os bits RS0 e RS1 so utilizados para selecionar um entre quatro bancos de
registradores, disponveis nos primeiros 128 bytes de RAM. O bit de paridade indica
a quantidade de bits em um no acumulador: se P=1, o acumulador contm um
nmero mpar de uns; se P=0, o nmero de uns no acumulador par. Dois bits do
PSW esto disponveis e podem ser utilizados como flags de uso geral. O PSW
encontra-se localizado na rea denominada SFR, no endereo D0H.
3.6 Modos de endereamento
Podemos ter seis modos distintos de endereamento no 8051. Estes modos
so adequados s operaes de controle.

Endereamento direto: Neste modo, o operando especificado por 8 bits de


endereo na instruo.

Somente a RAM interna e os SFRs podem ser

acessados diretamente.

Endereamento indireto: No modo indireto, a instruo especifica um


registrador que contm o endereo do operando.

Ambas as memrias,

interna e externa podem ser acessadas desta forma.

O registrador de

endereo, para operaes de 8 bits, pode ser R0 ou R1, ou ainda o Stack


Pointer.

Endereos de 16 bits podem ser acessados somente pelo Data

Pointer.

Instrues de registrador: Os bancos de registradores contm os


registradores de R0 at R7, que podem ser acessados por certas instrues

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

12

que levam a especificao do registrador junto com o opcode da instruo.


As instrues que acessam os registradores dessa forma so eficientes, pois
eliminam o byte de endereo. Quando a instruo executada, um dos oito
registradores do banco selecionado acessado e a seleo do banco feita
por dois bits (RS0 e RS1) no PSW.

Instrues de registrador especfico: Algumas instrues so especificadas


para certos registradores, por exemplo, as instrues que operam com
acumulador ou Data Pointer no necessitam um byte de endereo para
apont-las, pois o prprio opcode faz isso.

Constantes imediatas: Podemos carregar um registrador com uma


constante, diretamente por um simples comando, como por exemplo, mov A,
#100, que coloca no acumulador o valor 100 (decimal).

Endereamento indexado: Somente a memria de programa (ROM) pode


ser acessada desta forma e somente pode ser lida.

Este modo de

endereamento destinado leitura de tabelas. Um registrador de 16 bits


(DPTR ou PC) indica o endereo de base da tabela e o acumulador
carregado com o valor da tabela.
3.7 Instrues aritmticas
O conjunto de instrues aritmticas listado na tabela a seguir. A tabela indica
o modo de endereamento que pode ser utilizado com cada instruo, para acessar
o byte operando. Por exemplo, a instruo Add A, <byte>; pode ser escrita como:

Add A, 7FH
Add A, @R0
Add A, R7
Add A, #127

Milton Barreiro Junior ETE Getlio Vargas

(endereamento direto)
(endereamento indireto)
(endereamento por registrador)
(constante imediata)

Microcontrolador 8051 Teoria e Prtica

13

Mnemnico

Operao

Modo de
Endereamento

Tempo de
Execuo

ADD A, <byte>

A = A + <byte>

Dir / Ind / Reg /


Imm

ADDC A, <byte>

A = A + <byte> + C

Dir / Ind / Reg /


Imm

SUBB A, <byte>

A = A - <byte> - C

Dir / Ind / Reg /


Imm

INC A

A= A+ 1

Acumulador

INC <byte>

<byte> = <byte> + 1

Dir / Ind / Reg

INC DPTR

DPTR = DPTR + 1

Data Pointer

DEC A

A= A- 1

Acumulador

DEC <byte>

<byte> = <byte> - 1

Dir / Ind / Reg

MUL AB

B e A= B x A

Acumulador e
B

DIV AB

A = INT [A/B]
B = MOD [A/B]

Acumulador e
B

DA A

Ajuste decimal

Acumulador

Os tempos de execuo indicados consideram um clock de 12MHz. Todas as


instrues aritmticas so executadas num tempo de 1s com exceo da instruo
INC DPTR que consome 2s, e as instrues de multiplicao e diviso que so
efetuadas em 4s.
Perceba que qualquer byte no espao de memria interno pode ser
incrementado ou decrementado sem o uso do acumulador. Inclusive o registrador
de 16 bits DPTR pode ser incrementado desta forma. A instruo MUL AB opera
com os registradores A e B e pe o resultado (16 bits) nos registradores B (byte
high) e A (byte low) concatenados. A instruo DIV AB divide A por B e coloca o
quociente (resultado da diviso inteiro em 8 bits) no acumulador e o resto (8 bits) no
registrador B.
Devido s suas caractersticas, a operao de diviso mais utilizada em
converses de radicais e operaes de deslocamento programveis, do que na
diviso aritmtica propriamente dita.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

14

A instruo de ajuste decimal DA A utilizada na aritmtica BCD, quando


utilizamos esta aritmtica, as operaes ADD e ADDC devem, obrigatoriamente, ser
seguidas por uma operao de ajuste decimal, para que os resultados continuem em
BCD. Note que o ajuste decimal no converte o nmero binrio em BCD, mas
corrige os erros de aproximao ocorridos nos registradores.
3.8 Instrues lgicas
A tabela a seguir mostra uma lista de instrues lgicas do 8051.

Mnemnico

Operao

ANL A, <byte>

A = A and <byte>

ANL <byte>, A
ANL <byte>,
#DATA
ORL A, <byte>

<byte> = <byte> and A


<byte> = <byte> and
#DATA
A = A or <byte>

ORL <byte>, A
ORL <byte>,
#DATA
XRL A, <byte>

<byte> = <byte> or A
<byte> = <byte> or #DATA

XRL <byte>, A
XRL <byte>,
#DATA
CLR A
CPL A
RL A

<byte> = <byte> xor A


<byte> = <byte> xor
#DATA
A = 00H
A = not A
Roda Acum. esquerda 1
bit
Roda Acum. esquerda c/
carry
Roda Acum. direita 1 bit
Roda Acum. direita c/
carry
Swap nibbles in A

RLC A
RR A
RRC A
SWAP A

A = A xor <byte>

Modos de
Operao

Tempo de
Execuo

Dir / Ind / Reg /


Imm
Direto
Direto

Dir / Ind / Reg /


Imm
Direto
Direto

Dir / Ind / Reg /


Imm
Direto
Direto

Acumulador
Acumulador
Acumulador

1
1
1

Acumulador

Acumulador
Acumulador

1
1

Acumulador

1
2

1
2

1
2

Todos os modos de endereamento podem ser utilizados e as instrues so


executadas em tempo de 1 a 2 s. Estas instrues podem ser executadas em
qualquer byte de memria interna ou na rea de SFR. O conjunto de instrues
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

15

permite que sejam realizadas todas as operaes lgicas e ainda a instruo SWAP
A, que inverte os nibbles alto e baixo do acumulador, operao til quando
operamos com o cdigo BCD.
3.9 Transferncia de dados interna e externa
A tabela a seguir mostra as instrues disponveis para movimentao de
dados entre os espaos de memria interna.
Mnemnico

Operao

Modo de
Endereamento

Tempo de
Execuo

MOV A, <fonte>

A = <fonte>

Dir / Ind / Reg /


Imm

MOV <dest>, A

<dest> = A

Dir / Ind / Reg

MOV <dest>,
<fonte>

<dest> = <fonte>

Dir / Ind / Reg /


Imm

MOV DPTR,
#DATA

DPTR = 16 bit Const

Constante
imediata

PUSH <fonte>

INC SP: MOV @SP,


<fonte>

Direto

POP <dest>

MOV <dest>, @SP: DEC


SP

Direto

XCH A, <byte>

Acc e <byte> trocam os


dados

Dir / Ind / Reg

XCHD A, @RI

Acc e <byte> trocam os


nibbles
baixos

Indireto

A instruo MOV <dest>, <fonte> permite que os dados sejam transferidos


entre quaisquer dos registradores da RAM interna ou dos SFR, sem o uso do
acumulador, lembrando que os 128 bytes superiores podem ser acessados apenas
por endereamento indireto e os SFR apenas por endereamento direto.
A rea de stack reside na prpria RAM interna e as instrues de PUSH
primeiro incrementam o stack pointer, ento copia o byte no stack. As instrues de
PUSH e POP usam apenas o endereamento direto para identificar o byte que est
sendo manipulado, enquanto que o stack acessado por endereamento indireto
atravs do registrador SP. Isto significa que o stack vai para os 128 bytes altos (se
existirem) mas no para a rea de SFR.
Milton Barreiro Junior ETE Getlio Vargas

Nos dispositivos onde no est

Microcontrolador 8051 Teoria e Prtica

16

implementado a rea alta, os bytes PUSHed so perdidos e os bytes POPed so


indeterminados.
As transferncias de dados incluem movimentaes em 16 bits, que podem
ser utilizadas para inicializar o Data Pointer (DPTR), para o uso de tabelas na
memria de programa, ou para acesso memria de dados externa.
A instruo XCH A, <byte> resulta na troca dos dados entre o acumulador e o
byte endereado. A instruo XCHD A, @RI similar, com a diferena que apenas
os nibbles baixos esto envolvidos na operao.

Esta instruo facilita a

manipulao de dados, de forma a economizar instrues nos programas.


A memria externa pode ser acessada por endereamento indireto, utilizando
8 ou 16 bits de endereo. A escolha recai no uso de endereamento de um byte,
atravs de @Ri, onde Ri pode ser R0 ou R1 do banco de registradores selecionado,
ou um endereo de 2 bytes (16 bits) colocado no Data Pointer (DPTR).

desvantagem do uso do endereamento de 16 bits est no fato de que, se


utilizarmos um pequeno espao de memria, ainda assim o port 2 ser inteiramente
indisponibilizado para uso.

No endereamento de 8 bits, sacrificamos apenas

algumas linhas do port 2.


A tabela abaixo indica as instrues de movimentao de dados em memria
externa. Todas as instrues so executadas em 2s, com um clock de 12MHz.
Largura do Endereo

Mnemnico

Operao

8 Bits

MOVX A, @Ri

L RAM Externa (Ri)

8 Bits

MOVX @Ri, A

Escreve RAM Externa (Ri)

16 Bits

MOVX A, @DPTR

L RAM Externa (DPTR)

16 Bits

MOVX @DPTR, A

Escreve RAM Externa (DPTR)

Em todos os acessos RAM externa, utilizamos sempre o acumulador como


registrador intermedirio.

Os pulsos de READ ou WRITE so ativos somente

durante a execuo da instruo MOVX. Normalmente estes sinais esto inativos e


se no forem utilizados, podem ser configurados como linhas de I/O extra.
Existem ainda duas instrues que esto disponveis para leitura de tabelas
na memria de programa. Estas instrues permitem apenas a leitura de dados na

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

17

memria de programa (ROM), no permitindo a atualizao dos mesmos.

mnemnico MOVC (mov constant), e pode se apresentar de duas formas:


MOVC A, @A + DPTR
MOVC A, @A + PC
A diferena est no registrador auxiliar utilizado durante a leitura, que pode
ser o DPTR ou o PC. A primeira instruo permite o acesso a tabelas de at 256
itens, sendo que o DPTR indica o incio da tabela, e o acumulador indica o off-set do
endereo desejado. Com a variao (incremento) do acumulador, podemos ler a
tabela inteira mantendo o DPTR fixo. A outra instruo, utiliza o acumulador como
base de endereamento e o PC como off-set, de forma que a leitura de tabelas deve
ser feita por sub-rotinas como a que se segue:
MOV A, valor inicial
CALL tabela
A rotina tabela seria:
tabela: MOVC A, @A + PC
RET
Este tipo de tabela pode conter at 255 itens, lembrando que neste caso, no
podemos utilizar o valor 0 da tabela, que variar entre 1 e 255. Um valor colocado
no off-set 0 no ser lido.

3.10 Instrues Booleanas


A famlia 8051 contm um processador booleano completo. Um processador
booleano consiste num elemento que permite a manipulao direta de um nico bit
dentro da palavra que pode ser de 8 ou mais bits (byte). A RAM interna contm 128
bits endereveis e o espao SFR contm mais 128.

Todos os ports so bits

endereveis, e cada um pode ser tratado como um port separado. As instrues

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

18

que acessam esses bits no so apenas seqncias de desvios condicionais, mas


um completo conjunto de instrues como indicado na tabela abaixo:

Mnemnico

Operao

Tempo de
Execuo

ANL C, bit

C = C and bit

ANL C, /bit

C = C and not bit

ORL C, bit

C = C or bit

ORL C, /bit

C = C or not bit

MOV C, bit

C = bit

MOV bit, C

bit = C

CLR C

C=0

CLR bit

bit = 0

SETB C

C=1

SETB bit

bit =1

CPL C

C = not C

CPL bit

bit = not bit

JC REL

Jump If C = 1

JNC REL

Jump If C = 0

JB bit, REL

Jump If bit = 1

JNB bit, REL

Jump If bit = 0

JBC bit, REL

Jump If bit = 1 : CLR bit

Este tipo de operao de bit no facilmente obtido em arquiteturas de


microprocessador. Todos os bits so acessados diretamente nos endereos 00H at
7FH na rea dos 128 bytes inferiores e de 80H at FFH no espao SFR. Desta
forma podemos com as instrues de programa, implementar circuitos lgicos dentro
do microcontrolador, evitando o uso de circuitos discretos ou PALs.
3.11 Instrues de Salto
Podemos utilizar 3 tipos de instrues de desvio, quando endereamos um
programa no microcontrolador.

Estas instrues diferem entre si no formato do

endereo de destino. A instruo SJMP (Short Jump) composta por dois bytes,
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

19

constituindo um byte de opcode e um byte de off-set. Este fato limita o espao de


endereamento em valores de -127 at +127 bytes em torno da instruo seguinte
ao SJMP.
Quando utilizamos a instruo LJMP (Long Jump) temos um comprimento de
3 bytes, que consiste de dois bytes de endereo e um byte de opcode, permitindo o
endereamento de 64Kbytes de memria de programa.
A instruo AJMP (Absolute Jump) codificada em 2 bytes sendo que o
endereo formado por 11 bits e os 5 bits restantes utilizados no opcode.
A tabela abaixo indica as instrues de salto disponveis.
Mnemnico

Operao

Tempo de
Execuo

JMP end

Salto para end

JMP @A + DPTR

Salto para A + DPTR

CALL end

Chama subrotina no endereo end

RET

Retorno de subrotina

RETI

Retorno de interrupo

NOP

Sem operao

Em todos os casos, o programador especifica o endereo de destino para o


assembler da mesma forma, por um label ou uma constante de 16 bits.

assembler colocar o endereo de destino no formato correto para cada instruo, e


se o formato no comportar o valor, aparecer a mensagem Destination out of
range.
Temos ainda as instrues LCALL, que permite a chamada de subrotinas em
qualquer posio dos 64Kbytes de memria, e ACALL, que se utiliza do mesmo
formato de endereamento de 11 bits utilizado no AJMP. As subrotinas devem ser
finalizadas com o comando RET, e deve-se lembrar que cada chamada necessita de
um RET, sem o qual o programa se perde.
A instruo RETI utilizada como retorno da rotina de interrupo. A nica
diferena entre a instruo RET e a RETI, que a RETI informa ao sistema de
controle de interrupo que a interrupo em progresso foi atendida.
Os saltos acima listados so chamados de saltos incondicionais, pois no
dependem de nenhuma verificao de condies anteriores. Os chamados saltos
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

20

condicionais, dependentes da verificao de certos bits de controle, e esto listados


a seguir:

Mnemnico

Operao

Modo de
Endereamento

Tempo de
Execuo

JZ rel

Salto se A=0

Acumulador

JNZ rel

Salto se A no 0

Acumulador

DJNZ <byte>, rel

Decrementa e salta se no
0

Direto
Registrador

CJNE A, <byte>, rel

Salta se A diferente de
<byte>

Direto Imediato

CJNE <byte>,
#DATA, rel

Salta se <byte> diferente


de #DATA

Indireto
Registrador

No existe bit de zero no registrador PSW, portanto as instrues JZ e JNZ


devem testar o dado do acumulador para estas condies. A instruo DJNZ
adequada para controle de loops, pois sua configurao de dupla funo
(decrementa e testa) torna fcil a execuo de loops.
A instruo CJNE pode ser utilizada para controle de loops ou para teste
condicional de bytes, na forma de maior que ou menor que, pois existe a
indicao de maior ou menor pelo bit de CARRY, localizado no PSW.
3.12 Oscilador Interno
Todos os membros da famlia 8051 possuem um oscilador interno que pode
ser utilizado como fonte de clock para a CPU, bastando para isso que se implemente
a configurao abaixo:

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

21

Se ao invs de utilizarmos o oscilador interno, utilizamos outro gerador


qualquer (para sincronizar com outros circuitos, por exemplo) devemos ter o cuidado
de interligar a entrada no pino certo. Este fato importante, pois este pino muda
conforme o tipo de chip utilizado, por exemplo, com chips HMOS (8051) devemos
ligar a entrada de clock ao pino XTAL2, enquanto que em circuitos CMOS (80C51),
o clock deve ser colocado no pino XTAL1.

A figura abaixo indica a correta

montagem destas entradas nos diversos componentes.

3.13 Estrutura de Interrupes


A famlia 8051 atende a cinco entradas de interrupes distintas, duas
externas, duas relativas aos dois timers, e uma relativa ao canal serial interno. Cada
interrupo pode ser habilitada ou desabilitada individualmente, setando ou
resetando um bit no registrador denominado IE (Interrupt Enable) dentro do SFR.
Este registrador contm ainda um bit que habilita todas as interrupes, e sua
estrutura completa mostrada abaixo. O bit em 0 desabilita a interrupo e o bit em
1 habilita a interrupo.
EA

ES

ET1

EX1

ET0

EX0

EA (IE.7) Habilita todas as interrupes globais quando em 1;


ES (IE.4) Interrupo do port serial;
ET1 (IE.3) Interrupo do timer 1;
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

22

EX1 (IE.2) Interrupo externa 1;


ET0 (IE.1) Interrupo do timer 0;
EX0 (IE.0) Interrupo externa 0.
Cada fonte de interrupo pode ser programada quanto sua prioridade de
atendimento, por um outro registrador localizado na rea de SFR e denominado IP
(Interrupt Priority).
A rotina de prioridade de interrupo determina que se uma interrupo de
baixo nvel estiver sendo executada, esta pode ser interrompida por uma interrupo
de alto nvel, sendo continuada aps o trmino da mesma.

O contrrio no

verdadeiro, ou seja, uma interrupo de alto nvel no interrompida por uma


interrupo de nvel inferior, nem igual ao dela. Se duas interrupes de mesmo
nvel so recebidas simultaneamente, uma sequncia de pool interna determina qual
ser atendida em primeiro lugar. A figura abaixo ilustra o contedo do registrador IP.
O Bit em 0 desabilita a interrupo e o bit em 1 habilita a interrupo.
-

PS

PT1

PX1

PT0

PX0

PS (IP.4) Prioridade de interrupo do canal serial;


PT1 (IP.3) Prioridade de interrupo timer 1;
PX1 (IP.2) Prioridade de interrupo externa 1;
PT0 (IP.1) Prioridade de interrupo do timer 0;
PX0 (IP.0) Prioridade de interrupo externa 0.
Quando em operao, todos os flags de interrupo esto retidos no sistema
de controle de interrupo durante o estado de cada ciclo de mquina. As amostras
so pooladas durante o ciclo seguinte, e se uma delas se encontrar setada, o
sistema de interrupo gera um LCALL para o endereo apropriado na memria de
programa, a menos que outra condio bloqueie a interrupo.
Esta LCALL gerada por hardware resulta na transferncia do contedo do
registrador PC para o Stack e recarrega o PC com o primeiro endereo da rotina de
interrupo.

Cada rotina de uma dada interrupo comea num endereo fixo.

Somente o PC transferido automaticamente para o stack, ento devemos nos


lembrar de salvar os registradores importantes em cada rotina de interrupo.
Salvando apenas o PC, torna-se mais simples a aplicao destas rotinas nas
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

23

funes mais comuns de controle, onde no necessitamos grandes recursos de


software, pois precisamos apenas setar um pino, ou recarregar um timer, ou ler um
canal serial, por exemplo.
A figura a seguir indica como atuam os registradores no controle do hardware
de interrupo:

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

24

4 Descrio do Hardware
A

descrio

seguir

mostra

as

caractersticas

construtivas

do

microcontrolador 8051.
4.1 Registradores de funo especial (Special Function Register SFR)
A figura abaixo indica a disposio do registrador de funes especiais (SFR).
Na rea de SFR, nem todos os endereos esto ocupados, de forma que
estes endereos no esto implantados no chip.

Estes espaos destinam-se a

acessrios que encontramos em outros componentes da famlia.


Vamos descrever os nomes e funes de cada registrador.
Endereo
Funo

F8H

F9H

FAH

FBH

FCH

FDH

FEH

FFH

Endereo
Funo

F0H
B

F1H

F2H

F3H

F4H

F5H

F6H

F7H

Endereo
Funo

E8H

E9H

EAH

EBH

ECH

EDH

EEH

EFH

Endereo
Funo

E0H
ACC

E1H

E2H

E3H

E4H

E5H

E6H

E7H

Endereo
Funo

D8H

D9H

DAH

DBH

DCH

DDH

DEH

DFH

Endereo
Funo

D0H
PSW

D1H

D2H

D3H

D4H

D5H

D6H

D7H

Endereo
Funo

C8H
T2CON

C9H

CAH
RCP2L

CBH
RCP2H

CCH
TL2

CDH
TH2

CEH

CFH

Endereo
Funo

C0H

C1H

C2H

C3H

C4H

C5H

C6H

C7H

Endereo

B8H

B9H

BAH

BBH

BCH

BDH

BEH

BFH

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

25

Funo

IP

Endereo
Funo

B0H
P3

B1H

B2H

B3H

B4H

B5H

B6H

B7H

Endereo
Funo

A8H
IE

A9H

AAH

ABH

ACH

ADH

AEH

AFH

Endereo
Funo

A0H
P2

A1H

A2H

A3H

A4H

A5H

A6H

A7H

Endereo
Funo

98H
SCON

99H
SBUF

9AH

9BH

9CH

9DH

9EH

9FH

Endereo
Funo

90H
P1

91H

92H

93H

94H

95H

96H

97H

Endereo
Funo

88H
TCON

89H
TMOD

8AH
TL0

8BH
TL1

8CH
TH0

8DH
TH1

8EH

8FH

Endereo
Funo

80H
P0

81H
SP

82H
DPL

83H
DPH

84H

85H

86H

87H
PCON

4.2 Acumulador (ACC) (Registrador A)


O acumulador o registrador onde se processam a maioria das operaes de
um processador, comumente encontradas num microprocessador de 8 bits.

4.3 Registrador B (B)


um registrador utilizado durante as operaes de multiplicao e diviso,
podendo ser utilizado como registrador de uso geral em outras operaes.

4.4 Registrador da palavra de controle (PSW)


chamado de Program Status Word e contm basicamente, os flags de
controle de fluxo do programa. Por isso utilizado em desvios e saltos condicionais,

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

26

sendo tambm alterado na maioria das instrues. Seu contedo indicado na


figura abaixo.

CY

AC

F0

RS1

RS0

OV

CY (PSW7): Carry flag, indica vai um nas operaes aritmticas.


AC (PSW6): Auxiliary carry flag, auxilia nas operaes de adio.
F0 (PSW5): Flag de uso geral.
RS1 (PSW4): Seleo do banco de registradores em uso.
RS0 (PSW3): Seleo do banco de registradores em uso.
OV (PSW2): Overflow em operaes aritmticas.
-

(PSW1): Flag definvel pelo usurio.

P (PSW0): Flag de paridade, indica o nmero de bits em 1 no acumulador.


RS0

RS1

Banco Selecionado

Endereo

0
0
1
1

0
1
0
1

Banco 0
Banco 1
Banco 2
Banco 3

00H at 07H
08H at 0FH
10H at 17H
18H at 1FH

4.5 Stack Pointer (SP) e Data Pointer (DPTR)


O Stack Pointer (ponteiro de pilha) incrementado antes do armazenamento
dos dados em uma instruo PUSH ou CALL.

Observe que o Stack pode ser

alocado em qualquer regio da memria RAM, o ponteiro sempre inicializado no


endereo 07H, e o Stack comea no endereo 08H.
O Data Pointer consiste em dois registradores de 8 bits (DPH byte alto, e DPL
byte baixo), que podem ser manipulados tanto como dois registradores separados
de 8 bits como um nico de 16 bits.
4.6 Buffer Serial (SBUF)

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

27

O Buffer de dados serial (Serial data BUFfer) consiste de dois registradores


separados, o buffer de transmisso e o buffer de recepo. Quando um dado
colocado no buffer serial, ele vai diretamente para o buffer de transmisso serial, e
quando ele chega ao buffer de recepo, ele colocado diretamente no SBUF.
Existe um registrador que controla todas as operaes da interface serial
chamado SCON (Serial CONtrol). Seu contedo descrito a seguir.
SM0

SM1

SM2

REN

TB8

RB8

TI

RI

SM0 (SCON.7): Modo de operao da interface serial.


SM1 (SCON.6): Modo de operao da interface serial.
SM2 (SCON.5): Modo de operao da interface serial.
REN (SCON.4): Habilitao de recepo.
TB8 (SCON.3): o nono bit transmitido (stop bit).
RB8 (SCON.2): o nono bit recebido.
TI (SCON.1): Flag indicando fim de transmisso.
RI (SCON.0): Flag indicando buffer de recepo cheio.

SM0

SM1

Modo

Descrio

Frequncia

0
0
1
1

0
1
0
1

0
1
2
3

Shift Register
8 bit UART
9 bit UART
9 bit UART

Freq. Oscilador /12


Varivel
Freq. Oscilador /64 ou 32
Varivel

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

28

4.7 Portos de E/S (P0, P1, P2, P3)


Os portos P0, P1, P2 e P3 so latches dos seus respectivos portos fsicos.
Escrevendo um bit 1 no SFR, o pino de sada do porto respectivo ir para 1
imediatamente. Quando este port for acessado para leitura, o estado do pino externo
armazenado no registrador correspondente. A estrutura dos ports ilustrada abaixo.

Todos os 4 ports so bidirecionais e consistem num latch (que o prprio SFR),


num driver de sada e num driver de entrada. Os drivers de sada dos ports P0 e P2 e
o driver de entrada do port P0, so utilizados durante o acesso memria externa.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

29

4.8 Registradores de Timer e de Controle


Os pares de registradores (TH0, TL0, e TH1, TL1) so registradores de
contagem de 16 bits, nos quais programamos os valores de contagem/temporizao
dos respectivos contadores.
Existem outros registradores de funes especficas de controle de alguns
mdulos do microcontrolador. Vamos descrever cada um desses registradores.
O registrador IP (Interrupt Priority), define um dos dois nveis possveis para
cada interrupo, de acordo com a descrio abaixo.

PT2

PS

PT1

PX1

PT0

PX0

PT2 (IP5): Define nvel de prioridade do timer 2 (somente no 8052).


PS (IP4): Define o nvel de prioridade do port serial.
PT1 (IP3): Define o nvel de prioridade do timer 1.
PX1 (IP2): Define o nvel de prioridade da interrupo externa 1.
PT0 (IP1): Define o nvel de prioridade do timer 0.
PX0 (IP0): Define o nvel de prioridade da interrupo externa 0.
J o registrador IE (Interrupt Enable), permite a habilitao ou desabilitao
individual de cada uma das fontes de interrupo. Atravs de um bit neste mesmo
registrador podemos atuar sobre todas as interrupes de maneira global.
EA

ET2

ES

ET1

EX1

ET0

EX0

EA (IE7): Desabilita todas as interrupes quando em 0.


ET2 (IE5): Habilita ou desabilita a interrupo do timer 2 (somente 8052).
ES (IE4): Habilita ou desabilita a interrupo do port serial.
ET1 (IE3): Habilita ou desabilita a interrupo do timer 1.
EX1 (IE2): Habilita ou desabilita a interrupo externa 1.
ET0 (IE1): Habilita ou desabilita a interrupo do timer 0.
EX0 (IE0): Habilita ou desabilita a interrupo externa 0.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

30

O registrador TMOD (Timer MODe), permite o controle do modo de operao


dos timers existentes no microcontrolador, bem como a definio quanto operao
como timer ou como contador.
Gate (1) C/T (1) M1 (1) M0 (1) Gate (0) C/T (0) M1 (0) M0 (0)
Gate: Permite o disparo do timer por hardware (gate=1), ou por
software (gate=0), via registrador TCON.
C/T: Em 0 opera como timer, em 1 opera como contador.
M1: Modo de operao.
M0: Modo de operao.
M1

M0

Modo de Operao

0
0
1
1

0
1
0
1

0 Timer de 13 bits compatvel com o 8048.


1 Timer/counter de 16 bits.
2 Timer/counter de 8 bits auto reload.
3 No timer 0, TL0 define um contador de 8 bits e TH0 controlado
pelos bits de controle do timer 1. O timer 1 est parado.

A operao dos timers/counters dependem tambm de um registrador


denominado TCON (Timer CONtrol), utilizado para configur-lo e monitorar suas
condies de funcionamento.

Neste mesmo registrador encontramos os flags de

interrupes externas, os quais esto ativos quando da ocorrncia da interrupo.


TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

TF1 (TCON.7): Flag de overflow do timer 1. Seta quando overflow.


TR1 (TCON.6): Bit de disparo do timer 1.
TF0 (TCON.5): Flag de overflow do timer 0. Seta quando overflow.
TR0 (TCON.4): Bit de disparo do timer 0.
IE1 (TCON.3): Flag da interrupo externa 1.
IT1 (TCON.2): Seleciona o tipo de interrupo 1 (borda ou nvel).
IE0 (TCON.1): Flag da interrupo externa 0.
IT0 (TCON.0): Seleciona o tipo de interrupo 0 (borda ou nvel).
O registrador de controle da interface serial SCON (Serial CONtrol), permite a
programao das caractersticas funcionais da interface serial do microcontrolador.
Normalmente devemos utilizar este registrador para definir que tipo de UART vamos
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

31

utilizar, e verificar o status da transmisso pelos bits de controle, presentes neste


mesmo registrador.
SM0

SM1

SM2

REN

TB8

RB8

TI

RI

SM0 (SCON.7): Modo de operao do port serial.


SM1 (SCON.6): Modo de operao do port serial.
SM2 (SCON.5): Usado nos modos 2 e 3 para multiprocessamento.
REN (SCON.4): Habilita ou desabilita a recepo definido por soft.
TB8 (SCON.3): o nono bit transmitido (stop bit) definido por soft.
RB8 (SCON.2): o stop bit recebido do hardware para sinalizao.
TI (SCON.1): Setado pelo hardware no fim da transmisso.
RI (SCON.0): Setado pelo hardware no fim da recepo.
SM0

SM1

Modo

Descrio

Frequncia

0
0
1
1

0
1
0
1

0
1
2
3

Shift Register
8 bit UART
9 bit UART
9 bit UART

Freq. Oscilador /12


Varivel
Freq. Oscilador /64 ou 32
Varivel

Existe ainda um registrador para controle genrico das funes de alimentao


do microcontrolador. O registrador PCON (Power CONtrol) bastante utilizado quando
optamos pela utilizao da tecnologia CHMOS (80C51 por exemplo), para garantir
baixo consumo em circuitos alimentados por bateria, ou ainda que permaneam um
grande perodo em stand-by.
SMOD

GF1

GF0

PD

SMOD: Dobra o baud rate quando utilizamos o timer 1.


GF1: Flag de uso geral.
GF0: Flag de uso geral.
PD: Ativa o modo de operao Power Down (s nos CHMOS).
IDL: Ativa o modo de operao IDLE (s nos CHMOS).

4.9 Estrutura e operao dos ports de I/O


Milton Barreiro Junior ETE Getlio Vargas

IDL

Microcontrolador 8051 Teoria e Prtica

32

Os quatro ports presentes no 8051 so bidirecionais, consistindo cada um de um


latch (que o prprio registrador Px no SFR), em um driver de sada e em um buffer de
entrada. Para acessar a memria externa, utilizamos os ports P0 e P2, sendo que o
port P0 leva os dados e endereos multiplexados, enquanto que o port P2 leva
memria o restante dos endereos.

Fica claro que quando utilizamos os

microcontroladores sem memria interna (80C31 por exemplo) o port P2 tem seu uso
restrito para endereamento. O port P3 um port multifuncional, ou seja, seus pinos
no so apenas pinos de entrada e sada, mas tem diversas funes especficas, que
esto listadas abaixo:
P3.0 RXD entrada do port serial
P3.1 TXD sada do port serial
P3.2 INT0 entrada da interrupo externa 0
P3.3 INT1 entrada da interrupo externa 1
P3.4 T0 entrada do Timer/counter 0
P3.5 T1 entrada do Timer/counter 1
P3.6 WR sinal de escrita para memria externa
P3.7 RD sinal de leitura para memria externa
Os portos 1, 2 e 3 so providos de resistores pull-up internos, enquanto que o
port 0 apresenta sadas em open drain. Qualquer uma das linhas pode ser usada
independentemente como entrada ou sada, uma vez que os ports so endereveis
por bit (bit addressable). Para utilizarmos os ports como entradas, devemos colocar
nvel lgico 1 no latch de entrada, para que o pino fique em nvel alto pelo resistor de
pull-up, mas possa ser colocado em nvel baixo pela ao de um sinal externo.
No port 0, no existe o resistor de pull-up interno, de forma que torna-se
obrigatrio o uso de pull-ups externos. Quando ocorre o endereamento, a estrutura
do port permite que sejam colocados 1s ou 0s conforme a necessidade.

estrutura dos ports est representada a seguir, ilustrando o funcionamento dos


mesmos.
Para escrever um dado em um dispositivo atravs de um dos ports, devemos
simplesmente mover o dado para o registrador respectivo no SFR. Devemos lembrar
sempre que os valores de corrente fornecidos pelos ports so da ordem de
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

33

miliampres, de forma que precisamos de drivers de corrente na maioria dos casos.


Os resistores pull-up internos fornecem baixos valores de corrente e na maioria dos
projetos determinamos a ativao dos dispositivos de sada em nveis baixos, pois
neste caso a corrente pode ser significativamente maior.
Os buffers de sada dos ports 1, 2 e 3 fornecem corrente suficiente para 4 cargas
TTL cada um, enquanto que o port 0 pode fornecer corrente para at 8 cargas TTL.
Algumas instrues de leitura no port, realizam uma leitura no latch (registrador),
enquanto outras realizam a leitura diretamente no pino do CI.

As instrues que

realizam a leitura no latch, lem este valor, processam, e depois se for necessrio
rescrevem-no no latch.

So chamadas de read-modify-write, e esto listadas a

seguir:
ANL E lgico
ORL Ou lgico
XRL Ou Exclusivo lgico
JBC Jump se bit =1 e limpa o bit
CPL Complementa o bit
INC Incremento
DEC Decremento
DJNZ Decrementa e salta se no zero
MOV, Px,y, C Move carry bit para o bit y do port x
CLR Px,y Limpa bit y do port x
SETB Px,y Seta bit y do port x
A razo pela qual as instrues acima so direcionadas preferencialmente ao
latch evitar uma m interpretao do nvel lgico no pino. Um exemplo disso
quando utilizamos transistores na sada dos microcontroladores, e escrevemos nvel 1
na base do mesmo. A tenso neste pino pode ser confundida com nvel 0 facilmente,
enquanto que se a mesma for lida no latch, representar o valor real do sinal no pino.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Milton Barreiro Junior ETE Getlio Vargas

34

Microcontrolador 8051 Teoria e Prtica

35

4.10 Acesso memria externa


Podemos ter dois tipos de acesso memria externa, acesso memria de
programa externa (ROM, EPROM) e acesso memria de dados externa (RAM).
Acessos ROM externa utilizam o sinal PSEN como strobe de leitura, enquanto que
utilizamos o sinal RD ou WR como strobe quando acessamos a memria RAM.
Buscas memria externa de programa utilizam sempre endereos de 16 bits, e
os acessos memria de dados podem utilizar 8 ou 16 bits de endereo.
Quando utilizamos acessos de 16 bits, o byte alto de endereo exibido pelo
porto 2, que fica indisponvel como port de I/O genrico. Quando utilizamos acessos
em 8 bits, o valor do port 2 existente no latch do seu respectivo SFR mantido de
forma que podemos implementar um sistema de gerenciamento com facilidade.
Em qualquer dos casos, o port 0 contm o byte baixo de endereos multiplexado
com os dados, e nesta funo utilizamos um dos FETs internos com pull-up de forma
que no se orna necessria a adio de pull-up externo (se forem realizadas apenas
operaes de busca na memria, o que no muito comum). O sinal de ALE deve ser
utilizado para capturar o endereo vlido no latch externo.
Durante qualquer acesso memria externa, escrito o byte 0FFH no latch do
port 0 (SFR), destruindo a informao presente neste port, portanto, devemos salvar
qualquer informao til existente no port 0 antes de acessar a memria externa.
A memria de programa externa acessada sempre em duas condies:
quando o sinal EA estiver ativo (nvel baixo), ou o contador de programa PC apresentar
um nmero maior do que 0FFFH.

4.11 Temporizadores e Contadores


O microcontrolador 8051 tem 2 temporizadores/contadores de 16 bits, timer 0 e
timer 1.

Os dois podem ser programados para operar como temporizadores ou

contadores independentemente.
Na funo de timer, o registrador incrementado a cada ciclo de mquina, de
forma que podemos imaginar o timer como um contador de ciclos de mquina. Como
um ciclo de mquina consiste de 12 perodos do oscilador, podemos calcular facilmente
a frequncia do nosso timer.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

36

Na funo de contador, o registrador incrementado a cada transio de 1 para


0 no correspondente pino de entrada. Desta forma, cada leitura toma o tempo de dois
ciclos de mquina, limitando a frequncia mxima de amostragem a 1/24 da frequncia
de clock.
4.12 Modos de operao
Podemos ter quatro modos distintos de operao dos timers selecionados pelo
registrador TMOD.
Modo 0:
No modo 0, o timer um contador de 8 bits com um divisor por 32, executando
na realidade, um timer de 13 bits, compatvel com o timer do 8048, como indicado na
figura abaixo:

Neste modo, quando o contador passa de todos os bits em 0, o flag respectivo


TFx setado no registrador TCON.

O disparo do timer feito por outro bit no

registrador TCON, o bit TRx (Timer Run). O bit Gate, presente no registrador TMOD
permite o uso de uma interrupo conjuntamente com o timer.

Devemos lembrar

sempre de programar TMOD antes de programar TCON para disparo do timer.


O registrador de 13 bits consiste nos 8 bits de THx e nos 5 bits mais baixos de
TLx, sendo os 3 bits restantes do registrador TLx ignorados.
Modo 1:
No modo 1, os timer se comportam da mesma forma que no modo 0, exceto
pelo fato de que os registradores agora utilizam a totalidade dos 16 bits disponveis
para cada um dos contadores.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

37

Modo 2:
O modo 2 configura o registrador do timer como um contador de 8 bits (TLx) com
recarga automtica, como mostrado na figura abaixo:

Quando ocorre o overflow de TLx, o flag TLx setado e o contedo de TLx


recarregado com o valor de THx, que deve ser anteriormente carregado por software.
O valor de THx permanece inalterado.
Modo 3:
O modo 3 deve ser utilizado quando necessitamos de um outro contador no
8051. Quando ativamos o modo 3, estabelecemos dois contadores separados, um
para o THx e outro para o TLx. O timer procedente de TLx utiliza para seu controle, os
bits C/T, Gate, TR0, INTx e TFx, relativos ao timer 0, enquanto que o timer relativo ao
registrador THx, utiliza os bits de controle relativos ao timer 1. A figura abaixo ilustra a
lgica de atuao deste modo.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

38

4.13 Interface Serial


A interface serial presente no microcontrolador do tipo full-duplex, pode
transmitir e receber dados simultaneamente, com buffer de recepo, ou seja, pode
comear a receber um segundo byte antes de ler o primeiro byte do buffer. Os buffers
de transmisso e recepo so comandados pelo registrador SBUF no SFR. Escrita
no SBUF carrega o buffer de transmisso, enquanto que leituras no SBUF acessam um
registrador de recepo separado fisicamente.
A interface serial pode operar em 4 modos distintos, e em qualquer dos modos a
transmisso iniciada por qualquer instruo que utilize o SBUF como registrador de
destino. A recepo se d quando chega um dado no SBUF.
4.14 Modos de Operao
Podemos operar com a interface serial interna do microcontrolador, de quatro
modos diferentes:
Modo 0:
Neste modo, os dados manipulados entram pelo pino RXD, enquanto que o pino
TXD utilizado como sada.

Temos ento a transmisso de 8 bits, sendo que o

primeiro bit o LSB, e a frequncia de baud rate fixa em 1/12 da frequncia do


oscilador.
A transmisso iniciada por qualquer instruo que utilize o SBUF como
registrador de destino. Imediatamente aps esta instruo, colocado um bit 1 na
nona posio do shift register e o bloco de controle de transmisso comea a
transmisso. Os bits de dados so deslocados para a direita e so colocados zeros
nas posies desocupadas, at que se chegue no MSB. Esta condio avisa para o
bloco de controle que deve ser efetuado um deslocamento, e em seguida setada a
flag TI. Todo este processo ocorre no tempo de 10 ciclos de mquina.
A recepo comea quando a condio REN igual a 1 e o flag RI igual a
0. Os dados recebidos so deslocados e aps a chegada do ltimo bit, o flag de
recepo RI setado, indicando que existem dados no buffer de recepo. A figura
abaixo ilustra o processo.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Milton Barreiro Junior ETE Getlio Vargas

39

Microcontrolador 8051 Teoria e Prtica

40

Modo 1:
Dez bits so recebidos pelo pino RXD, ou transmitidos pelo pino TXD; um start
bit (0), 8 bits de dados (LSB primeiro), e um stop bit. Na recepo, o stop bit vai para a
posio RB8 no registrador SCON, e o baud rate determinado pelo timer 1, na
maioria dos casos (podem ser utilizados tambm o timer 2 ou ambos no 8052).
A transmisso ocorre da mesma forma que no modo anterior, exceto ao fato de
que no existe uma linha de clock sincronizando os dois circuitos. Este sincronismo
funo de bits de start e stop, presentes em cada transmisso. Aps a transmisso do
ltimo bit (stop bit) o flag TI setado no registrador SCON.
A recepo iniciada com a deteco da transio de 1 para 0 na linha RXD,
indicando a presena do start bit na linha. Para esta funo, a linha RXD amostrada
a uma taxa de 16 vezes a frequncia determinada para o baud rate.

Aps esta

deteco, o sinal comea a ser deslocado a partir da frequncia gerada pelo timer 1.
Quando for recebido o ltimo bit (stop bit), este colocado em RB8, e o flag TI
setado. A figura a seguir ilustra o diagrama de sinais da recepo do modo 1.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Milton Barreiro Junior ETE Getlio Vargas

41

Microcontrolador 8051 Teoria e Prtica

42

Modos 2 e 3:
Nestes dois modos so transmitidos 11 bits pelo pino TXD, ou recebemos 11 bits
atravs do pino RXD: um start bit 0, 8 bits de dados (LSB primeiro), um nono bit
programvel e um stop bit 1. A diferena entre os modos 2 e 3 que no modo 3 a
frequncia de baud rate varivel, enquanto que no modo 2 a frequncia fixa em
1/32 ou 1/64 da frequncia do oscilador. Os processos de transmisso e recepo dos
dados so semelhantes aos outros modos anteriormente mostrados. A figura abaixo
ilustra o processo.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

43

4. 15 Registrador de Controle
O controle da interface serial feito pelo j descrito registrador SCON, com a
atuao do registrador PCON, (utilizando o bit SMOD). Por este registrador podemos
monitorar o funcionamento da interface serial pelos bits TI, RI, TB8 e RB8, que indicam
o estado da interface serial nas operaes de transmisso ou recepo.
4.16 Baud Rates
A taxa de transmisso (baud rate), tem seus valores definidos de acordo com o
modo de operao estabelecido para o interface serial. No modo 0, o baud rate fixo
e tem seu valor estabelecido como sendo 1/12 da frequncia do oscilador.
No modo 2, a frequncia pode ter dois valores distintos, dependendo do valor do
bit SMOD no registrador PCON. Se SMOD for igual a 0, o baud rate igual a 1/64 da
frequncia do oscilador, se o SMOD for igual a 1, o baud rate passa a ser 1/32 da
frequncia do oscilador.
Quando utilizamos o timer 1 como gerador de baud rate, o baud rate nos modos
1 e 3 tem seu valor determinado pela taxa de overflow do prprio timer 1, obedecendo
a frmula:
Baud rate = [(2Smod)/32] x (timer 1 overflow rate)
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

44

A interrupo do timer 1 deve ser desabilitada neste caso para evitar sinalizao
indevida. O timer pode ser configurado para operao como timer ou como contador
em qualquer um dos trs modos. O modo mais comumente utilizado o modo de
operao como timer de auto-recarga.

A frmula para se obter diretamente a

frequncia do baud rate a seguinte:


Baud Rate = {[(2Smod)/32] x [Fosc./[12 x (256 - TH1)]]}
A tabela abaixo indica os valores mais utilizados a partir de uma dada frequncia
de cristal, e os valores de recarga dos timers para facilitar a programao.
Baud Rate

Freq. Osc.

SMOD

Modo

Valor de Recarga

19,2K

11,059
MHz
11,059
MHz
11,059
MHz
11,059
MHz
11,059
MHz
11,968
MHz
6 MHz
12 MHz

FDH

FDH

FAH

F4H

E8H

1DH

0
0

2
1

72H
FEEBH

9,6K
4,8K
2,4K
1,2K
137,5
110
110

Devemos observar os valores de mxima frequncia para cada um dos modos,


e respeit-los, pois o uso de frequncias acima destes valores acarretariam perdas de
informao na comunicao serial. A tabela abaixo indica estas frequncias:
Modo

Frequncia Mxima

0
1e3
2

1 MHz
62,5 KHz
375 KHz

4.17 Interrupes
Os microcontroladores da famlia 8051 so providos de 5 fontes de interrupo,
como mostradas na figura a seguir. As interrupes externa INT0 e INT1 podem ser
ativadas por nvel lgico ou por transio (borda), dependendo para isto, dos bits IT0 e
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

45

IT1 no registrador TCON. Os flags que indicam a presena da interrupo nos pinos
externos so IE0 e IE1 no mesmo registrador TCON. Quando uma interrupo externa
recebida, o respectivo flag limpo quando a rotina de servio vetorada para o
endereo da interrupo, somente se a interrupo for do tipo ativa por transio. Se a
interrupo for ativa por nvel , o dispositivo externo que solicitou a interrupo se
encarrega do seu controle.

As interrupes dos timers so geradas quando houver overflow dos mesmos, e


so reestabelecidas ao seu estado inativo por hardware quando a interrupo j se
encontrar devidamente vetorada.
A interrupo da interface serial gerada por um OU lgico entre os flags de RI
e TI, e estes flags no so limpos aps o vetoramento da interrupo, devendo ser feito
este procedimento por software, aps o recebimento ou transmisso do dado.
Todos os bits que geram interrupo podem ser habilitados ou no pelo
registrador de habilitao de interrupo IE.
Os vetores de endereo das interrupes, ou seja, os endereos para qual o PC
direcionado quando ocorre uma interrupo so fixos e seus valores so indicados a
seguir:
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

46

Fonte

Endereo

IE0
TF0
IE1
TF1
Serial

0003H
000BH
0013H
001BH
0023H

4.18 Estrutura de prioridades


Cada uma das fontes de interrupo pode ser individualmente programada para
atender a um dos dois possveis nveis de interrupo, mediante um bit especfico no
registrador IP. Colocando um valor 0 no bit correspondente, definimos esta interrupo
como de menor prioridade, e vice-versa.
Quando temos duas interrupes de mesma prioridade, no mesmo instante, elas
sero atendidas pelo pool select que realizado na seguinte ordem:
IE0 TF0 IE1 TF1 Serial
4.19 Interrupes externas
As fontes externas de interrupo podem ser programadas para serem ativadas
por nvel ou por borda, desde que os pinos de interrupo externa sejam amostrados
uma vez a cada ciclo de mquina, a entrada de interrupo deve manter-se estvel por
pelo menos 12 perodos do oscilador para que a interrupo seja reconhecida. No
caso da interrupo ser ativa por transio, deve-se manter em um nvel por um ciclo
de mquina e mudar para outro nvel, mantendo-se nele por outro ciclo de mquina.
Aps o reconhecimento, o flag IEx setado no registrador TCON sendo
automaticamente resetado pela CPU quando a rotina de servio da interrupo
chamada.
Se a interrupo ativa por nvel, este nvel deve ser mantido pelo tempo
necessrio para que seja reconhecida a interrupo, e depois deve ser desativada
antes que a rotina de tratamento da interrupo se complete, para evitar que outro
pedido de interrupo seja gerado.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

47

4.20 Circuitos de Controle


Existem outros circuitos que devem ser considerados quando da elaborao do
hardware de um microcontrolador. Alm dos j citados circuitos de decodificao de
dados/endereos, utilizado para acesso a memria externa, pull-ups e buffers nas
linhas de dados e endereos, alguns merecem especial cuidado e ateno na
construo.
4.21 Circuito de Reset
A entrada do reset se d pelo pino RST, quando este mantido em nvel alto por
pelo menos dois ciclos de mquina, aps o circuito do oscilador comear a funcionar.
Logo aps o reset, os valores colocados nos registradores so os indicados abaixo:
Fonte

Endereo

PC
Acc
B
PSW
SP
DPTR
P0-P3
IP
IE
TMOD
TCON
TH0
TL0
TH1
TL1
SCON
SBUF
PCON (HMOS)
PCON
(CHMOS)

0000H
00H
00H
00H
07H
0000H
FFH
XXX00000b
0XX00000b
00H
00H
00H
00H
00H
00H
00H
Indeterminado
0XXXXXXXb
0XXX0000b

Normalmente utilizamos um circuito conhecido como Power On Reset, para que


o microcontrolador seja inicializado ao ligarmos o equipamento.

O circuito abaixo

ilustra um exemplo tpico de circuito para uma tenso de 5Vcc, e frequncia de 10MHz.
Devemos notar que para os circuitos CHMOS, devido caractersticas construtivas do
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

48

dispositivo, no se faz necessrio o uso do resistor externo, simplificando ainda mais o


circuito.

4.22 Circuito de Clock


Podemos utilizar o oscilador interno ao microcontrolador como indicado
anteriormente neste mesmo manual. Devemos utilizar um cristal com as seguintes
caractersticas:
Co (Shunt Capacitance) mx. 7pF
Cl (Load Capacitance) 30 pF (10%)
Potncia 1mW
A resistncia equivalente em srie depende da frequncia do cristal, tendo seus
valores prticos demarcados no grfico a seguir:

ESR in Ohms

600
500
400
300
200
100
0
0

12

Crystal Frequency in MHz


Milton Barreiro Junior ETE Getlio Vargas

16

20

Microcontrolador 8051 Teoria e Prtica

49

4.23 Operao passo a passo


Este modo de operao muito til durante a construo de programas, e
desenvolvimento do hardware, para solucionar eventuais problemas surgidos no
decorrer destes processos.
Podemos entender esta operao, lembrando o funcionamento da j conhecida
estrutura das interrupes do microcontrolador.

Quando uma interrupo est em

progresso, outra interrupo de mesmo nvel no pode ser ativada simultaneamente.


O fato que a prxima interrupo s ocorre aps a execuo de pelo menos uma
instruo do programa interrompido, de forma que, colocando a interrupo INT0 (por
exemplo) em nvel baixo e acrescentando algumas linhas de programa nas rotinas de
tratamento da interrupo. As linhas so as seguintes:
JNB P3.2,$ ; aguarda at que a interrupo v para alto
JB P3.2,$ ; aguarda at que a interrupo v para baixo
RETI ; volta e executa uma instruo

Desta forma, quando a INT0 ativada em nvel baixo, a CPU vai para a rotina
de tratamento da interrupo e fica at que o sinal INT0 pulse (de baixo para alto e
novamente para baixo). Desta forma ela executa o comando de retorno da interrupo,
executa uma instruo e imediatamente retorna a rotina de interrupo, permanecendo
nesta at que o sinal INT0 pulse novamente.
Esta uma forma simples de acompanhar a execuo das rotinas de um
programa passo a passo, mas normalmente vamos executar estas rotinas atravs de
um software de simulao apropriado, onde sero detectadas as principais falhas na
programao.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

50

4.24 Descrio da pinagem


A figura abaixo ilustra a pinagem do controlador 8051 nas duas formas de
encapsulamento mais comuns:

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

51

A descrio da pinagem deste componente, no invlucro DIP dada abaixo:

Pino

Descrio

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Port 1, Dado 0
Port 1, Dado 1
Port 1, Dado 2
Port 1, Dado 3
Port 1, Dado 4
Port 1, Dado 5
Port 1, Dado 6
Port 1, Dado 7
Entrada de Reset
Port 3, Dado 0 (RXD da interface serial interna)
Port 3, Dado 1 (TXD da interface serial interna)
Port 3, Dado 2 (Interrupo externa INT0)
Port 3, Dado 3 (Interrupo externa INT1)
Port 3, Dado 4 (Entrada do Timer 0)
Port 3, Dado 5 (Entrada do Timer 1)
Port 3, Dado 6 (Sinal de escrita para memria
exemploterna)
Port 3, Dado 7 (Sinal de leitura para memria externa)
Entrada do cristal do oscilador
Entrada do cristal do oscilador
Alimentao Terra
Port 2, Bit0 (Endereo A8)
Port 2, Bit1 (Endereo A9)
Port 2, Bit2 (Endereo A10)
Port 2, Bit3 (Endereo A11)
Port 2, Bit4 (Endereo A12)
Port 2, Bit5 (Endereo A13)
Port 2, Bit6 (Endereo A14)
Port 2, Bit7 (Endereo A15)
Sinal PSEN (Program Search Enable)
Sinal ALE (Address Latch Enable) *Prog no 8751
Sinal EA (External Access) *Tenso de Prog no 8751
Port 0, Bit 7 (Dado 7)
Port 0, Bit 6 (Dado 6)
Port 0, Bit 5 (Dado 5)
Port 0, Bit 4 (Dado 4)
Port 0, Bit 3 (Dado 3)
Port 0, Bit 2 (Dado 2)
Port 0, Bit 1 (Dado 1)
Port 0, Bit 0 (Dado 0)
Alimentao de +5V

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

52

5 PROGRAMAO E SIMULAO
5.1 COMPILAO E LINKAGEM
Um programa escrito em linguagem assembly (PROGRAMA FONTE), no pode
ser diretamente processado pelo microcontrolador do sistema, devendo primeiramente
ser traduzido para a sua linguagem de mquina, com o uso de tabelas ou por meio de
um programa destinado para tal tarefa chamado de COMPILADOR, que fornece ento
como sada o PROGRAMA OBJETO.
Define-se COMPILADOR como um programa aplicativo que transforma um
arquivo constitudo por cdigos ASCII (PROGRAMA FONTE: obrigatoriamente com
extenso .ASM), gerado normalmente por um editor de textos, em um arquivo binrio
que contm os bytes correspondentes s instrues (cdigos de mquina) do
microcontrolador.
Como resultado da compilao so criados dois arquivos:
- Arquivo de mesmo nome, porm com a extenso .OBJ (PROGRAMA
OBJETO).
- Arquivo de mesmo nome, porm com a extenso .LIST, que corresponde a
um arquivo texto que mostra o resultado da compilao, contendo para cada linha de
programa, o cdigo de mquina correspondente instruo, sendo muito til na
depurao de erros de compilao.
A linkagem tem a finalidade de reunir, em um nico arquivo, todos as rotinas
escrita em um ou vrios arquivos diferentes.
Aps a linkagem so gerados dois arquivos:
- Arquivo de mesmo nome, sem extenso, usado pelo programa simulador.
- Arquivo de mesmo nome, porm com a extenso .HEX, usado por
gravadores de memrias e microcontroladores e tambm pelo programa simulador.
PROGRAMA COMPILADOR PROGRAMA LINKER PROGRAMA
FONTE

OBJETO

.ASM

.OBJ

Milton Barreiro Junior ETE Getlio Vargas

EXECUTVEL
.HEX

Microcontrolador 8051 Teoria e Prtica

53

O compilador, o Linker e o Simulador usados no laboratrio so produzidos


pela AVOCET.

5.2 DIRETIVAS (ou PSEUDO-INSTRUES) de Compilao


Alm das instrues pertencentes ao microcontrolador em questo, a linguagem
assembly possui ainda algumas instrues especiais, pseudo-instrues ou diretivas,
que so usadas apenas para a estruturao do programa.
Estas instrues especiais, que no so traduzidas para o cdigo de mquina
por no pertencerem ao conjunto de instrues do microcontrolador escolhido,
possuem apenas funes especiais no programa como: definir smbolos, estabelecer o
endereo inicial do programa, reservar rea de memria etc, no sendo, portanto,
processadas.
PSEUDO-INSTRUES MAIS USADAS
ORG (ORIGIN)
Formato: Pseudo-instruo operando
ORG endereo
Funo:
Usado para o endereo inicial de memria, no qual o programa ou um trecho de
programa ser armazenado.
Exemplo: ORG 0100H
Assim o programa objeto ser carregado na memria a partir do endereo
0100H
DB (DEFINE BYTE)
Formato: Pseudo-instruo operando
DB byte
Funo:
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

54

O byte do operando carregado diretamente na posio de memria escolhida


pelo ORG.
Exemplo:
ORG 0050H
DB 3FH
DB 1AH
Assim os bytes 3FH e 1AH foram armazenados nas posies de memria
0050H e 0051H respectivamente.
END
Formato: Pseudo-instruo
END
Funo:
Indica o final do programa.

5.3 USO DO COMPILADOR E DO LINKER (PASSO A PASSO)


OBS: Comandos digitados na linha de prompt do DOS.
1. Com o NE ou EDIT escrever um programa em assembly nomeado
obrigatoriamente com a extenso .ASM (criando assim programa fonte).
OBS: No editor de textos deve-se obrigatoriamente reservar as colunas de 1 a
6 para os labels ou tags que representam os endereos do programa, de entrada
de loops, chamada de sub-rotinas etc.
2. Com o X8051 (compilador) obter os arquivos com extenso .OBJ
(programa objeto) e .LST (listagem) da seguinte forma:

X8051 [ENTER]
Listing Destination (..........): D [ENTER]
Generate cross reference [ENTER]
Input file name:.........nome do arquivo.ASM [ENTER]
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Output file name: ...... nome do arquivo [ENTER]


3. Com o LINK ligar o arquivo .OBJ, gerando um arquivo .HEX da seguinte
forma:

LINK [ENTER]
Input file name: ........ .OBJ [ENTER]
Enter offset for ....... [ENTER]
Input file name: [ENTER]
Output file name: [ENTER]
Options (..........): H [ENTER]
4. No simulador:

Load
Avocet
.... .HEX
Simulation
F1 (total)
F10 (passo a passo)
5.4 Simulador dos Microcontroladores da famlia 8051
****** TELA DE ENTRADA DO SIMULADOR: ******

Deve-se selecionar uma opo em funo da cpu escolhida para o projeto.

Milton Barreiro Junior ETE Getlio Vargas

55

Microcontrolador 8051 Teoria e Prtica

56

****** TELA DE SIMULAO: ******

5.5 Operao bsica do simulador


Para uma rpida ambientao com o programa simulador, apresentada uma
seqncia de testes para as principais teclas e/ou comandos:
Visualizao geral da tela, visando reconhecer os seus principais campos
(coloridos) e funes correspondentes.
Teclas: ESC
CTRL C
Comandos: Help Commands
Display
Simulation
Avocet
Registration
Load Avocet
Quit Exit
setUp Cursor Yes
No
View Memory-map
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

57

Symbols Alpha
Registers
Data
Bit
SFR
eXecute
Seqncia para carregar um arquivo no simulador e informaes sobre a
simulao:
Load Avocet ... .OBJ Help Simulation
Teclas para a simulao
F1: executa o programa inteiro.
F10: executa um programa instruo por instruo.
F9: volta para a condio anterior, aps a execuo de uma instruo.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

58

6 Tabela de Instrues completa


Temos na tabela a seguir o set de instrues do 8051, indicando o seu opcode,
conforme j explicado, o nmero de bytes da instruo, os perodos de clock
necessrios e os flags afetados.
Temos a seguinte codificao na tabela:

@ significa endereado pelo valor de ...;

#Dado indica valor constante de 8 bits;

#Dado 16 indica valor constante de 16 bits;

Direto indica um endereamento de memria de 8 bits (primeiras 256

posies interna ou externas)

rel indica que o endereamento relativo;

? indica depende do resultado ou da operao;

- indica no afetado;

1 indica setado;

0 indica zerado.
Flags afetados
CY AC
0V

Opcode

Mnemnico

Funo

Bytes

Pulsos

00

NOP

12

01

AJMP End11

24

02

LJMP End16

Nenhuma operao
Desvia para outro endereo
numa fai-xa de 2Kbytes da
atual posio (3 primeiros bits
MSB do OpCode so os bits
MSB do endereo)
Desvia para qualquer posio
da memria de programa.
Desloca acumulador direita

24

03

RR A

12

04
05

INC A
INC Direto

1
2

12
12

06

INC @R0

12

07

INC @R1

12

08
09

INC R0
INC R1

1
1

12
12

b7

b0

Soma 1 ao acumulador
Soma 1 posio de memria
Soma 1 RAM endereada
por R0
Soma 1 RAM endereada
por R1
Soma 1 ao contedo de R0
Soma 1 ao contedo de R1

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

59

Flags afetados
CY AC
0V
-

Opcode

Mnemnico

Funo

Bytes

Pulsos

0A
0B
0C
0D
0E
0F

INC R2
INC R3
INC R4
INC R5
INC R6
INC R7

1
1
1
1
1
1

12
12
12
12
12
12

10

JBC bit, rel

24

11

ACALL End11

24

12

LCALL End16

Soma 1 ao contedo de R2
Soma 1 ao contedo de R3
Soma 1 ao contedo de R4
Soma 1 ao contedo de R5
Soma 1 ao contedo de R6
Soma 1 ao contedo de R7
Desvia se o bit endereado
estiver setado e depois zera o
bit
Chama sub-rotina numa faixa
de 2Kbytes da atual posio (3
primeiros bits MSB do OpCode
so os bits MSB do endereo)
Chama sub-rotina em qualquer
posio da memria de
programa
Desloca o acumulador direita
atravs do carry

24

13

RRC A

12

14

DEC A

12

15

DEC Direto

12

16

DEC @R0

12

17

DEC @R1

12

18
19
1A
1B
1C
1D
1E
1F

DEC R0
DEC R1
DEC R2
DEC R3
DEC R4
DEC R5
DEC R6
DEC R7

1
1
1
1
1
1
1
1

12
12
12
12
12
12
12
12

20

JB bit, rel

24

21

AJMP End11

24

22

RET

24

23

RL A

12

b7

Cy

b0

Subtrai 1 do acumulador
Subtrai 1 da posio de
memria
Subtrai 1 da RAM endereada
por R0
Subtrai 1 da RAM endereada
por R1
Subtrai 1 do contedo de R0
Subtrai 1 do contedo de R1
Subtrai 1 do contedo de R2
Subtrai 1 do contedo de R3
Subtrai 1 do contedo de R4
Subtrai 1 do contedo de R5
Subtrai 1 do contedo de R6
Subtrai 1 do contedo de R7
Desvio se o bit endereado
estiver setado
Desvia para outro endereo
numa fai-xa de 2Kbytes da
atual posio (3 primeiros bits
MSB do OpCode so os bits
MSB do endereo)
Retorne da sub-rotina
Desloca o acumulador
esquerda

b7

Milton Barreiro Junior ETE Getlio Vargas

b0

Microcontrolador 8051 Teoria e Prtica

60

Flags afetados
CY AC
0V
?
?
?

Opcode

Mnemnico

Funo

Bytes

Pulsos

24

ADD A, #Dado

12

25

ADD A, Direto

12

26

ADD A, @R0

12

27

ADD A, @R1

12

28

ADD A, R0

12

29

ADD A, R1

12

2A

ADD A, R2

12

2B

ADD A, R3

12

2C

ADD A, R4

12

2D

ADD A, R5

12

2E

ADD A, R6

12

2F

ADD A, R7

12

30

JNB bit, rel

24

31

ACALL End11

24

32

RETI

Soma o dado ao acumulador


Soma o contedo da posio
de memria ao acumulador
Soma o contedo da RAM
endereada
por
R0
ao
acumulador
Soma o contedo da RAM
endereada
por
R1
ao
acumulador
Soma o contedo de R0 ao
acumulador
Soma o contedo de R1 ao
acumulador
Soma o contedo de R2 ao
acumulador
Soma o contedo de R3 ao
acumulador
Soma o contedo de R4 ao
acumulador
Soma o contedo de R5 ao
acumulador
Soma o contedo de R6 ao
acumulador
Soma o contedo de R7 ao
acumulador
Desvia se o bit endereado
estiver zerado
Chama sub-rotina numa faixa
de 2Kbytes da atual posio (3
primeiros bits MSB do OpCode
so os bits MSB do endereo)
Retorne da interrupo
Desloca o acumulador
esquerda atravs do carry

24

33

RLC A

12

12

12

12

12

12

12

Cy

34

ADDC A, #Dado

35

ADDC A, Direto

36

ADDC A, @R0

37

ADDC A, @R1

38

ADDC A, R0

39

ADDC A, R1

b7

b0

Soma o dado e o carry ao


acumulador
Soma o contedo da posio
de memria e o carry ao
acumulador
Soma o contedo da RAM
endereada por R0 e o carry
ao acumulador
Soma o contedo da RAM
endereada por R1 e o carry
ao acumulador
Soma o contedo de R0 e o
carry ao acumulador
Soma o contedo de R1 e o
carry ao acumulador

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Opcode

Mnemnico

3A

ADDC A, R2

3B

ADDC A, R3

3C

ADDC A, R4

3D

ADDC A, R5

3E

ADDC A, R6

3F

ADDC A, R7

40

JC rel

41

AJMP End11

42

ORL Direto, A

44

ORL Direto,
#Dado
ORL A, #Dado

45

ORL A, Direto

46

ORL A, @R0

47

ORL A, @R1

48

ORL A, R0

49

ORL A, R1

4A

ORL A, R2

4B

ORL A, R3

4C

ORL A, R4

4D

ORL A, R5

4E

ORL A, R6

4F

ORL A, R7

50

JNC rel

51

ACALL End11

43

61

Funo

Flags afetados
CY AC
0V

Bytes

Pulsos

12

12

12

12

12

12

24

24

12

Ou entre dado e memria

24

Ou entre dado e acumulador


Ou
entre
memria
e
acumulador
Ou entre a RAM endereada
por R0 e o acumulador
Ou entre a RAM endereada
por R1 e o acumulador
Ou entre o contedo de R0 e
o acumulador
Ou entre o contedo de R1 e
o acumulador
Ou entre o contedo de R2 e
o acumulador
Ou entre o contedo de R3 e
o acumulador
Ou entre o contedo de R4 e
o acumulador
Ou entre o contedo de R5 e
o acumulador
Ou entre o contedo de R6 e
o acumulador
Ou entre o contedo de R7 e
o acumulador
Desvia se o carry estiver
zerado
Chama sub-rotina numa faixa
de 2Kbytes da atual posio (3
primeiros bits MSB do OpCode
so os bits MSB do endereo)

12

12

12

12

12

12

12

12

12

12

12

12

24

24

Soma o contedo de R2 e o
carry ao acumulador
Soma o contedo de R3 e o
carry ao acumulador
Soma o contedo de R4 e o
carry ao acumulador
Soma o contedo de R5 e o
carry ao acumulador
Soma o contedo de R6 e o
carry ao acumulador
Soma o contedo de R7 e o
carry ao acumulador
Desvia se o carry estiver
setado
Desvia para outro endereo
numa fai-xa de 2Kbytes da
atual posio (3 primeiros bits
MSB do OpCode so os bits
MSB do endereo)
Ou entre acumulador e
memria;
resultado
na
memria

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Opcode
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
60

61

62
63
64
65
66

67
68
69

Mnemnico

62

Funo

E entre acumulador e
memria;
resultado
na
memria
ANL Direto, #dado E entre dado e memria
ANL A, #Dado
E entre dado e acumulador
E
entre
memria
e
ANL A, Direto
acumulador
E entre RAM endereada por
ANL A, @R0
R0 e acumulador
E entre RAM endereada por
ANL A, @R1
R1 e acumulador
E entre o contedo de R0 e o
ANL A, R0
acumulador
E entre o contedo de R1 e o
ANL A, R1
acumulador
E entre o contedo de R2 e o
ANL A, R2
acumulador
E entre o contedo de R3 e o
ANL A, R3
acumulador
E entre o contedo de R4 e o
ANL A, R4
acumulador
E entre o contedo de R5 e o
ANL A, R5
acumulador
E entre o contedo de R6 e o
ANL A, R6
acumulador
E entre o contedo de R7 e o
ANL A, R7
acumulador
Desvia se o acumulador for
JZ rel
zero
Desvia para outro endereo
numa fai-xa de 2Kbytes da
AJMP End11
atual posio (3 primeiros bits
MSB do OpCode so os bits
MSB do endereo)
Ou
exclusivo
entre
XRL Direto, A
acumulador
e
memria;
resultado na memria
XRL Direto,
Ou exclusivo entre dado e
#Dado
memria
Ou exclusivo entre dado e
XRL A, #Dado
acumulador
Ou exclusivo entre memria
XRL A, Direto
e acumulador
Ou exclusivo entre RAM
XRL A, @R0
endereada
por
R0
e
acumulador
Ou exclusivo entre RAM
XRL A, @R1
endereada
por
R1
e
acumulador
Ou exclusivo entre contedo
XRL A, R0
de R0 e acumulador
Ou exclusivo entre contedo
XRL A, R1
de R1 e acumulador
ANL Direto, A

Milton Barreiro Junior ETE Getlio Vargas

Flags afetados
CY AC
0V

Bytes

Pulsos

12

3
2

24
12

12

12

12

12

12

12

12

12

12

12

12

24

24

12

24

12

12

12

12

12

12

Microcontrolador 8051 Teoria e Prtica

Opcode

Mnemnico

6A

XRL A, R2

6B

XRL A, R3

6C

XRL A, R4

6D

XRL A, R5

6E

XRL A, R6

6F

XRL A, R7

70

JNZ rel

71

ACALL End11

72

ORL C, bit

73

JMP @A+DPTR

74

MOV A, #Dado

75

MOV Direto,
#Dado

76

MOV @R0,
#Dado

77

MOV @R1,
#Dado

78

MOV R0, #Dado

79

MOV R1, #Dado

7A

MOV R2, #Dado

7B

MOV R3, #Dado

7C

MOV R4, #Dado

7D

MOV R5, #Dado

7E

MOV R6, #Dado

7F

MOV R7, #Dado

80

SJMP rel

63

Funo
Ou exclusivo entre contedo
de R2 e acumulador
Ou exclusivo entre contedo
de R3 e acumulador
Ou exclusivo entre contedo
de R4 e acumulador
Ou exclusivo entre contedo
de R5 e acumulador
Ou exclusivo entre contedo
de R6 e acumulador
Ou exclusivo entre contedo
de R7 e acumulador
Desvia se o acumulador no
for zero
Chama sub-rotina numa faixa
de 2Kbytes da atual posio (3
primeiros bits MSB do OpCode
so os bits MSB do endereo)
Ou entre o bit endereado e
o carry
Desvia para o endereo obtido
da soma do acumulador e do
DPTR
Mova
o
dado
para
o
acumulador
Mova o dado para a memria
Mova
dado
para
RAM
endereada indiretamente por
R0
Mova
dado
para
RAM
endereada indiretamente por
R1
Mova o dado para o registro
R0
Mova o dado para o registro
R1
Mova o dado para o registro
R2
Mova o dado para o registro
R3
Mova o dado para o registro
R4
Mova o dado para o registro
R5
Mova o dado para o registro
R6
Mova o dado para o registro
R7
Desvio curto relativo

Milton Barreiro Junior ETE Getlio Vargas

Flags afetados
CY AC
0V

Bytes

Pulsos

12

12

12

12

12

12

24

24

24

24

12

24

12

12

24

24

24

24

24

24

24

24

24

Microcontrolador 8051 Teoria e Prtica

Opcode

81

82

83

84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
90

91

92

93

94
95

Mnemnico

64

Funo

Desvia para outro endereo


numa fai-xa de 2Kbytes da
AJMP End11
atual posio (3 primeiros bits
MSB do OpCode so os bits
MSB do endereo)
E entre o bit endereado e o
ANL C, bit
carry
Soma A + PC obtendo um
endereo de 16 bits na
MOVC A, @A+PC memria de programa; carrega
o acumulador com esta
memria
Divide A e B; resultado: A
DIV AB
inteiro e B resto
MOV Direto1,
Mova o contedo da memria
Direto2
direta2 para a memria direta1
Mova RAM endereada por R0
MOV Direto, @R0
para memria
Mova RAM endereada por R1
MOV Direto, @R1
para memria
Mova
registro
R0
para
MOV Direto, R0
memria
Mova
registro
R1
para
MOV Direto, R1
memria
Mova
registro
R2
para
MOV Direto, R2
memria
Mova
registro
R3
para
MOV Direto, R3
memria
Mova
registro
R4
para
MOV Direto, R4
memria
Mova
registro
R5
para
MOV Direto, R5
memria
Mova
registro
R6
para
MOV Direto, R6
memria
Mova
registro
R7
para
MOV Direto, R7
memria
MOV DPTR,
Mova dado de 16 bits para o
#Dado 16
DPTR
Chama sub-rotina numa faixa
de 2Kbytes da atual posio (3
ACALL End11
primeiros bits MSB do OpCode
so os bits MSB do endereo)
Mova o carry para o bit
MOV bit, C
endereado
Soma A + DPTR obtendo um
endereo de 16 bits na
MOVC A, @A +
memria de programa; carrega
DPTR
o acumulador com esta
memria
Subtrai o dado e o borrow do
SUBB A, #Dado
acumulador
Subtrai o contedo da posio
SUBB A, Direto
de memria e o borrow do
acumulador

Milton Barreiro Junior ETE Getlio Vargas

Flags afetados
CY AC
0V

Bytes

Pulsos

24

24

24

48

24

24

24

24

24

24

24

24

24

24

24

24

24

24

24

12

12

Microcontrolador 8051 Teoria e Prtica

Opcode

Mnemnico

96

SUBB A, @R0

97

SUBB A, @R1

98

SUBB A, R0

99

SUBB A, R1

9A

SUBB A, R2

9B

SUBB A, R3

9C

SUBB A, R4

9D

SUBB A, R5

9E

SUBB A, R6

9F

SUBB A, R7

A0

ORL C, /bit

A1

AJMP End11

A2

MOV C, bit

A3
A4
A5

INC DPTR
MUL AB

A6

MOV @R0, Direto

A7

MOV @R1, Direto

A8

MOV R0, Direto

A9

MOV R1, Direto

AA

MOV R2, Direto

AB

MOV R3, Direto

AC

MOV R4, Direto

AD

MOV R5, Direto

AE

MOV R6, Direto

65

Funo
Subtrai o contedo da RAM
endereada por R0 e o borrow
do acumulador
Subtrai o contedo da RAM
endereada por R1 e o borrow
do acumulador
Subtrai o contedo de R0 e o
borrow do acumulador
Subtrai o contedo de R1 e o
borrow do acumulador
Subtrai o contedo de R2 e o
borrow do acumulador
Subtrai o contedo de R3 e o
borrow do acumulador
Subtrai o contedo de R4 e o
borrow do acumulador
Subtrai o contedo de R5 e o
borrow do acumulador
Subtrai o contedo de R6 e o
borrow do acumulador
Subtrai o contedo de R7 e o
borrow do acumulador
Ou entre o complemento do
bit endereado e o carry
Desvia para outro endereo
numa fai-xa de 2Kbytes da
atual posio (3 primeiros bits
MSB do OpCode so os bits
MSB do endereo)
Mova o bit endereado para o
carry
Soma 1 ao registro DPTR
Multiplica A e B; resultado: BA
Mova a memria para
endereada por R0
Mova a memria para
endereada por R1
Mova memria para o
R0
Mova memria para o
R1
Mova memria para o
R2
Mova memria para o
R3
Mova memria para o
R4
Mova memria para o
R5
Mova memria para o
R6

Milton Barreiro Junior ETE Getlio Vargas

a RAM
a RAM
registro
registro
registro
registro
registro
registro
registro

Flags afetados
CY AC
0V

Bytes

Pulsos

12

12

12

12

12

12

12

12

12

12

24

24

12

1
1

24
48

24

24

24

24

24

24

24

24

24

Microcontrolador 8051 Teoria e Prtica

Opcode

Mnemnico

AF

MOV R7, Direto

B0

ANL C, /bit

B1

ACALL End11

B2

CPL bit

B3

CPL C

B4

CJNE A, #Dado
rel

B5

CJNE A, Direto
rel

B6

CJNE @R0,
#Dado rel

B7

CJNE @R1,
#Dado rel

B8

CJNE R0, #Dado


rel

B9

CJNE R1, #Dado


rel

BA

CJNE R2, #Dado


rel

BB

CJNE R3, #Dado


rel

BC

CJNE R4, #Dado


rel

BD

CJNE R5, #Dado


rel

BE

CJNE R6, #Dado


rel

BF

CJNE R7, #Dado


rel

C0

PUSH Direto

C1

AJMP End11

66

Funo
Mova memria para o registro
R7
E entre o complemento do bit
endereado e o carry
Chama sub-rotina numa faixa
de 2Kbytes da atual posio (3
primeiros bits MSB do OpCode
so os bits MSB do endereo)
Inverte o estado do bit
endereado
Inverte o estado do carry
Compara e desvia se o
acumulador for diferente do
dado
Compara e desvia se o
acumulador for diferente da
memria endereada
Compara e desvia se a RAM
endereada
por
R0
for
diferente do dado
Compara e desvia se a RAM
endereada
por
R1
for
diferente do dado
Compara e desvia se o
registro R0 for diferente do
dado
Compara e desvia se o
registro R1 for diferente do
dado
Compara e desvia se o
registro R2 for diferente do
dado
Compara e desvia se o
registro R3 for diferente do
dado
Compara e desvia se o
registro R4 for diferente do
dado
Compara e desvia se o
registro R5 for diferente do
dado
Compara e desvia se o
registro R6 for diferente do
dado
Compara e desvia se o
registro R7 for diferente do
dado
Incrementa o SP e ento
coloca a memria no Stack
Desvia para outro endereo
numa fai-xa de 2Kbytes da
atual posio (3 primeiros bits
MSB do OpCode so os bits
MSB do endereo)

Milton Barreiro Junior ETE Getlio Vargas

Flags afetados
CY AC
0V

Bytes

Pulsos

24

24

24

12

12

24

24

24

24

24

24

24

24

24

24

24

24

24

24

Microcontrolador 8051 Teoria e Prtica

67

Flags afetados
CY AC
0V
0
-

Opcode

Mnemnico

Funo

Bytes

Pulsos

C2
C3

CLR bit
CLR C

Zera o bit endereado


Zera o carry
Troca
os
nibbles
do
acumulador. Equivale a 4 RR
A ou 4 RL A

2
1

12
12

C4

SWAP A

12

C5

XCH A, Direto

12

C6

XCH A, @R0

12

C7

XCH A, @R1

12

C8

XCH A, R0

12

C9

XCH A, R1

12

CA

XCH A, R2

12

CB

XCH A, R3

12

CC

XCH A, R4

12

CD

XCH A, R5

12

CE

XCH A, R6

12

CF

XCH A, R7

12

D0

POP Direto

24

D1

ACALL End11

24

D2
D3
D4

SETB bit
SETB C
DA A

2
1
1

12
12
12

1
?

D5

DJNZ Direto, rel

24

D6

XCHD A, @R0

12

Troca
memria
com
o
acumulador
Troca a RAM indiretamente
endereada por R0 com o
acumulador
Troca a RAM indiretamente
endereada por R1 com o
acumulador
Troca entre si o contedo do
acumulador e o registro R0
Troca entre si o contedo do
acumulador e o registro R1
Troca entre si o contedo do
acumulador e o registro R2
Troca entre si o contedo do
acumulador e o registro R3
Troca entre si o contedo do
acumulador e o registro R4
Troca entre si o contedo do
acumulador e o registro R5
Troca entre si o contedo do
acumulador e o registro R6
Troca entre si o contedo do
acumulador e o registro R7
Retira dado do stack e coloca
na
memria,
depois
decrementa SP
Chama sub-rotina numa faixa
de 2Kbytes da atual posio (3
primeiros bits MSB do OpCode
so os bits MSB do endereo)
Seta o bit endereado
Seta o carry
Ajuste decimal do acumulador
Decrementa a memria e
desvia se for diferente de zero
Troca
nibble
menos
significativo do acumulador
com a RAM endereada
indiretamente por R0 entre si

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

Opcode
D7

D8
D9
DA
DB
DC
DD
DE
DF

E0

E1

E2

E3
E4
E5
E6

E7
E8
E9
EA
EB

Mnemnico

68

Funo

Troca
nibble
menos
significativo do acumulador
XCHD A, @R1
com a RAM endereada
indiretamente por R1 entre si
Decrementa o registro R0 e
DJNZ R0, rel
desvia se for diferente de zero
Decrementa o registro R1 e
DJNZ R1, rel
desvia se for diferente de zero
Decrementa o registro R2 e
DJNZ R2, rel
desvia se for diferente de zero
Decrementa o registro R3 e
DJNZ R3, rel
desvia se for diferente de zero
Decrementa o registro R4 e
DJNZ R4, rel
desvia se for diferente de zero
Decrementa o registro R5 e
DJNZ R5, rel
desvia se for diferente de zero
Decrementa o registro R6 e
DJNZ R6, rel
desvia se for diferente de zero
Decrementa o registro R7 e
DJNZ R7, rel
desvia se for diferente de zero
Mova
RAM
externa
indiretamente endereada pelo
MOVX A, @DPTR
DPTR (16 bits) para o
acumulador
Desvia para outro endereo
numa fai-xa de 2Kbytes da
AJMP End11
atual posio (3 primeiros bits
MSB do OpCode so os bits
MSB do endereo)
Mova
RAM
endereada
MOVX A, @R0
indiretamente por R0 (8 bits)
para o acumulador
Mova
RAM
endereada
MOVX A, @R1
indiretamente por R1 (8 bits)
para o acumulador
CLR A
Faz o acumulador = zero
Mova
memria
para
o
MOV A, Direto
acumulador
Mova
RAM
endereada
MOV A, @R0
indiretamente por R0 para o
acumulador
Mova
RAM
endereada
MOV A, @R1
indiretamente por R1 para o
acumulador
Mova registro R0 para o
MOV A, R0
acumulador
Mova registro R1 para o
MOV A, R1
acumulador
Mova registro R2 para o
MOV A, R2
acumulador
Mova registro R3 para o
MOV A, R3
acumulador

Milton Barreiro Junior ETE Getlio Vargas

Flags afetados
CY AC
0V

Bytes

Pulsos

12

24

24

24

24

24

24

24

24

24

24

24

24

12

12

12

12

12

12

12

12

Microcontrolador 8051 Teoria e Prtica

Opcode
EC
ED
EE
EF

F0

F1

F2

F3

F4
F5
F6

F7
F8
F9
FA
FB
FC
FD
FE
FF

Mnemnico

69

Funo

Mova registro R4 para o


acumulador
Mova registro R5 para o
MOV A, R5
acumulador
Mova registro R6 para o
MOV A, R6
acumulador
Mova registro R7 para o
MOV A, R7
acumulador
Mova o acumulador para a
RAM externa indiretamente
MOVX @DPTR, A
endereada pelo DPTR (16
bits)
Chama sub-rotina numa faixa
de 2Kbytes da atual posio (3
ACALL End11
primeiros bits MSB do OpCode
so os bits MSB do endereo)
Mova acumulador para RAM
externa
indiretamente
MOVX @R0, A
endereada por R0 (endereo
8 bits)
Mova acumulador para RAM
externa
indiretamente
MOVX @R1, A
endereada por R1 (endereo
8 bits)
Inverte o estado dos bits do
CPL A
acumulador
Mova
acumulador
para
MOV Direto, A
memria
Mova o acumulador para a
MOV @R0, A
RAM
indiretamente
endereada por R0
Mova o acumulador para a
MOV @R1, A
RAM
indiretamente
endereada por R1
Mova o acumulador para o
MOV R0, A
registro R0
Mova o acumulador para o
MOV R1, A
registro R1
Mova o acumulador para o
MOV R2, A
registro R2
Mova o acumulador para o
MOV R3, A
registro R3
Mova o acumulador para o
MOV R4, A
registro R4
Mova o acumulador para o
MOV R5, A
registro R5
Mova o acumulador para o
MOV R6, A
registro R6
Mova o acumulador para o
MOV R7, A
registro R7
MOV A, R4

Milton Barreiro Junior ETE Getlio Vargas

Flags afetados
CY AC
0V

Bytes

Pulsos

12

12

12

12

24

24

24

24

12

12

12

12

12

12

12

12

12

12

12

12

Microcontrolador 8051 Teoria e Prtica

7 Esquema da CPU mnima para teste e carregamento de programa

Milton Barreiro Junior ETE Getlio Vargas

70

Microcontrolador 8051 Teoria e Prtica

71

8 Programa teste do sistema mnimo


;**************************************************************
;
PROGRAMA TESTE
;**************************************************************

INICIO:
VOLTA:

ORG 0000H
LJMP INICIO

;Define endereo de incio

ORG 0050H

;Define endereo de incio de execuo

MOV
MOV
MOV
MOV
MOV
MOV
MOV
RR

;Configura T0 e T1 no modo 1
;Configura TCON
;Carrega ACC com 11111110 (binrio)
;Carrega ACC nos PORTS
;P0, P1, P2 e P3

TMOD,#11H
TCON,#00H
A,#11111110B
P0, A
P1, A
P2, A
P3, A
A

ACALL

DELAY

;Rotaciona ACC para direita


;Chama rotina de tempo de 1s (PARA CLOCK

DE 12MHz)
LJMP VOLTA
;**************************************************************
;
Rotina de Tempo de 1s
;**************************************************************
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

DELAY:
REP:

MOV
MOV
MOV
SETB
JNB
CLR
DJNZ
CLR
RET

R0, #20
TH1, #3CH
TL1, #0AFH
TR1
TF1, $
TF1
R0, REP
TR1

72

;Carrega valor 20 (decimal) em R0


;Carrega Timer 1
;Com 3CAF (hexa) para contagem de 50ms
;Incio de contagem
;Testa se houve overflow em Timer 1
;Reseta flag de overflow
;Repete temporizao se necessrio
;Desliga contagem

END

9 Referncias Bibliogrficas
- Aplicaes Prticas do Microcontrolador 8051 (Teoria Geral Detalhada)
Vidal Pereira da Silva Junior
Editora rica
- Apostila de Microcontroladores Famlia MCS 51 (Conceitos, Aplicaes e Projetos)
Professor Wilson Ruiz
Centro Federal de Educao Tecnolgica de So Paulo (CEFET SP)
- Apostila CURSO de MICROCONTROLADORES 8051 KIT STATION51
(Apostila Terica)
Professor Elmo Dutra da Silveira Filho
Centro Tecnolgico de Mecatrnica SENAI
- Apontamentos de aulas
- Laboratrio de Microcontroladores Famlia 8051
Denys E. C. Nicolosi
Editora rica
- Manuais de Microcontoladores Famlia 8051 dos fabricantes:
INTEL
ATMEL
- The 8051 Microcontroller Architecture, Programming and Applications
Kenneth J. Ayala
Western Carolina University
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

73

APNDICE A

EXERCCIO / EXEMPLO 1
Projetar um sistema de controle de um elevador para 3 nveis, baseado no
microcontrolador 8051, com as seguintes caractersticas:
Entradas do sistema: P0 e INT0

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

74

Sadas do Sistema: P1

Nota:
1 S e desejvel possvel associar-se o primeiro andar da tabela anterior ao
andar trreo de um edifcio, deslocando-se tambm os outros nveis, sem alteraes no
funcionamento da soluo fornecida como exemplo a seguir.
2 Assim que o sistema iniciado o elevador desloca-se para o primeiro andar
com a porta fechada e l chegando abre a porta.
3 O elevador somente desloca-se com a porta fechada.
4 Quando a cabine est parada, sua porta conecta-se mecanicamente com a
porta do respectivo andar e assim ambas tero o mesmo movimento.
5 Os botes de comando do elevador esto no interior da cabine, no
existindo botes externos ao lado da porta de entrada, assim o usurio s pode entrar
no elevador se este estiver parado no andar, sendo o destino escolhido pelo mesmo
dentro da cabine (limitao inicialmente adotada para a simplificao do exemplo).
6 O LED aceso indica a presena da cabine no respectivo andar.
7 Normalmente no recomendvel uma freqncia de clock inferior a 3MHz
para aplicaes reais, ms nesse problema, onde um dos objetivos a determinao
de um intervalo de tempo e a visualizao do funcionamento de um dos
TEMPORIZADORES atravs do simulador, esta freqncia fica estabelecida em
120KHz. (valor escolhido em funo da aplicao).

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

75

8 O tempo gasto pela porta no movimento de abrir e fechar deve ser de 5


segundos e determinado pelo TIMER0 (vide descrio do clculo no cabealho do
programa).

;************************************************************************************************
;

Exerccio / Exemplo 3: Controle Do Elevador 05/11/2002 02:45h

;Freqncia Do Timer = (Freqncia Do Clock) / 12 = 120k / 12 = 10k Hz E O Seu Perodo =


0,1x10-3 Segundos
; assim para um tempo de 5 segundos temos: 5 / 0,1x10-3 = valor da contagem = 50000
; 65535 50000 + 1 = 15536 = 3cb0h = Valor A Ser Carregado Inicialmente No Contador / Temporizador
;************************************************************************************************
ORG 0000H
LJMP INICIO
ORG 0003H
LJMP INT0
ORG 000BH
LJMP TIMER0
ORG 0050H
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica


INICIO:

76

MOV SP, #0030H ;estabelece o ponteiro da pilha


MOV IE, #10000011B ;habilita INT0 e TIMER0
MOV IP, #00000001B ;define prioridade alta p/ INT0 e baixa p/ TIMER0
MOV TCON, #00000000B ;INT0 ativa por nvel 0 e TIMER0 desligado
MOV TMOD, #00000001B ;funo de temporizao com controle do TIMER0
feito pelo bit TR0 ;modo 1 de operao
CLR P1.1 ;para o elevador
CLR P1.0
MOV TH0, #3CH ;valor inicial para a contagem / temporizao
MOV TL0, #0B0H
CLR 00 ;inicializa um bit enderevel para ser a FLAG DO TIMER0

;**************************************************************************************************
;

O sistema (elevador) est sendo iniciado

;**************************************************************************************************
JB P0.4, L25 ;verifica se o elevador j estava no 1o andar.
ACALL DESCER ;leva o elevador inicialmente para o trreo.
L1:

JNB P0.4, L1 ;espera chegar no 1o andar


ACALL PARAR

L25:

SETB P1.4 ;acende led indicador de 1o andar


CLR P1.5 ;apaga led indidador de 2o andar
CLR P1.6 ;apaga led indicador de 3o andar

;**************************************************************************************************
;

O elevador est no 1o andar

;**************************************************************************************************
ANDAR_1:

JB P0.1, L2 ;testa chamada para o 2o andar

JB P0.2, L3 ;testa chamada para o 3o andar


Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica


AJMP ANDAR_1 ;volta para esperar uma chamada
L2:

ACALL SUBIR ;movimenta o elevador para o 2o andar

L4:

JNB P0.5, L4 ;espera chegar no 2o andar


ACALL PARAR
SETB P1.5 ;acende o led indicador de 2o andar
LJMP ANDAR_2

L3:

ACALL SUBIR ;movimenta o elevador para o 3o andar

L5:

JNB P0.6, L5 ;espera chegar no 3o andar


ACALL PARAR
SETB P1.6 ;acende o led indicador de 3o andar
LJMP ANDAR_3

;************************************************************************************************
;

O elevador est no 2o andar

;************************************************************************************************
ANDAR_2:

JB P0.0, L6 ;testa chamada para o 1o andar


JB P0.2, L7 ;testa chamada para o 3o andar
AJMP ANDAR_2 ;volta para esperar uma chamada

L6:

ACALL DESCER ;movimenta o elevador para o 1o andar

L8:

JNB P0.4, L8 ;espera chegar no 1o andar


ACALL PARAR
SETB P1.4 ;acende o led indicador de 1o andar
LJMP ANDAR_1

L7:

ACALL SUBIR ;movimenta o elevador para o 3o andar

L9:

JNB P0.6, L9 ;espera chegar no 3o andar


ACALL PARAR
SETB P1.6 ;acende o led indicador de 3o andar

Milton Barreiro Junior ETE Getlio Vargas

77

Microcontrolador 8051 Teoria e Prtica


LJMP ANDAR_3
;************************************************************************************************
;

O elevador est no 3o andar

;************************************************************************************************
ANDAR_3:

JB P0.0, L10 ;testa chamada para o 1o andar


JB P0.1, L11 ;testa chamada para o 2o andar
AJMP ANDAR_3 ;volta para esperar uma chamada

L10:

ACALL DESCER ;movimenta o elevador para o 1o andar

L12:

JNB P0.4, L12 ;espera chegar no 1o andar


ACALL PARAR
SETB P1.4 ;acende o led indicador de 1o andar
LJMP ANDAR_1

L11:

ACALL DESCER ;movimenta o elevador para o 2o andar

L13:

JNB P0.5, L13 ;espera chegar no 2o andar


ACALL PARAR
SETB P1.5 ;acende o led indicador de 2o andar
LJMP ANDAR_2

;************************************************************************************************
;

sub-rotina: SUBIR

;************************************************************************************************
SUBIR:

CLR P1.4 ;apaga todos os leds


CLR P1.5
CLR P1.6
CLR P1.2 ;fecha a porta
SETB TR0 ;liga o timer0

L20:

JNB 00, L20 ;espera o trmino da temporizao

Milton Barreiro Junior ETE Getlio Vargas

78

Microcontrolador 8051 Teoria e Prtica

79

CLR 00 ;reseta a FLAG DO TIMER0


SETB P1.1 ;sobe o elevador
CLR P1.0
RET
;************************************************************************************************
;

sub-rotina: DESCER

;************************************************************************************************
DESCER:

CLR P1.4 ;apaga todos os leds


CLR P1.5
CLR P1.6
CLR P1.2 ;fecha a porta
SETB TR0 ;liga o timer0

L21:

JNB 00, L21 ;espera o trmino da temporizao


CLR 00 ;reseta a FLAG DO TIMER0
CLR P1.1 ;desce o elevador
SETB P1.0
RET

;************************************************************************************************
;

sub-rotina: PARAR

;************************************************************************************************
PARAR:

CLR P1.1 ;para o elevador


CLR P1.0
SETB P1.2 ;abre a porta
SETB TR0 ;liga o timer0

L22:

JNB 00, L22 ;espera o trmino da temporizao


CLR 00 ;reseta a FLAG DO TIMER0

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

80

RET
TIMER0:

CLR TR0 ;desliga o timer0


MOV TH0, #3CH ;valor inicial para a contagem / temporizao
MOV TL0, #0B0H
SETB 00 ;seta a FLAG DO TIMER0
RETI ;retorna para o programa

INT0:

CLR P1.1 ;para o elevador


CLR P1.0
SETB P1.2 ;abre a porta

L23:

JNB P3.2, L23 ;espera o trmino da situao de emergncia


RETI
END

APNDICE B

PROCEDIMENTO PARA GRAVAO DO 8051

1 C ONSIDERAES INICIAIS

Este gravador s funciona para os microcontroladores, baseados no


microcontrolador 8051, da srie AT89SXX.
Os microcontroladores suportados pelo software de gravao so:

AT89S51: 4Kbytes de memria flash

AT89S52: 8Kbytes de memria flash

AT89S53: 12Kbytes de memria flash

AT89S8252

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

81

2 MATERIAIS NECESSRIOS

Placa de circuito impresso, conforme figura da pgina 69.

3 OBTENO DO SOFTWARE

O software utilizado se chama AEC_ISP v3.0 e pode ser obtido


gratuitamente (mediante cadastro) no site do fornecedor: www.aec-electronics.co.nz

4 UTILIZAO DO SOFTWARE

Este programa baseado no estilo dos programas DOS, mas roda


perfeitamente em ambiente Windows (at mesmo no XP).
Ao executar o programa AEC_ISP.EXE, a seguinte tela ir abrir:

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

82

Sua funo gravar o arquivo .hex gerado por qualquer compilador para 8051
no microcontrolador, conforme os passos descritos a seguir:
a) Aps ter o programa simulado e funcionando deve-se carregar o arquivo .hex o
qual foi compilado conforme descrio em captulo anterior;
b)

Aps compilar o programa, copie o arquivo .hex criado para pasta onde

est localizado o programa AEC_ISP.EXE;


c)

Execute o programa e selecionar a opo (J) Setup para configur-lo.

Configure-o de acordo com a prxima tela. Lembre-se de modificar a opo (9)device


onde voc deve selecionar o tipo de microcontrolador a ser programado. A etapa de
configurao s deve ser feita uma vez. Para as prximas gravaes, pode-se pular
este passo, desde que o microcontrolador a ser programado seja o mesmo (possua o
mesmo cdigo), e ao terminar de configurar, aperte (S) Save setup para salvar as
definies;

d)

Coloque o microcontrolador no soquete, conecte o gravador na porta

paralela, e ligue a fonte de alimentao;


e)

Na tela de opes selecione (A) Load hex file to flash buffer;

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

83

f)

Digite o nome do arquivo que voc copiou para a pasta do programa;

g)

Finalmente selecione (E) Program. O software ir iniciar a gravao e

verificao do programa, conforme a tela a seguir. Ao terminar saia do software e


desconecte todos os equipamentos;

h)

Pronto, o circuito j pode ser testado.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

84

ANEXO 1 DISPLAY LCD


01 INTRODUO
Os

mdulos

LCD

so

interfaces

de

sada

muito

til

em

sistemas

microprocessados. Estes mdulos podem ser grficos e a caracter. Os mdulos LCD


grficos so encontrados com resulues de 122x32, 128x64, 240x64 e 240x128 dots
pixel, e geralmente esto disponveis com 20 pinos para conexo. Os LCD comuns
(tipo caracter) so especificados em nmero de linhas por colunas e so encontrados
nas configuraes previstas na Tabela 1.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

85

Tabela 1 - Mdulos LCD disponveis


Os mdulos podem ser encontrados com LED backlight (com uma iluminao de
fundo) para facilitar as leituras durante a noite. Neste caso, a alimentao deste led faz se normalmente pelos pinos 15 e 16 para os mdulos comuns e 19 e 20 para os
mdulos grficos, sendo os pinos 15 e 19 para ligao ao anodo e os pinos 16 e 20
para o catodo.
A corrente de alimentao deste led varia de 100 a 200mA, dependendo do
modelo.
Estes mdulos utilizam um controlador prprio, permitindo sua interligao com
com outras placas atravs de seus pinos, onde deve ser alimentado o mdulo e
interligado o barramento de dados e controle do mdulo com a placa do usurio.
Naturalmente que alm de alimentar e conectar os pinos do mdulo com a placa
do usurio dever haver um protocolo de comunicao entre as partes, que envolve o
envio de bytes de instrues e bytes de dados pelo sistema do usurio.
A Tabela 2 descreve cada pino do mdulo ou do display para conexo deste a
outras placas:

Tabela 2 - Pinagem dos Mdulos LCD

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

86

Assim como em um rdio relgio todo mdulo LCD permite um ajuste na


intensidade da luz emitida ou ajuste de contraste, isto possvel variando-se a tenso
no pino 3. A Figura 1 mostra um circuito tpico e recomendado pela maioria dos
fabricantes para efetuar este ajuste. Alguns fabricantes recomenda o uso de um
resistor de 4K7 em srie com o potencimetro de 10K.

Figura 1 - Detalhe do controle de contraste do mdulo LCD


2 INTERFACE COM CPU
Os mdulos LCD so projetados para conectar-se com a maioria das CPUs
disponveis no mercado, bastando para isso que esta CPU atenda as temporizaes de
leitura e escrita de instrues e dados, fornecido pelo fabricante do mdulo. A Figura 2
mostra um exemplo de diagrama de tempos tpico requeridos para operao de escrita
no mdulo LCD, estes tempos variam em funo do clock da CPU do usurio.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

87

Figura 2 - (a) Escrita no LCD (b) Ciclo de Escrita da CPU 8051


A Tabela 3 a seguir mostra a relao entre a freqncia da CPU e a
temporizao de leitura/escrita da maioria dos mdulos LCD. Em geral, podemos
conectar o barramento de dados da CPU ao barramento do mdulo, mapeando-o
convenientemente na placa de usurio, e efetuarmos uma operao normal de
leitura/escrita sem mais problemas.

Tabela 3 - Relao clock da CPU x Temporizao do Mdulo LCD


A Figura 3 mostra um exemplo de conexo de uma placa baseada nos
microcontroladores da linha Intel de 8 bits (8051), ao mdulo LCD. Neste caso como os
sinais A0 e A1 esto conectados aos pinos 4 e 5, teremos ento 04 (quatro) endereos
distintos para comunicao entre a CPU e o mdulo LCD. A Tabela 4 mostra estes
endereos.

Milton Barreiro Junior ETE Getlio Vargas

Figura 3 - Sistema baseado na CPU 8051 com mdulo LCD

Microcontrolador 8051 Teoria e Prtica

88

Endereo

R/W

RS

Descrio

4000

Instruo Escrita no mdulo

4001

Dados Escrita no mdulo

4002

Instruo Leitura no mdulo

4003

Dados Leitura no mdulo

Tabela 4 - Endereamento do mdulo LCD para Figura 3


O exemplo apresentado na Figura 3 refere-se conexo do mdulo LCD com
comunicao/transmisso de 8 bits, mas podemos conectar o mdulo com transmisso
a cada 4 bits, conforme mostrado na Figura 4. Neste caso no utilizamos os pinos 7,
8, 9 e 10. Isto muito til quando a CPU do usurio possui poucos pinos de I/O, caso
tpico da linha de microprocessadores PIC, como por exemplo o Basic Stamp. Agora
surge a dvida, um mesmo mdulo pode conectar-se com 8 ou 4 bits? como isto
possvel?
Ocorre que o mdulo LCD quando alimentado necessita de algumas instrues
de inicializao que identificar qual a forma de transmisso de dados que ser
estabelecida entre a CPU e o mdulo.

Figura 4 - Modulo LCD comunicando-se com 4 bits

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

03 PROGRAMAO / INSTRUES

Milton Barreiro Junior ETE Getlio Vargas

89

Microcontrolador 8051 Teoria e Prtica

90

Tabela 5 - Conjunto de instrues do mdulo LCD


A Tabela 5 apresenta o conjunto de instrues, levando-se em considerao que
a comunicao com o mdulo seja com barramento de 8 bits (fixado durante a
inicializao)
. Para o caso desta comunicao ocorrer com apenas 4 bits (nible), os 8 dados
ou instrues sero enviados por nible. sendo enviado o nible mais significativo
primeiro. Por exemplo para limpar o display, escreve-se o nible 0000 e depois 0001.
A Tabela 6 traz um resumo das instrues mais usadas na comunicao com os
mdulos LCD.

Tabela 6 - Instrues mais comuns

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

91

3.1 DESCRIO DETALHADA DAS INSTRUES


3.1.1 Limpa Display

Esta instruo escreve o caracter ASCII 32 que corresponde ao branco ou barra


de espao em todos os endereos da DDRAM apagando a mensagem que estiver
escrita. O cursor retorna ao endereo zero, ou seja, posio mais a esquerda da
primeira linha.
3.1.2 Cursor Home

Faz retornar o cursor para a posio mais a esquerda da primeira linha e faz
voltar posio original mensagens previamente deslocadas. O contedo da DDRAM
permanece inalterado.
3.1.3 Fixa o modo de operao

Esta instruo tem efeito somente durante a leitura ou escrita de dados,


portanto, deve ser ativada na inicializao.
-Estabelece o sentido de deslocamento do cursor (X=0 p/ esquerda, X=1 p/
direita)
-Estabelece se a mensagem deve ou no ser deslocada com a entrada de um
novo caracter S=1 SIM, S=0 NO. Exemplo: X=1 e S=1 => mensagem desloca p/
direita.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

92

3.1.4 Controle do Display

A mensagem fica aparente quando D=1 e desaparece quando D=0, porm o


contedo da DDRAM fica inalterado. O cursor fica aparente quando C=1 e desaparece
quando C=0, porm as propriedades de escritas vigentes permanecem inalteradas. O
cursor quando aparente liga a ltima linha que compem o caracter, exceto quando
B=1, que apresenta em alternncia com uma matriz com todos os pontos negros em
intervalos de 0,4 segundos. Quando B=1 e C=0, obteremos a ativao intermitente de
uma matriz completa (todos os pontos da matriz).
3.1.5 Deslocamento do Cursor ou da Mensagem

Desloca o cursor ou a mensagem sem que para isso tenha que escrever ou ler
dados do display. Utilizado para posicionamento dos dados no display.

3.1.6 Estabelece o modo de utilizao do Mdulo LCD

Y estabelece o modo de comunicao. Se Y=1 estabelece 8 bits e quando Y=0


ser 4 bits, enviados em duas operaes, com os 4 bits (Nible) mais significativos
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

93

sendo enviados primeiro. N fixa o nmero de linhas: N=0 para uma linha e N=1 para
duas ou mais linhas. F fixa o tipo da matriz: F=0 para matriz 7x5 ou 8x5 e F=1 para
matriz 10x5 (somente possvel quando apresentando em uma linha).
3.1.7 Endereamento da CGRAM
CGRAM uma regio da memria RAM destinada para criao de caracteres
especiais, como por exemplo: , , etc.

Estabelece o endereo da CGRAM no contador de endereos (AC) como um


nmero binrio AAAAAA e aps isto os dados sero escritos ou lidos pela CPU neste
endereo. Cada caracter especial ocupa 8 endereos na CGRAM.
3.1.8 Endereamento da DDRAM

Estabelece o endereo da DDRAM no contador de endereos (AC) como um


nmero binrio AAAAAAA e aps isto os dados sero escritos ou lidos pela CPU neste
endereo. Para os display de uma linha AAAAAAA varia de 80H a CFH. J para todos
os display de duas linhas varia de 80H a A7H para a primeira linha e de C0H a E7H
para a segunda linha.
3.1.9 Busy Flag (BF)

Busy Flag ou o bit 7 indica ao sistema onde est conectado o mdulo LCD, se o
controlador do mdulo est ocupado com alguma operao interna (BF=1), e neste
caso, no aceita nenhuma instruo at que BF volte para 0.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

94

Alm disso, permite a leitura do contedo do contador de endereos (AC)


expressa por AAAAAAA. O contador de endereos pode conter tanto endereo da
CGRAM como da DDRAM, depende neste caso, da instruo anterior.
3.1.10 Escrita de dados na DDRAM ou CGRAM

Escreve o byte AAAAAAAA tanto na CGRAM como na DDRAM, dependendo da


instruo anterior (que define o endereo). Aps a escrita, o endereo
automaticamente incrementado ou decrementado de uma unidade dependendo do
modo escolhido (ver item 3.1.3).
3.1.11 Leitura de dados na DDRAM ou CGRAM

Faz uma leitura na CGRAM ou na DDRAM, dependendo da instruo anterior


(que define o endereo). importante que precedendo a esta leitura seja executado a
instruo de estabelecimento do endereo da CGRAM ou DDRAM, pois caso contrrio
o dado lido invlido.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

95

3.2 TABELAS DE ENDEREOS DOS CARCTERES NA DDRAM


A seguir resumiremos os endereos da DDRAM (em hexadecimal) dos
caracteres da maioria dos mdulos LCD disponveis no mercado.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

96

OBS:
Para os mdulos de 04 linhas estamos considerando que existe um outro pino
de habilitao (como o pino 6) para as duas ltimas linhas, portando outros endereos
de hardware.
Antes de enviar uma instruo para escrita de dados no display, enviar antes
uma de endereamento na DDRAM, com o endereo onde deve ser escrito o caracter, tipo
um gotoxy().
3.3 TABELAS DE ENDEREOS DOS CARCTERES NA CGRAM
Os caracteres especiais previamente programado, durante a inicializao,
podem ser utilizados a qualquer tempo como se fossem caracteres normais, lembrando
que os endereos bases em hexadecimal para gravao dos caracteres especiais, na
maioria dos mdulos LCD, so respectivamente: 40, 48, 50, 58, 60, 68, 70 e 78. Cada
caracter especial ocupa 8 (oito) endreos.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

97

Tabela 7 - Caracter especial {} na CGRAM


Isto significa que para utilizarmos o caracter gravado no endereo base 50,
durante a inicializao ou reset do sistema, teremos que escrevermos 8 bytes entre os
endereos 50 e 57, para construirmos o caracter. Para ilustrar este procedimento,
supor que queiramos construir o caracter {} no endereo base 50. Neste caso,
devemos construir o mapa deste caracter especial como mostrado na Tabela 7
(supondo estar trabalhando com matriz 7x5 e com auto incremento de endereo a cada
escrita). Observe que o ltimo endereo sempre ser 00, pois esta posio sempre
ocupada pelo cursor.

4 INICIALIZAO DOS MDULOS LCD


Toda vez que alimentamos o mdulo LCD deve ser executado o procedimento
de inicializao, que consiste no envio de uma seqncia de instrues para configurar
o modo de operao para execuo de um dado programa de interfaceamento. Em
muitos display este procedimento ocorre automaticamente, dentro de condies
especficas que envolve temporizaes mnimas referente a transio do nvel lgico 0
para 1, ao ligarmos a fonte. Em caso de dvidas, recomendamos o envio destas
instrues aps o reset do sistema.

a) Inicializao para sistemas 8 bits de dados (5 instrues)


Entre as duas primeiras instrues recomendamos um delay de 15 mS. As
demais instrues podem ser escritas aps checar o Busy Flag.

b) Inicializao para sistemas 4 bits de dados (5 instrues)


Entre as quatro primeiras instrues recomendamos um delay de 15 mS. As
demais instrues podem ser escritas aps checar o Busy Flag. Estes bits (nible)
devem estar conectados aos pinos 11, 12.13 e 14.
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

98

5 ROTEIRO PARA PROGRAMAO


A seguir passaremos a descrever um resumo dos procedimentos para utilizao
de um mdulo ou display LCD:
1_ Ao energizar o mdulo ajuste o potencimetro de controle do brilho ou
contraste at obter a visualizao da matriciao na primeira linha para mdulo de
duas linhas ou at a matriciao de meia linha para mdulos de uma linha.
2_ Alguns mdulos de uma linha s funcionam com a instruo 38 ao invs de
30, conforme instrues de inicializao.
3_ O sinal de Enable (pino 6) dever ser gerado conforme a temporizao
mostrada na Figura 2. Os cdigos de dados ou de instrues s sero processados
pelo processador do mdulo aps a descida do sinal do Enable.
4_ Para ajustar a velocidade de comunicao entre a CPU do usurio e o
mdulo LCD existem duas possibilidades:
Intercalar uma rotina de atraso de aproximadamente 15 mS entre as
instrues.
Fazer a leitura do Busy Flag antes do envio de cada instruo e s enviar
quando o mesmo for 0. Neste caso, a nica exceo ser durante a inicializao.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

99

1_ Durante a inicializao enviar a seqncia correta das instrues de


inicializao conforme item 3.4
2_ Para programar caracteres na CGRAM, faa inicialmente o endereamento
da mesma.
3_ Aps a escrita de dados na CGRAM envie a instruo 01, para posicionar o
cursor.
4_ Para escrever os caracteres especiais previamente gravados na CGRAM,
utilize os cdigos de 00 at 07 correspondente aos endereos bases de 40, 48 at 78
em hexa.

6 COMANDOS TEIS

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

100

Obs:
Aps o endereamento da CGRAM, o cursor se desloca para a primeira posio
da segunda linha (ou metade), portanto recomendado enviar a instruo 01 ou limpa
display e cursor home.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

101

7 CUIDADOS ESPECIAIS COM MDULOS LCD


a ) MANUSEIO
Somente retire o mdulo de sua embalagem protetora imediatamente antes de
sua instalao No guarde os mdulos em recintos de alta temperatura e alta
umidade. A temperatura de armazenamento dever estar compreendida entre 5 e 30
oC.
O LCD coberto por uma lmina plstica polarizada a qual no pode ser
riscada. Cuidado em seu manuseio. Para a limpeza da lmina utilize cotonetes
embebido em benzina. No utilize outros tipos de solventes.
Observe cuidadosamente os procedimentos de controle anti-esttico quando
manusear os mdulos. Eles incorporam circuitos integrados CMOS LSI os quais so
sensveis descarga eletrosttica. No toque nos terminais do conector, trilhas do
circuito impresso e/ou terminais do CI.
b) INSTALAO
Nunca desmonte o mdulo
Use uma estao de solda aterrada para soldagem de conectores ou terminais.
montador dever tambm ser convenientemente aterrado.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

102

Sempre que o projeto o permita, instale o mdulo atrs de uma janela protetora
de plstico ou vidro.
Somente retire a fita adesiva que protege a lmina plstica frontal
imediatamente antes de seu uso.

8 OPERAO
Nunca instale ou desconecte o mdulo com sua alimentao ligada.
Sempre opere os mdulos respeitando sua gama de temperatura de operao.
Observe cuidadosamente os valores das tenses de alimentao e os nveis
dos sinais de controle.
Ajuste a tenso no pino 3 (V0) para obter o contraste mais conveniente para
uma dada aplicao.

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

103

9 Software de Teste do LCD

;****************** Programa de Escrita em LCD *******************


;*

;*

POR: MILTON BARREIRO JUNIOR

;*

DATA: JUNHO DE 2006

;************************************************************************

;******************** Declarao de Variveis ***********************


;*

DEFINIO DOS I/O'S DE CONEXO DO LCD

;************************************************************************
DISPLAY

EQU

P2

;Define port P2 como bits de dados do LCD

RS

EQU

P3.5

;Define P3.5 como bit RS do LCD

RW

QUE

P3.6

;Define P3.6 como bit RW do LCD

EN

EQU

P3.7

;Define P3.7 como bit EN do LCD

ORG

0000H

LJMP START

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

START: MOV

ORG

0050H

SP,

#40H

104

;Ajusta Stack Pointer

;************************** Parmetros do LCD **************************


;*

DEFINE MODO DE OPERAOO DO LCD

;****************************************************************************
CLR

EN

;Bit EN=0

CLR

RS

;Bit RS=0

CLR

RW

;Bit RW=0

MOV

A,

#38H

LCALL CMD
MOV

A,

;Escreve comando no LCD


#0EH

LCALL CMD
MOV

A,

A,

;Liga LCD e ativa cursor


;Escreve comando no LCD

#06H

LCALL CMD
MOV

;Define LCD como matriz 7x5 pixels e 8 bits de dados

;Cursor deslocando para a direita


;Escreve comando

#01H

LCALL CMD

;Limpa LCD
;Escreve comando

;******************************** Escreve no LCD *******************************


;*

ROTINA DE ESCRITA DE MENSAGENS NO LCD

;***********************************************************************************
WRITE:

MOV

A,

#80H

;Posiciona LCD no primeiro caractere na primeira linha

LCALL CMD

;Escreve comando

MOV

;Movimenta inicio da tabela da primeira mensagem para

DPTR, #MSG1

o DPTR
LCALL MSG
MOV

A,

;Escreve primeira mensagem


#0C0H

;Posiciona LCD no primeiro caractere da segunda linha

LCALL CMD

;Escreve comando

MOV

;Movimenta inicio da tabela da segunda mensagem para

DPTR, #MSG2

o DPTR
LCALL MSG

;Escreve segunda mensagem

LJMP WRITE
;************************* Escreve Comandos no LCD *************************
;*

ENVIA COMANDOS DE ESCRITA NO LCD

;***********************************************************************************
CMD:

SETB EN

Milton Barreiro Junior ETE Getlio Vargas

;Esse bloco de instrues

Microcontrolador 8051 Teoria e Prtica

105

CLR

RS

;responsvel pela escrita de

MOV

DISPLAY,A

;comandos e dados no LCD

LCALL DELAY
CLR

EN

LCALL DELAY
RET

MSG:

MOV

WRCHAR:
INC

R1,

#00H

MOV

A,

R1

R1

MOVC A,

@A+DPTR

CJNE A,

#'$',

NEXTCHAR

RET
NEXTCHAR:

SETB EN
SETB RS
MOV

DISPLAY,A

LCALL DELAY
CLR

EN

LCALL DELAY
LJMP WRCHAR
;******************************** Rotina de Delay ********************************
;* ROTINA QUE CONTA TEMPO DE 10mS PARA ESCRITA NO LCD *
;***********************************************************************************
DELAY:

MOV

TMOD, #11H

;Essa rotina tem como objetivo

MOV

TCON, #00H

;contar tempo de 10mS de atrazo

MOV

TH0,

#0D8H

;para que o LCD seja capaz de

MOV

TL0,

#0F0H

;ler comandos e dados

CLR

TF0

SETB TR0
JNB

TF0,

CLR

TF0

CLR

TR0

RET
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

106

;****************************** Tabela de Mensagens **************************


;*

MENSAGENS A SEREM ESCRITAS NO LCD

;*

DEVEM SER ESCRITAS NO FINAL DO PROGRAMA

*
*

;***********************************************************************************
MSG1:

DB

"

TESTE DO

MSG2:

DB

"

LCD OK

$"
$"

END

;Tabela da primeira mensagem


;Tabela da segunda mensagem
;Fim de programa

10 Software de teste do teclado

; ROTINA DE LEITURA DE TECLADO MATRICIAL 4X3, KIT ETE JORGE STREET


; CONFIGURAO DO TECLADO
; P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
; L4

L3

L2

L1

C3

C2

C1

TECLADO

EQU

P1

;DEFINIR END PORT ONDE EST O TECLADO

MARCTEC

EQU

23H

;MARCADOR DE MEMORIA

; OBS: ALTERA REGS A, ACC E R7

MOV SP,#40H
; ********************** EXEMPLO DE ROTINA DE LEITURA DE TECLADO ********************
VOLTA:

LCALL VETEC
CJNE A,

#0FH, ESC

LJMP VOLTA
ESC:

MOV

P3,

LJMP VOLTA
;*********************************************************************************************************
;*********** SUBROTINAS DO TECLADO (COLOCAR NO FINAL DO PROGRAMA) **********
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

107

; RETORNO TECLA ACIONADA OU OFH SEM TECLA


VETEC:

MOV

TECLADO,

#0FH

NOP
NOP
MOV

A,

CJNE A,

TECLADO
#0FH, VETEC1

RET
VETEC1:

LCALL DETEC
PUSH ACC
LCALL ESTEC
POP

ACC

RET

DETEC:

MOV

MARCTEC,

#7FH

DETEC1:

MOV

TECLADO,

MARCTEC

NOP
NOP
MOV

A,

TECLADO

CJNE A,

MARCTEC,

MOV

A,

MARCTEC

RR

MOV

MARCTEC,

CJNE A,

VETEC0

#0F7H, DETEC1

RET
VETEC0:

VETECA:

MOV

MARCTEC,

MOV

DPTR, #TABTEC

MOV

R7,

#00H

MOV

A,

R7

MOVC A,

@A+DPTR

CJNE A,

MARCTEC,

MOV

R7

A,

RET
VETECB:

INC R7

Milton Barreiro Junior ETE Getlio Vargas

VETECB

Microcontrolador 8051 Teoria e Prtica


SJMP VETECA
ESTEC:

MOV

R0,

#02H

LCALL AT50R0
VESTEC:

MOV

TECLADO,

#0FH

NOP
NOP
MOV

A,

CJNE A,

TECLADO
#0FH, VESTEC

RET

;****************************** SUBROTINA DE ATRASO 50MS X R0 ******************************


AT50R0:

MOV

TH0,

#3CH

MOV

TL0,

#0B0H

MOV

TMOD, #11H

SETB TR0

ATR1:

CLR

TF0

JNB

TF0,

DJNZ R0,
CLR

TF0

CLR

TR0

ATR1
AT50R0

RET
;*********************************************************************************************************
;**************** TABELA DE TECLAS (COLOCAR NO FINAL DO PROGRAMA) ***************
TABTEC: DB 7BH,0EDH,0EBH,0E7H,0DDH,0DBH,0D7H,0BDH,0BBH,0B7H,7DH,77H
;*********************************************************************************************************
END

11 Rotina exemplo de transmisso serial

;******************************** Programa de Transmisso Serial **********************************


Milton Barreiro Junior ETE Getlio Vargas

108

Microcontrolador 8051 Teoria e Prtica

109

;*

POR: MILTON BARREIRO JUNIOR

;*

DATA: OUTUBRO DE 2006

;*********************************************************************************************************
;************************************* Declarao de Variveis ***************************************
;*

CONFIGURAO DO CANAL SERIAL E TAXA DE TRANSMISSO

;*********************************************************************************************************
ORG

0000H

LJMP START

ORG

0050H

SP,

#40H

MOV

TCON, #00H

;Zera Flags dos Timers

MOV
para clculo da Taxa)

PCON, #00H

;Define PCON.7 como ZERO (SMOD = 0

MOV

TMOD, #21H

;Configura Timer 1 no modo 2 e Timer 0

MOV

TH1,

#152

;Carrega TH1 e TL1 com 152d

MOV

TL1,

#152

;para 300bps de Taxa

MOV

SCON, #40H

START: MOV

;Ajusta Stack Pointer

no modo 1

;Configura Canal Serial no modo 1

SETB TR1
;*************************************** Rotina de Transmisso **************************************
DENOVO:

MOV

DPTR, #MSG

PROXIMO:

CLR

MOVC A,

@A+DPTR

CJNE A,

#'$',

ENVIA

LJMP DENOVO
ENVIA:

MOV

SBUF, A

JNB

TI,

CLR

TI

INC

DPTR

LJMP PROXIMO
;*********************************************************************************************************
;*********************************** Tabela de String a Transmitir ***********************************
MSG:

DB

" Teste de Transmisso Serial $"

Milton Barreiro Junior ETE Getlio Vargas

;Tabela da primeira mensagem

Microcontrolador 8051 Teoria e Prtica

110

;********************************************************************************************************
END

;Fim de programa

12 Programa exemplo converso BCD para 7 Segmentos

;**************** PROGRAMA CONVERSO BCD PARA 7 SEGMENTOS ******************


;*

POR:

MILTON BARREIRO JUNIOR

EM:

JUNHO DE 2006

;*****************************************************************************************************
;*****************************************************************************************************
;*

ROTINA DE CONVERSO DE BCD PARA 7 SEGMENTOS

;*****************************************************************************************************
CONVERTE:

ANL

A,

MOV

DPTR, #TABDISP

MOVC A,

#00001111B

;ACC Recebe o valor BCD


;a ser convertido de

@A+DPTR

;para 7 Segmentos

RET
;*****************************************************************************************************
;*****************************************************************************************************
;*

TABELA DE CONVERSO DECIMAL E HEXADECIMAL PARA 7 SEGMENTOS

;*****************************************************************************************************
TABDISP:

DB

11000000B

;Tabela

DB

11111001B

;de

DB

10100100B

;valores

DB

10110000B

;para

DB

10011001B

;display

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

111

DB

10010010B

;7 segmentos

DB

10000010B

;anodo

DB

11111000B

;comum

DB

10000000B

;que

DB

10011000B

;vai

DB

11001000B

;de

DB

10000011B

;zero a nove em decimal,

DB

11000110B

;at

DB

10100001B

;F

DB

10000110B

;em

DB

11000000B

;Hexadecimal

END

;Indica fim de programa ao compilador

13 Exemplo didtico de um frequencmetro (0 999Hz)

;*********************** PROGRAMA FREQUENCMETRO *************************


;*
;*

ESSE FREQUENCMETRO MEDE E INDICA VALORES AT 999Hz


POR: MILTON BARREIRO JUNIOR

EM: NOVEMBRO DE 2006

*
*

;******************************************************************************************
;UFREQ

EQU

R1

;Incremento de unidade

;DFREQ

EQU

R2

;Incremento de dezena

;CFREQ

EQU

R3

;Incremento de centena

;******************************************************************************************
;*

RESERVA ENDEREOS DOS VETORES DE INTERRUPES

;******************************************************************************************
ORG

0000H

LJMP INICIO
ORG

000BH

LJMP INTT0
ORG

;Busca linha de inicio

;Vetor de Int Timer 0

0013H

LJMP INTE1

;Vetor de Int Ext 1

;*******************************************************************************************
;*

CARREGA VALORES INICIAIS DAS VARIVEIS

;*******************************************************************************************
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

INICIO:

ORG

0050H

MOV

IP,

#00000010B

112

;Prioriza Int T0

SETB ET0

;Habilita Int T0

SETB EX1

;Habilita Int EX1

SETB EA

;Habilita Int Global

MOV

SP,

#40H

;Ajusta Stack Pointer

MOV

TMOD, #11H

;Configura T0 e T1 no Modo 1

MOV

TCON, #00000101B

;Modo de atuao das Interrupes

MOV

TH0,

#3CH

;Carrega inicio de contagem para

MOV

TL0,

#0B0H

;timer 0 contar 50mS

SETB TR0

;*****************************************************************************************
;*

ROTINA DE RESET DO FREQUENCMETRO

;*****************************************************************************************
MOV

R0,

#00H

MOV

R1,

#00H

MOV

R2,

#00H

MOV

R3,

#00H

MOV

R4,

#00H

MOV

R5,

#00H

MOV

R6,

#00H

;*****************************************************************************************
;*

ROTINA DE MULTIPLEXAO DOS DISPLAYS

;*

MOSTRA VALORES DE FREQUENCIA MEDIDA

;*****************************************************************************************
DISPLAY:

MOV

A,

R4

;Carrega no ACC valor de Unidade de Segundos

LCALL CONVERTE

;Converte Decimal para 7 Segmentos

SETB P2.2

;Desliga Displays no utilizados

MOV

P0,

CLR

P2.0

;Mostra Unidade de Segundos


;Liga Digito Unidade de Segundos

ACALL TEMPO

;Tempo Display ativo

MOV

;Carrega no ACC valor de Dezena de Segundos

A,

R5

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

113

LCALL CONVERTE

;Converte Decimal para 7 Segmentos

SETB P2.0

;Desliga Displays no utilizados

MOV

P0,

CLR

P2.1

;Mostra Dezena de Segundos


;Liga Digito Dezena de Segundos

ACALL TEMPO

;Tempo Display ativo

MOV

;Carrega no ACC valor dos Minutos

A,

R6

LCALL CONVERTE

;Converte Decimal para 7 Segmentos

SETB P2.1

;Desliga Displays no utilizados

MOV

P0,

CLR

P2.2

;Mostra Minutos
;Liga Digito Minutos

ACALL TEMPO

;Tempo Display ativo

LJMP DISPLAY
;******************************************************************************************
;*

TRATAMENTO DA INTERRUPO DO TIMER 0 E CRONMETRO

;******************************************************************************************
INTT0:

CLR

TR0

;Trata interrupo Int T0

MOV

TH0,

#3CH

MOV

TL0,

#0B0H

;para base de tempo de 1s

SETB TR0
INC

R0

CJNE R0,

#20,

MOV

A,

R1

MOV

R4,

MOV

A,

R2

MOV

R5,

MOV

A,

R3

MOV

R6,

MOV

R0,

#00H

MOV

R1,

#00H

MOV

R2,

#00H

MOV

R3,

#00H

SAI

Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

SAI:

114

RETI

;******************************************************************************************
;*

TRATAMENTO DA INTERRUPO EXTERNA INT_1

;******************************************************************************************
INTE1:

INC

ESC:

R1

CJNE R1,

#10,

MOV

R1,

#00

INC

R2

CJNE R2,

#10,

MOV

R2,

#00

INC

R3

CJNE R3,

#10,

MOV

#00

R3,

ESC

ESC

ESC

RETI

;******************************************************************************************
;*

ROTINA DE CONVERSO DE BCD PARA 7 SEGMENTOS

;******************************************************************************************
CONVERTE:

ANL

A,

MOV

DPTR, #TABDISP

MOVC A,

#00001111B

@A+DPTR

;Rotina de
;Converso
;Decimal para 7 Segmentos

RET
;******************************************************************************************
;*

TEMPO DE AMOSTRAGEM DOS DGITOS

;******************************************************************************************
TEMPO:

MOV

TH1,

#0D8H

;Carrega inicio de contagem para

MOV

TL1,

#0F0H

;timer 1 contar 10mS

CLR

TF1

SETB TR1
JNB

TF1,

RET
;******************************************************************************************
;* TABELA DE CONVERSO DECIMAL E HEXADECIMAL PARA 7 SEGMENTOS *
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

115

;******************************************************************************************
TABDISP:

DB

11000000B

;Tabela

DB

11111001B

;de

DB

10100100B

;valores

DB

10110000B

;para

DB

10011001B

;display

DB

10010010B

;7 segmentos

DB

10000010B

;anodo

DB

11111000B

;comum

DB

10000000B

;que

DB

10011000B

;vai

DB

11001000B

;de

DB

10000011B

;zero a nove em decimal,

DB

11000110B

;at

DB

10100001B

;F

DB

10000110B

;em

DB

11000000B

;Hexadecimal

END

Milton Barreiro Junior ETE Getlio Vargas

;Indica fim de programa ao compilador

Microcontrolador 8051 Teoria e Prtica

116

14 Exemplo de rotina para teclado matricial 4x4

;************************ Programa de Teclado Matricial ************************


;*

POR: MILTON BARREIRO JUNIOR

;*

DATA: OUTUBRO DE 2006

;*

FONTE: www.8052.com

;************************************************************************************
;******************** CONFIGURAO DO TECLADO (MATRIZ 4X4) *********************
;
;P1.0 ---------------------------\
;

;P1.1 -----------------------\
;

| |

| |

;P1.2 -------------------\
;
;P1.3 ---------------\
;

;
;P1.7 -------------- 1 - 2 - 3 - A --;
;P1.6 -------------- 4 - 5 - 6 - B --Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

117

;
;P1.5 -------------- 7 - 8 - 9 - C --;
;P1.4 -------------- * - 0 - # - D --;

;
;*************************************************************************************
;********************** Define o Port e Memoria das Teclas *********************
KBOARD

EQU

P1

;Teclado Matricial em P1

MEMKEY

EQU

R1

;Memria de tecla pressionada

;*************************************************************************************
MOV

SP,

#40H

;Ajusta STACK POINTER

;******************* Loop de Leitura do Teclado Matricial **********************


KEY_B:

LCALL BUSCA
CJNE A,

#0FH, SAIDA

LJMP START
SAIDA:

MOV

P3,

LJMP KEY_B
;*************************************************************************************
;************************ SUBROTINAS DO TECLADO *************************
;
;

devem ser inserida no final do programa


RETORNA TECLA ACIONADA OU OFH SEM TECLA ACIONADA

;*************************************************************************************
BUSCA:

MOV

KBOARD,

#0FH

;Carrega P1 com 0FH

A,

KBOARD

;Le teclado e salva no Acumulador

NOP
NOP
NOP
NOP
MOV

CJNE A,

#0FH, SELECT

leitura
RET
Milton Barreiro Junior ETE Getlio Vargas

;Se valor lido igual 0Fh, retorna para loop de

Microcontrolador 8051 Teoria e Prtica

SELECT:

118

LCALL LOOP
PUSH A
LCALL DEBOU
POP

RET

LOOP:

MOV

MEMKEY,

#7FH

LOOP1:

MOV

KBOARD,

MEMKEY

NOP
NOP
NOP
NOP
MOV

A,

KBOARD

CJNE A,

MEMKEY,

MOV

A,

MEMKEY

RR

MOV

MEMKEY,

CJNE A,

PROCURA

#0F7H, LOOP1

RET

PROCURA:

NOVO:

MOV

MEMKEY,

MOV

DPTR, #TABKEY

MOV

R7,

#00H

MOV

A,

R7

MOVC A,

@A+DPTR

CJNE A,

MEMKEY,

MOV

R7

A,

PROXIMA

RET

PROXIMA:

INC

R7

LJMP NOVO
;*******************************************************************************
Milton Barreiro Junior ETE Getlio Vargas

Microcontrolador 8051 Teoria e Prtica

119

;************************** DEBOUNCE DE 50mS **************************


DEBOU:

MOV

TH0,

#3CH

MOV

TL0,

#0B0H

MOV

TMOD, #11H

SETB TR0
CLR

TF0

JNB

TF0,

CLR

TF0

CLR

TR0

RET
;******************************************************************************

;************************** TABELA DE TECLAS ***************************


TABKEY:

DB

0EBH

;Tecla 0

DB

77H

;Tecla 1

DB

7BH

;Tecla 2

DB

7DH

;Tecla 3

DB

0B7H

;Tecla 4

DB

0BBH

;Tecla 5

DB

0BDH

;Tecla 6

DB

0D7H

;Tecla 7

DB

0DBH

;Tecla 8

DB

0DDH

;Tecla 9

DB

0E7H

;Tecla *

DB

0EDH

;Tecla #

DB

7EH

;Tecla A

DB

0BEH

;Tecla B

DB

0DEH

;Tecla C

DB

0EEH

;Tecla D

;*****************************************************************************
END

Milton Barreiro Junior ETE Getlio Vargas

;Final do Programa

Microcontrolador 8051 Teoria e Prtica

15 Programa exemplo de controle digital de temperatura

;****************************************************
;

Controle digital de temperatura

Software implementado por alunos do

curso de Automao Industrial do CEFET (2006)

;
;

Autores:

Alessander Martins Leite

Flvio Roberto dos Santos

Marcio Litwin Camargo

;****************************************************
ORG

0000H

;Inicio do programa

MOV

PSW, #10H

MOV

R1,

#3CH

;Temperatura=60 Graus Celsius

LJMP COMECO
ORG

COMECO:

0030H

MOV

SP,

#40H

CLR
P2.5
Milton Barreiro Junior ETE Getlio Vargas

120

Microcontrolador 8051 Teoria e Prtica


CLR

P2.6

CLR

P2.7

LCALL INIC_LCD
LCALL CLEAR_LCD
LCALL TEXTOS
LCALL LINHA2
LCALL TESTOC
LCALL POS0
LCALL SET_TEMP
LCALL VER_TEMP

LJMP $
;****************************************************
;

Inicializa Display LCD

;****************************************************
INIC_LCD:

SETB P2.5
CLR

P2.7

MOV

P0,

#38H

LCALL TEMPO0
CLR

P2.5

LCALL ESPERA_LCD

SETB P2.5
CLR

P2.7

MOV

P0,

#0C0H

LCALL TEMPO0
CLR

P2.5

LCALL ESPERA_LCD

SETB P2.5
CLR

P2.7

MOV

P0,

#06H

Milton Barreiro Junior ETE Getlio Vargas

121

Microcontrolador 8051 Teoria e Prtica


LCALL TEMPO0
CLR

P2.5

LCALL ESPERA_LCD

RET

;****************************************************
;

Rotina para limpar o LCD

;****************************************************
CLEAR_LCD: SETB P2.5
CLR

P2.7

MOV

P0,

#01H

LCALL TEMPO0
CLR

P2.5

LCALL ESPERA_LCD

RET

;****************************************************
;

Rotina para mudar para linha 2 do LCD

;****************************************************
LINHA2:

SETB P2.5
CLR

P2.7

MOV

P0,

#0C0H

LCALL TEMPO0
CLR

P2.5

LCALL ESPERA_LCD

RET

;****************************************************
;
;

Rotina para mudar de posio para


ajustar a temperatura

Milton Barreiro Junior ETE Getlio Vargas

122

Microcontrolador 8051 Teoria e Prtica


;****************************************************
POS0:

PUSH A
SETB P2.5
CLR

P2.7

MOV

P0,

#8CH

LCALL TEMPO0
CLR

P2.5

LCALL ESPERA_LCD
POP

RET

;****************************************************
;

Rotina para mudar de posio para

controlar a temperatura

;****************************************************
POS1:

PUSH A
SETB P2.5
CLR

P2.7

MOV

P0,

#0CCH

LCALL TEMPO0
CLR

P2.5

LCALL ESPERA_LCD
POP

RET

;****************************************************
;

Rotina TEMPO0 (1 segundo)

;****************************************************
TEMPO0:

MOV

PSW, #18H

MOV

R0,

MOV

TMOD, #01H

#02H

Milton Barreiro Junior ETE Getlio Vargas

123

Microcontrolador 8051 Teoria e Prtica

NAO_AC0:

MOV

TH0,

#0FFH

MOV

TL0,

#0FAH

SETB TR0

ESP0:

JNB

TF0,

CLR

TF0

CLR

TR0

DJNZ R0,
MOV

ESP0

NAO_AC0

PSW, #10H

RET
;****************************************************
;

Rotina TEMPO1

;****************************************************

TEMPO1:

NAO_AC1:

MOV

PSW, #18H

MOV

R0,

#01H

MOV

TMOD, #01H

MOV

TH0,

#0FFH

MOV

TL0,

#0FAH

SETB TR0

ESP1:

JNB

TF0,

CLR

TF0

CLR

TR0

DJNZ R0,

MOV

ESP1

NAO_AC1

PSW, #10H

RET

Milton Barreiro Junior ETE Getlio Vargas

124

Microcontrolador 8051 Teoria e Prtica


;****************************************************
;

Rotina de texto (ajuste)

;****************************************************

TEXTOS:
AS:

MOV

MOV

DPTR, #TEMPERATURAS

A,

#00H

MOVC A,
JZ

@A+DPTR

FIMS

LCALL ESCRT

FIMS:

INC

DPTR

JMP

AS

RET

;****************************************************
;

Rotina de texto (controle)

;****************************************************

TEXTOC:
AC:

MOV

MOV

DPTR, #TEMPERATURAC

A,

#00H

MOVC A,
JZ

@A+DPTR

FIMC

LCALL ESCRT

FIMC:

INC

DPTR

JMP

AC

RET

;****************************************************
;

Rotina de texto

;****************************************************

AU_TS:

MOV

DPTR, #ATEMPERATURA

Milton Barreiro Junior ETE Getlio Vargas

125

Microcontrolador 8051 Teoria e Prtica


AT:

MOV

A,

MOVC A,
JZ

#00H
@A+DPTR

AFIM

LCALL ESCRT

AFIM:

INC

DPTR

JMP

AT

RET

;****************************************************
;

Rotina para setar a temperatura

;****************************************************

SET_TEMP:

MOV

PSW, #10H

MOV

R0,

#11H

MOV

A,

@R0

LCALL ASCI
LCALL ESCR

RET

ESCR:

MOV

PSW, #10H

MOV

R0,

ESCRV:

#17H

SETB P2.5
SETB P2.7
MOV

A,

@R0

ADD

A,

#30H

MOV

P0,

LCALL TEMPO0
CLR

P2.5

LCALL ESPERA_LCD
DEC

R0

CJNE R0,

#14H, ESCRV

Milton Barreiro Junior ETE Getlio Vargas

126

Microcontrolador 8051 Teoria e Prtica


LCALL TEMPO0

RET

;****************************************************
;

Rotina de escrita

;****************************************************

ESCRT:

SETB P2.5
SETB P2.7
MOV

P0,

LCALL TEMPO0
CLR

P2.5

LCALL ESPERA_LCD

RET

;****************************************************
;

Rotina de espera LCD

;****************************************************

ESPERA_LCD: SETB P2.5


SETB P2.6

ESP:

CLR

P2.7

MOV

P0,

#0FFH

LCALL TEMPO1
JB

P0.7,

CLR

P2.5

CLR

P2.7

CLR

P2.6

ESP

RET

Milton Barreiro Junior ETE Getlio Vargas

127

Microcontrolador 8051 Teoria e Prtica


;****************************************************
;

Rotina que le P3 e converte para ASCII

;****************************************************

VER_TEMP:

MOV

A,

P3

MOV

PSW, #10H

LCALL VER_C
LCALL ASCI
LCALL POS1
LCALL ESCR
LCALL M_T_S

JMP

VER_TEMP

;****************************************************
;

Rotina para alterar a temperatura

;****************************************************

M_T_S:

JNB

P2.0,

AU_T

RET

AU_T:

LCALL INIC_LCD
LCALL CLEAR_LCD
LCALL AU_TS
LCALL POS0
LCALL I_D

;****************************************************
;

Incrementa ou decrementa temperatura

;****************************************************

I_D:

MOV

PSW, #10H

Milton Barreiro Junior ETE Getlio Vargas

128

Microcontrolador 8051 Teoria e Prtica

V_V:

JNB

P2.0,

JB

P2.1,

D_TS

JNB

P2.1,

LCALL MAI_T
LCALL SET_TEMP
LJMP I_D

MAI_T:

CJNE R1,

#0FFH, MAI_TN

RET

MAI_TN:

INC

R1

JB

P2.2,

S_TS

JNB

P2.2,

RET

D_TS:

LCALL MEI_T
LCALL SET_TEMP
LJMP I_D
S_TS:

JB

P2.0,

V_V

JNB

P2.0,

LCALL COMECO

MEI_T:

CJNE R1,

#00H, MEI_TN

RET

MEI_TN:

DEC

R1

RET

;****************************************************
Milton Barreiro Junior ETE Getlio Vargas

129

Microcontrolador 8051 Teoria e Prtica


;

Converte para cdigo ASCII

;****************************************************

ASCI:

MOV

PSW, #10H

MOV

R5,

#00H

MOV

R6,

#00H

MOV

R7,

#00H

COMPA:

CJNE A,

#00H, UND

RET

UND:

DEC

INC

R5

CJNE R5,
INC

R6

MOV

R5,

CJNE R6,
INC

R7

MOV

R6,

#0AH, COMPA

#00H
#0AH, COMPA

#00H

LJMP COMPA

;****************************************************
;

Rotina para verificar a temperatura

;****************************************************

VER_C:

MOV

PSW, #10H

PUSH A
PUSH 11H
CJNE A,
CLR

P1.0

POP

11H

POP

11H,

Milton Barreiro Junior ETE Getlio Vargas

130

Microcontrolador 8051 Teoria e Prtica


RET

N:

JZ

CJNE R1,
CLR

P1.0

POP

11H

POP

#00H, DIF

RET

X:

SETB P1.0
POP

11H

POP

RET

DIF:

DEC

DEC

R1

JZ

CJNE R1,
CLR

P1.0

POP

11H

POP

#00H, DIF

RET

;****************************************************
;

Tabelas de mensagens

;****************************************************

TEMPERATURAS:

DB

"Temp_Setada:",00H

TEMPERATURAC:

DB

"Temp_Contr.:",00H

Milton Barreiro Junior ETE Getlio Vargas

131

Microcontrolador 8051 Teoria e Prtica

ATEMPERATURA:

DB

"Mudar_Temp.:",00H

END

Milton Barreiro Junior ETE Getlio Vargas

132

Das könnte Ihnen auch gefallen