Professional Documents
Culture Documents
So Paulo
2006
ii
So Paulo
2006
Milton Barreiro Junior ETE Getlio Vargas
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
iv
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
Controle de interrupes;
Gerador de clock;
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:
Gerador de clock;
microcontrolador.
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.
10
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
acessados diretamente.
Ambas as memrias,
O registrador de
Pointer.
12
Este modo de
Add A, 7FH
Add A, @R0
Add A, R7
Add A, #127
(endereamento direto)
(endereamento indireto)
(endereamento por registrador)
(constante imediata)
13
Mnemnico
Operao
Modo de
Endereamento
Tempo de
Execuo
ADD A, <byte>
A = A + <byte>
ADDC A, <byte>
A = A + <byte> + C
SUBB A, <byte>
A = A - <byte> - C
INC A
A= A+ 1
Acumulador
INC <byte>
<byte> = <byte> + 1
INC DPTR
DPTR = DPTR + 1
Data Pointer
DEC A
A= A- 1
Acumulador
DEC <byte>
<byte> = <byte> - 1
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
14
Mnemnico
Operao
ANL A, <byte>
A = A and <byte>
ANL <byte>, A
ANL <byte>,
#DATA
ORL A, <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
RLC A
RR A
RRC A
SWAP A
A = A xor <byte>
Modos de
Operao
Tempo de
Execuo
Acumulador
Acumulador
Acumulador
1
1
1
Acumulador
Acumulador
Acumulador
1
1
Acumulador
1
2
1
2
1
2
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>
MOV <dest>, A
<dest> = A
MOV <dest>,
<fonte>
<dest> = <fonte>
MOV DPTR,
#DATA
Constante
imediata
PUSH <fonte>
Direto
POP <dest>
Direto
XCH A, <byte>
XCHD A, @RI
Indireto
16
Mnemnico
Operao
8 Bits
MOVX A, @Ri
8 Bits
MOVX @Ri, A
16 Bits
MOVX A, @DPTR
16 Bits
MOVX @DPTR, A
17
18
Mnemnico
Operao
Tempo de
Execuo
ANL C, bit
C = C and bit
ANL C, /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
JC REL
Jump If C = 1
JNC REL
Jump If C = 0
JB bit, REL
Jump If bit = 1
Jump If bit = 0
endereo de destino. A instruo SJMP (Short Jump) composta por dois bytes,
Milton Barreiro Junior ETE Getlio Vargas
19
Operao
Tempo de
Execuo
JMP end
JMP @A + DPTR
CALL end
RET
Retorno de subrotina
RETI
Retorno de interrupo
NOP
Sem operao
20
Mnemnico
Operao
Modo de
Endereamento
Tempo de
Execuo
JZ rel
Salto se A=0
Acumulador
JNZ rel
Salto se A no 0
Acumulador
Decrementa e salta se no
0
Direto
Registrador
Salta se A diferente de
<byte>
Direto Imediato
CJNE <byte>,
#DATA, rel
Indireto
Registrador
21
ES
ET1
EX1
ET0
EX0
22
O contrrio no
PS
PT1
PX1
PT0
PX0
23
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.
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
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
26
CY
AC
F0
RS1
RS0
OV
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
27
SM1
SM2
REN
TB8
RB8
TI
RI
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
28
29
PT2
PS
PT1
PX1
PT0
PX0
ET2
ES
ET1
EX1
ET0
EX0
30
M0
Modo de Operao
0
0
1
1
0
1
0
1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
31
SM1
SM2
REN
TB8
RB8
TI
RI
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
GF1
GF0
PD
IDL
32
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.
33
As instrues que
realizam a leitura no latch, lem este valor, processam, e depois se for necessrio
rescrevem-no no latch.
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.
34
35
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
36
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
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:
38
39
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.
41
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.
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
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.
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
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
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.
46
Fonte
Endereo
IE0
TF0
IE1
TF1
Serial
0003H
000BH
0013H
001BH
0023H
47
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
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
48
ESR in Ohms
600
500
400
300
200
100
0
0
12
16
20
49
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.
50
51
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
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
EXECUTVEL
.HEX
53
54
X8051 [ENTER]
Listing Destination (..........): D [ENTER]
Generate cross reference [ENTER]
Input file name:.........nome do arquivo.ASM [ENTER]
Milton Barreiro Junior ETE Getlio Vargas
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: ******
55
56
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.
58
- 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
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
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
b0
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
24
31
ACALL End11
24
32
RETI
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
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
24
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
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
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
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
79
7A
7B
7C
7D
7E
7F
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
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
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
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
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
A7
A8
A9
AA
AB
AC
AD
AE
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
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
Opcode
Mnemnico
AF
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
B9
BA
BB
BC
BD
BE
BF
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)
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
67
Flags afetados
CY AC
0V
0
-
Opcode
Mnemnico
Funo
Bytes
Pulsos
C2
C3
CLR bit
CLR C
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
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
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
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
Opcode
EC
ED
EE
EF
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF
Mnemnico
69
Funo
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
70
71
INICIO:
VOLTA:
ORG 0000H
LJMP INICIO
ORG 0050H
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
DE 12MHz)
LJMP VOLTA
;**************************************************************
;
Rotina de Tempo de 1s
;**************************************************************
Milton Barreiro Junior ETE Getlio Vargas
DELAY:
REP:
MOV
MOV
MOV
SETB
JNB
CLR
DJNZ
CLR
RET
R0, #20
TH1, #3CH
TL1, #0AFH
TR1
TF1, $
TF1
R0, REP
TR1
72
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
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
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).
75
;************************************************************************************************
;
76
;**************************************************************************************************
;
;**************************************************************************************************
JB P0.4, L25 ;verifica se o elevador j estava no 1o andar.
ACALL DESCER ;leva o elevador inicialmente para o trreo.
L1:
L25:
;**************************************************************************************************
;
;**************************************************************************************************
ANDAR_1:
L4:
L3:
L5:
;************************************************************************************************
;
;************************************************************************************************
ANDAR_2:
L6:
L8:
L7:
L9:
77
;************************************************************************************************
ANDAR_3:
L10:
L12:
L11:
L13:
;************************************************************************************************
;
sub-rotina: SUBIR
;************************************************************************************************
SUBIR:
L20:
78
79
sub-rotina: DESCER
;************************************************************************************************
DESCER:
L21:
;************************************************************************************************
;
sub-rotina: PARAR
;************************************************************************************************
PARAR:
L22:
80
RET
TIMER0:
INT0:
L23:
APNDICE B
1 C ONSIDERAES INICIAIS
AT89S8252
81
2 MATERIAIS NECESSRIOS
3 OBTENO DO SOFTWARE
4 UTILIZAO DO SOFTWARE
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
d)
83
f)
g)
h)
84
mdulos
LCD
so
interfaces
de
sada
muito
til
em
sistemas
85
86
87
88
Endereo
R/W
RS
Descrio
4000
4001
4002
4003
03 PROGRAMAO / INSTRUES
89
90
91
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
92
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.
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.
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.
94
95
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.
97
98
99
6 COMANDOS TEIS
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.
101
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.
103
;*
;*
;************************************************************************
;************************************************************************
DISPLAY
EQU
P2
RS
EQU
P3.5
RW
QUE
P3.6
EN
EQU
P3.7
ORG
0000H
LJMP START
START: MOV
ORG
0050H
SP,
#40H
104
;****************************************************************************
CLR
EN
;Bit EN=0
CLR
RS
;Bit RS=0
CLR
RW
;Bit RW=0
MOV
A,
#38H
LCALL CMD
MOV
A,
LCALL CMD
MOV
A,
A,
#06H
LCALL CMD
MOV
#01H
LCALL CMD
;Limpa LCD
;Escreve comando
;***********************************************************************************
WRITE:
MOV
A,
#80H
LCALL CMD
;Escreve comando
MOV
DPTR, #MSG1
o DPTR
LCALL MSG
MOV
A,
LCALL CMD
;Escreve comando
MOV
DPTR, #MSG2
o DPTR
LCALL MSG
LJMP WRITE
;************************* Escreve Comandos no LCD *************************
;*
;***********************************************************************************
CMD:
SETB EN
105
CLR
RS
MOV
DISPLAY,A
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
MOV
TCON, #00H
MOV
TH0,
#0D8H
MOV
TL0,
#0F0H
CLR
TF0
SETB TR0
JNB
TF0,
CLR
TF0
CLR
TR0
RET
Milton Barreiro Junior ETE Getlio Vargas
106
;*
*
*
;***********************************************************************************
MSG1:
DB
"
TESTE DO
MSG2:
DB
"
LCD OK
$"
$"
END
L3
L2
L1
C3
C2
C1
TECLADO
EQU
P1
MARCTEC
EQU
23H
;MARCADOR DE MEMORIA
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
107
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
VETECB
MOV
R0,
#02H
LCALL AT50R0
VESTEC:
MOV
TECLADO,
#0FH
NOP
NOP
MOV
A,
CJNE A,
TECLADO
#0FH, VESTEC
RET
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
108
109
;*
;*
;*********************************************************************************************************
;************************************* Declarao de Variveis ***************************************
;*
;*********************************************************************************************************
ORG
0000H
LJMP START
ORG
0050H
SP,
#40H
MOV
TCON, #00H
MOV
para clculo da Taxa)
PCON, #00H
MOV
TMOD, #21H
MOV
TH1,
#152
MOV
TL1,
#152
MOV
SCON, #40H
START: MOV
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
110
;********************************************************************************************************
END
;Fim de programa
POR:
EM:
JUNHO DE 2006
;*****************************************************************************************************
;*****************************************************************************************************
;*
;*****************************************************************************************************
CONVERTE:
ANL
A,
MOV
DPTR, #TABDISP
MOVC A,
#00001111B
@A+DPTR
;para 7 Segmentos
RET
;*****************************************************************************************************
;*****************************************************************************************************
;*
;*****************************************************************************************************
TABDISP:
DB
11000000B
;Tabela
DB
11111001B
;de
DB
10100100B
;valores
DB
10110000B
;para
DB
10011001B
;display
111
DB
10010010B
;7 segmentos
DB
10000010B
;anodo
DB
11111000B
;comum
DB
10000000B
;que
DB
10011000B
;vai
DB
11001000B
;de
DB
10000011B
DB
11000110B
;at
DB
10100001B
;F
DB
10000110B
;em
DB
11000000B
;Hexadecimal
END
*
*
;******************************************************************************************
;UFREQ
EQU
R1
;Incremento de unidade
;DFREQ
EQU
R2
;Incremento de dezena
;CFREQ
EQU
R3
;Incremento de centena
;******************************************************************************************
;*
;******************************************************************************************
ORG
0000H
LJMP INICIO
ORG
000BH
LJMP INTT0
ORG
0013H
LJMP INTE1
;*******************************************************************************************
;*
;*******************************************************************************************
Milton Barreiro Junior ETE Getlio Vargas
INICIO:
ORG
0050H
MOV
IP,
#00000010B
112
;Prioriza Int T0
SETB ET0
;Habilita Int T0
SETB EX1
SETB EA
MOV
SP,
#40H
MOV
TMOD, #11H
;Configura T0 e T1 no Modo 1
MOV
TCON, #00000101B
MOV
TH0,
#3CH
MOV
TL0,
#0B0H
SETB TR0
;*****************************************************************************************
;*
;*****************************************************************************************
MOV
R0,
#00H
MOV
R1,
#00H
MOV
R2,
#00H
MOV
R3,
#00H
MOV
R4,
#00H
MOV
R5,
#00H
MOV
R6,
#00H
;*****************************************************************************************
;*
;*
;*****************************************************************************************
DISPLAY:
MOV
A,
R4
LCALL CONVERTE
SETB P2.2
MOV
P0,
CLR
P2.0
ACALL TEMPO
MOV
A,
R5
113
LCALL CONVERTE
SETB P2.0
MOV
P0,
CLR
P2.1
ACALL TEMPO
MOV
A,
R6
LCALL CONVERTE
SETB P2.1
MOV
P0,
CLR
P2.2
;Mostra Minutos
;Liga Digito Minutos
ACALL TEMPO
LJMP DISPLAY
;******************************************************************************************
;*
;******************************************************************************************
INTT0:
CLR
TR0
MOV
TH0,
#3CH
MOV
TL0,
#0B0H
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
SAI:
114
RETI
;******************************************************************************************
;*
;******************************************************************************************
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
;******************************************************************************************
;*
;******************************************************************************************
CONVERTE:
ANL
A,
MOV
DPTR, #TABDISP
MOVC A,
#00001111B
@A+DPTR
;Rotina de
;Converso
;Decimal para 7 Segmentos
RET
;******************************************************************************************
;*
;******************************************************************************************
TEMPO:
MOV
TH1,
#0D8H
MOV
TL1,
#0F0H
CLR
TF1
SETB TR1
JNB
TF1,
RET
;******************************************************************************************
;* TABELA DE CONVERSO DECIMAL E HEXADECIMAL PARA 7 SEGMENTOS *
Milton Barreiro Junior ETE Getlio Vargas
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
DB
11000110B
;at
DB
10100001B
;F
DB
10000110B
;em
DB
11000000B
;Hexadecimal
END
116
;*
;*
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
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
;*************************************************************************************
MOV
SP,
#40H
LCALL BUSCA
CJNE A,
#0FH, SAIDA
LJMP START
SAIDA:
MOV
P3,
LJMP KEY_B
;*************************************************************************************
;************************ SUBROTINAS DO TECLADO *************************
;
;
;*************************************************************************************
BUSCA:
MOV
KBOARD,
#0FH
A,
KBOARD
NOP
NOP
NOP
NOP
MOV
CJNE A,
#0FH, SELECT
leitura
RET
Milton Barreiro Junior ETE Getlio Vargas
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
119
MOV
TH0,
#3CH
MOV
TL0,
#0B0H
MOV
TMOD, #11H
SETB TR0
CLR
TF0
JNB
TF0,
CLR
TF0
CLR
TR0
RET
;******************************************************************************
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
;Final do Programa
;****************************************************
;
;
;
Autores:
;****************************************************
ORG
0000H
;Inicio do programa
MOV
PSW, #10H
MOV
R1,
#3CH
LJMP COMECO
ORG
COMECO:
0030H
MOV
SP,
#40H
CLR
P2.5
Milton Barreiro Junior ETE Getlio Vargas
120
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 $
;****************************************************
;
;****************************************************
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
121
P2.5
LCALL ESPERA_LCD
RET
;****************************************************
;
;****************************************************
CLEAR_LCD: SETB P2.5
CLR
P2.7
MOV
P0,
#01H
LCALL TEMPO0
CLR
P2.5
LCALL ESPERA_LCD
RET
;****************************************************
;
;****************************************************
LINHA2:
SETB P2.5
CLR
P2.7
MOV
P0,
#0C0H
LCALL TEMPO0
CLR
P2.5
LCALL ESPERA_LCD
RET
;****************************************************
;
;
122
PUSH A
SETB P2.5
CLR
P2.7
MOV
P0,
#8CH
LCALL TEMPO0
CLR
P2.5
LCALL ESPERA_LCD
POP
RET
;****************************************************
;
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
;****************************************************
;
;****************************************************
TEMPO0:
MOV
PSW, #18H
MOV
R0,
MOV
TMOD, #01H
#02H
123
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
124
;****************************************************
TEXTOS:
AS:
MOV
MOV
DPTR, #TEMPERATURAS
A,
#00H
MOVC A,
JZ
@A+DPTR
FIMS
LCALL ESCRT
FIMS:
INC
DPTR
JMP
AS
RET
;****************************************************
;
;****************************************************
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
125
MOV
A,
MOVC A,
JZ
#00H
@A+DPTR
AFIM
LCALL ESCRT
AFIM:
INC
DPTR
JMP
AT
RET
;****************************************************
;
;****************************************************
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
126
RET
;****************************************************
;
Rotina de escrita
;****************************************************
ESCRT:
SETB P2.5
SETB P2.7
MOV
P0,
LCALL TEMPO0
CLR
P2.5
LCALL ESPERA_LCD
RET
;****************************************************
;
;****************************************************
ESP:
CLR
P2.7
MOV
P0,
#0FFH
LCALL TEMPO1
JB
P0.7,
CLR
P2.5
CLR
P2.7
CLR
P2.6
ESP
RET
127
;****************************************************
VER_TEMP:
MOV
A,
P3
MOV
PSW, #10H
LCALL VER_C
LCALL ASCI
LCALL POS1
LCALL ESCR
LCALL M_T_S
JMP
VER_TEMP
;****************************************************
;
;****************************************************
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
;****************************************************
;
;****************************************************
I_D:
MOV
PSW, #10H
128
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
;****************************************************
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
;****************************************************
;
;****************************************************
VER_C:
MOV
PSW, #10H
PUSH A
PUSH 11H
CJNE A,
CLR
P1.0
POP
11H
POP
11H,
130
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
131
ATEMPERATURA:
DB
"Mudar_Temp.:",00H
END
132