Você está na página 1de 250

Universidade Federal de Goiás

Escola de Engenharia Elétrica, Mecânica e de Computação

MICROPROCESSADORES E
MICROCONTROLADORES
Parte 2
Microcontrolador 8051
José Wilson Lima Nerys
jwlnerys@gmail.com
jose_wilson_nerys@ufg.br

1
Prof. José Wilson Lima Nerys 1 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

2
Contribuições mais relevantes para o Curso de Microcontroladores ao longo
dos anos

Ambiente Windows para Edição, Compilação, Simulação e Gravação de


Microcontroladores da família 8051
Autor:
André Dias Campos

André Dias Campos e Márcio


Rodrigues Soares.
Sistema de Carga Microcontrolado
para Avaliação Dinâmica de Motores
de Indução. 2002. 30 f.
Trabalho de Conclusão de Curso.
(Graduação em Engenharia Elétrica) -
Universidade Federal de Goiás.
Orientador: José Wilson Lima Nerys.

2
Prof. José Wilson Lima Nerys 2 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

3
Contribuições mais relevantes para o Curso de
Microcontroladores ao longo dos anos

Gravadoras para gravação de microcotroladores


da família 8051 de 40 e 20 pinos

Autores:
Antônio Marcos de Melo Medeiros
Thyago Gumeratto Pires

Antônio Eliseu Holdefer e Antônio Marcos de


Melo Medeiros.
Kit Didático para Acionamentos Elétricos. 2001.
67 f. Trabalho de Conclusão de Curso.
(Graduação em Engenharia Elétrica) -
Universidade Federal de Goiás. Orientador: José
Wilson Lima Nerys.

3
Prof. José Wilson Lima Nerys 3 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

4
Contribuições mais relevantes para o Curso de
Microcontroladores ao longo dos anos

Simulador PEQui – Edição, Compilação e


Simulação de códigos em assembly do 8051

4
Prof. José Wilson Lima Nerys 4 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Cristian Rodrigues Chaves e Marcelo Pereira Mendes. Sistema de


Controle de Acesso Microcontrolado - Versão Teclado. 2002. 72 f.
Trabalho de Conclusão de Curso. (Graduação em Engenharia Elétrica) -
Universidade Federal de Goiás.
Orientador: José Wilson Lima Nerys.

Rafael José Cantero e Ronaldo Peixoto.


Controle de um Robô Autônomo via WEB e Rádio Enlace. 2002. 51 f.
Trabalho de Conclusão de Curso. (Graduação em Engenharia Elétrica) -
Universidade Federal de Goiás.
Orientador: José Wilson Lima Nerys.

5
Prof. José Wilson Lima Nerys 5 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

6 Contribuições mais relevantes para o Curso de


Microcontroladores ao longo dos anos

Carlos Renato Borges dos Santos e José Lemes de Souza Júnior.


Registrador de Frequência Microcontrolado. 2002. 103 f. Trabalho de Conclusão de
Curso. (Graduação em Engenharia Elétrica) - Universidade Federal de Goiás.
Orientador: José Wilson Lima Nerys.

6
Prof. José Wilson Lima Nerys 6 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

7 Diagrama de Blocos do 8051

Memória Flash
(Endereços):
0 a 8.191
0000 a 1FFFh

Memória RAM
(Endereços):
0 a 255
00 a FFh

7
Prof. José Wilson Lima Nerys 7 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

8
Diagrama de Blocos Simplificado do 8051

8
Prof. José Wilson Lima Nerys 8 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Pinagem do Microcontrolador 8051 de 40 pinos


9
Fonte de 5 V

Porta P1 Porta P0
8 bits 8 bits
Entrada e Saída de Dados Entrada e Saída de Dados
Parte baixa de Endereços

RESET

Porta P3
8 bits
Entrada e Saída de Dados Porta P2
Porta serial 8 bits
Interrupções externas Entrada e Saída de Dados
Controle externo de termporizadores Parte alta de Endereços
Controle de periféricos

Pinos para conexão do


Cristal oscilador
Pino de Terra
(0 V)
9
Prof. José Wilson Lima Nerys 9 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Alimentação do Microcontrolador 8051 de 40 e 20 pinos

10
Prof. José Wilson Lima Nerys 10 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

11
Memória RAM

11
Prof. José Wilson Lima Nerys 11 Microprocessadores
Universidade Federal de Goiás
Memória RAM
Escola de Engenharia Elétrica, Mecânica e de Computação

12

12
Prof. José Wilson Lima Nerys 12 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

13 Memória RAM
Região dos registradores de propósito geral
Endereço 00h a 1FH

O acesso a cada registrador pode ser:


1. Pelo nome já definido, de R0 a R7. Observar os bits RS1 e
RS0 para a escolha dos Bancos de 0 a 3.
2. Pelo endereço do registrador. Por exemplo: MOV
14H,A  MOV R4,A; R4 do Banco 2
3. Através de um nome definido pelo usuário através da
diretiva de programação “EQU“. Por exemplo: a definição
TENSAO EQU 0CH no início do programa define o
registrador R4 do Banco 1 (Endereço 0CH) como
TENSAO. Exemplo:
MOV TENSAO,#15H  MOV 0CH,#15H
13
Prof. José Wilson Lima Nerys 13 Microprocessadores
Universidade Federal de Goiás
Memória RAMEscola de Engenharia Elétrica, Mecânica e de Computação

14

ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
0 0 1 1 0 1 0 1 MOV 20H,#35H
SETB 20H.1
0 0 1 1 0 1 1 1
CLR 01H
0 0 1 1 0 1 0 1 SETB 07H
1 0 1 1 0 1 0 1
END
14
Prof. José Wilson Lima Nerys 14 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Endereço da Parte Alta da Memória RAM x Endereço dos Registradores


Especiais
15

ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV A,#47H
MOV R0,#80H

MOV R0,#80H MOV 80H,A = mov P0,A MOV 80H,A


MOV @R0,A MOV @R0,A
END

Conteúdo de A é armazenado Conteúdo de A é armazenado


na posição 80H da memória no registrador especial 80H,
RAM que corresponde à Porta P0

15
Prof. José Wilson Lima Nerys 15 Microprocessadores
Universidade Federal de Goiás Registradores Especiais
Escola de Engenharia Elétrica, Mecânica e de Computação

16
Prof. José Wilson Lima Nerys 16 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Registradores Especiais

17
Prof. José Wilson Lima Nerys 17 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Instrução Descrição

MOV A,#Dado8 Carrega acumulador com o Dado de 8 bits

MOV Rn,#Dado8 Carrega registrador Rn (n=0 a 7) com o Dado de 8 bits

MOV A,B Copia no registrador A (acumulador) o conteúdo do registrador B

MOV Rn,A Copia no registrador Rn (n = 0 a 7) o conteúdo do acumulador

MOV A,direto Copia em A o conteúdo do registrador identificado pelo endereço “direto”


Copia no registrador identificado pelo endereço “dir1” o conteúdo do
MOV dir1,dir2
registrador identificado pelo endereço “dir2”
MOV @R0,A Copia o conteúdo de A na posição apontada por R0

MOV DPTR,#dado16 O registrador duplo DPTR recebe um dado de 16 bits

MOVC A,@A+DPTR Carrega acumulador com o conteúdo da posição apontada por A+DPTR

Exemplo 1: Exemplo 2:
MOV B,#75H MOV A,#0F1H
MOV R0,B MOV R1,#80H
MOV A,R0 MOV R0,01H ; MOV R0,R1
SWAP A MOV @R0,A
MOV P1,A MOV DPTR,#1234H
18
Prof. José Wilson Lima Nerys Algumas Instruções do 8051 18 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Instrução Descrição
Compara conteúdo de A com o “dado”; se não forem iguais, desvia para
CJNE A,#dado,Ender
o endereço “Ender”
Compara conteúdo do registrador Rn (n = 0 a 7) com o “dado”; se não
CJNE Rn,#dado,Ender
forem iguais, desvia para o endereço “Ender”
Decrementa o registrador Rn (n = 0 a 7); se o resultado não for zero, desvia
DJNZ Rn,desvio
para “desvio”
SJMP ender Desvia para o endereço “ender”. SJMP = Short Jump (2 bytes de código)

LJMP ender Desvia para o endereço “ender”. LJMP = Long Jump (3 bytes de código)

JNZ ender Desvia para o endereço “ender”, se a flag Z = 0

JZ ender Desvia para “ender”, se a flag Z = 1

JNC ender Desvia para “ender”, se a flag CY = 0

JC ender Desvia para “ender”, se a flag CY = 1


Codificação: 80 XX, onde XX = número de bytes (em complemento de 2) a ser adicionado ao endereço
da próxima instrução, para desviar para o endereço “ender”

Exemplo: CJNE A,#02H,V1


Exemplo: MOV R7,#10
MOV P1,A
DJNZ R7,$
SJMP $
SJMP Exemplo
V1: MOV A,P3
19 SJMP Exemplo
Prof. José Wilson Lima Nerys 19 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Instrução Descrição

ADD A,Rn Adiciona o conteúdo de Rn (n = 0 a 7) ao conteúdo do acumulador

ADD A,#dado8 Adiciona o “dado8”, de 8 bits ao conteúdo do acumulador


Subtrai o conteúdo do registrador identificado pelo endereço “direto”, do
SUBB A,direto
conteúdo do acumulador, COM CARRY. A = A – direto – CY
Subtrai o conteúdo da posição apontada pelo registrador R0 do conteúdo do
SUBB A,@R0
acumulador COM CARRY. A = A – ((R0)) – CY
RL A Rotaciona o conteúdo de A para a esquerda (rotação de 8 bits)

RR A Rotaciona o conteúdo de A para a direita (rotação de 8 bits)

DA A Faz o ajuste decimal do conteúdo de A

INC Rn Incrementa em uma unidade o conteúdo do registrador Rn

INC DPTR Incrementa em uma unidade o conteúdo do registrador duplo DPTR

CPL A Complementa o conteúdo do acumulador

RLC Rotação do conteúdo de A para a esquerda, com carry (rotação de 9 bits)

RRC Rotação do conteúdo de A para a direita, com carry (rotação de 9 bits)

20
Prof. José Wilson Lima Nerys 20 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Instrução Descrição
Multiplica o conteúdo de A pelo conteúdo de B. O resultado está em
MUL AB B A. O resultado da multiplicação é um número de 16 bits, por isso
precisa de dois registradores para o resultado.
Divide o conteúdo de A pelo conteúdo de B. A recebe o quociente e
DIV AB
B o resto.
ANL A,#dado Faz a operação AND, bit a bit, entre o acumulador e o dado de 8 bits
ORL A,#dado Faz a operação OR, bit a bit, entre o acumulador e o dado de 8 bits
XRL A,#dado Faz a operação XOR, bit a bit, entre o acumulador e o dado de 8 bits
Faz a troca dos nibbles do acumulador, ou seja, o nibble mais
significativo passa a ocupar os quatro primeiros bits do acumulador e
SWAP A
o nibble menos significativo passa a ocupar os quatro últimos bits. Por
exemplo, se originalmente, A = 35 H, após a instrução, A = 53 H.

Exemplo: MOV A,#75H


Exemplo: MOV A,#100 Exemplo: MOV A,#20 ANL A,#0FH
MOV B,#15 MOV B,#30 ORL A,#30H
DIV AB MUL AB XRL A,#0C1H

21
Prof. José Wilson Lima Nerys 21 Microprocessadores
Exemplo: MOV A,#77H
Exemplo: MOV A,#100
Universidade Federal de Goiás
ANL A,#0FH
MOV B,#15 Escola de Engenharia Elétrica, Mecânica e de Computação
ORL A,#30H
DIV AB XRL A,#0C1H
22

100 64H 0 1 1 0 0 1 0 0 77H 0 1 1 1 0 1 1 1


AND
/ 0FH 0 0 0 0 1 1 1 1
15 0FH 0 0 0 0 1 1 1 1 07H 0 0 0 0 0 1 1 1
OR
Quociente = 30H 0 0 1 1 0 0 0 0
A 06 06H 0 0 0 0 0 1 1 0 37H 0 0 1 1 0 1 1 1
XOR
Resto C1H 1 1 0 0 0 0 0 1
B 10 0A 0 0 0 0 1 0 1 0 F6H 1 1 1 1 0 1 1 0
H

Exemplo: MOV A,#20


20 14H 0 0 0 1 0 1 0 0
MOV B,#30 X =
MUL AB
30 1EH 0 0 0 1 1 1 1 0
B A
= 600 0258 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0

22
Prof. José Wilson Lima Nerys 22 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Instrução Descrição
Desvia para a posição “desvio”, caso o “bit” esteja setado (se bit=1).
JB bit,desvio Exemplo: Se F0 = 1, então a instrução JB F0,V1 faz o processamento
desviar para a posição “V1”
JNB bit,desvio Desvia para “desvio”, caso o “bit” seja zero (se bit = 0).
SETB bit Faz bit = 1
CLR bit Faz bit = 0
CPL bit Complementa o “bit”. Se bit = 1, então bit torna-se bit=0.
MOV bit,C Copia no “bit” o conteúdo da Flag de Carry.

Exemplo: JB F0,V1
MOV P1,#0FH
SETB P1.7
SJMP V2 Algumas Instruções do 8051
V1: MOV P1,#0F0H Operações com bits
CLR P1.7
V2: CPL F0
SJMP Exemplo

23
Prof. José Wilson Lima Nerys 23 Microprocessadores
UniversidadeInstruções do 8051 com seus opcodes e
Federal de Goiás
seus
Escolaperíodos deElétrica,
de Engenharia execuçãoMecânica e de Computação

240x_0 0x_1 0x_2 0x_3 0x_4 0x_5 0x_6 0x_7


NOP AJMP add11 LJMP add16 RR A INC A INC dir INC @R0 INC @R1
0x0_ 1 2 2 1 1 1 1 1
JBC bit,rel ACALL add11 LCALL add16 RRC A DEC A DEC dir DEC @R0 DEC @R1
0x1_ 2 2 2 1 1 1 1 1
JB bit, rel AJMP add11 RET RL A ADD A,#dado ADD A,#dir ADD A,@R0 ADD A,@R1
0x2_ 2 2 2 1 1 1 1 1
JNB bit, rel ACALL add11 RETI RLC A ADDC A,#dado ADDC A,dir ADDC A,@R0 ADDC A,@R1
0x3_ 2 2 2 1 1 1 1 1
JC rel AJMP add11 ORL dir,A ORL dir,#dado ORL A,dado ORL A,dir ORL A,@R0 ORL A,@R1
0x4_ 2 2 1 2 1 1 1 1
JNC rel ACALL add11 ANL dir,A ANL dir,#dado ANL A,#dado ANL A,dir ANL A,@R0 ANL A,@R1
0x5_ 2 2 1 2 2 1 1 1
JZ rel AJMP add11 XRL dir,A XRL dir,#dado XRL A,#dado XRL A,dir XRL A,@R0 XRL A,@R1
0x6_ 2 2 1 2 2 1 1 1
JNZ rel ACALL add11 ORL C,bit JMP @A+DPTR MOV A,#dado MOV dir,#dado MOV @R0,#dado MOV @R1,#dado
0x7_ 2 2 2 2 1 2 1 1
SJMP rel AJMP add11 ANL C,bit MOVC A,@A+PC DIV AB MOV dir,dir MOV dir,@R0 MOV dir,@R1
0x8_ 2 2 2 2 4 2 2 2
MOV dptr,#data16 ACALL add11 MOV bit,C MOVC A,@A+DPTR SUBB A,#dado SUBB A,dir SUBB A,@R0 SUBB A,@R1
0x9_ 2 2 2 2 1 1 1 1
ORL C, /bit AJMP add11 MOV C,bit INC DPTR MUL AB MOV @R0,dir MOV @R1,dir
0xA_ 2 2 1 2 4 2 2
ANL C, /bit ACALL add11 CPL bit CPL C CJNE A,#dado,rel CJNE A,dir,rel CJNE @R0,#dado,rel CJNE @R1,#dado,rel
0xB_ 2 2 1 1 2 2 2 2
PUSH direct AJMP add11 CLR bit CLR C SWAP A XCH A,dir XCH A,@R0 XCH A,@R1
0xC_ 2 2 1 1 1 1 1 1
POP direct ACALL add11 SETB bit SETB C DA A DJNZ dir,rel XCHD A,@R0 XCHD A,@R1
0xD_ 2 2 1 1 1 2 1 1
MOVX A,@DPTR AJMP add11 MOVX A,@R0 MOVX A,@R1 CLR A MOV A,dir MOV A,@R0 MOV A,@R1
0xE_ 2 2 2 2 1 1 1 1
MOVX @DPTR,A ACALL add11 MOVX @R0,A MOVX @R1,A CPL A MOV dir,A MOV @R0,A MOV @R1,A
0xF_ 2 2 2 2 1 1 1 1

24
Prof. José Wilson Lima Nerys 24 Microprocessadores
UniversidadeInstruções do 8051 com seus opcodes e
Federal de Goiás
seus
Escolaperíodos deElétrica,
de Engenharia execuçãoMecânica e de Computação

250x_8
INC R0
0x_9
INC R1
0x_A
INC R2
0x_B
INC R3
0x_C
INC R4
0x_D
INC R5
0x_E
INC R6
0x_F
INC R7
0x0_ 1 1 1 1 1 1 1 1
DEC R0 DEC R1 DEC R2 DEC R3 DEC R4 DEC R5 DEC R6 DEC R7
0x1_ 1 1 1 1 1 1 1 1
ADD A,R0 ADD A,R1 ADD A,R2 ADD A,R3 ADD A,R4 ADD A,R5 ADD A,R6 ADD A,R0
0x2_ 1 1 1 1 1 1 1 1
ADDC A,R0 ADDC A,R1 ADDC A,R2 ADDC A,R3 ADDC A,R4 ADDC A,R5 ADDC A,R6 ADDC A,R7
0x3_ 1 1 1 1 1 1 1 1
ORL A,R0 ORL A,R1 ORL A,R2 ORL A,R3 ORL A,R4 ORL A,R5 ORL A,R6 ORL A,R7
0x4_ 1 1 1 1 1 1 1 1
ANL A,R0 ANL A,R1 ANL A,R2 ANL A,R3 ANL A,R4 ANL A,R5 ANL A,R6 ANL A,R7
0x5_ 1 1 1 1 1 1 1 1
XRL A,R0 XRL A,R1 XRL A,R2 XRL A,R3 XRL A,R4 XRL A,R5 XRL A,R6 XRL A,R7
0x6_ 1 1 1 1 1 1 1 1
MOV R0,#dado MOV R1,#dado MOV R2,#dado MOV R3,#dado MOV R4,#dado MOV R5,#dado MOV R6,#dado MOV R7,#dado
0x7_ 1 1 1 1 1 1 1 1
MOV dir,R0 MOV dir,R1 MOV dir,R2 MOV dir,R3 MOV dir,R4 MOV dir,R5 MOV dir,R6 MOV dir,R7
0x8_ 1 1 1 1 1 1 1 1
SUBB A,R0 SUBB A,R1 SUBB A,R2 SUBB A,R3 SUBB A,R4 SUBB A,R5 SUBB A,R6 SUBB A,R7
0x9_ 1 1 1 1 1 1 1 1
0xA MOV R0,dir MOV R1,dir MOV R2,dir MOV R3,dir MOV R4,dir MOV R5,dir MOV R6,dir MOV R7,dir
_ 2 2 2 2 2 2 2 2
CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE
0xB
R0,#dado,rel R1,#dado,rel R2,#dado,rel R3,#dado,rel R4,#dado,rel R5,#dado,rel R6,#dado,rel R7,#dado,rel
_ 2 2 2 2 2 2 2 2
0xC XCH A,R0 XCH A,R1 XCH A,R2 XCH A,R3 XCH A,R4 XCH A,R5 XCH A,R6 XCH A,R7
_ 1 1 1 1 1 1 1 1
0xD DJNZ R0,rel DJNZ R1,rel DJNZ R2,rel DJNZ R3,rel DJNZ R4,rel DJNZ R5,rel DJNZ R6,rel DJNZ R7,rel
_ 2 2 2 2 2 2 2 2
0xE MOV A,R0 MOV A,R1 MOV A,R2 MOV A,R3 MOV A,R4 MOV A,R5 MOV A,R6 MOV A,R7
_ 1 1 1 1 1 1 1 1
MOV R0,A MOV R1,A MOV R2,A MOV R3,A MOV R4,A MOV R5,A MOV R6,A MOV R7,A
0xF_
251
Prof. José Wilson Lima Nerys 1 1 1 1 1 25 1 Microprocessadores
1
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Rotação de 8 bits no 8085 Rotação de 8 bits no 8051
CY26 A = 99 H CY A = 99 H
0 1 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 1
RLC RL A
CY A = 33 H CY A = 33 H
1 0 0 1 1 0 0 1 1 0 0 0 1 1 0 0 1 1

Rotação de 9 bits no 8085 Rotação de 9 bits no 8051


CY A = 99 H CY A = 99 H
0 1 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 1
RAL RLC A
CY A = 32 H CY A = 32 H
1 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 1 0

26
Prof. José Wilson Lima Nerys 26 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

27 020030
0000

ORG 00H ; DIRETIVA - PRÓXIMA INSTRUÇÃO NO ENDEREÇO 00H


0030 75812F LJMP INICIO ; DESVIO INCONDICIONAL PARA O ENDEREÇO "INICIO"

ORG 30H ; PRÓXIMA INSTRUÇÃO NO ENDEREÇO 30H DA ROM


0033 C2D7 INICIO: MOV SP,#2FH ; O ENDEREÇO INICIAL DA PILHA = 2FH
0035 7401
0037 F590 V0: CLR CY ; LIMPA A FLAG DE CARRY
0039 120049 MOV A,#1 ; O ACUMULADOR RECEBE O VALOR 01H = 0000 0001B
003C 33 V1: MOV P1,A ; O CONTEÚDO DE A TRANSFERIDO PARA A PORTA P1
003D 50F8 LCALL ATRASO ; CHAMA SUBROTINA DE ATRASO DE TEMPO
RLC A ; ROTACIONA PARA A ESQUERDA COM CARRY
JNC V1 ; VERIFICA A FLAG CARRY. SE CY = 0, DESVIA PARA V1
003F 13
0040 F590 V2: RRC A ; ROTACIONA PARA A DIREITA COM CARRY
0042 120049 MOV P1,A ; O CONTEÚDO DE A É TRANSFERIDO PARA P1
0045 50F8 LCALL ATRASO ; CHAMA SUBROTINA DE ATRASO DE TEMPO
0047 80EA JNC V2 ; SE CY = 0, DESVIA PARA V2
SJMP V0 ; DESVIO INCONDICIONAL PARA V0

0049 78C8 ATRASO: MOV R0,#200 ; CARREGA R0 COM O VALOR DECIMAL 200
004B 79FA V3: MOV R1,#250 ; CARREGA R1 COM O VALOR DECIMAL 250
004D D9FE DJNZ R1,$ ; DECREMENTA R1 ATÉ R1 = 0
004F D8FA DJNZ R0,V3 ; DECREMENTA R0; SE R0 ≠ 0, DESVIA PARA V3
0051 22 RET ; RETORNA PARA O PROGRAMA PRINCIPAL
END ; ENCERRA PROGRAMA

27
Prof. José Wilson Lima Nerys 27 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

CH0 EQU P3.2


28 Rotação de Leds na Porta P1
ORG 00H condicionada ao estado de uma chave
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV A,#1
Nesse código, a rotação dos Leds da Porta P1
depende do estado do pino P3.2.
CHAVE: JB CH0,DIREITA
MOV P1,A Se P3.2 = 0 (chave pressionada), a rotação é
LCALL ATRASO
RL A para a esquerda.
SJMP CHAVE
Se P3.2 = 1 (chave aberta), a rotação é para a
DIREITA: MOV P1,A
RR A
direita.
LCALL ATRASO
SJMP CHAVE

ATRASO: MOV R0,#200


V3: MOV R1,#250
DJNZ R1,$
DJNZ R0,V3
RET
END
28
Prof. José Wilson Lima Nerys 28 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

29CH0 EQU P3.2


Rotação de Motor de Passo na Porta P2
ORG 00H condicionada ao estado de uma chave
LJMP INICIO

ORG 30H Nesse código, a rotação do Motor de Passo


INICIO: MOV SP,#2FH
na Porta P2 depende do estado do pino P3.2.
MOV A,#11H

CHAVE: JB CH0,DIREITA Se P3.2 = 0 (chave pressionada), a rotação é


no sentido anti-horário
MOV P2,A
LCALL ATRASO
RL A Se P3.2 = 1 (chave aberta), a rotação é no
SJMP CHAVE sentido horário
DIREITA: MOV P2,A
RR A
LCALL ATRASO
SJMP CHAVE

ATRASO: MOV R0,#200


V3: MOV R1,#250
DJNZ R1,$
DJNZ R0,V3
RET
29 END Lima Nerys
Prof. José Wilson 29 Microprocessadores
Rotação de Motor de Passo na Porta P2 com leitura
Universidade Federal de Goiás de tabela
Escola de Engenharia Elétrica, Mecânica e de Computação
ORG 00H 30 MOTOR: MOV A,R7
LJMP INICIO MOVC A,@A+DPTR
MOV P2,A
ORG 30H LCALL ATRASO
INICIO: MOV SP,#2FH CJNE A,#0FFH,V4
V0: MOV R7,#0 SJMP V0

STEP: JB P3.3,V1 V4: INC R7


JB P3.2,V2 SJMP STEP
MOV DPTR,#MEIO_ANTI
SJMP MOTOR ATRASO: MOV R0,#100
V5: MOV R1,#250
V2: MOV DPTR,#MEIO_HORA DJNZ R1,$
SJMP MOTOR DJNZ R0,V5
RET
V1: JB P3.2,V3
MOV DPTR,#PASSO_ANTI PASSO_ANTI: DB 01H, 02H, 04H, 08H, 0FFH
SJMP MOTOR PASSO_HORA: DB 08H, 04H, 02H, 01H, 0FFH
MEIO_ANTI: DB 01H, 03H, 02H, 06H, 04H, 0C0H, 08H, 09H, 0FFH
V3: MOV DPTR,#PASSO_HORA MEIO_HORA: DB 09H, 08H, 0C0H, 04H, 06H, 02H, 03H, 01H, 0FFH
END

P3.3 P3.2 Sentido de rotação do P3.3 P3.2 Sentido de rotação do


Motor Motor
0 0 Anti-horário, meio passo 1 0 Anti-horário, passo
completo
0 1 Horário, meio passo
1 1 Horário, passo completo
30
Prof. José Wilson Lima Nerys 30 Microprocessadores
Universidade Federal de Goiás
Escola
Ondade Engenharia
quadrada noElétrica,
pino P1.0Mecânica e de Computação

Endereço Código Rótulo Mnemônico Comentário sobre o Efeito da Operação Tempo


ORG 00H A próxima instrução estará no endereço 00h
Pula para o endereço indicado com o rótulo
0000H 02 00 30 LJMP INICIO
´inicio´

ORG 30H A próxima instrução estará no endereço 30h


0030H B2 90 INICIO: CPL P1.0 Complementa o bit 0 da Porta P1 1 µs
0032H 78 32 MOV R0,#50 Carrega registrador R0 com valor decimal 50 1 µs
0034H D8 FE DJNZ R0,$ Decrementa o conteúdo de R0, até R0 = 0 100 µs
0036H 80 F8 SJMP INICIO Retorna para o início 2 µs
0038H END Instrução obrigatória no fim de todo programa 104 µs

Tempo calculado para meio período

Tempo medido para meio período com o Proteus: 105,10 µs

Cristal oscilador: 12 MHz


31
Prof. José Wilson Lima Nerys 31 Microprocessadores
Onda quadrada no pino P1.0 com variação do período através de um conversor AD
Universidade Federal de Goiás
START BIT P3.6 Escola de EngenhariaLE_AD:
Elétrica, Mecânica e de Computação
SETB ENABLE
ENABLE BIT P3.4 NOP
RS BIT P3.5 SETB START
LCALL ATRASO_AD
ORG 00H Geração da onda CLR ENABLE
LJMP INICIO LCALL ATRASO_AD
quadrada
CLR START
ORG 30H LCALL ATRASO_AD
INICIO: MOV SP,#2FH SETB START ; Começa a
conversão
V1: CPL P1.0 Registrador R1 define SETB ENABLE
LCALL LE_AD o período da onda
DJNZ R1,$ JB P3.3,$
SJMP V1
quadrada
CLR ENABLE
CLR RS ; Libera saída de dados
ATRASO_AD: MOV R1,P2
MOV R0,#5 CJNE R1,#00,V2
DJNZ R0,$ MOV R1,#01
RET V2: SETB RS
RET
END

Leitura do conversor AD
Tempo gasto na subrotina de
leitura do AD: 176,88 μs
Período mínimo: 370,50 μs (R1 = Período máximo: 1,45 ms (R1 = 255)
1)

32
Prof. José Wilson Lima Nerys 32 Microprocessadores
Driver ULN 2803 Federal de Goiás
Universidade
Capacidade de corrente: 500Escola
mA de Engenharia Elétrica, Mecânica e de Computação
Tensão máxima no pino COM: 50 V
33

33
Prof. José Wilson Lima Nerys 33 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Rótulo Mnemônico Comentário sobre o Efeito da Operação Tempo


ORG 00H A próxima instrução estará no endereço 00h
Pula para o endereço indicado com o rótulo
LJMP INICIO
´inicio´

ORG 30H A próxima instrução estará no endereço 30h


INICIO: MOV A,#00H Carrega acumulador com valor 00h
V1: MOV P1,A P1 recebe o conteúdo do acumulador 1 µs
INC A Incrementa A em 1. A  A + 1 1 µs
SJMP V1 Pula para o endereço indicado pelo rótulo ´V1´ 2 µs
END Instrução obrigatória no fim de todo programa 4 µs
Codificação:
1 ORG 00H
V1 corresponde ao endereço
0000 020030 2 LJMP INICIO
3
0032H = 0037 + FB Intervalo entre cada
4 ORG 30H
0030 7400 5 INICIO: MOV A,#00H dois envios para a
(considerando somente o byte Porta P1: 4 µs
0032 F590 6 V1: MOV P1,A
menos significativo)
0034 04 7 INC A
0035 80FB 8 SJMP V1 Período: 256 x 4 µs =
0037 9 END 1024 µs
Endereço da próxima instrução

34
Prof. José Wilson Lima Nerys Contagem crescente
34 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Contagem crescente – Resultado visual (saída do Conversor Digital-


Analógico): Onda Dente de Serra
Rótulo Mnemônico Tempo
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV A,#00H
V1: MOV P0,A 1 µs
INC A 1 µs
SJMP V1 2 µs
END 4 µs Período medido com o Proteus: 1020 µs

Intervalo entre cada dois envios para a Porta P0: 4 µs Cristal oscilador: 12 MHz

Período calculado: 256 x 4 µs = 1024 µs

35
Prof. José Wilson Lima Nerys 35 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Onda Dente de Serra com variação do período através de um conversor AD

LE_AD: SETB ENABLE


START BIT P3.6 NOP
ENABLE BIT P3.4 SETB START
RS BIT P3.5 LCALL ATRASO_AD
CLR ENABLE
ORG 00H LCALL ATRASO_AD
LJMP INICIO CLR START
LCALL ATRASO_AD
ORG 30H SETB START
INICIO: MOV A,#0 Período mínimo: 47,50 ms SETB ENABLE
V1: MOV P0,A
INC A JB P3.3,$
LCALL LE_AD CLR ENABLE
DJNZ R1,$ CLR RS
SJMP V1 MOV R1,P2
CJNE R1,#00,V2
ATRASO_AD: MOV R1,#01
MOV R0,#5 V2: SETB RS
DJNZ R0,$ RET
RET
END

Período máximo: 182,50 ms


36
Prof. José Wilson Lima Nerys 36 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Contagem crescente e decrescente (Onda Triangular)

Rótulo Mnemônico Comentário sobre o Efeito da Operação


ORG 00H A próxima instrução estará no endereço 00h
Início
LJMP INICIO Pula para o endereço indicado com o rótulo ´inicio´
A  00H

ORG 30H A próxima instrução estará no endereço 30h


P0  A
INICIO: MOV A,#00H Carrega acumulador com valor 00h
A A + 1
V1: MOV P0,A Transfere para a porta P0 o conteúdo do acumulador
N
A = FFH? INC A Incrementa o conteúdo do acumulador
Compara conteúdo do acumulador com “30h”. Caso não
CJNE A,#0FFH,V1
S
seja igual (Compare, Jump if Not Equal), desvia para “V1”
P0  A
V2: MOV P0,A Transfere para a porta P0 o conteúdo do acumulador
A A - 1 Decrementa conteúdo do acumulador e vai para “V2” se
DJNZ ACC,V2
não for “zero”
N S
A = 00? Pula para “V1”. Não precisa usar “LJMP” porque a
SJMP V1
distância é curta.
END Instrução obrigatória no fim de todo programa

Quando A = FFH, vai para a próxima linha.


Acaba o ciclo crescente e começa o decrescente
37
Prof. José Wilson Lima Nerys 37 37
Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

38 Contagem crescente e decrescente


Saída do Conversor Digital-Analógico: Onda Triangular

Rótulo Mnemônico Tempo Período


ORG 00H
LJMP INICIO

ORG 30H
INICIO
MOV A,#00H
:
V1: MOV P0,A 1 µs
256 x 4 µs
= 1024 µs

INC A 1 µs
CJNE A,#0FFH,V1 2 µs
µs=768 µs

V2: MOV P0,A 1 µs


256 x 3

O primeiro semi-período (crescente: 1020 µs,


2 µs calculado e 1010 µs medido) é maior que o segundo
DJNZ ACC,V2
(decrescente: 768 µs calculado e 781 µs medido)
SJMP V1 porque o número de instruções executadas é diferente
para o primeiro e para o segundo semi-período.
END

38
Prof. José Wilson Lima Nerys 38 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Contagem crescente e decrescente
39 Saída do Conversor Digital-Analógico: Onda Triangular

Rótulo Mnemônico Tem Período


po
ORG 00H
LJMP INICIO

ORG 30H
INICIO
MOV A,#00H
:
V1: MOV P0,A 1 µs
256 x 4 µs
= 1024 µs

INC A 1 µs
CJNE A,#0FFH,V1 2 µs Com a inclusão da instrução NOP, os dois semi-
períodos ficaram com tempos calculados iguais e
V2: MOV P0,A 1 µs
256 x 4µs =

tempos medidos muito próximos (1020 µs e 1030 µs)


1024 µs

NOP 1 µs
2 µs
DJNZ ACC,V2

SJMP V1 Instrução NOP (No Operation) usada aqui apenas


END para gerar um atraso de 1 µs.
39
Prof. José Wilson Lima Nerys 39 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

40 A Onda triangular pode ser obtida, também com um código ligeiramente


modificado
Rótulo Mnemônico Tempo Período
ORG 00H
LJMP INICIO

ORG 30H
INICIO
MOV A,#00H
:
V1: MOV P0,A 1 µs
256 x 4 µs
= 1024 µs
INC A 1 µs
CJNE A,#0FFH,V1 2 µs
Com uma estrutura no segundo semi-ciclo
256 x 4µs =

V2: MOV P0,A 1 µs


1024 µs

semelhante à estrutura no primeiro semiciclo, o


DEC A 1 µs tempo é equivalente nos dois intervalos.
CJNE A,#00H,V2 2 µs
SJMP V1
END As instruções DEC A, e CJNE A,#00H,V2, produzem, juntas, um
atraso de 3 µs, não havendo necessidade da instrução NOP.
40
Prof. José Wilson Lima Nerys 40 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

41 Leitura de Tabela adaptada para ler 256 valores que, enviados


para o Conversor DA, resulta em uma curva senoidal

Rótulo Mnemônico Mnemônico Tempo


CONTADOR EQU 07H V1: MOV A,CONTADOR 1 µs
MOVC A,@A+DPTR 2 µs
ORG 00H MOV P0,A 1 µs
LJMP INICIO INC CONTADOR 1 µs
SJMP V1 2 µs
ORG 30H
INICIO: MOV SP,#2FH Tempo entre leituras: 7 µs
MOV DPTR,#Tabela Período senoide:
MOV CONTADOR,#00h 7 µs x 256 = 1792 µs
Período medido: 1,80 ms ≡ 556 Hz

Como a Tabela de seno tem 256 valores, não há necessidade fazer uma contagem
desses valores, uma vez que o CONTADOR volta ao valor zero após atingir o valor
máximo FFh. Assim, a leitura volta para o início da Tabela após CONTADOR = FFh.

41
Prof. José Wilson Lima Nerys 41 Microprocessadores
Universidade
Parte 1 Federal
Parte de
2 Goiás Parte 3 Parte 4 Parte 5 Parte 6
DB 127 DB 205Escola deDB 250
Engenharia DB Mecânica
Elétrica, 243 e DB 186 DB 104
de Computação
DB 130 DB 208 DB 251 DB 241 DB 183 DB 101
42 DB133 DB 210 DB 252 DB 240 DB 180 DB 98
DB 136 DB 213 DB 252 DB 239 DB 177 DB 95
DB 139 DB 215 DB 253 DB 237 DB 174 DB 91
DB 143 DB 217 DB 253 DB 235 DB 171 DB 88
DB 146 DB 219 DB 253 DB 234 DB 168 DB 86
DB 149 DB 221 DB 254 DB 232 DB 166 DB 83
Tabela: seno

DB 152 DB 223 DB 254 DB 230 DB 163 DB 80


DB 155 DB 225 DB 254 DB 228 DB 159 DB 77
DB 158 DB 227 DB 254 DB 226 DB 156 DB 74
DB 161 DB 229 DB 254 DB 224 DB 153 DB 71
DB 164 DB 231 DB 254 DB 222 DB 150 DB 68
DB 167 DB 233 DB 254 DB 220 DB 147 DB 66
DB 170 DB 235 DB 253 DB 218 DB 144 DB 63
DB 173 DB 236 DB 253 DB 216 DB 141 DB 60
DB 176 DB 238 DB 252 DB 214 DB 138 DB 58
DB 179 DB 239 DB 252 DB 211 DB 135 DB 55
DB 181 DB 241 DB 251 DB 209 DB 132 DB 52
DB 184 DB 242 DB 251 DB 207 DB 129 DB 50
DB 187 DB 243 DB 250 DB 204 DB 125 DB 47
DB 190 DB 245 DB 249 DB 202 DB 122 DB 45
DB 193 DB 246 DB 248 DB 199 DB 119 DB 43
DB 195 DB 247 DB 247 DB 196 DB 116 DB 40
DB 198 DB 248 DB 246 DB 194 DB 113 DB 38
DB 200 DB 249 DB 245 DB 191 DB 110 DB 36
DB 203 DB 250 DB 244 DB 188 DB 107 DB 34

42
Prof. José Wilson Lima Nerys 42 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Parte 7 Parte 8 Parte 9 Parte 10 Parte 11 Parte 12


DB 32 DB 7 DB 0 DB 13 DB 44 DB 87
DB 30 DB 6 DB 1 DB 15 DB 46 DB 90
DB 28 DB 5 DB 1 DB 16 DB 49 DB 93
DB 26 DB 4 DB 1 DB 18 DB 51 DB 96
DB 24 DB 3 DB 2 DB 19 DB 54 DB 99
DB 22 DB 3 DB 2 DB 21 DB 56 DB 102
DB 20 DB 2 DB 3 DB 23 DB 59 DB 105
DB 19 DB 2 DB 4 DB 25 DB 61 DB 108
DB 17 DB 1 DB 4 DB 27 DB 64 DB 111
DB 15 DB 1 DB 5 DB 29 DB 67 DB 115
DB 14 DB 0 DB 6 DB 31 DB 70 DB 118
DB 13 DB 0 DB 7 DB 33 DB 73 DB 121
DB 11 DB 0 DB 8 DB 35 DB 75 DB 124
DB 10 DB 0 DB 9 DB 37 DB 78 DB 127
DB 9 DB 0 DB 11 DB 39 DB 81
DB 8 DB 0 DB 12 DB 41 DB 84

43
Prof. José Wilson Lima Nerys 43 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

44
Gerador de Função com valores fixos de frequência para cada onda:
CONTADOR EQU 07H
1 – Onda quadrada QUAD EQU P2.0  Chave de escolha Onda quadrada
2 – Onda dente de serra SERRA EQU P2.1  Chave de escolha Dente de serra
3 – Onda triangular TRI EQU P2.2  Chave de escolha Triangular
SENO EQU P2.3  Chave de escolha Senoide
4 – Onda senoidal
ORG 00H
LJMP INICIO

ORG 30H
Primeira parte
INICIO: MOV SP,#2FH
do programa: MOV DPTR,#Tabela
MOV CONTADOR,#00h

V1: MOV A,#00H


JNB QUAD, QUADRADA  Se QUAD = 0  quadrada
JNB SERRA, DENTE_SERRA
JNB TRI, TRIANGULAR
JNB SENO, SENOIDAL  Se SENO = 0  Senoidal
SJMP V1

44
Prof. José Wilson Lima Nerys 44 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Leitura de Tabela com Quantidade de Dados menor que 256


Usando tabela para acionamento de motor de passo
45

45
Prof. José Wilson Lima Nerys 45 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

46 Acionamento de Motor de Passo com Passo


Completo e Meio Passo
Rótulo Tabela Tabela
Rótulo Mnemônico Rótulo Mnemônico Passo Meio
Completo Passo Offset R7
ORG 00H V2: MOV A,R7
Tabela: DB 03H DB 01H 0
LJMP INICIO MOVC
DB 06H DB 03H 1
A,@A+DPTR
DB 0CH DB 02H 2
ORG 30H MOV P1,A
DB 09H DB 06H 3
INICIO: MOV SP,#2FH LCALL ATRASO
DB 04H 4
MOV INC R7
DB 0CH 5
DPTR,#Tabela CJNE
DB 08H 6
V1: MOV R7,#00h R7,#04H,V2
DB 09H 7
A subrotina de atraso de
SJMP V1
tempo não foi incluída 8
END END
Essa tabela, com apenas 4 valores, pode ser usada para o acionamento de um
motor de passo (PASSO COMPLETO). A tabela com 8 valores é para
acionamento do motor de passo com MEIO PASSO. O motor deve estar
conectado, através de um driver, ao nibble inferior da Porta P1.
46
Prof. José Wilson Lima Nerys 46 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Acionamento de Motor de Passo

Driver ULN 2803


Capacidade de corrente: 500 mA
Tensão máxima no pino COM: 50 V

47
Prof. José Wilson Lima Nerys 47 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Rótulo Mnemônico Rótulo Mnemônico


Usando Chaves externas para
CH0 EQU P2.0 V0: JB CH0,VCH1
escolher a configuração do
CH1 EQU P2.1
acionamento MOV DPTR,#Tabela1
CH2 EQU P2.2 SJMP V2
CH3 EQU P2.3
CH0  sentido horário com passo completo VCH1: JB CH1,VCH2
CH1  sentido anti-horário com passo completo MOV DPTR,#Tabela2
ORG 00H CH2  sentido horário com meio passo SJMP V2
CH3  sentido anti-horário com meio passo
LJMP INICIO VCH2: JB CH2,VCH3
MOV DPTR,#Tabela3
Tarefa:
ORG 30H SJMP V2
1. Escolher uma das chaves para
INICIO: MOV SP,#2FH Ligar/Desligar VCH3: JB CH3,V0
V1: MOV R7,#00h 2. Escolher uma das chaves para definir o MOV DPTR,#Tabela4
sentido horário ou anti-horário
V2: MOV A,R7
Rótulo Mnemônico 3. Escolher uma das chaves para definir se o
acionamento é com meio passo ou passo MOVC A,@A+DPTR
ATRASO: MOV R0,#80
completo CJNE A,#0FFH,V4
V3: MOV R1,#25
SJMP V1
DJNZ R1,$
Tabela1: DB 03H, 06H, 0CH, 09H, 0FFH V4: MOV P1,A
DJNZ R0,V3
Tabela2: DB 09H, 0CH, 06H, 03H, 0FFH LCALL ATRASO
RET
INC R7
Tabela3: DB 01H, 03H, 02H, 06H, 04H, 0CH, 08H, 09H, 0FFH
SJMP V2
Tabela4: DB 09H, 08H, 0CH, 04H, 06H, 02H, 03H, 01H, 0FFH
48
Prof. José Wilson Lima Nerys 48 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Início
Mostra em P1 o Maior valor
de uma Tabela
Configurações iniciais:
SP  2FH, DPTR  #Tabela
R0 recebe o maior valor, R0  00H, R7  00H
antes de mostrar em P1

A  R7
A  ((A + DPTR))

S
A = FF?

N
S P1  R0
A >= R0?

R0  A N

Fim

R7  R7 + 1

49
Prof. José Wilson Lima Nerys 49 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Mostra em P1 o Maior valor de uma Tabela

Rótulo Mnemônico Rótulo Mnemônico Rótulo Mnemônico Offset R7


ORG 00H V1: MOV A,R7 Tabela: DB 0A3H 0
LJMP INICIO MOVC A,@A+DPTR DB 16H 1
CJNE A,#0FFH,SEGUE DB 05H 2
ORG 30H MOV P1,R0 DB 09H 3
INICIO: MOV SP,#2FH SJMP FIM DB 0A1H 4
MOV DB 35H 5
DPTR,#Tabela SEGUE: CLR CY DB 0C5H 6
MOV R0,#00h MOV B,A DB 72H 7
MOV R7,#00H SUBB A,R0 DB 40H 8
JC V2 DB 0FFH 9
MOV R0,B
V2: INC R7 FIM: END
SJMP V1

50
Prof. José Wilson Lima Nerys 50 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Multiplicação e Divisão de Números de 8 bits

Rótulo Mnemônico Rótulo Mnemônico


ORG 00H ORG 00H
LJMP INICIO LJMP INICIO

ORG 00H ORG 00H


INICIO: MOV SP,#2FH INICIO: MOV SP,#2FH
MOV A,#200 MOV A,#200
MOV B,#40 MOV B,#40
MUL AB DIV AB
JB P3.2,$ JB P3.2,$
MOV P2,A MOV P2,A
MOV P1,B MOV P1,B
END END

51
Prof. José Wilson Lima Nerys 51 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Adição e Subtração de Números de 16 bits

52
Prof. José Wilson Lima Nerys 52 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
ADIÇÃO DE NÚMEROS DE 16 BITS Z = X + Y
XH EQU 10H ; Número X de 16 bits
XL EQU 11H
YH EQU 12H ; Número Y de 16 bits
YL EQU 13H
ZH EQU 14H ; Resultado da adição de 16 bits
ZL EQU 15H
ZOV BIT 00H ; Flag de carry do resultado de 16 bits

ORG 00H Byte Superior (H) Byte Inferior (L)


LJMP INICIO

ORG 30H X (16 XH(H) XH(L) XL(H) XL(L)


INICIO: MOV SP,#2FH bits)
MOV XH,#40H
MOV XL,#00H Y (16 YH(H) YH(L) YL(H) YL(L)
MOV YH,#35H bits)
MOV YL,#50H
Z (16 bits) ZH(H) ZH(L) ZL(H) ZL(L)
MOV A,XL
ADD A,YL ; Adição do byte inferior, sem carry
MOV ZL,A

MOV A,XH
ADDC A,YH ; Adição do byte superior, com carry
XH(H)  4 bits superiores de XH
MOV ZH,A XH(L)  4 bits inferiores de XH
MOV ZOV,C
XL(H)  4 bits superiores de XL
END XL(L)  4 bits inferiores de XL

53
Prof. José Wilson Lima Nerys 53 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
SUBTRAÇÃO DE NÚMEROS DE 16 BITS Z = X - Y
XH EQU 10H ; Número X de 16 bits
XL EQU 11H
YH EQU 12H ; Número Y de 16 bits
YL EQU 13H
ZH EQU 14H ; Resultado da adição de 16 bits
ZL EQU 15H
ZOV BIT 00H ; Flag de carry do resultado de 16 bits

ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV XH,#40H
MOV XL,#00H
MOV YH,#35H
MOV YL,#50H

MOV A,XL
CLR CY
SUBB A,YL
MOV ZL,A

MOV A,XH
SUBB A,YH
MOV ZH,A
MOV ZOV,C

END
54
Prof. José Wilson Lima Nerys 54 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

+1
(55 9
0
+1 00
1
0
-1 +1 99 0 01

8 2
-1 +1
-2 +2

-3 +3
7 3
+1
-4 +4 00H
-5 4 FFH 01H
6
0
5 -1 +1

55
Prof. José Wilson Lima Nerys 55 )
Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Instrução DAA – Ajuste Decimal da Adição
É uma operação em BCD, que segue a seguinte lógica, após a adição de dois números:
1. Se a Flag AC = 1 (transporte do bit 3 para o 4) ou o resultado do nibble inferior for de A a F,
então o valor 06H deve ser adicionado ao resultado e a Flag AC deve ser setada
2. Se a Flag CY = 1 (carry do bit 7 para o bit 8) ou o nibble superior for maior que 9,
então o valor 60H deve ser adicionado ao resultado e a Flag CY deve ser setada.
Exemplo: MOV A,#28H
ADD A,#68H
DAA
CY = 0 AC = 1
Hex Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
0 1 1 1

28h 0 0 1 0 1 0 0 0
+
68h 0 1 1 0 1 0 0 0 ADD A,#06H
ADD A,#68H 90h 1 0 0 1 0 0 0 0

06h 0 0 0 0 0 1 1 0

DAA 96h 1 0 0 1 0 1 1 0

56
Prof. José Wilson Lima Nerys 56 Microprocessadores
Instrução – Ajuste
DAAFederal
Universidade Decimal da Adição
de Goiás Exemplo 2: MOV A,#60H
ADD A,#99H
Escola de Engenharia Elétrica, Mecânica e de Computação
AC = 0 DAA
CY = 0
ADD A,#99H
Hex Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 DAA
0 0

60H 0 1 1 0 0 0 0 0
+
99H 1 0 0 1 1 0 0 1

F9h 1 1 1 1 1 0 0 1
ADD A,#99H ADD A,#60H
60h 0 1 1 0 0 0 0 0

DAA 59h 1 0 1 0 1 1 0 0 1

CY = 0 AC = 1
Hex Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
0 0 0 1 1 1

59H 0 1 0 1 1 0 0 1
+
99H 1 0 0 1 1 0 0 1

ADD A,#99H F2h 1 1 1 1 0 0 1 0


ADD A,#66H
66h 0 1 1 0 0 1 1 0

DAA 58h 1 0 1 0 1 1 0 0 0
57
Prof. José Wilson Lima Nerys 57 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Contagem decimal crescente de 0 a 59 e decrescente de 59 a 0

; CRESCENTE ; DECRESCENTE

ORG 00H ORG 00H


LJMP INICIO LJMP INICIO

ORG 30H ORG 30H


INICIO: MOV SP,#2FH INICIO: MOV SP,#2FH
V2: MOV A,#0 V2: MOV A,#60H
V1: MOV P1,A V1: ADD A,#99h
ADD A,#1 DA A
DA A MOV P1,A
CJNE A,#60H,V1 CJNE A,#00H,V1
SJMP V2 SJMP V2

END END

Enquanto A > 00H, continua contagem


Enquanto A < 60H, continua decrescente
contagem crescente

58
Prof. José Wilson Lima Nerys 58 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Relógio HH:MM:SS

59
Prof. José Wilson Lima Nerys 59 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
RÓTULO MNEMÔNICO
SEG EQU 10H RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO

MIN EQU 11H MOV A,SEG ADD A,#01H

HORA EQU 12H ADD A,#01H DA A

ORG 00H DA A MOV HORA,A

LJMP INICIO MOV SEG,A CJNE A,#24H,V2


CJNE A,#60H,V2 SJMP V1

ORG 30H
INICIO: MOV SP,#2FH MOV SEG,#00H ATRASO: MOV R0,#250

V1: MOV SEG,#00H MOV A,MIN V3: MOV R1,#250

MOV MIN,#00H ADD A,#01H DJNZ R1,$

MOV HORA,#00H DA A DJNZ R0,V3


MOV MIN,A RET

V2: MOV P2,SEG CJNE A,#60H,V2

MOV P1,MIN END

MOV P0,HORA MOV MIN,#00H


LCALL ATRASO MOV A,HORA Relógio HH:MM:SS

60
Prof. José Wilson Lima Nerys 60 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Cronômetro: MM:SS

61
Prof. José Wilson Lima Nerys 61 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Cronômetro Decrescente: MM:SS


RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
MIN EQU 11H MOV A,SEG MOV P2,MIN
SEG EQU 12H ADD A,#99H MOV P1,SEG
BUZZER EQU P3.7 DA A SETB BUZZER
ORG 00H MOV SEG,A MOV R7,#10
LJMP INICIO CJNE A,#99H,V1 V2: LCALL ATRASO
DJNZ R7,V2
ORG 30H MOV SEG,#59H CLR BUZZER
INICIO: MOV SP,#2FH MOV A,MIN SJMP $
CLR BUZZER ADD A,#99H
MOV MIN,#20H DA A ATRASO: MOV R0,#250
MOV SEG,#00H MOV MIN,A V3: MOV R1,#250
CJNE A,#99H,V1 DJNZ R1,$
V1: MOV P2,MIN DJNZ R0,V3
MOV P1,SEG MOV MIN,#00H RET
LCALL ATRASO MOV SEG,#00H END

62
Prof. José Wilson Lima Nerys 62 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Usando Interrupções (antes de estudar interrupções)

Para escolher o valor inicial do cronômetro e para iniciar a contagem

RÓTULO MNEMÔNICO COMENTÁRIO


ORG 00H
LJMP INICIO

ORG 03H Endereço da Interrupção externa 0 (EX0)


MOV A,MIN A recebe o valor atual dos Minutos
ADD A,#01H Acrescenta 01H ao conteúdo de A
DA A Faz o ajuste decimal do conteúdo de A
MOV MIN,A Transfere para MIN o conteúdo atualizado dos minutos
RETI Retorna da Interrupção externa 0

ORG 13H Endereço da Interrupção externa 0 (EX1)


SETB F0 Faz F0 = 1 para dar início à contagem
RETI Retorna da interrupção externa 1

63
Prof. José Wilson Lima Nerys 63 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Usando Interrupções (antes de estudar interrupções)

Para escolher o valor inicial do cronômetro e para iniciar a contagem

RÓTULO MNEMÔNICO COMENTÁRIO


ORG 30H
INÍCIO: MOV SP,#2FH
MOV IE,#85H Habilita as interrupções externas 0 e 1
MOV TCON,#05H As interrupções externas 0 e 1 são por transição
CLR F0 Limpa a flag F0, que é usada para iniciar a contagem
MOV SEG,#00H Faz o registrador SEG = 0
CLR BUZZER Limpa a saída que aciona o alarme
V1: MOV P1,SEG Mostra valor atual de MINuto e SEGundo
MOV P2,MIN
JNB F0,V1 Aguarda enquanto F0 = 0

64
Prof. José Wilson Lima Nerys 64 Microprocessadores
Universidade Federal de Goiás Endereços da ROM (8 Kbytes)
Escola de Engenharia Elétrica, Mecânica e de Computação

Interrupções do 8051
Endereços de Desvio das Interrupções: 0000h
0001h
Endereço de 0002h
Fonte de Interrupção
desvio 0003h EXT0
0004h
Reset 0000h 0005h
Interrupção Externa 0 (INT0\) 0003h 0006h
0007h
Temporizador/Contador 0 000Bh 0008h
Interrupção Externa 1 (INT1\) 0013h 0009h
000Ah
Temporizador/Contador 1 001Bh 000Bh TEMP0
Canal Serial 0023h 000Ch
000Dh
000Eh
Registradores associados às interrupções: 000Fh
0010h
Registrador de Habilitação: IE (Interrupt Enable) = Registrador A8h 0011h
Registrador de Prioridades: IP (Interrupt Priority) = Registrador B8h 0012h
0013h EXT1
Registrador de Controle: TCON (Timer Control) = Registrador 88h

65
Prof. José Wilson Lima Nerys 65 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Registrador de Habilitação: IE (Interrupt Enable) = Registrador A8h
Bit 7 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
EA x x ES ET1 EX1 ET0 EX0

EA  Enable All. Com EA = 1, todas as interrupções podem ser habilitadas


individualmente. Com EA = 0, ficam todas mascaradas.
ES  Enable Serial. Com ES = 1, a interrupção pelo canal serial fica habilitada.
Com ES = 0 os pedidos de interrupção da serial são ignorados.
ET1  Enable Timer 1. Com ET1 = 1, as interrupções pedidas pelo Timer 1
são atendidas. Com ET1 = 0 elas são ignoradas.
EX1  Enable External Interrupt 1. Com EX1 = 1, as interrupções pedidas através
do pino P3.3 são atendidas. Com EX1 = 0 elas são ignoradas.
ET0  Enable Timer 0. Com ET0 = 1, as interrupções pedidas pelo Timer 0
são atendidas. Com ET0 = 0 elas são ignoradas.
EX0  Enable External Interrupt 0. Com EX0 = 1, as interrupções pedidas através
pino P3.2 são atendidas. Com EX0 = 0 elas são ignoradas.

66
Prof. José Wilson Lima Nerys 66 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Registrador de Controle: TCON (Timer Control) = Registrador 88h

TCON = TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

IE1  Interrupt 1 Edge Flag - É setado pelo hardware quando uma interrupção externa
através de INT1\ é detectada. É zerada quando da execução da instrução RETI
(retorno da subrotina de atendimento).
IT1  (Interrupt 1 Type) - Quando IT1 = 1 a interrupção externa 1 será reconhecida pela
transição de 1 para 0 no pino P3.3. Quando IT1 = 0, a interrupção é reconhecida
quando o sinal no pino P3.3 está em nível baixo (0 = interrupção por nível).
IE0  (Interrupt 0 Edge Flag) - É setado pelo hardware quando uma interrupção externa
através de INT0\ é detectada. É zerada quando da execução da instrução RETI.
IT0  (Interrupt 0 Type) - Quando IT0 = 1 a interrupção externa 0 será reconhecida pela
transição de 1 para 0 no pino INTO\. Quando IT0 = 0, a interrupção é reconhecida
quando o sinal no pino INTO\ está em nível baixo (0).

67
Prof. José Wilson Lima Nerys 67 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Registrador de Prioridade: IP (Interrupt Priority) = Registrador B8h

IP = X X X PS PT1 PX1 PT0 PX0

PS  Priority of Serial Port Interrupt  Sendo PS = 1, a interrupção serial tem


prioridade alta.
PT1  Priority of Timer Interrupt 1 Sendo PT1 = 1, a interrupção do temporizador
1 tem prioridade alta.
PX1  Priority of External Interrupt 1  Sendo PX1 = 1, a interrupção externa 1
tem prioridade alta.
PT0  Priority of Timer Interrupt 0 Sendo PT0 = 1, a interrupção do temporizador
0 tem prioridade alta.
PX0  Priority of External Interrupt 0  Sendo PX0 = 1, a interrupção externa 0
tem prioridade alta.

68
Prof. José Wilson Lima Nerys 68 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Uma interrupção ter prioridade alta (Prioridade 1) significa que ela será atendida sempre
que solicitada, mesmo quando o programa está executando uma outra interrupção. No
caso de todos os canais de interrupção terem prioridade 0 ou 1, a escala de prioridade é
como segue:

Interrupção Prioridade
Externa 0 Maior
Temporizador 0
Externa 1
Temporizador 1
Serial Menor

69
Prof. José Wilson Lima Nerys 69 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

70 Ligando uma Lâmpada usando a Interrupção Externa 0


LAMP EQU P2.7
5V

ORG 00H 0V
LJMP INICIO
Interrupção externa 0 é por transição

ORG 03H
CPL LAMP
RETI Interrupção externa 0 habilitada

ORG 30H IE
INICIO: MOV SP,#2FH EA ES ET1 EX1 ET0 EX0
MOV P1,#0 1 0 0 0 0 0 0 1
MOV P2,#0
MOV P0,#0 TCON
MOV IE,#81H
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
MOV TCON,#01H
0 0 0 0 0 0 0 1
SJMP $

END Laço infinito, aguardando pedido de interrupção

70
Prof. José Wilson Lima Nerys 70 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

71; ROTAÇÃO DE LEDS COM INTERRUPÇÕES


; INTERRUPÇÃO ZERO POR TRANSIÇÃO
; INTERRUPÇÃO 1 POR NÍVEL

ORG 00H
LJMP INICIO

ORG 03H ; Interrupção por transição


MOV P1,A
RL A
RETI

ORG 13H ; Interrupção por nível


MOV P1,A
RR A
RETI

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#85H ; IE = 1000 0101; EA=1; EX1=1; EX0=1
MOV TCON,#01 ; TCON = 0000 0001 --> IT0 = 1; INT0 POR TRANSIÇÃO
MOV A,#1
SJMP $

END

71
Prof. José Wilson Lima Nerys 71 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
; ROTAÇÃO DE LEDS COM INTERRUPÇÕES
72
; INTERRUPÇÃO ZERO POR TRANSIÇÃO Acrescentando a linha a seguir, ao corpo principal
; INTERRUPÇÃO 1 POR NÍVEL do programa, a interrupção externa zero passa a
ter prioridade alta
ORG 00H
LJMP INICIO
MOV IP,#01H ; IP = 0000 0001 --> PX0 = 1
ORG 03H ; Interrupção por transição
LJMP ESQUERDA
Significa que, ao ser solicitada, a interrupção
ORG 13H ; Interrupção por nível externa zero é atendida, mesmo se estiver
LJMP DIREITA atendendo a externa 1.
ORG 30H DIREITA:
INICIO: MOV SP,#2FH MOV R7,#32
MOV IE,#85H V2: MOV P1,A
MOV TCON,#01 RR A
MOV A,#1 LCALL ATRASO
SJMP $ ; LOOP INFINITO DJNZ R7,V2
RETI
ESQUERDA:
MOV R6,#8 ATRASO: MOV R0,#200
V1: MOV P1,A V3: MOV R1,#250
RL A DJNZ R1,$
LCALL ATRASO DJNZ R0,V3
DJNZ R6,V1 RET
RETI
72
Prof. José Wilson Lima Nerys END
72 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Programa que envia uma contagem crescente para a porta P1 a cada solicitação da
interrupção INT0 (através do pino P3.2).
Contagem encerra quando A retorna para 00

RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO


ORG 00H CONTAGEM: MOV P1,A
Exemplos

LJMP INICIO INC A


LCALL ATRASO
ORG 03H CJNE A,#00H,CONTAGEM
LJMP CONTAGEM RETI

ATRASO: MOV R0,#10


ORG 30H
V1: MOV R1,#100
INICIO: MOV SP, #2FH
DJNZ R1, $
MOV IE, #81H
DJNZ R0, V1
MOV TCON, #01H RET
MOV A, #00H
SJMP $ END

Laço infinito aguardando interrupção

Habilita
73interrupção externa 0 por transição
Prof. José Wilson Lima Nerys 73 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Programa que envia uma contagem crescente para a porta P1 a cada solicitação da
interrupção INT0 e uma decrescente a cada solicitação da INT1.

RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO


ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC

MOV A,#00H MOV A,#0FFH


LJMP INICIO
V2: MOV P1,A
V1: MOV P1,A
LCALL ATRASO
ORG 03H INC A
DEC A
LJMP ATENDE0 LCALL ATRASO
CJNE A,#0FFH,V2
CJNE A,#00H,V1 POP ACC
ORG 13H POP ACC RETI
LJMP ATENDE1 RETI
ATRASO: MOV R0,#10
Exemplos V3: MOV R1,#100
ORG 30H
DJNZ R1, $
INICIO: MOV SP, #2FH
DJNZ R0, V3
MOV IE, #85H Habilita Interrupções INT0
RET
MOV TCON, #05H e INT1 por transição
END
SJMP $
Laço infinito aguardando interrupção
74
Prof. José Wilson Lima Nerys 74 Microprocessadores
Universidade Federal de Goiás Exemplos
Escola de Engenharia Elétrica, Mecânica e de Computação
Programa que envia uma contagem decimal crescente para a porta P1 a cada solicitação da interrupção
INT0 e uma decimal decrescente a cada solicitação da INT1.

RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO


ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC
LJMP INICIO V1: MOV P1,A V2: ADD A,#99H
DA A
ADD A,#01H
MOV P1,A
ORG 03H DA A
LCALL ATRASO
LJMP ATENDE0 LCALL ATRASO
CJNE A,#00H,V2
CJNE A,#00H,V1 POP ACC
ORG 13H POP ACC RETI
LJMP ATENDE1 RETI
ATRASO: MOV R0,#250
Adiciona 1 e faz
ORG 30H Subtrai 1 e faz V3: MOV R1,#250
ajuste decimal
INICIO: MOV SP, #2FH ajuste decimal DJNZ R1, $

MOV IE, #85H DJNZ R0, V3


Habilita Interrupções INT0 e
RET
MOV TCON, #05H INT1 por transição
END
MOV A,#00H
SJMP $ Laço infinito aguardando interrupção

75
Prof. José Wilson Lima Nerys 75 Microprocessadores
Universidade Federal de Goiás
Programa que envia umaEscola de Engenharia
contagem crescente Elétrica, Mecânica
para a porta e desolicitação
P1 a cada Computação da
interrupção INT0 e uma decrescente a cada solicitação da INT1 (Prioridade alta).

RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO


ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC

MOV A,#00H MOV A,#0FFH


LJMP INICIO
V2: MOV P1,A
V1: MOV P1,A
LCALL ATRASO
ORG 03H INC A
DEC A
LJMP ATENDE0 LCALL ATRASO
CJNE A,#0FFH,V2
CJNE A,#00H,V1 POP ACC
ORG 13H POP ACC RETI
LJMP ATENDE1 RETI
ATRASO: MOV R0,#10
Exemplos V3: MOV R1,#100
ORG 30H
DJNZ R1, $
INICIO: MOV SP, #2FH
Habilita Interrupções INT0 e DJNZ R0, V3
MOV IE, #85H
INT1 por transição. RET
MOV TCON, #05H INT1 tem prioridade alta END
MOV IP,#04H
SJMP $
Laço infinito aguardando interrupção
76
Prof. José Wilson Lima Nerys 76 Microprocessadores
Universidade Federal de Goiás
ProgramaEscola de Engenharia
rotaciona Elétrica, Mecânica
Leds conectados e de Computação
à porta P1.
INT0 rotaciona à esquerda; INT1 rotaciona à direita.

RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO


ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC

MOV A,#01H MOV A,#80H


LJMP INICIO
V2: MOV P1,A
V1: MOV P1,A
LCALL ATRASO
ORG 03H RL A
RR A
LJMP ATENDE0 LCALL ATRASO
CJNE A,#80H,V2
CJNE A,#01H,V1 POP ACC
ORG 13H POP ACC RETI
LJMP ATENDE1 RETI
ATRASO: MOV R0,#250
Exemplos V3: MOV R1,#250
ORG 30H
DJNZ R1, $
INICIO: MOV SP, #2FH
DJNZ R0, V3
MOV IE, #85H Habilita Interrupções INT0
e INT1 por transição RET
MOV TCON, #05H
END
SJMP $
Laço infinito aguardando interrupção

77
Prof. José Wilson Lima Nerys 77 Microprocessadores
Universidade Federal de Goiás
Programa rotaciona
Escola Leds conectados
de Engenharia Elétrica, àMecânica
porta P1.e de Computação
INT0 rotaciona à esquerda; INT1 rotaciona à direita (com prioridade alta).

RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO


ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC

MOV A,#01H MOV A,#80H


LJMP INICIO
V2: MOV P1,A
V1: MOV P1,A
LCALL ATRASO
ORG 03H RL A
RR A
LJMP ATENDE0 LCALL ATRASO
CJNE A,#80H,V2
CJNE A,#01H,V1 POP ACC
ORG 13H POP ACC RETI
LJMP ATENDE1 RETI
ATRASO: MOV R0,#250
Exemplos V3: MOV R1,#250
ORG 30H
DJNZ R1, $
INICIO: MOV SP, #2FH
Habilita Interrupções INT0 e DJNZ R0, V3
MOV IE, #85H
INT1 por transição. RET
MOV TCON, #05H INT1 tem prioridade alta END
MOV IP,#04H
SJMP $
Laço infinito aguardando interrupção
78
Prof. José Wilson Lima Nerys 78 Microprocessadores
Universidade Federal de Goiás Exemplos
Programa rotacionaEscola
Motorde
deEngenharia Elétrica,
Passo conectado Mecânica
ao nibble e deda
inferior Computação
porta P1.
INT0 no sentido anti-horário; INT1 rotaciona mp sentido horário.

RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO


ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC

MOV R7,#18 MOR R7,#36


LJMP INICIO
V2: MOV P1,A
V1: MOV P1,A
RR A
ORG 03H RL A
LCALL ATRASO
LJMP ATENDE0 LCALL ATRASO
DJNZ R7,V2
DJNZ R7,V1 POP ACC
ORG 13H POP ACC RETI
LJMP ATENDE1 RETI
ATRASO: MOV R0,#250
São 18 passos de 5º V3: MOV R1,#250
ORG 30H
Total: 90º
DJNZ R1, $
INICIO: MOV SP, #2FH
DJNZ R0, V3
MOV IE, #85H
Habilita Interrupções INT0 e RET
MOV TCON, #05H INT1 por transição END
MOV A,#11H
SJMP $
Laço infinito aguardando interrupção
79
Prof. José Wilson Lima Nerys 79 Microprocessadores
INT0 mostra maior valor de uma Tabela. INT1 mostra o menor valor P0
Universidade Federal de Goiás
MAIOR EQU 10H Escola
Se a subtração A – de Engenharia
V1: Elétrica,
CLRMecânica
CY e de Computação
; LIMPA CY
MENOR EQU 11H MAIOR for positiva, MOV B,A ; GUARDA A EM B
80 EQU 12H CY=0. Então o valor
OFFSET SUBB A,MAIOR
de A, guardado em B, JC V2
ORG 00H é maior que o valor MOV MAIOR,B
LJMP INICIO MAIOR atual. ´Daí é V2: INC OFFSET
feita a substituição de SJMP MAIOR
ORG 03H MAIOR por B.
LJMP MAIOR MENOR: MOV A,OFFSET Se a subtração A –
MOVC A,@A+DPTR MENOR for negativa,
ORG 13H CJNE A,#0FFH,V3 CY=1. Então o valor de
LJMP MENOR MOV P0,MENOR A, guardado em B, é
RETI menor que o valor
ORG 30H MENOR atual. Daí é
INICIO: MOV SP,#2FH V3: CLR CY feita a substituição de
MOV DPTR,#TABELA MOV B,A MENOR por B.
MOV IE,#85H SUBB A,MENOR
MOV TCON,#05H JNC V4
MOV MENOR,B
V0: MOV MAIOR,#00H V4: INC OFFSET
MOV MENOR,#0FFH SJMP MENOR
MOV OFFSET,#00H
SJMP V0 TABELA: DB 14H, 87H, 25H, 99H, 0F0H, 08H,
0B1H, 44H, 15H, 71H, 33H, 55H, 66H, 0FFH
MAIOR: MOV A,OFFSET
MOVC A,@A+DPTR FIM: NOP
CJNE A,#0FFH,V1 END
MOV P2,MAIOR
RETI
80
Prof. José Wilson Lima Nerys 80 Microprocessadores
Entrada de Dados via Teclado de 12 teclas (com interrupção)
Universidade Federal de Goiás
Saída do e SaídaEscola
de Dados
de
via Display
Engenharia
de 7-segmentos
Elétrica, Mecânica e de Computação
Tecla
Decoder
1 0000
Se houver
81 necessidade de saber
2 0001
o número digitado,
3 0010
tem-se que fazer uma
4 0100 conversão com a
5 0101 tabela mostrada.
6 0110
7 1000
8 1001
9 1010
* 1100
0 1101
# 1110

Em uma
montagem real,
utiliza-se apenas
1 decodificador
para acionar os 4
displays de 7-
segmentos. Usa-
se multiplexação.

81
Prof. José Wilson Lima Nerys 81 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
; Leitura do Teclado com Interrupção
82
; Saída do Decodificador Conectada ao Nibble inferior de P1 Valor
Mostrado no
; Leitura SEM correção do valor lido e SEM eliminação do nibble superior Tecla
Saída do
display do
Decoder
; Usa decodificador para teclado 4 x 4, mas usa teclado 4 x 3 nibble
inferior

1 0000 0
ORG 00H
LJMP INICIO 2 0001 1
3 0010 2
ORG 13H ; Endereço da Interrupção Externa 1
4 0100 4
MOV A,P1 ; Acumulador A recebe a leitura do Teclado
MOV P0,A ; Mostra em P0 o conteúdo do Acumulador A 5 0101 5
RETI ; Retorna da interrupção 6 0110 6
7 1000 8
ORG 30H
8 1001 9
INICIO: MOV SP,#2FH ; Apontador de Pilha SP = 2FH
MOV IE,#84H ; IE = 1000 0100; EA = 1; EX1 = 1 9 1010 Nada

MOV TCON,#04H ; Interrupção Externa 1 por transição * 1100 Nada


SJMP $ ; Laço infinito aguardando interrupção
0 1101 Nada
END
# 1110 Nada

Nesse exemplo o valor lido do Teclado (sem fazer a conversão usando a tabela mostrada), é
enviada para a Porta P0. Nessa porta estão conectados 2 displays de 7-segmentos, que
mostrarão o conteúdo de A.
O nibble inferior de A é a leitura do teclado; o nibble superior não interessa nessa leitura
82 (pode
Prof. José Wilson Limaser considerado lixo)
Nerys 82 Microprocessadores
; Leitura do Teclado com Interrupção
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
; Saída do Decodificador Conectada ao Nibble inferior de P1
; Leitura
83 SEM correção do valor lido e COM eliminação do nibble superior
; Usa decodificador para teclado 4 x 4, mas usa teclado 4 x 3
Valor
Saída
Mostrado nos
Tecla do
2 displays de
Decoder
ORG 00H 7-segmentos
LJMP INICIO 1 0000 00
2 0001 01
ORG 13H ; Endereço da Interrupção Externa 1
MOV A,P1 ; Acumulador A recebe a leitura do Teclado 3 0010 02
ANL A,#0FH ; Elimina o nibble superior da leitura 4 0100 04
MOV P0,A ; Mostra em P0 o conteúdo do Acumulador A 5 0101 05
RETI ; Retorna da interrupção
6 0110 06
ORG 30H 7 1000 08
INICIO:MOV SP,#2FH ; Apontador de Pilha SP = 2FH 8 1001 09
MOV IE,#84H ; IE = 1000 0100; EA = 1; EX1 = 1
9 1010 0 Nada
MOV TCON,#04H ; Interrupção Externa 1 por transição
SJMP $ ; Laço infinito aguardando interrupção * 1100 0 Nada

0 1101 0 Nada
END # 1110 0 Nada

Nesse exemplo o valor lido do Teclado (sem fazer a conversão usando a tabela mostrada), é enviada para
a Porta P0. Antes de mostrar em P0 o nibble superior é eliminado com a instrução AND: A  A + 0FH

83
Prof. José Wilson Lima Nerys 83 Microprocessadores
; Leitura do Teclado com Interrupção
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
; Saída do Decodificador Conectada ao Nibble inferior de P1
; Leitura
84 COM correção do valor lido e COM eliminação do nibble superior
; Usa decodificador para teclado 4 x 4, mas usa teclado 4 x 3
ORG 00H Saída do Valor
Tecla Displays
Decoder corrigido
LJMP INICIO
1 0000 01 01
ORG 13H ; Endereço da Interrupção Externa 1 2 0001 02 02
MOV A,P1 ; Acumulador A recebe a leitura do Teclado 3 0010 03 03
ANL A,#0FH ; Elimina o nibble superior da leitura
4 0100 04 04
MOVC A,@A+DPTR ; Lê da tabela o valor corrigido da leitura
MOV P0,A ; Mostra em P0 o conteúdo do Acumulador A 5 0101 05 05
RETI ; Retorna da interrupção 6 0110 06 06
7 1000 07 07
ORG 30H
INICIO:MOV SP,#2FH ; Apontador de Pilha SP = 2FH 8 1001 08 08
MOV IE,#84H ; IE = 1000 0100; EA = 1; EX1 = 1 9 1010 09 09
MOV TCON,#04H ; Interrupção Externa 1 por transição * 1100 0C 0 Nada
MOV DPTR,#TECLADO
0 1101 00 00
SJMP $ ; Laço infinito aguardando interrupção
# 1110 0E 0 Nada

TECLADO:
DB 01H, 02H, 03H, 00H, 04H, 05H, 06H, 00H, 07H, 08H, 09H, 00H, 0CH, 00H, 0EH, 0FH
END

Nesse exemplo o valor lido do Teclado é corrigido através da tabela de correspondência


84
Prof. José Wilson Lima Nerys 84 Microprocessadores
Montagem Alternativa – Teclado de 16 Teclas construído com Push-Buttons
Universidade Federal de Goiás
Saída do
Escola de Engenharia Elétrica, Mecânica e de Computação
Tecla
Decoder
0 85
0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
ENTE 1010
R
= 1011
ADD 1100
SUB 1101
MUL 1110
DIV 1111

Não há
necessidade
de correção
da leitura do
teclado de
16 teclas
85
Prof. José Wilson Lima Nerys 85 Microprocessadores
Decodificação para o display de 7-segmentos via Software
Universidade Federal de Goiás
Escola de Engenharia
x g f Elétrica,
e d cMecânica
b a e de Computação
0 1 1 1 0 1 1 1
86 a

Saída
Tecla do Porta P0 f
g
b

74C922
e c
0 0000 3FH = 0011 1111
d
1 0001 06H = 000 0110
2 0010 5BH = 0101 1011
3 0011 4FH = 0100 1111
4 0100 66H = 0110 0110
5 0101 6DH = 0110 1101
6 0110 7DH = 0111 1101
7 0111 07H = 0000 0111
8 1000 7FH = 0111 1111
9 1001 67H = 0110 0111
ENTER 1010 77H = 0111 0111
= 1011 7CH = 0111 1100
ADD 1100 39H = 0011 1001
SUB 1101 5EH = 0101 1110
MUL 1110 79H = 0111 1001
DIV 1111 71H = 0111 0001

86
Prof. José Wilson Lima Nerys 86 Microprocessadores
Universidade Federal de Goiás
; Leitura do Teclado com Interrupção Valor Mostrado
Escola de Engenharia Elétrica, Mecânica e de Computação
Saída do nos 2 displays
Tecla
Decoder de 7-
; Saída87
do Decodificador Conectada ao Nibble inferior de P1 segmentos

; Leitura COM eliminação do nibble superior 0 0000 00


; Usa decodificador para teclado 4 x 4, mas usa teclado 4 x 4 1 0001 01
2 0010 02

ORG 00H 3 0011 03


LJMP INICIO 4 0100 04
5 0101 05
ORG 13H ; Endereço da Interrupção Externa 1
6 0110 06
MOV A,P1 ; Acumulador A recebe a leitura do Teclado
ANL A,#0FH ; Elimina o nibble superior da leitura 7 0111 07
MOV P0,A ; Mostra em P0 o conteúdo do Acumulador A 8 1000 08
RETI ; Retorna da interrupção 9 1001 09

ORG 30H ENTER 1010 0 Nada


INICIO:MOV SP,#2FH ; Apontador de Pilha SP = 2FH = 1011 0 Nada
MOV IE,#84H ; IE = 1000 0100; EA = 1; EX1 = 1 ADD 1100 0 Nada
MOV TCON,#04H ; Interrupção Externa 1 por transição
SUB 1101 0 Nada
SJMP $ ; Laço infinito aguardando interrupção
MUL 1110 0 Nada
END DIV 1111 0 Nada

Nesse exemplo o valor lido do Teclado não precisa ser corrigido porque a saída binária do decodificador
do teclado corresponde ao dígito escolhido no Teclado.

87
Prof. José Wilson Lima Nerys 87 Microprocessadores
Exemplo 1: Adição de
Universidade 2 Números
Federal de Goiáscom 1 dígito cada – Entrada pelo Teclado de 16 teclas
X1 EQU 10H Escola de Engenharia Elétrica, Mecânica e de Computação
TECLADO:
X2 EQU 11H MOV A,P1
88
SOMA EQU 12H ANL A,#0FH
DIGITO BIT 00H JB DIGITO,SEGUNDO
MOV X1,A
ORG 00H MOV P0,A
LJMP INICIO SETB DIGITO
RETI
ORG 13H
LJMP TECLADO SEGUNDO: MOV X2,A
MOV P2,A
ORG 30H CLR DIGITO
INICIO: MOV SP,#2FH SETB F0
MOV IE,#84H RETI
MOV TCON,#04H
CLR F0 END
CLR DIGITO
V1: JNB F0,$ X1 recebe, via Porta P1, o primeiro dígito escolhido no Teclado de 16 teclas. Esse
dígito é mostrado na Porta P0
MOV A,X1
ADD A,X2 X2 recebe o segundo dígito, que é mostrado na Porta P2
MOV P0,A
CLR F0 Logo após a entrada do segundo dígito, a flag F0 é setada e a soma de X1 + X2 é
SJMP V1 realizada. O resultado é colocado em SOMA e mostrado em P0

O loop JNB F0,$ fica aguardando encerrar a entrada de dados. Quando os dados estão
completos, F0 é setada e o processamento vai para a linha seguinte para adicionar X1 + X2

88
Prof. José Wilson Lima Nerys 88 Microprocessadores
Exemplo 2: Adição de 2 Números com 2 dígitos cada – Entrada pelo Teclado de 16 teclas
Universidade Federal de Goiás
X1 EQU 10H EscolaTECLADO:
de Engenharia Elétrica, Mecânica eV3:de Computação
CJNE R0,#2,V4
X2 EQU 11H MOV A,P1 SWAP A
SOMA89 EQU 12H ANL A,#0FH MOV X2,A
DIGITO BIT 00H CJNE A,#0BH,LEITURA MOV P0,A
SETB F0 INC R0
ORG 00H MOV R0,#0 RETI
LJMP INICIO RETI
V4: CJNE R0,#3,V5
ORG 13H LEITURA: ORL A,X2
LJMP TECLADO CJNE R0,#0,V2 ; MOV X2,A
MOV P0,#0 MOV P0,A
SWAP A V5: INC R0
ORG 30H MOV X1,A RETI
INICIO: MOV SP,#2FH MOV P0,A
MOV IE,#84H INC R0 END
MOV TCON,#04H RETI
CLR F0
CLR DIGITO V2: CJNE R0,#1,V3 R0 é usado para indicar a sequência de
MOV R0,#0 ORL A,X1 entrada dos dígitos. R0 = 0 corresponde ao
MOV X1,A primeiro dígito; R0 = 3 corresponde ao quarto
V1: JNB F0,$ MOV P0,A e último dígito.
INC R0 O primeiro e o terceiro dígitos são trasladados
MOV A,X1 RETI do nibble inferior para o superior através da
ADD A,X2 instrução SWAP A; depois são unidas com o 2º
MOV P0,A e 4º dígitos usando a instrução OR.
CLR F0
SJMP V1
O loop JNB F0,$ fica aguardando encerrar a entrada de dados. Quando os dados estão
89
Prof. José Wilson Lima Nerys 89paraMicroprocessadores
completos, F0 é setada e o processamento vai para a linha seguinte adicionar X1 + X2
ExemploUniversidade
3: 4 Operações comde2 Goiás
Federal Números de 2 dígitos cada – Entrada pelo Teclado de 16 teclas
Escola de Engenharia Elétrica, Mecânica e de Computação
X1 EQU 10H
X2 90 EQU 11H V1: JNB F0,$ Multiplica: CJNE R1,#3,Divide
RESULTADO EQU 12H MOV A,X1
DIGITO BIT 00H CJNE R1,#1,Subtracao MOV B,X2
Adicao: MOV A,X1 MUL AB
ORG 00H ADD A,X2 MOV P2,B
LJMP INICIO MOV P2,#0 MOV P0,A
MOV P0,A CLR F0
ORG 13H CLR F0 SJMP V1
LJMP TECLADO SJMP V1
Divide: CJNE R1,#4,V1
ORG 30H Subtracao: CJNE R1,#2,Multiplica MOV A,X1
INICIO: MOV SP,#2FH MOV A,X1 MOV B,X2
MOV IE,#84H CLR CY DIV AB
MOV TCON,#04H SUBB A,X2 MOV P2,#0
CLR F0 MOV P2,#0 MOV P0,A
MOV P0,A CLR F0
CLR DIGITO CLR F0 SJMP V1
MOV P2,#0 SJMP V1
MOV P0,#0
MOV R0,#0
MOV R1,#0 R0 é usado para indicar a sequência de entrada dos 4 dígitos. R0 = 0 corresponde ao
primeiro dígito; R0 = 3 corresponde ao quarto e último dígito.
R1 indica a operação. R1 = 1 é adição; 2, subtração; 3 multiplicação e 4 é divisão.
Não é esperada subtração onde o minuendo seja menor que o subtraendo, nem
divisão onde o divisor seja maior que o dividendo.

90
Prof. José Wilson Lima Nerys 90 Microprocessadores
ExemploUniversidade
3: 4 Operações comde2 Goiás
Federal Números de 2 dígitos cada – Entrada pelo Teclado de 16 teclas
Escola de Engenharia Elétrica, Mecânica e de Computação
TECLADO: V3: CJNE R0,#2,V4 V4: CJNE R0,#3,V5
SWAP A
91MOV A,P1
ANL A,#0FH MOV X2,A
CJNE A,#0CH,OP1
CJNE A,#0BH,LEITURA MOV R1,#1 ; Adição MOV P0,A
SETB F0 INC R0 INC R0
MOV R0,#0 RETI RETI
RETI
OP1: CJNE A,#0DH,OP2 V5: CJNE R0,#4,V6
LEITURA: MOV R1,#2 ; Subtração ORL A,X2
CJNE R0,#0,V2 INC R0 MOV X2,A
MOV P0,#0 RETI MOV P0,A
SWAP A V6: INC R0
MOV X1,A OP2: CJNE A,#0EH,OP3 RETI
MOV P0,A MOV R1,#3 ; Multiplica
INC R0 INC R0 END
RETI RETI

V2: CJNE R0,#1,V3 OP3: CJNE A,#0FH,OP4


ORL A,X1 MOV R1,#4 ; Divisão
MOV X1,A OP4: INC R0
MOV P0,A RETI
INC R0
RETI

Tanto a entrada quanto a saída de dados é em HEXADECIMAL.

91
Prof. José Wilson Lima Nerys 91 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Entrada de Dados em Decimal:
92
A entrada de dados nos exemplos anteriores foram em HEXADECIMAL.
Para a entrada DECIMAL deve-se seguir a formação de números decimais:

Número N de 3 dígitos:

N = 1º dígito x 100 + 2º dígito x 10 `+ 3º dígito =


= 1º dígito x 64H + 2º dígito x 0AH + 3º dígito

Saída de Dados em Decimal:


A saída de dados nos exemplos anteriores foram em HEXADECIMAL. Para que a saída seja em
decimal, deve-se fazer a transformação, fazendo a divisão do número hexadecimal por 10 (0AH),
até obter um quociente zero, como mostrado a seguir, para um número N:
N(H) 0Ah

r0 q0 0Ah N(H) = r2 r1 r0 (decimal)

r1 q1 0Ah

r2 0

92
Prof. José Wilson Lima Nerys 92 Microprocessadores
ExemploUniversidade
4: 4 Operações com
Federal de 2Goiás
Números de 2 dígitos cada – Entrada DECIMAL e Saída HEXA
Escola de Engenharia Elétrica, Mecânica e de Computação
X1 EQU 10H V1: JNB F0,$ Multiplica: CJNE R1,#3,Divide
X2 93 EQU 11H MOV A,X1
RESULTADO EQU 12H Adicao: CJNE R1,#1,Subtracao MOV B,X2
DIGITO BIT 00H MOV A,X1 MUL AB
ADD A,X2 MOV P2,B
ORG 00H MOV P2,#0 MOV P0,A
LJMP INICIO MOV P0,A CLR F0
CLR F0 SJMP V1
ORG 13H SJMP V1
LJMP TECLADO Divide: CJNE R1,#4,V1
Subtracao: CJNE R1,#2,Multiplica MOV A,X1
ORG 30H MOV A,X1 MOV B,X2
INICIO: MOV SP,#2FH CLR CY DIV AB
MOV IE,#84H SUBB A,X2 MOV P2,#0
MOV TCON,#04H MOV P2,#0 MOV P0,A
CLR F0 MOV P0,A CLR F0
CLR F0 SJMP V1
CLR DIGITO SJMP V1
MOV P2,#0
MOV P0,#0
MOV R0,#0
MOV R1,#0
R0 é usado para indicar a sequência de entrada dos 4 dígitos. R0 = 0 corresponde ao
primeiro dígito; R0 = 3 corresponde ao quarto e último dígito.
R1 indica a operação. R1 = 1 é adição; 2, subtração; 3 multiplicação e 4 é divisão.
Não é esperada subtração onde o minuendo seja menor que o subtraendo, nem
divisão onde o divisor seja maior que o dividendo.

93
Prof. José Wilson Lima Nerys 93 Microprocessadores
ExemploUniversidade
4: 4 Operações com
Federal de 2Goiás
Números de 2 dígitos cada – Entrada DECIMAL e Saída HEXA
TECLADO: ;=========================================
Escola de Engenharia Elétrica, Mecânica e de Computação
MOV A,P1 ; DEFINIÇÃO DA OPERAÇÃO A SER EXECUTADA
94
ANL A,#0FH
CJNE A,#0BH,LEITURA V3: CJNE R0,#2,V4
SETB F0 CJNE A,#0CH,OP1
MOV R0,#0 MOV R1,#1 ; Adição
RETI INC R0
RETI
LEITURA: OP1: CJNE A,#0DH,OP2
CJNE R0,#0,V2 MOV R1,#2 ; Subtração
SWAP A ; Inverte nibbles lidos de P1 INC R0
MOV R2,A ; Guarda 1º dígito no nibble superior de R2 RETI
MOV P0,A ; Mostra 1º dígito no nibble superior de P0 OP2: CJNE A,#0EH,OP3
SWAP A ; Retorna 1º dígito para o nibble inferior MOV R1,#3 ; Multiplicação
MOV B,#10 ; B = 10 decimal INC R0
MUL AB ; Faz A = 1º dígito de X1 ᵡ 10 RETI
MOV X1,A ; Transfere resultado para X1= 1º dígito x 10 OP3: CJNE A,#0FH,OP4
INC R0 MOV R1,#4 ; Divisão
RETI OP4: INC R0
RETI
V2: CJNE R0,#1,V3
MOV B,A ; guarda 2º dígito em B R2 é usado para guardar no nibble superior o 1º dígito do
ORL A,R2 ; junta 1º e 2º dígitos em A primeiro e do segundo números, para mostrar esse dígito
MOV P0,A ; mostra em P0 valor decimal digitado no display mais significativo. SWAP A transfere o 1º dígito
MOV A,B ; retorna 2º dígito para A do nibble inferior para o superior.
ADD A,X1 ; 1º dígito ᵡ 10 + 2º dígito O valor de A retorna ao valor original com SWAP A, para
MOV X1,A ;Guarda X1 hexadecimal poder fazer: 1º dígito x 10
INC R0
RETI
94
Prof. José Wilson Lima Nerys 94 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Exemplo 4: 4 Operações com 2 Números de 2 dígitos cada – Entrada DECIMAL e Saída HEXA
95
;-------------------------------------------
; Entrada do segundo número X2 de 8 bits
V4: CJNE R0,#2,V5
Nesse código a entrada de dados é em decimal, seguindo a
SWAP A
montagem decimal de números:
MOV R2,A
MOV P0,A
Número = 1º dígito x 10 + 2º dígito
SWAP A
MOV B,#10
R2 é um registrador auxiliar para mostrar os dígitos
MUL AB ; Faz 1º dígito de X2 x 10
DECIMAIS digitados pelo usuário.
MOV X2,A
R2 guarda o 1º dígito no nibble superior.
INC R0
Após juntar esse dígito com o 2º dígito (que permanece no
RETI
nibble inferior), mostra-se em P0 o dado de entrada
(DECIMAL).
V5: CJNE R0,#3,V6
MOV B,A
O dado que é DE FATO guardado em X1 (depois da entrada
ORL A,R2
dos dois dígitos) é o Hexadecimal equivalente ao número
MOV P0,A
decimal digitado, porque o Microcontrolador faz as
MOV A,B
operações em hexadecimal.
ADD A,X2
MOV X2,A
Nesse código a saída permanece em HEXADECIMAL
V6: INC R0
RETI

END

95
Prof. José Wilson Lima Nerys 95 Microprocessadores
Adição de 2 Números de 16 bits, com entrada de dados em Hexadecimal
Universidade Federal de Goiás
Teclado usa aEscola
interrupção externa 1 para leitura dos números
de Engenharia Elétrica, Mecânica e de Computação
XH 96 EQU 10H ; Número X de 16 bits
XL EQU 11H
YH EQU 12H ; Número Y de 16 bits
YL EQU 13H
ZH EQU 14H ; Resultado da adição de 16 bits
ZL EQU 15H
ZOV BIT 00H ; Flag de carry do resultado de 16 bits

ORG 00H
LJMP INICIO

ORG 13H ; LEITURA DO TECLADO


LJMP ENTRADA ; ENTRADA DE 8 DÍGITOS

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#84H Exemplo de adição de 16 bits
MOV TCON,#04H 1584H + 27B5H = 3D39H
MOV DPTR,#TECLADO 1
MOV R7,#00
MOV R0,#0 0 0 0 1 0 1 0 1 1 0 0 0 0 1 0 0
MOV P2,#0 + 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 1
MOV P0,#0
CLR F0 0 0 1 1 1 1 0 1 0 0 1 1 1 0 0 1

96
Prof. José Wilson Lima Nerys 96 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

97
Adição de 2 Números de 16 bits
Rotina da Adição de 16 bits
;=================================================================
; ROTINA PARA ADIÇÃO DE 16 BITS

V0: JNB F0,$ ; AGUARDA ENTRADA DE DADOS EM LOOP INFINITO

MOV A,XL
ADD A,YL ; Adição do byte inferior, sem carry
MOV ZL,A ; Guarda resultado em ZL

MOV A,XH
ADDC A,YH ; Adição do byte superior, com carry
MOV ZH,A ; Guarda resultado em ZH
MOV ZOV,C ; Guarda carry em ZOV

CLR F0 ; Limpa F0 antes de voltar para o loop infinito


MOV P2,ZH ; Mostra ZH em P2
MOV P0,ZL ; Mostra ZL em P0
SJMP V0

; FIM DA ROTINA DE ADIÇÃO DE 16 BITS


;====================================================================

97
Prof. José Wilson Lima Nerys 97 Microprocessadores
Adição de 2 Números de 16 bits
Universidade Federal de Goiás
Leitura (Hexadecimal) do primeiro número de 16 bits
Escola de Engenharia Elétrica, Mecânica e de Computação
;======================================= ; Entrada do segundo byte, XL, do primeiro
98 DA INTERRUPÇÃO DO TECLADO
; SUB-ROTINA número de 16 bits
ENTRADA:
MOV A,P1 ; A recebe leitura do teclado V2: CJNE R0,#2,V3 ; terceiro dígito
ANL A,#0FH ; Elimina nibble superior SWAP A
MOVC A,@A+DPTR ; Corrige leitura do teclado MOV XL,A
MOV P0,A
CJNE A,#0EH,LEITURA ; Se A=0Eh, Encerra SJMP V10
SETB F0 ; Seta F0 pra sair do loop
MOV R0,#0 ; R0 = 0 pra reiniciar V3: CJNE R0,#3,V4 ; quarto dígito
RETI ORL A,XL
MOV XL,A
LEITURA:CJNE R0,#0,V1 ; Se R0=0  primeiro dígito MOV P0,A
MOV P2,#0 SJMP V10
MOV P0,#0
SWAP A ; Inverte nibble superior com inferior Na montagem no Proteus, um teclado de 12
MOV XH,A ; XH recebe o nibble superior de A teclas (4 linhas e 3 colunas) é usado. No entanto,
MOV P2,A ; Mostra A em P2 o decodificador de teclado usado, MM74C922, é
SJMP V10 ideal para teclado 4 x 4. Assim, o código de saída
(4 bits) desse decodificador não corresponde
V1: CJNE R0,#1,V2 ; Se R0=1  segundo dígito exatamente à tecla pressionada. A leitura de uma
ORL A,XH ; Faz a união de XH com 2º dígito tabela faz o ajuste dessa leitura.
MOV XH,A ; XH recebe o primeiro número 8 bits
MOV P2,A ; Mostra em P2
SJMP V10 1 0 1 0 0 1 0 1 Uma operação AND entre o valor de A,
;---------------------------------------- 0 0 0 0 1 1 1 1 recebido de P1, e o valor 0FH, elimina o
nibble superior de A.
0 0 0 0 0 1 0 1 É uma operação98bit aMicroprocessadores
bit
Prof. José WilsonOperação
98 Lima Nerys AND
Adição de 2 Números de 16 bits
Universidade Federal de Goiás
Leitura (Hexadecimal) do segundo número de 16 bits
Escola de Engenharia Elétrica, Mecânica e de Computação
;-------------------------------------------
; Entrada 99do primeiro byte, YH, do segundo V7: CJNE R0,#7,V10
número de 16 bits ORL A,YL
MOV YL,A
V4: CJNE R0,#4,V5 Tabela usada para adequação
MOV P0,A
MOV P2,#0 entre o código de saída do
MOV P0,#0 decodificador e o dígito desejado.
V10: INC R0
RETI
SWAP A
MOV YH,A TECLADO: DB 01H, 02H, 03H, 00H, 04H, 05H, 06H,
MOV P2,A 00H, 07H, 08H, 09H, 00H, 0CH, 00H, 0EH
SJMP V10
END
V5: CJNE R0,#5,V6
ORL A,YH
MOV YH,A
MOV P2,A
Na entrada de dados, cada dígito corresponde a 1 nibble (4
SJMP V10
bits) e todos os dados são lidos através do nibble inferior da
porta P1.
; Entrada do segundo byte, YL, do primeiro
Assim, o primeiro dígito da leitura de cada byte é transferido
número de 16 bits
para o nibble superior (através da instrução SWAP A), antes
de ser transferido para XH, XL, YH e YL.
V6: CJNE R0,#6,V7
SWAP A
MOV YL,A
MOV P0,A
SJMP V10
99
Prof. José Wilson Lima Nerys 99 Microprocessadores
V1: CJNE R0,#1,V2
Entrada Decimal de Valores
Universidade Federalatravés do Teclado
de Goiás MOV B,A ; guarda 2º dígito em B
Escola de Engenharia Elétrica,
ORLMecânica
A,R1 e de 1º
; junta Computação
e 2º dígitos
;======================================= MOV P0,A ; mostra valor decimal digitado
100 DA INTERRUPÇÃO DO TECLADO - LEITURA DE
; SUB-ROTINA MOV A,B ; devolve 2º dígito para A
NÚMEROS EM DECIMAL ADD A,X ; 1º dígito ᵡ 10 + 2º dígito
Guarda em X o correspondente hexadecimal MOV X,A ;Guarda X hexadecimal
ENTRADA: número decimal de 2 dígitos SJMP V10
MOV A,P1 ;-------------------------------------------
ANL A,#0FH ; Isola o nibble inferior de A ; Entrada do segundo número Y de 8 bits
MOVC A,@A+DPTR ; Busca na Tabela o dígito correto V2: CJNE R0,#2,V3
SWAP A
CJNE A,#0EH,LEITURA; Se A=0Eh, encerra leitura MOV P0,A
SETB F0 MOV R1,A
MOV R0,#0 Operação para mostrar no SWAP A
RETI display o valor decimal que MOV B,#10
foi digitado no teclado MUL AB ; Faz 1º dígito de Y x 10
LEITURA:
CJNE R0,#0,V1 MOV Y,A
SWAP A ; Inverte nibbles lidos de P1 SJMP V10
MOV P0,A
MOV R1,A ; Guarda 1º dígito em R1 V3: CJNE R0,#3,V10
SWAP A MOV B,A
ORL A,R1
MOV B,#10 ; B = 10 decimal MOV P0,A Valor decimal =
MUL AB ; Faz A = 1º dígito de X ᵡ 10 MOV A,B 1º dígito ᵡ 10 + 2º dígito
ADD A,Y
MOV X,A ; Transfere resultado para X = 1º dígito x 10 MOV Y,A
SJMP V10
Guarda em X o correspondente V10: INC R0
RETI
100
Prof. José Wilson Limahexadecimal
Nerys do 1º dígito x 10 100 Microprocessadores
Saída Decimal de Valores
Universidade no Display
Federal de Goiásde 7-Segmentos
Escola de Engenharia Elétrica, Mecânica e de Computação
; SUBROTINA PARA CONVERTER O RESULTADO DE HEXADECIMAL PARA DECIMAL (1 BYTE)
101
DECIMAL: Exemplo:
MOV B,#10 ; divisor = 10 decimal C6 H 0A H
DIV AB ; divide o resultado hexadecimal por 10
8 13 H 0A H
r0
MOV ZDL,B ; 1o resto é guardado em ZDL 9 1 0A H
CJNE A,#00, V11 ; Se A = 0 (quociente = 0), encerra a conversão, r1
1 0
RET ; caso contrário, desvia para V11
r2

V11: MOV B,#10 ; Carrega B novamente com 10 decimal C6 H = 198


DIV AB ; divide o 1º quociente por 10 (se ele não for zero)
PUSH ACC ; guarda o quociente na pilha. Precisa de A para inverter os nibbles do 2º resto
MOV A,B ; A recebe o conteúdo de B (2º resto)
SWAP A ; inverte os nibbles do 2º resto
ORL A,ZDL ; junta os dígitos do 1º e do 2º restos
MOV ZDL,A ; guarda em ZDL o byte menos significativo do resultado decimal
POP ACC ; devolve para A o quociente da 2ª divisão

CJNE A,#00, V12 ; se o quociente da 2ª divisão = 0, encerra a conversão. Caso contrário, desvia para V12
RET

V12: MOV B,#10 ; Carrega B novamente com 10 decimal


DIV AB ; Última divisão (com registradores de 8 bits, maior valor decimal é 255)

MOV ZDH,B ; guarda em ZDH o 3º resto


RET

101
Prof. José Wilson Lima Nerys 101 Microprocessadores
(Abrindo
Universidade Federal de Goiás
parênteses para falar sobre o Display LCD.....
Escola de Engenharia Elétrica, Mecânica e de Computação

102 Endereços do display LCD de 2 linhas x 16 colunas


1 16 64
194 130

199 135

204 140

210 146
192 128
193 129

195 131
196 132
197 133
198 134

200 136
201 137
202 138
203 139

205 141
206 142
207 143
208 144
209 145

211 147
212 148
213 149
214 150

255 191
...
...
E RW RS Operação

0 X X Display desabilitado

1 0 0 Escrita de instrução no LCD

1 0 1 Escrita de dados no LCD

1 1 0 Leitura de instrução do LCD

1 1 1 Leitura de dados do LCD

102
Prof. José Wilson Lima Nerys 102 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
10
3

Habilitação no modo de operação com 4 ou 8 bits


38H – modo de 8 bits, 2 linhas, matriz 5x7
28H – modo de 4 bits, 2 linhas, matriz 5x7
103
Prof. José Wilson Lima Nerys 103 Microprocessadores
Instruções
Universidade Federal de Goiásmais comuns para o LCD
DESCRIÇÃO Escola de Engenharia
MODO Elétrica, Mecânica
RS R/W e de Computação
Código Tempo
10 (Hexa) execução
Display 4 Liga (sem cursor) 0 0 0C 40 μs
Desliga 0 0 0A/08
Limpa Display com Home cursor 0 0 01 1.6 ms
Controle do Cursor Liga 0 0 0E 40 μs
Desliga 0 0 0C
Desloca para Esquerda 0 0 10 40 μs
Desloca para Direita 0 0 14 40 μs
Cursor Home 0 0 02 1.6 ms
Cursor Piscante 0 0 0D
Cursor com Alternância 0 0 0F
Sentido de deslocamento do Para a esquerda 0 0 04
cursor ao entrar com caractere
Para a direita 0 0 06 40 μs
Deslocamento da mensagem ao Para a esquerda 0 0 07
entrar com caractere
Para a direita 0 0 05
Deslocamento da mensagem Para a esquerda 0 0 18
sem entrada de caractere
Para a direita 0 0 1C
Endereço da primeira posição Primeira linha 0 0 80
Segunda linha 0 0 C0
Obs.: o código 38H habilita a primeira linha.
A repetição do código habilita a segunda

104
Prof. José Wilson Lima Nerys 104 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

105 Subrotinas Necessárias para Uso do Display LCD

Inicialização do LCD INSTR_WR: ; Escreve instrução no LCD


SETB EN ; habilita display
CLR RW ; faz RW = 0
INICIA: MOV A,#38H ; 8 bits
CLR RS ; faz RS = 0
LCALL INSTR_WR
MOV LCD, A
CLR EN ; desabilita display
MOV A,#38H
LCALL ATRASO_LCD
LCALL INSTR_WR
RET
MOV A,#0EH ; liga cursor
LCALL INSTR_WR TEXTO_WR: ; Escreve dado no LCD
SETB EN ; habilita display
MOV A,#06H ; desloca direita CLR RW ; faz RW = 0
LCALL INSTR_WR SETB RS ; faz RS = 1
MOV LCD, A
MOV A,#01H ; limpa display CLR EN ; desabilita display
LCALL INSTR_WR LCALL ATRASO_LCD
RET RET

fecha parênteses )
105
Prof. José Wilson Lima Nerys 105 Microprocessadores
Universidade Federal de Goiás
Exemplo de Aplicação com LCD
Escola de Engenharia Elétrica, Mecânica e de Computação
RS EQU P3.5 INSTR_WR:
106 RW EQU P3.6 SETB EN V1: LCALL TEXTO_WR
EN EQU P3.7 CLR RW INC R7
LCD EQU P0 CLR RS SJMP MENSAGEM
MOV LCD, A
ORG 00H CLR EN
LJMP INICIO LCALL ATRASO_LCD ATRASO_LCD:
RET MOV R4,#10
ORG 30H V6: MOV R5,#80
INICIO: MOV SP,#2FH TEXTO_WR:SETB EN DJNZ R5,$
MOV R7,#0 CLR RW DJNZ R4,V6
LCALL INICIA SETB RS RET
LCALL MENSAGEM MOV LCD, A
SJMP $ CLR EN
LCALL ATRASO_LCD
INICIA: MOV A,#38H RET
LCALL INSTR_WR
MOV A,#38H MENSAGEM:
LCALL INSTR_WR MOV A,R7
MOV A,#0EH MOV DPTR,#MSG
LCALL INSTR_WR MOVC A,@A+DPTR
MOV A,#06H CJNE A,#0FFH,V1
LCALL INSTR_WR RET
MOV A,#01H
LCALL INSTR_WR
RET MSG: DB 'Aprendendo a usar o display LCD', 0FFH
MSG1: DB 'Microcontrolador', 0FFh
MSG2: DB 4Dh, 69h, 63h, 72h, 6Fh, 0ffh
106
Prof. José Wilson Lima Nerys END
106 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

107

107
Prof. José Wilson Lima Nerys 107 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

108 Relógio no Display LCD


HH:MM:SS

RS EQU P3.5 ORG 30H


RW EQU P3.6 INICIO: MOV SP,#2FH
EN EQU P3.7 MOV IE,#85H ; IE = 1000 0111B
LCD EQU P0 SETB IT0
MOV SEG,#00
HORA EQU 10H MOV MIN,#00
MIN EQU 11H MOV HORA,#00
SEG EQU 12H MOV R0,#20
MOV R7,#0FFH
ORG 00H LCALL INICIA
LJMP INICIO LCALL LINHA1

ORG 03H ESPERA: JB P3.0, $


LJMP AJUSTA_HORA JNB P3.0,$

ORG 13H REPETE: LCALL HORARIO


LJMP AJUSTA_MINUTO LCALL DISPLAY
LCALL ATRASO
SJMP REPETE
Laço que atualiza o horário e
mostra no Display LCD
108
Prof. José Wilson Lima Nerys 108 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

109

INICIA: MOV A,#38H INSTR_WR:


LCALL INSTR_WR SETB EN
MOV A,#38H CLR RW
LCALL INSTR_WR CLR RS
MOV A,#0EH MOV LCD, A
LCALL INSTR_WR CLR EN
MOV A,#06H LCALL ATRASO_LCD
LCALL INSTR_WR RET
MOV A,#01H
LCALL INSTR_WR TEXTO_WR:SETB EN
RET CLR RW
SETB RS
LINHA1: INC R7 MOV LCD, A
MOV A,R7 CLR EN
MOV DPTR,#MSG1 LCALL ATRASO_LCD
MOVC A,@A+DPTR RET
CJNE A,#0FFH,V1
RET
V1: LCALL TEXTO_WR
SJMP LINHA1

109
Prof. José Wilson Lima Nerys 109 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
HORARIO:MOV A,SEG DISPLAY: MOV A,#196 MOV A,#0FH
110 ADD A,#01H LCALL INSTR_WR ANL A,MIN
DA A ORL A,#30H
MOV SEG,A MOV A,#0F0H LCALL TEXTO_WR
CJNE A,#60H,V4 ANL A,HORA MOV A,#':'
SWAP A LCALL TEXTO_WR
MOV SEG,#00 ORL A,#30H
MOV A,MIN LCALL TEXTO_WR MOV A,#0F0H
ADD A,#01H ANL A,SEG
DA A MOV A,#0FH SWAP A
MOV MIN,A ANL A,HORA ORL A,#30H
CJNE A,#60H,V4 ORL A,#30H LCALL TEXTO_WR
LCALL TEXTO_WR
MOV MIN,#00H MOV A,#0FH
MOV A,HORA MOV A,#':' ANL A,SEG
ADD A,#01H LCALL TEXTO_WR ORL A,#30H
DA A LCALL TEXTO_WR
MOV HORA,A MOV A,#0F0H RET
CJNE A,#24H,V4 ANL A,MIN
SWAP A
MOV SEG,#00H ORL A,#30H
MOV MIN,#00H LCALL TEXTO_WR
MOV HORA,#00H
V4: NOP
RET

110
Prof. José Wilson Lima Nerys 110 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

111
AJUSTA_HORA:
MOV A,HORA
ADD A,#1
DA A
MOV HORA,A
ATRASO_LCD:
LCALL DISPLAY
MOV R4,#10
CJNE A,#23H,SAI
V6: MOV R5,#80
MOV HORA,#99H
DJNZ R5,$
SAI: LCALL ATRASO
DJNZ R4,V6
CLR IE0
RET
RETI
ATRASO: MOV R0,#2
AJUSTA_MINUTO:
V3: MOV R1,#50
MOV A,MIN
V2: MOV R2,#150
ADD A,#1
DJNZ R2,$
DA A
DJNZ R1,V2
MOV MIN,A
DJNZ R0,V3
LCALL DISPLAY
RET
CJNE A,#59H,SAI2
MOV MIN,#99H
MSG1: DB ' HH:MM:SS ',0FFH
SAI2: MOV R7,#10
END
V5: LCALL ATRASO
DJNZ R7,V5
CLR IE1
RETI

111
Prof. José Wilson Lima Nerys 111 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Temporizadores/Contadores

O 8051 tem 2 temporizadores/contadores de 16 bits que podem operar de 4


modos distintos:

Modo 0  Contador/Temporizador de 13 bits com divisor de frequência de


até 32 vezes. Pode contar até 8192 pulsos (32  256).

Modo 1  Contador/Temporizador de 16 bits. Pode contar de 0 a 65535.

Modo 2  2 contadores/temporizadores de 8 bits com recarga automática.

Modo 3  2 contadores/temporizadores independentes de 8 bits.

O microcontrolador AT89S8252 possui 3 temporizadores.

112
Prof. José Wilson Lima Nerys 112 Microprocessadores
Universidade Federal de Goiás
Funcionamento dos Temporizadores/Contadores
Escola de Engenharia Elétrica, Mecânica e de Computação

113 Temporizador – clock interno Contador – clock externo

Modo 1
No modo 1, os registradores TH e TL, cada um de 8 bits, formam o
TH TL registrador de 16 bits, que faz a contagem.
00H 00H Essa contagem começa no valor carregado em algum ponto do
programa. Se não houver essa carga, a contagem começa do valor
0000H. A contagem vai até o valor FFFFH, a menos que ela seja
TH TL interrompida.

Independente de onde começar a primeira contagem, a partir da


segunda, a contagem começa de 0000h, a menos que haja uma
recarga nesses registradores.
Exemplo:
MOV TH0,#50H
MOV TL0,#00H
FFH FFH

Essas instruções fazem com que a contagem do temporizador/contador 0 comece do


valor 5000H e vá até FFFFH
10.000 pulsos: 65.535-10.000 = 55.535 – TH0 = D8H, TL0 = EFH

113
Prof. José Wilson Lima Nerys 113 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

114
Funcionamento dos Temporizadores/Contadores
Modo 0
TH TL
No modo 0, o registrador TH é um contador de 8 bits e o registrador TL,
00H 00H
um contador de 5 bits.

O registrador TL conta de 00 até 1FH e, a cada final de contagem de TL, o


TH
registrador TH é incrementado em 1.

O registrador TH pode contar de 00H até FFH, ou do valor recarregado a


1FH cada final de ciclo até FFH.

Se TH iniciar cada contagem a partir de 00H, a contagem vai de 0 a 8191.


Se o cristal for de 11,0592 MHz, o tempo gerado é de 8191 x 1,085 μs =
FFH 8,89 ms

Para gerar, por exemplo, um tempo de 5 ms, com cristal de 11.0592 MHz, pode-se fazer uma
recarga de TH com o valor decimal 111. Assim,

Tempo gerado = 32 x (255-111) x 1,085 μs = 5 ms

114
Prof. José Wilson Lima Nerys 114 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

115
Funcionamento dos Temporizadores/Contadores
Modo 2

TH TL
O modo 2 é denominado de Modo de Recarga Automática.
00H 00H
Nesse modo, a primeira contagem começa no valor designado
para TL.
TH
A partir da segunda contagem, o valor inicial é o valor presente
TH em TH.

Esse modo é usado na geração de sinal PWM. A cada nova


contagem, o valor inicial de contagem pode ser mudado através
FF de TH

No modo 3 os registradores TH e TL funcionam como temporizadores/contadores


independentes.

115
Prof. José Wilson Lima Nerys 115 Microprocessadores
Universidade Federal de Goiás
PWM – ePulse
Escola de Engenharia Elétrica, Mecânica Width Modulation
de Computação
Modulação por Largura de Pulso
116
Período ligado: 43 μs
Período desligado: 184,5 μs

Período: 227,5 μs
Frequência de chaveamento: 4,4 kHz

Fonte de alimentação: 12 V (200 V)


Tensão média no motor: 2,27 V (37,8V)

Período ligado: 190,5 μs


Período desligado: 37 μs

Período: 227,5 μs
Frequência de chaveamento: 4,4 kHz

Fonte de alimentação: 12 V (200 V)


Tensão média no motor: 10,05 V (167,47)

116
Prof. José Wilson Lima Nerys 116 Microprocessadores
Universidade Federal de Goiás
Escola dede
Configuração Engenharia Elétrica, Mecânica e de Computação
Temporizadores/Contadores

Os registradores que comandam o Contador-Temporizador são:


Registrador do Temporizador: TMOD (Timer Mode) = Registrador 89h

TMOD = G1 C/T1 M11 M10 G0 C/T0 M01 M00

0 0 Modo 0 0 0 Modo 0
0 1 Modo 1 0 1 Modo 1
1 0 Modo 2 1 0 Modo 2
1 1 Modo 3 1 1 Modo 3

Registrador de Controle: TCON (Timer Control) = Registrador 88h

TCON = TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Temporizador 1 Temporizador zero

117
Prof. José Wilson Lima Nerys 117 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

118

Configuração de Temporizadores/Contadores
Registrador do Temporizador: TMOD (Timer Mode) = Registrador 89h

TMOD = G1 C/T1 M11 M10 G0 C/T0 M01 M00

G Gate Sendo 0, o disparo do temporizador/contador é interno, através de TR.


Sendo 1, disparo pode ser através de TR ou através do pino externo
P3.2 (INT0\) ou P3.3 (INT1\).

C/T\  Sendo 0, a operação é como temporizador, onde a frequência de


operação é 1/12 da frequência do cristal oscilador. Sendo 1, a frequência
é determinada por um componente externo, através do pino P3.4 (T0) ou
P3.5 (T1).

118
Prof. José Wilson Lima Nerys 118 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

119
Configuração de Temporizadores/Contadores
Registrador de Controle: TCON (Timer Control) = Registrador 88h

TCON = TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TR Quando G = 0, fazendo-se TR = 1, o temporizador inicia a


contagem a partir do valor armazenado em TH e TL. TR = 0
para o temporizador.

TF  A cada fim de contagem TF é setado (TF = 1) pelo hardware.


Se a interrupção do temporizador estiver habilitada, ocorre o
desvio para o endereço correspondente, 0Bh para o temporizador
0 e 1Bh para o temporizador 1.

119
Prof. José Wilson Lima Nerys 119 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

120
Temporizadores/Contadores Registradores que
fazem a contagem
Pino de entrada do
clock externo (modo
contador)

Bit de disparo

Lógica para disparar o


temporizador/contador
Pino de Disparo
externo Bit de final de contagem

120
Prof. José Wilson Lima Nerys 120 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

121
Temporizador Zero no Modo 1
Nesse exemplo o temporizador zero foi
configurado para o modo 1
ORG 00H (TMOD = 0000 0001) e a primeira
LJMP INICIO contagem começa do valor 55.535.
Cristal de 12 MHz
Toda contagem vai até 65.535, e, então, o
ORG 30H valor de TH0-TL0 torna-se zero e a
INICIO: MOV SP,#2FH contagem continua.
MOV TMOD,#01H A contagem não para, enquanto TR0
permanecer em nível lógico alto
MOV TH0,#HIGH(55535) (TR0 = 1).
MOV TL0,#LOW(55535)
Assim, a primeira contagem, nesse
SETB TR0 exemplo, conta 10.000 pulsos. A partir da
SJMP $ segunda contagem, no entanto, TH0-TL0
contam, continuamente, de 0 a 65.535.
END

TH0 = D8H G1\ C/T1\ M11 M10 G0\ C/T0\ M01 M00
TL0 = EFH TMOD 0 0 0 0 0 0 0 1

121
Prof. José Wilson Lima Nerys 121 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Temporizador Zero no Modo 1 Cristal de 12 MHz

ORG 00H Nesse exemplo o temporizador zero foi configurado


LJMP INICIO para o modo 1
(TMOD = 0000 0001). Ao contrário do exemplo
ORG 30H anterior, todas as contagens começam do valor
INICIO: MOV SP,#2FH 15.535 porque, a cada final de contagem (quando
MOV TMOD,#01H TF0 = 1), o processamento retorna para V1, onde
os valores de TH0 e TL0 são recarregados. Assim, a
V1: MOV TH0,#HIGH(15535) contagem é de 50.000 pulsos. Sendo o cristal de 12
MOV TL0,#LOW(15535) MHz, o contador conta 50 ms.
SETB TR0
CPL P1.0 O exemplo também apresenta uma forma de
JNB TF0,$ verificar o tempo de contagem do temporizador,
CLR TF0 gerando uma onda quadrada no pino P1.0 com
SJMP V1 período de 100 ms.

END
Loop de espera do fim da contagem
A Flag TF0 (fim de contagem) deve ser zerada antes de recarregar TH0 e TL0

122
Prof. José Wilson Lima Nerys 122 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Exemplos com temporizadores e contadores Cristal de 11.0592 MHz

ORG 00H Esse exemplo é idêntico ao anterior, com a diferença


LJMP INICIO de usar um cristal oscilador de 11.0592 MHz.

ORG 30H Dessa forma, cada período do temporizador


INICIO: MOV SP,#2FH corresponde a 1,085 µs, ao invés de 1 µs.
MOV TMOD,#01H
Assim, para gerar uma contagem de 50 ms, são
necessários 46.080 pulsos (pois, 46.080 x 1,085 µs =
V1: MOV TH0,#4BH 50 ms).
MOV TL0,#0FFH
SETB TR0 Ou seja, a contagem deve começar de TH0-TL0 =
CPL P1.0 4BFFH, que corresponde ao número decimal 19.455.
JNB TF0,$
CLR TF0 No programa poderia ter sido usado:
SJMP V1
MOV TH0, #HIGH(19455)
MOV TL0,#LOW(19455)
END

123
Prof. José Wilson Lima Nerys 123 Microprocessadores
Universidade Federal de Goiás Cristal de 11.0592 MHz
Escola de Engenharia Elétrica, Mecânica e de Computação
Temporizadores nos modos 0 e 1 – COM INTERRUPÇAO
Nesse exemplo tem-se o TEMPORIZADOR zero no modo 0 (13 bits) e o
ORG 00H TEMPORIZADOR 1 no modo 1 (16 bits)
LJMP INICIO
Ambos começam a contagem de 0 e ambos utilizam suas interrupções.
ORG 0BH
CPL P1.0 Ao final de cada contagem de 13 bits (0 a 8.191) o processamento desvia
RETI para o endereço 0Bh, onde o pino P1.0 é complementado (gerando uma
onda quadrada com período de 2 x 8,887 ms = 17,774 ms
ORG 1BH
CPL P1.7 Ao final de cada contagem de 16 bits (0 a 65.535) o processamento desvia
RETI para o endereço 1Bh, onde o pino P1.7 é complementado (gerando uma
onda quadrada com período de 2 x 71,11 ms = 142,220 ms).
ORG 30H
INICIO: MOV SP,#2FH EA X X ES ET1 EX1 ET0 EX0
MOV IE,#8AH
MOV TMOD,#10H 1 0 0 0 1 0 1 0
SETB TR0
SETB TR1
SJMP $ G1 C/T1 M11 M10 G0 C/T0 M01 M00
0 0 0 1 0 0 0 0
END

Temporizador zero no modo 0 (13 bits)


Temporizador 1 modo 1 (16 bits)

124
Prof. José Wilson Lima Nerys 124 Microprocessadores
Universidade Federal de Goiás
Temporizadores nos modos
Escola 0 e 1 –Elétrica,
de Engenharia COMMecânica
INTERRUPÇAO
e de Computação

Período da onda quadrada no modo zero:


17,77 ms

Período da onda quadrada no modo 1:


141,92 ms

1 período no modo 16 bits corresponde a


8 períodos do modo 13 bits.

125
Prof. José Wilson Lima Nerys 125 125
Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

ORG 00H TEMPORIZADOR 0 com DISPARO EXTERNO


LJMP INICIO
Cristal de 11.0592 MHz
ORG 0BH Nesse exemplo, o temporizador zero, no modo 1, gera uma onda
MOV TH0,#HIGH(19455) quadrada com período de 100 ms (contagem de 19455 a 65535,
MOV TL0,#LOW(19455) com cristal de 11.0592 MHz), usando interrupção.
CPL P1.0
RETI No entanto, o disparo do temporizador 0 é EXTERNO, através do
ORG 1BH pino P3.2 (uma chave tipo push-button deve ser conectada entre
MOV TH1,#111 o pino P3.2 e o Terra). Com P3.2 = 0, o temporizador fica parado;
CPL P1.7 com P3.2 = 1, o temporizador prossegue a contagem.
RETI
O Temporizador 1 está configurado para operar no Modo 0 (13
ORG 30H bits) com recarga de TH1 = 111, gerando uma onda quadradra
INICIO: MOV SP,#2FH com período de 10 ms.
MOV IE,#10001010B
MOV TMOD,#09H
EA X X ES ET1 EX1 ET0 EX0
SETB TR0
SETB TR1 1 0 0 0 1 0 1 0
SJMP $

END G1 C/T1 M11 M10 G0 C/T0 M01 M00


0 0 0 0 1 0 0 1

A Flag TR0 é setada para habilitar o disparo externo. Disparo externo


126
Prof. José Wilson Lima Nerys 126 Microprocessadores
Universidade Federal de Goiás Cristal de 11.0592 MHz
Escola de Engenharia Elétrica, Mecânica e de Computação

TEMPORIZADOR – MODO 1 – Com INTERRUPÇAO (Período de 1s)


ORG 00H
LJMP INICIO Nesse exemplo tem-se um TEMPORIZADOR no modo 1 (16 bits),
com interrupção ao final de cada contagem.
ORG 0BH
MOV TH0,#HIGH(19455) A cada final de contagem (de 19455 a 65535) o processamento desvia
MOV TL0,#LOW(19455) para o endereço 0BH. Nesse endereço, recarrega-se TH0 e TL0. No
DJNZ R0,V1 entanto, o pino P1.0 somente é complementado a 10 passagens pela
CPL P1.0 subrotina (R0 = 10).
MOV R0,#10
V1: NOP Com uma contagem de 46080 e um cristal de 11.0592 MHz, tem 50
RETI ms para cada meio período, mas o pino P1. 0 é complementado a
cada 10 x 50 ms = 0,5 s (resulta em onda quadrada com 1,0 s de
ORG 30H período)
INICIO: MOV SP,#2FH Subrotina de atendimento da interrupção do temporizador zero.
MOV IE,#82H P1.0 somente é complementado a cada 10 atendimentos dessa
MOV TMOD,#01H subrotina, ou seja, a cada 500 ms.
MOV TH0,#HIGH(19455)
MOV TL0,#LOW(19455) EA X X ES ET1 EX1 ET0 EX0
MOV R0,#10
SETB TR0 1 0 0 0 0 0 1 0
SJMP $
R0 = 10  contador para contar 10 vezes 50 ms
END
Loop infinito esperando interrupção

127
Prof. José Wilson Lima Nerys 127 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica eCristal de 11.0592 MHz
de Computação

CONTADOR modo 1 – disparo interno (setb tr0)


ORG 00H Nesse exemplo tem-se um CONTADOR no modo 1 (16
LJMP INICIO bits).

ORG 30H O Sinal de clock é aplicado ao pino P3.4.


INICIO: MOV SP,#2FH
MOV TMOD,#05H Duas situações podem ser criadas, no Proteus:
SETB TR0
1. Conectar uma chave entre os pinos P3.4 e o Terra. A
V1: MOV P2,TH0 cada pulso dessa chave, a contagem em TH0-TL0 é
MOV P0,TL0 incrementada em 1.
SJMP V1 2. Conectar um gerador de função, com pulso quadrado,
ao pino P3.4. A contagem em TH0-TL0 seguirá esse
END clock.,

G1 C/T1 M11 M10 G0 C/T0 M01 M00


O valor de TH0 é mostrado na porta P2
O valor de TL0 é mostrado na porta P0 0 0 0 0 0 1 0 1

Operação como contador

128
Prof. José Wilson Lima Nerys 128 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

CONTADOR no modo 0 Cristal de 11.0592 MHz


ORG 00H Nesse exemplo tem-se um CONTADOR no modo 0
LJMP INICIO (13 bits).

ORG 30H O Sinal de clock é aplicado ao pino P3.4. As mesmas


INICIO: MOV SP,#2FH situações do exemplo anterior podem ser utilizadas.
MOV TMOD,#04H A diferença é que os valores mostrados em P2 e P0 são
SETB TR0 diferentes:

V1: MOV P2,TH0 P0 (valor de TL0) mostra uma contagem de 00h até 1Fh,
MOV P0,TL0 continuamente.
SJMP V1
Ao final de cada contagem de TL0, o valor mostrado em
END P2 (valor de TH0) é incrementado em 1

G1 C/T1 M11 M10 G0 C/T0 M01 M00


0 0 0 0 0 1 0 0

contador

129
Prof. José Wilson Lima Nerys 129 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

CONTADOR no modo 2 Cristal de 11.0592 MHz

ORG 00H Nesse exemplo tem-se um CONTADOR no modo 2


LJMP INICIO (8 bits com recarga automática).

ORG 30H No modo 2 (recarga automática), cada nova contagem


INICIO: MOV SP,#2FH começa do valor de TH0. Assim, no programa mostrado,
MOV TMOD,#06H cada nova contagem começa de TH0 = 40H.
SETB TR0
MOV TH0,#40H O sinal de clock deve ser conectado ao pino P3.4.

V1: MOV P2,TH0


MOV P0,TL0 G1 C/T1 M11 M10 G0 C/T0 M01 M00
SJMP V1 0 0 0 0 0 1 1 0

END
Valor da recarga fixa

O valor de TH0 é mostrado na porta P2


O valor de TL0 é mostrado na prota P0
130
Prof. José Wilson Lima Nerys 130 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

CONTADOR no Modo 2 – Interrupção Externa para mudar recarga


ORG 00H Cristal de 11.0592 MHz
LJMP INICIO
Nesse exemplo tem-se um CONTADOR no modo 2
ORG 03H (8 bits com recarga automática).
MOV A,TH0
ADD A,#5 É idêntico ao exemplo anterior, com uma exceção:
MOV TH0,A A interrupção externa zero (por transição) é usada para
RETI incrementar em 5 o valor da recarga, TH0.
ORG 30H
Assim, cada nova contagem começa do valor anterior de
INICIO: MOV SP,#2FH
MOV IE,#81H
TH0 + 5.
MOV TCON,#01H
MOV TMOD,#06H Subrotina de atendimento da interrupção externa zero
SETB TR0
MOV TH0,#40H
IE = 81h = 1000 0001  Interrupção externa zero
V1: MOV P2,TH0 habilitada
MOV P0,TL0 TCON = 01H = 0000 0001  Interrupção externa zero por
SJMP V1 transição
END

131
Prof. José Wilson Lima Nerys 131 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

132 Temporizador no Modo 2 – PWM (Pulse Width Modulation)


ORG 00H
LJMP INICIO

ORG 0BH
LJMP PWM

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#82H
MOV TMOD,#02H ;TMOD = 0000 0010
SETB TR0
MOV TH0,#0F0H
SETB P1.0 A primeira contagem do temporizador vai
SJMP $ de 0 a 255, em nível lógico alto.

PWM: MOV A,TH0 Ao terminar a primeira contagem, começa uma


CPL A nova contagem, a partir de F0H (TH0 = F0H).
MOV TH0,A
JB P1.0, DESLIGA O processamento desvia para o endereço 0BH,
SETB P1.0 ; Faz P1.0 = 1 complementa TH0 (TH0 = 0FH) e faz P1.0 = 0.
RETI
Ao acabar a contagem de F0 a FFH, com P1.0=0,
DESLIGA: CLR P1.0 ; Faz P1.0 = 0 começa nova contagem de 0FH a FFH, com P1.0 =1
RETI
END
132
Prof. José Wilson Lima Nerys 132 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

133 Temporizador no Modo 2 – PWM – varia velocidade com interrupções

ORG 00H PWM: MOV A,TH0 DIMINUI:


LJMP INICIO CPL A MOV A,TH0
MOV TH0,A JB P1.0,V2
ORG 03H ADD A,#10
LJMP AUMENTA JB P1.0, DESLIGA MOV TH0,A
SETB P1.0 RETI
ORG 0BH RETI
LJMP PWM V2: SUBB A,#10
DESLIGA:CLR P1.0 MOV TH0,A
ORG 13H RETI RETI
LJMP DIMINUI
END
ORG 30H AUMENTA:
INICIO: MOV SP,#2FH MOV A,TH0
MOV IE,#87H JB P1.0,V1
MOV TCON,#05H SUBB A,#10
MOV TMOD,#02H MOV TH0,A
SETB TR0 RETI
MOV TH0,#20H
SETB P1.0 V1: ADD A,#10
SJMP $ MOV TH0,A
RETI

133
Prof. José Wilson Lima Nerys 133 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
134
Programa com uma subrotina de atraso
de tempo de 1 s – usando temporizador São 20 contagens de 50 ms
(tempo total: 1 s)
ORG 00H ATRASO:
LJMP INICIO MOV R0,#20 Contador conta de 19.455
V2: MOV TH0,#HIGH(19455) até 65.535 (46.080 pulsos)
ORG 30H MOV TL0,#LOW(19455)
INICIO: MOV SP,#2FH SETB TR0 Dispara o temporizador
MOV TMOD,#01H JNB TF0,$
MOV A,#01H CLR TF0 Espera o final de cada contagem
do temporizador
DJNZ R0,V2
V1: MOV P1,A CLR TR0
Limpa a flag que indica fim de contagem
RL A RET
LCALL ATRASO
SJMP V1 END

Para o temporizador Decrementa R0; se não der zero,


volta para nova contagem de 50 ms

Rotação de Leds na porta P1, com atraso de 1 s


Cristal oscilador: 11.0592 MHz

134
Prof. José Wilson Lima Nerys 134 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

135 Acionamento temporizado de Motor de Corrente Contínua:

1. Motor gira no sentido horário por 10 s e para por 5 s


2. Motor gira no sentido anti-horário por 10 s e para.
IN1 EQU P0.4 CLR IN1 ATRASO: SETB TR0
IN2 EQU P0.5 CLR IN2 V3: MOV TH0,#HIGH(19455)
LIGA EQU P3.2 MOV R7,#5 MOV TL0,#LOW(19455)
V2: LCALL ATRASO JNB TF0,$
ORG 00H DJNZ R7,V2 CLR TF0
LJMP INICIO DJNZ R0,V3
CLR IN1 MOV R0,#20
ORG 30H SETB IN2 CLR TR0
INICIO: MOV SP,#2FH MOV R7,#10 RET
MOV TMOD,#01H V4: LCALL ATRASO
MOV R0,#20 DJNZ R7,V4 END

V0: JB LIGA,$ CLR IN1


CLR IN2 Cristal de 11.0592MHz
SETB IN1 SJMP V0
CLR IN2
MOV R7,#10
V1: LCALL ATRASO
DJNZ R7,V1 Aguarda a chave conectada a P3.2 ser pressionada

135
Prof. José Wilson Lima Nerys 135 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

136 Driver para acionamento do motor CC em


ambos os sentidos
Ponte H
Chaves A e B ligadas –
rotação no sentido 1

Chaves C e D ligadas –
rotação no sentido 2

136
Prof. José Wilson Lima Nerys 136 Microprocessadores
Universidade Federal de Goiás Lógica de acionamento com EnA = 1
Escola de Engenharia Elétrica, Mecânica e de Computação

137 Tensão de operação: até 46 V IN1 IN2 Efeito


Corrente de operação: até 4 A 0 0 Motor parado
Ponte H – L298 0 1 Sentido direto
1 0 Sentido reverso
*Faltam os diodos de
1 1 Motor parado
retorno na alimentação
do motor

Entrada
do sinal
de
controle

Enable

137
Prof. José Wilson Lima Nerys 137 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Relógio HH:MM:SS

138
Prof. José Wilson Lima Nerys 138 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Relógio com subrotina “comum” (Sem interrupção) de atraso de tempo


SEG EQU 10H MOV A,SEG ATRASO:
MIN EQU 11H ADD A,#01H MOV R0,#20
HORA EQU 12H DA A V3: MOV TH0,#HIGH(19455)
MOV SEG,A MOV TL0,#LOW(19455)
ORG 00H CJNE A,#60H,V2 SETB TR0
LJMP INICIO JNB TF0,$
MOV SEG,#00H CLR TF0
ORG 30H MOV A,MIN DJNZ R0,V3
INICIO: MOV SP,#2FH ADD A,#01H CLR TR0
MOV TMOD,#01H DA A RET
CLR P3.7 MOV MIN,A
CJNE A,#60H,V2 END
V1: MOV SEG,#00H
MOV MIN,#00H MOV MIN,#00H
MOV HORA,#00H MOV A,HORA
Subrotina de atraso de 1 s
ADD A,#01H
V2: MOV P1,SEG DA A
MOV P2,MIN MOV HORA,A Relógio HH:MM:SS
MOV P0,HORA CJNE A,#24H,V2
LCALL ATRASO SJMP V1
Cristal de 11.0592 MHz

Fica 1 s executando a subrotina atraso, antes de atualizar SEG, MIN e HORA


139
Prof. José Wilson Lima Nerys 139 Microprocessadores
Universidade Federal de Goiás
MMMecânica e de Computação
HH de Engenharia Elétrica,
Escola SS

140
Prof. José Wilson Lima Nerys 140 Microprocessadores
Universidade Federal de Goiás
Relógio com tempo de 1 s marcado com temporizador, com interrupção
Escola de Engenharia Elétrica, Mecânica e de Computação
Relógio HH:MM:SS
SEG EQU 10H V1: MOV SEG,#00H MOV MIN,#00H
MIN EQU 11H MOV MIN,#00H MOV A,HORA
HORA EQU 12H MOV HORA,#00H ADD A,#01H
DA A
ORG 00H V2: MOV P1,SEG MOV HORA,A
LJMP INICIO MOV P2,MIN CJNE A,#24H,V2
MOV P0,HORA SJMP V1
ORG 0BH JNB F0,$ ; loop infinito
LJMP ATRASO CLR F0 ATRASO:
MOV TH0,#HIGH(19455)
ORG 30H MOV A,SEG MOV TL0,#LOW(19455)
INICIO: ADD A,#01H DJNZ R0,V3
MOV SP,#2FH DA A MOV R0,#20
MOV IE,#82H MOV SEG,A SETB F0 ; Setado a cada 1 s
MOV TMOD,#01H CJNE A,#60H,V2 V3: NOP
MOV TH0,#HIGH(19455) RETI
MOV TL0,#LOW(19455) MOV SEG,#00H
SETB TR0 MOV A,MIN END
CLR P3.7 ADD A,#01H
MOV R0,#20 DA A
MOV MIN,A Cristal de 11.0592 MHz
CJNE A,#60H,V2

Aguarda 1 s em um laço infinito, antes de atualizar SEG, MIN e HORA

141
Prof. José Wilson Lima Nerys 141 Microprocessadores
INSTR_WR:SETB EN
Universidade Federal de Goiás CLR RW
Escola Relógio
de Engenharia CLR RS
Elétrica, Mecânica e de Computação
Relógio no LCD HH:MM:SS MOV LCD, A
RS EQU P3.5 REPETE: LCALL HORARIO CLR EN
LCALL ATRASO_LCD
RW EQU P3.6 LCALL DISPLAY
RET
EN EQU P3.7 JNB F0,$ TEXTO_WR:SETB EN
LCD EQU P0 CLR F0 CLR RW
HORA EQU 10H SJMP REPETE SETB RS
MIN EQU 11H MOV LCD, A
SEG EQU 12H INICIA: MOV A,#38H CLR EN
LCALL ATRASO_LCD
LCALL INSTR_WR
RET
ORG 00H MOV A,#38H HORARIO:MOV A,SEG
LJMP INICIO LCALL INSTR_WR ADD A,#01H
MOV A,#0EH DA A
ORG 0BH LCALL INSTR_WR MOV SEG,A
LJMP ATRASO MOV A,#06H CJNE A,#60H,V4
MOV SEG,#00
LCALL INSTR_WR
MOV A,MIN
ORG 30H MOV A,#01H ADD A,#01H
INICIO: MOV SP,#2FH LCALL INSTR_WR DA A
MOV IE,#82H RET MOV MIN,A
MOV TMOD,#01H CJNE A,#60H,V4
MOV TH0,#HIGH(19455) LINHA1: INC R7 MOV MIN,#00H
MOV A,HORA
MOV TL0,#LOW(19455) MOV A,R7
ADD A,#01H
MOV SEG,#00 MOV DPTR,#MSG1 DA A
MOV MIN,#00 MOVC A,@A+DPTR MOV HORA,A
MOV HORA,#00 CJNE A,#0FFH,V1 CJNE A,#24H,V4
MOV R0,#20 RET MOV SEG,#00H
MOV R7,#0FFH V1: LCALL TEXTO_WR MOV MIN,#00H
MOV HORA,#00H
LCALL INICIA SJMP LINHA1
V4: NOP
LCALL LINHA1
142
Prof. José Wilson
SETB Lima Nerys
TR0 Cristal de 11.0592 MHz 142RET Microprocessadores
Relógio Universidade
no LCD Federal
Relógio HH:MM:SS
de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
DISPLAY:MOV A,#196 MOV A,#':'
LCALL INSTR_WR LCALL TEXTO_WR

MOV A,#0F0H MOV A,#0F0H


ANL A,HORA ANL A,SEG
SWAP A SWAP A
ORL A,#30H ORL A,#30H
LCALL TEXTO_WR LCALL TEXTO_WR

MOV A,#0FH MOV A,#0FH


ANL A,HORA ANL A,SEG
ORL A,#30H ORL A,#30H ATRASO_LCD:
LCALL TEXTO_WR LCALL TEXTO_WR MOV R4,#10
V6: MOV R5,#80
RET
DJNZ R5,$
MOV A,#':'
DJNZ R4,V6
LCALL TEXTO_WR RET

MOV A,#0F0H ATRASO:


ANL A,MIN MOV TH0,#HIGH(19455)
SWAP A MOV TL0,#LOW(19455)
DJNZ R0,V5
ORL A,#30H
MOV R0,#20
LCALL TEXTO_WR SETB F0
V5: NOP
MOV A,#0FH RETI
ANL A,MIN
ORL A,#30H MSG1: DB 'RELOGIO DIGITAL',0FFH
END
LCALL TEXTO_WR

143
Prof. José Wilson Lima Nerys Cristal de 11.0592 MHz 143 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Cronômetro: MM:SS

144
Prof. José Wilson Lima Nerys 144 Microprocessadores
Universidade
Cronômetro Federal de
com tempo de Goiás
1 s marcado com temporizador, sem interrupção
Escola de Engenharia Elétrica, Mecânica e de Computação

SEG EQU 10H V4: MOV P2,MIN


MIN EQU 11H MOV P1,SEG MOV P2,MIN
BUZZER EQU P3.7 JNB F0,V4 MOV P1,SEG
;-------------------------------------- SETB BUZZER
ORG 00H MOV R7,#3
LJMP INICIO V1: MOV P2,MIN V2: LCALL ATRASO
MOV P1,SEG DJNZ R7,V2
ORG 03H MOV A,MIN ADD LCALL ATRASO CLR BUZZER
A,#01H CLR F0
DA A MOV A,SEG SJMP INICIO
MOV MIN,A ADD A,#99H
RETI DA A ATRASO: SETB TR0
MOV SEG,A V3: MOV TH0,#4BH
ORG 13H SETB F0 CJNE A,#99H,V1 MOV TL0,#0FFH
RETI JNB TF0,$
MOV SEG,#59H CLR TF0
;======Configurações iniciais MOV A,MIN DJNZ R0,V3
ORG 30H ADD A,#99H MOV R0,#20
INICIO: MOV SP,#2FH DA A RET
MOV TMOD,#01H MOV MIN,A
MOV IE,#85H CJNE A,#99H,V1 END
MOV TCON,#05H
MOV R0,#20 MOV MIN,#00H Cristal de 11.0592 MHz
CLR F0 MOV SEG,#00H
CLR BUZZER
MOV SEG,#00H 1s
145
Prof. José Wilson Lima Nerys 145 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
MM SS

146
Prof. José Wilson Lima Nerys 146 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
REVERSO:MOV P2,A
Acionamento
14 temporizado de Motor de Passo:
LCALL ATRASO
7 gira no sentido horário por 10 s e para por 5 s RR A
1. Motor CJNE A,#80H,VF1
2. Motor gira no sentido anti-horário por 10 s e para. MOV A,#08H
ORG 00H DIRETO: MOV P2,A VF1: JNB F0,REVERSO
LJMP INICIO LCALL ATRASO SJMP LIGA
RL A
ORG 0BH CJNE A,#10H,VF0 ;== Atraso para o motor de passo
LJMP TEMPO_R7s MOV A,#01H ATRASO: MOV R6,#150
VF0: JNB F0,DIRETO V1: MOV R5,#250
;===== Configurações ===== DJNZ R5,$
ORG 30H CLR TR0 DJNZ R6,V1
INICIO: MOV SP,#2FH CLR F0 RET
MOV IE,#82H MOV R7,#5 ;----------------------------------------------
MOV TMOD,#01H SETB TR0 TEMPO_R7s:
MOV TH0,#4BH JNB F0,$ DJNZ R0,SAI
MOV TL0,#0FFH MOV R0,#20
MOV R0,#20 CLR TR0 DJNZ R7,SAI
CLR F0 SETB F0
LIGA: JB P3.2,$ MOV R7,#10 SAI: MOV TH0,#4Bh
CLR TR0 SETB TR0 MOV TL0,#0FFH
CLR F0 MOV A,#08H RETI
MOV R7,#10
SETB TR0 END
MOV A,#01H Cristal de 11.0592 MHz

147
Prof. José Wilson Lima Nerys 147 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

148

Comunicação Serial
do 8051

148
Prof. José Wilson Lima Nerys 148 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

149
Comunicação Serial

A comunicação serial consiste em enviar ou receber pacotes de


informação bit a bit.

No caso do 8051 o canal de comunicação serial é do tipo ”full duplex”,


o que significa que ele pode, ao mesmo tempo, receber e transmitir
dados.

Uma grande questão da transmissão serial é “como informar o receptor


do início e do final do pacote de informação”, ou seja, qual é o primeiro
bit da informação e qual é o último.

Assim, existem dois tipos de comunicação:

síncrona e assíncrona.

149
Prof. José Wilson Lima Nerys 149 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Na comunicação
150 serial síncrona, são utilizados dois canais:

um para transmitir/receber os dados e outro para


transmitir/receber o sinal de sincronismo.

No caso do 8051 a transmissão e também a recepção síncrona


de dados são feitas através do
pino RxD (pino P3.0).

O pino TxD (pino P3.1) é usado para o sinal de sincronismo.

5V
Módulo Bluetooth

150
Prof. José Wilson Lima Nerys 150 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

151
Na comunicação assíncrona não há a sinal de sincronismo e, portanto, alguns
cuidados especiais devem ser tomados:

As taxas de recepção e de transmissão devem ser iguais.

Um bit de início e outro de fim de transmissão devem ser enviados, além dos dados.

O bit de início de transmissão é zero, isto porque o canal normalmente fica em


repouso no nível lógico alto.

Assim, a primeira passagem para zero, após a habilitação da transmissão, é


interpretada como o sinal de início.

O sinal de parada é de nível lógico alto, após ser recebida a quantidade de bits
previstos.

Além do bit de início (Start bit) e do bit de fim (Stop bit), também pode existir um
terceiro bit extra, que é o bit de paridade, usado para verificar a consistência dos
dados.

151
Prof. José Wilson Lima Nerys 151 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
152 Formato da Comunicação Serial Assíncrona

152
Prof. José Wilson Lima Nerys 152 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Registrador SCON – Configuração da Comunicação Serial
153

UART – Universal Asynchrounous Receiver/Transmiter

153
Prof. José Wilson Lima Nerys 153 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

154

Serial – Modo 0 (síncrono – registrador de deslocamento)


Taxa de comunicação (baud rate): igual à frequência de clock dividida por 12.

Recepção: Fica habilitada fazendo REN = 1 e RI = 0.


Ao final da recepção o bit RI é setado por hardware, e deve ser
ressetado por software (CLR RI) antes da recepção seguinte.
O conteúdo recebido é transferido para o registrador SBUF.

Transmissão: É iniciada automaticamente quando o conteúdo de um


registrador é transferido para o registrador SBUF.
Ao final da transmissão o bit TI é setado por hardware, e deve ser
ressetado por software (CLR TI) antes da transmissão seguinte.

Obs.: Há um registrador SBUF para transmissão e outro para recepção

154
Prof. José Wilson Lima Nerys 154 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Instrução que dá início à transmissão


Rótulo
15 Instruções
5 MOV SCON,#00H Aguarda a transmissão de todos os bits.
MOV A,#00H Quando o processo acaba, o micro faz TI = 1.

Sinais de RxD e TxD durante uma


V1: MOV SBUF,A
transmissão síncrona
JNB TI,$
CLR TI
INC A
SJMP V1
END

155
Prof. José Wilson Lima Nerys 155 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Serial – Modo 1 (assíncrono de 8 bits)
156
Taxa de comunicação (baud rate): Bit 7 do registrador especial PCON

O pacote de comunicação inclui 8 bits de dados,


1 bit de start e um bit de stop. Recarga do Temporizador 1
no modo 2
Recepção: Fica habilitada fazendo REN = 1 e RI = 0.
Tem início quando há uma transição de nível alto para baixo no pino P3.0 (RxD)
Ao final da recepção o bit RI é setado por hardware, e deve ser ressetado por
software (CLR RI) antes da recepção seguinte.
O conteúdo recebido é transferido para o registrador SBUF.

Transmissão: É iniciada automaticamente quando o conteúdo de um


registrador é transferido para o registrador SBUF.
Ao final da transmissão o bit TI é setado por hardware, e deve ser ressetado
por software (CLR TI) antes da transmissão seguinte.

156
Prof. José Wilson Lima Nerys 156 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

157

Valores utilizados no
presente Curso de Micro

157
Prof. José Wilson Lima Nerys 157 Microprocessadores
Rótulo Instruções Configura serial modo 1 (assíncrono modo 1)
Universidade Federal de Goiás
Escola de Engenharia
Timer Elétrica, Mecânica
1 no modo e de
2. Baud Computação
rate de 9600 bps, para
MOV SCON,#40H
cristal de 11,0592 MHz.
MOV TMOD,#20H
Sinal de TxD (P3.1) durante uma
MOV TH1,#0FDH transmissão assíncrona no modo 1
MOV TL1,#0FDH

SETB TR1

MOV A,#00H

V1: MOV SBUF,A

JNB TI,$

CLR TI

INC A Instrução que dá início à transmissão


SJMP V1 Aguarda a transmissão de todos os bits.
END Quando o processo acaba, o micro faz TI = 1.

158
Prof. José Wilson Lima Nerys 158 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
15
9

159
Prof. José Wilson Lima Nerys 159 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
16
ORG 00H Transmissão Serial no Modo 1
0INICIO
LJMP

ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H Baud-rate de 9600 bps, no modo 1 (assíncrono 8 bits)
MOV TMOD,#20H Cristal oscilador: 11,0592 MHz
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
MOV DPTR,#MSG1

V1: MOV R7,#00


V2: MOV A,R7
MOVC A,@A+DPTR
CJNE A,#0FFH,ENVIA
SJMP V1

ENVIA: MOV SBUF,A


JNB TI,$
CLR TI
INC R7
SJMP V2

MSG1: DB 'HELLO WORLD!!! ', 0DH, 0FFH


MSG2: DB 'MICRO 2022 ', 0Dh, 0FFH

end Código ASCII para mudança de linha (Carriage Return)

160
Prof. José Wilson Lima Nerys 160 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
; Transmissão de mensagem via serial. Cristal: 11.0592 MHz. Taxa de transmissão: 4800 bps
16
ORG 00H
1 INICIO
LJMP

ORG 30H
INICIO: MOV SP,#2FH ; Posição inicial da Pilha: 2FH
MOV SCON,#40H ; Serial no modo 1: assíncrona de 8 bits
MOV TMOD,#20H ; Timer 1 no modo 2 (recarga automática)
MOV TH1,#0FAH ; Valor da recarga: FAH  baud rate: 4800 bps
SETB TR1 ; Dispara Timer 1

MOV DPTR,#MSG ; DPTR assume o valor do endereço inicial da tabela MSG


V2: MOV R7,#00H ; Offset para leitura da MSG assume valor inicial 00H

V3: MOV A,R7 ; Acumulador recebe o valor atual do Offset


MOVC A,@A+DPTR ; Acumulador recebe o conteúdo da posição A+DPTR da MSG
CJNE A,#0FFH,V1 ; Verifica se A = FFH (fim da MSG). Se não for, desvia para V1
SJMP V2 ; Retorna para V2 após cada fim de MSG

V1: MOV SBUF,A ; Transfere de A para SBUF o valor ser transmitido via serial
JNB TI,$ ; Aguarda final da transmissão do conteúdo de SBUF
CLR TI ; Limpa a flag TI, de transmissão serial
INC R7 ; Incrementa o valor do Offset
SJMP V3 ; Retorna para V3, para ler o próximo caractere de MSG

MSG: DB ' MICRO 2021 ', 0DH, 0FFH As mensagens MSG e MSG1
MSG1: DB 4DH, 49H, 43H, 52H, 4FH, 20H, 32H, 30H, 32H, 31H, 0DH, 0FFH são equivalentes
END

161
Prof. José Wilson Lima Nerys 161 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
LAMP EQU P3.4 V4: CJNE R0,#'M',V0
16 Recepção Serial no Modo 1
ORG 00H
2
LJMP INICIO
MOTOR: CLR P0.4
CPL P0.5
SJMP V0
ORG 30H Se R0 = 4DH (ASCII de M),
INICIO: MOV SP,#2FH aciona o motor CC (liga/desliga) LED_DIREITA:
MOV SCON,#40H V5: MOV P1,A
MOV TMOD,#20H RR A
MOV TH1,#0FDH Aguarda receber dados via serial
LCALL ATRASO
MOV TL1,#0FDH e transfere os dados para R0 JNB RI,V5
SETB TR1 SJMP V0
CLR RI
SETB REN Se R0 = 43H (ASCII de D), LED_ESQUERDA:
MOV A,#01H rotaciona Leds para a direita. MOV R3,#64
Enquanto RI = 0, continua V6: MOV P1,A
V0: JNB RI,$ RL A
MOV R0,SBUF rotacionando para a direita
LCALL ATRASO
CLR RI
DJNZ R3,V6
/
CJNE R0,#'D',V1
SJMP LED_DIREITA Se R0 = 44H (ASCII de E),
SJMP V0

rotaciona Leds para a esquerda. ATRASO: MOV R1,#100


V1: CJNE R0,#'E',V3 São 64 passos para a esquerda, V2: MOV R2,#200
SJMP LED_ESQUERDA que corresponde a 8 giros DJNZ R2,$
completos para a esquerda. DJNZ R1,V2
V3: CJNE R0,#'L',V4 RET
CPL LAMP END
SJMP V0 Se R0 = 4CH (ASCII de L), aciona
a lâmpada (apaga/liga)

162
Prof. José Wilson Lima Nerys 162 Microprocessadores
LAMP Universidade
EQU P3.4 Federal de Goiás
ORG 00H
Recepção
Escola Serial
de Engenharia no Modo
Elétrica, 1 eV5:
Mecânica CJNE R0,#'M',V6
de Computação
LJMP INICIO Com interrupção MOTOR: CLR P0.4
SETB P0.5
ORG 23H SJMP V0
Se R0 = 4DH (ASCII de M),
MOV R0,SBUF
CLR RI aciona o motor CC (liga/desliga) V6: CJNE R0,#'N',V0
RETI CLR P0.4
R0 recebe os dados recebidos CLR P0.5
ORG 30H via serial, através de interrupção SJMP V0
INICIO: MOV SP,#2FH
MOV IE,#90H LED_DIREITA:
MOV SCON,#40H Se R0 = 43H (ASCII de D), MOV P1,A
MOV TMOD,#20H rotaciona Leds para a direita. RR A
MOV TH1,#0FDH Continua rotação, até R0 LCALL ATRASO
MOV TL1,#0FDH receber outro caractere. SJMP V0
SETB TR1
CLR RI LED_ESQUERDA:
SETB REN MOV P1,A
MOV A,#01H Se R0 = 44H (ASCII de E), RL A
rotaciona Leds para a esquerda. LCALL ATRASO
V0: CJNE R0,#'D',V1 Enquanto R0 = 44H, continua
SJMP LED_DIREITA rotacionando para a esquerda SJMP V0
V1: CJNE R0,#'E',V3
SJMP LED_ESQUERDA ATRASO: MOV R1,#100
V3: CJNE R0,#'L',V4 Se R0 = 4CH (ASCII de L), liga a V2: MOV R2,#200
SETB LAMP lâmpada. DJNZ R2,$
SJMP V0 DJNZ R1,V2
Se R0 = 45H (ASCII de F),
V4: CJNE R0,#'F',V5 RET
CLR LAMP desliga a lâmpada.
SJMP V0 END

163
Prof. José Wilson Lima Nerys 163 163
Microprocessadores
Universidade Federal de Goiás
Escola
Serial – de Engenharia
Modo Elétrica, Mecânica
2 (assíncrono e de Computação
de 9 bits)
Taxa de comunicação (baud rate): Bit 7 do registrador especial PCON

O pacote de comunicação inclui 8 bits de dados, 1 bit extra (RB8 ou TB8), 1 bit de
start e um bit de stop. O bit extra pode ser a paridade.

Recepção: Fica habilitada fazendo REN = 1 e RI = 0.


Tem início quando há uma transição de nível alto para baixo no pino P3.0 (RxD)
Ao final da recepção o bit RI é setado por hardware, e deve ser ressetado por
software (CLR RI) antes da recepção seguinte.
O nono bit chega através do bit RB8.

Transmissão: É iniciada automaticamente quando o conteúdo de um


registrador é transferido para o registrador SBUF.
16 ser ressetado
Ao final da transmissão o bit TI é setado por hardware, e deve
4 bit é
por software (CLR TI) antes da transmissão seguinte. O nono
transmitido através de TB8.

164
Prof. José Wilson Lima Nerys 164 Microprocessadores
Universidade Federal de Goiás
Escola
Serial de Engenharia
– Modo Elétrica, Mecânica
3 (assíncrono de 9 bits)e de Computação
16
Taxa5de comunicação (baud rate): Bit 7 do registrador especial PCON

O pacote de comunicação inclui 8 bits de dados,


1 bit extra, 1 bit de start e um bit de stop. Recarga do Temporizador 1
no modo 2
Recepção: Fica habilitada fazendo REN = 1 e RI = 0.
Tem início quando há uma transição de nível alto para baixo no pino P3.0 (RxD)
Ao final da recepção o bit RI é setado por hardware, e deve ser ressetado por
software (CLR RI) antes da recepção seguinte.
O conteúdo recebido é transferido para o registrador SBUF.

Transmissão: É iniciada automaticamente quando o conteúdo de um


registrador é transferido para o registrador SBUF.
Ao final da transmissão o bit TI é setado por hardware, e deve ser ressetado
por software (CLR TI) antes da transmissão seguinte.

165
Prof. José Wilson Lima Nerys 165 Microprocessadores
Universidade Federal de Goiás
RS EQU P3.5 Mensagens: Computador
Escola de Engenharia  Microe 
Elétrica, Mecânica LCD
de Computação
RW EQU P3.6
EN EQU P3.7 INICIA: MOV A,#38H
LCALL INSTR_WR TEXTO_WR:SETB EN
DADOS EQU P0 CLR RW
MOV A,#38H SETB RS
ORG 00H LCALL INSTR_WR MOV DADOS,A
LJMP INICIO CLR EN
MOV A,#0EH LCALL ATRASO_LCD
ORG 23H LCALL INSTR_WR RET
CLR RI
MOV A,SBUF MOV A,#06H ATRASO_LCD:
MOV P1,A LCALL INSTR_WR MOV R4,#10
LCALL TEXTO_WR V6: MOV R5,#80
RETI MOV A,#01H DJNZ R5,$
LCALL INSTR_WR DJNZ R4,V6
ORG 30H RET RET
INICIO: MOV SP,#2FH
MOV SCON,#40H INSTR_WR: SETB EN END
MOV IE,#90H CLR RW
MOV TMOD,#20H CLR RS Subrotina para escrever
MOV TL1,#0FDH MOV DADOS,A dados no LCD
MOV TH1,#0FDH CLR EN
MOV R7,#0FFH LCALL ATRASO_LCD
SETB TR1 RET Subrotina de inicialização do LCD
SETB REN
LCALL INICIA

SJMP $
Subrotina para escrever
A recebe valor via serial e instrução no LCD
envia para P1 e para o LCD

166
Prof. José Wilson Lima Nerys 166 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

167
Motor de Passo via serial
V2: CJNE R0,#44H,V1
LJMP ANTI
ORG 00H
LJMP INICIO
V1: CJNE R0,#45H,V2
LJMP HORA
ORG 23H
CLR RI
ANTI: MOV P2,A
MOV R0,SBUF
RR A
RETI
LCALL ATRASO
SJMP V2
ORG 30H
INICIO: MOV SP,#2FH
HORA: MOV P2,A
MOV SCON,#40H
RL A
MOV IE,#90H
LCALL ATRASO
MOV TMOD,#20H
SJMP V2
MOV TL1,#0FDH
MOV TH1,#0FDH
ATRASO: MOV R7,#200
MOV R0,#00H
V3: MOV R6,#250
MOV A,#11H
DJNZ R6,$
SETB TR1
DJNZ R7,V3
SETB REN
RET
END

167
Prof. José Wilson Lima Nerys 167 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

168 Rotação de Leds via serial


V2: CJNE R0,#44H,V1
MOV B,#44H
SJMP DIREITA
ORG 00H
LJMP INICIO V1: CJNE R0,#45h,V4
MOV B,#45H
ORG 23H SJMP ESQUERDA
CLR RI V4: CJNE R0,#50H,V5
MOV R0,SBUF SJMP V2
RETI
V5: MOV R0,B
ORG 30H SJMP V2
INICIO: MOV SP,#2FH
MOV SCON,#40H DIREITA: MOV P1,A
MOV IE,#90H RR A
MOV TMOD,#20H LCALL ATRASO
MOV TL1,#0FDH SJMP V2
MOV TH1,#0FDH
MOV R0,#00H ESQUERDA: MOV P1,A
MOV A,#01H RL A
SETB TR1 LCALL ATRASO
SETB REN SJMP V2
END

168
Prof. José Wilson Lima Nerys 168 Microprocessadores
Universidade Federal de Goiás
CHAVE EQU P3.3 Escola
; CHAVEde(P3.3) – MOTOR LIGA
Engenharia (P3.3 = 0) Mecânica
Elétrica, OU DESLIGA (P3.3
e de= Computação
1)
M0 EQU P0.6 ; IN0 do driver para acionar o motor CC
16 M1
STATUS
EQU P0.7 ; IN1 do driver para acionar o motor CC
EQU 22H ; registrador que guarda estado das chaves
9 ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#20H ; Temporizador 1 no modo 2 (recarga automática) para o gerar o baud rate
MOV SCON,#40H ; SCON = 0100 0000 – Serial no modo 1
MOV TH1,#0FAH ; Recarga para baud rate de 4800 bps
MOV TL1,#0FAH ; Valor inicial de contagem, desde a primeira contagem
SETB TR1 ; Dispara temporizador 1
MOV R7,#00H ; Contador (offset) para leitura das mensagens a serem enviadas via serial
MOV STATUS,#00H ; Zera o registrador de STATUS para eliminar a possibilidade de “lixo”
CLR M0
CLR M1 ; Motor CC parado

V1: MOV A,P3 ; Leitura da porta P3 (onde está a chave que liga e desliga o motor)
ANL A,#00001000B ; Faz uma operação AND entre A e 08H, para isolar o valor do pino P3.3
XRL A,STATUS ; Verifica se houve alteração no STATUS
JZ V1 ; Se A XOR STATUS for zero, não houve mudança, então volta para V1 (A=0 e Z=1)
; Se houve mudança na posição da CHAVE, atualiza a situação e o STATUS
JNB CHAVE,LIGA_M ; Se CHAVE = 0, liga o motor
MOV DPTR,#M_OFF ; DPTR aponta para o início da mensagem de motor desligado
LCALL SERIAL ; Chama subrotina para mostrar a mensagem de motor desligado
CLR M0
CLR M1 ; Motor desligado
SETB STATUS.3 ; Atualiza registrador de STATUS com valor 1 (desligado) na posição STATUS.3
SJMP V1
Transfere conteúdo de P3 para A, isola o pino P3.3 e verifica se houve mudança de estado. Enquanto não houver, fica no loop de V1

169
Prof. José Wilson Lima Nerys 169 Microprocessadores
Continuação
Universidade ...
Federal de Goiás
LIGA_M: MOV DPTR,#M_ONEscola; de Engenharia
DPTR aponta paraElétrica,
o início daMecânica e de
mensagem de Computação
motor ligado
17 LCALL SERIAL ; Chama subrotina para mostrar a mensagem de motor ligado
SETB M0
0 CLR M1 ; Motor ligado
CLR STATUS.3 ; Atualiza registrador de STATUS com valor 0 (ligado) na posição STATUS.3
SJMP V1

SERIAL: MOV A,R7 ; Transfere para A o valor do offset


MOVC A,@A+DPTR ; A recebe o conteúdo da tabela
CJNE A,#0FFH,ENVIA ; Verifica se já chegou ao final da tabela
MOV R7,#00H ; Se a tabela já acabou, faz R7 = 0
RET ; Retorna da subrotina SERIAL

ENVIA: MOV SBUF,A ; Envia conteúdo da tabela/mensagem para o computador


JNB TI,$ ; Aguarda terminar a transmissão
CLR TI ; limpa flag de transmissão
INC R7 ; incrementa R7 (offset para leitura da tabela / mensagem)
SJMP SERIAL ; retorna para SERIAL

M_ON: DB 'MOTOR DE CORRENTE CONTINUA LIGADO', 0DH, 0DH, 0FFH


M_OFF: DB 'MOTOR DE CORRENTE CONTINUA DESLIGADO', 0DH, 0DH, 0FFH
END

A  P3 (Chave em P3.3) X X X X CH=0/1 X X X A B XOR Z

08H 0 0 0 0 1 0 0 0 0 0 0 1

ANL A,#08H 0 0 0 0 0/1 0 0 0 0 1 1 0

STATUS 0 0 0 0 0/1 0 0 0 1 0 1 0

XRL A,STATUS 0 0 0 0 0/1 0 0 0 1 1 0 1

170
Prof. José Wilson Lima Nerys 170 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

171
A  P3 (Chave em P3.3) 1 1 1 1 0 1 1 1

Situação 1: P3.3=0 08H 0 0 0 0 1 0 0 0


(Chave pressionada) ANL A,#08H 0 0 0 0 0 0 0 0
E STATUS = 0 STATUS 0 0 0 0 0 0 0 0
(indica motor ligado) XRL A,STATUS 0 0 0 0 0 0 0 0

Como XRL A,STATUS = 0, então Z = 1 (e JZ V1, faz desviar para V1)

A  P3 (Chave em P3.3) 1 1 1 1 1 1 1 1

Situação 2: P3.3=1 08H 0 0 0 0 1 0 0 0


(Chave liberada) ANL A,#08H 0 0 0 0 1 0 0 0
E STATUS = 0 STATUS 0 0 0 0 0 0 0 0
(indica motor ligado) XRL A,STATUS 0 0 0 0 1 0 0 0

Como XRL A,STATUS ≠ 0, então Z = 0 (e JZ V1, faz seguir para próxima linha)

171
Prof. José Wilson Lima Nerys 171 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Acionamentos diversos com informação de status para o computador

172
Prof. José Wilson Lima Nerys 172 Microprocessadores
Universidade Federal de Goiás
CH_STEP EQU P2.0
CH_MCC EQU P2.1 Escola de Engenharia Elétrica, Mecânica e de Computação
;== Acionamento da Lâmpada ===========

17CH_LAMP EQU P2.2 V5: JNB CH_LAMP,LIGA_Lamp


3M0 EQU P0.0
MOV DPTR,#Lamp_OFF
LCALL SERIAL
M1 EQU P0.1 STATUS indica o estado atual dos
dispositivos. CLR LAMP
LAMP EQU P0.7 SETB STATUS.2
STATUS.0 = 0  motor de passo SJMP V2
STATUS EQU 22H
ligado
STATUS.1 = 0  motor CC ligado LIGA_Lamp: MOV DPTR,#Lamp_ON
ORG 00H LCALL SERIAL
LJMP INICIO STATUS.2 = 0  lâmpada ligada
SETB LAMP
CLR STATUS.2 ;
ORG 30H
INICIO: MOV SP,#2FH ;== Acionamento do Motor CC ============
MOV TMOD,#20H
MOV SCON,#40H V2: JNB CH_MCC,LIGA_M
MOV TH1,#0FAH MOV DPTR,#M_OFF
MOV TL1,#0FAH LCALL SERIAL
SETB TR1 Compara o estado atual das chaves
(leitura de P2) com o conteúdo de CLR M0
MOV R7,#00H CLR M1
MOV P1,#00H STATUS
(XRL A,STATUS). SETB STATUS.1
SJMP V3
MOV STATUS,#00H
CLR M0 Enquanto eles forem iguais (Z=1),
aguarda no loop. LIGA_M: MOV DPTR,#M_ON
CLR M1 LCALL SERIAL
CLR LAMP SETB M0
Quando houver mudança da posição
de qualquer das chaves, sai desse loop CLR M1
V1: MOV A,P2 CLR STATUS.1
ANL A,#00000111B e atualiza tudo.
XRL A,STATUS
JZ V1 Envia a atualização via serial

173
Prof. José Wilson Lima Nerys 173 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia
;== Acionamento do Motor de Passo ======= Elétrica,
;== Envia Mecânica
Mensagem e de
via Serial Computação
=======
SERIAL: MOV A,R7
V3: JNB CH_STEP,LIGA_P MOVC A,@A+DPTR
MOV DPTR,#PASSO_OFF CJNE A,#0FFH,ENVIA
LCALL SERIAL MOV R7,#00H
MOV P1,#00H RET
SETB STATUS.0
SJMP V1 ENVIA: MOV SBUF,A
JNB TI,$
LIGA_P:MOV DPTR,#PASSO_ON CLR TI
LCALL SERIAL INC R7
CLR STATUS.0 SJMP SERIAL
MOV R6,#11H
V6: MOV P1,R6 ATRASO: MOV R0,#100
LCALL ATRASO V4: MOV R1,#150
DJNZ R1,$
MOV A,P2 DJNZ R0,V4
ANL A,#00000111B RET
XRL A,STATUS
JNZ V5 Lamp_ON: DB 'Lampada Ligada', 0DH, 0FFH
Lamp_OFF: DB 'Lampada Desligada', 0DH, 0FFH
MOV A,R6
RL A Para manter o motor de passo M_ON: DB 'Motor de Corrente Continua Ligado', 0DH, 0FFH
MOV R6,A ligado, é necessário rotacionar M_OFF: DB 'Motor de Corrente Continua Desligado', 0DH, 0FFH
SJMP V6
os bits da porta P1.
PASSO_ON: DB 'Motor de Passo Ligado', 0DH, 0DH, 0FFH
PASSO_OFF: DB 'Motor de Passo Desligado', 0DH, 0DH, 0FFH
Assim, é necessário manter-se
nesse loop de V6, verificando se END
há mudança em alguma chave.

174
Prof. José Wilson Lima Nerys 174 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

175 V0: JB CH0,$


LAMP EQU P3.4 JNB CH0,$
CH0 EQU P3.2 MOV DPTR,#MENU
LCALL SERIAL
ORG 00H MOV A,#01H
LJMP INICIO
ESCOLHA:CJNE R0,#'1',V1
ORG 23H LJMP ESQUERDA
MOV R0,SBUF
CLR RI V1: CJNE R0,#'2',V3
RETI LJMP DIREITA

ORG 30H V3: CJNE R0,#'3',V4


INICIO: MOV SP,#2FH LJMP BATE_E_VOLTA
MOV IE,#90H
MOV TMOD,#20H V4: CJNE R0,#'4',V5
MOV SCON,#40H
MOV TH1,#0FDH LAMPADA:CPL LAMP
MOV TL1,#0FDH MOV R0,#0
MOV R7,#00H SJMP ESCOLHA
CLR LAMP
SETB TR1 DIREITA:MOV P1,A
SETB REN LCALL ATRASO
CLR RI RR A
SJMP ESCOLHA

175
Prof. José Wilson Lima Nerys 175 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

176 SERIAL: MOV A,R7


MOVC A,@A+DPTR
CJNE A,#0FFH,ENVIA
ESQUERDA: MOV R7,#00H
MOV P1,A RET
LCALL ATRASO
RL A ENVIA: MOV SBUF,A
SJMP ESCOLHA JNB TI,$
CLR TI
BATE_E_VOLTA: INC R7
MOV P1,A SJMP SERIAL
RL A
LCALL ATRASO ATRASO: MOV R4,#150
CJNE A,#80H,BATE_E_VOLTA V2: MOV R5,#250
DJNZ R5,$
RIGHT: MOV P1,A DJNZ R4,V2
RR A RET
LCALL ATRASO
CJNE A,#01H,RIGHT MENU: DB '(1) ROTACAO DE LEDS PARA A ESQUERDA', 0DH, 0AH
SJMP ESCOLHA DB '(2) ROTACAO DE LEDS PARA A DIREITA', 0DH, 0AH
DB '(3) ROTACAO DE LEDS BATE-E-VOLTA', 0DH, 0AH
DB '(4) LIGAR/DESLIGAR LAMPADA', 0DH, 0DH, 0AH
DB 'ESCOLHA: ', 0FFH

END

176
Prof. José Wilson Lima Nerys 176 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
17
7

Comunicação entre
Microcontroladores da
família 8051

177
Prof. José Wilson Lima Nerys 177 Microprocessadores
Universidade Federal de Goiás
Comunicação entre Microcontroladores (Mestre  Escravos)
Escola de Engenharia Elétrica, Mecânica e de Computação
Serial – Modo 3 (assíncrono de 9 bits)

Micro Micro Micro Micro


Mestre Escravo 1 Escravo 2 Escravo 3

RX TX TX RX TX RX TX RX

A comunicação entre 1 microcontrolador Mestre e 2 ou mais Microcontroladores Escravos pode ser


feita no Modo 2 ou 3 da serial

Procedimento:
1. Todos os Micros Escravos tem SM2=1; assim, quando o Mestre transmite a mensagem
(endereço do escravo a ser ativado) com TB8 = 1, todos recebem o nono bit, RB8 = 1, e
desviam para a interrupção da serial;
2. Todos eles fazem uma verificação do endereço recebido na primeira mensagem (primeiro byte
recebido deve indicar qual dos escravos está sendo solicitado);
3. Aquele Micro Escravo que tem o endereço correto faz SM2 = 0;
4. O Micro Mestre, então, envia as informações desejadas para aquele Micro Escravo que tem
SM2 = 0. A informação é enviada com TB8 = 0. Assim, todos os micros escravos recebem
RB8 = 0, mas somente aquele com SM2 = 0 é interrompido para receber as informações;
5. No final da transmissão dos dados, o micro escravo ativo faz SM2 = 1, voltando à condição
inicial.

178
Prof. José Wilson Lima Nerys 178 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Comunicação entre Microcontroladores (Mestre  Escravos)
Serial – Modo 3 (assíncrono de 9 bits)

Exemplo demonstrativo:

Micro Escravo 1 – aciona um motor de passo, quando ele recebe a mensagem “A”, do mestre.
Ao receber a mensagem “A”, a flag F0 é setada. Essa flag é usada na rotina
principal para entrar no loop de acionamento do motor de passo. Ao final faz-se SM2=1.

Micro Escravo 2 – aciona (liga/desliga) uma lâmpada quando recebe a mesma mensagem “A”.
Ao receber a mensagem “A”, o Micro Escravo 2 liga ou desliga a lâmpada,
dependendo do estado anterior. Ao final, faz-se SM2 = 1.

Micro Escravo 3 – Escreve no LCD a mensagem recebida do Micro Mestre.


Uma vez identificado que o endereço recebido é do Escravo 3, esse micro passa a
a verificar o conteúdo dos próximos caracteres, para identificar se a mensagem já
chegou ao final. Foi escolhido o código “2F” (que corresponde a “/”) como fim da
mensagem. Todos os caracteres recebidos são enviados para o LCD, exceto 2FH.
Ao receber 2FH, SM2 é setado e é enviado o código de endereço 80H para o LCD.
Assim, o cursor volta para a posição inicial.

Mestre: As chaves CH0 (em P2.0), CH1(em P2.1) e CH2 (em P2.2) são utilizadas para enviar
uma mensagem a cada um dos micros escravos.

179
Prof. José Wilson Lima Nerys 179 Microprocessadores
Comunicação entre Microcontroladores (Mestre  Escravos)
Universidade Federal de Goiás
Serial – de
Escola Modo 3 (assíncrono
Engenharia de 9 bits)
Elétrica, Mecânica e de Computação

180
Prof. José Wilson Lima Nerys 180 Microprocessadores
Universidade Federal de Goiás
Comunicação entre EscolaMicrocontroladores Mecânica
de Engenharia Elétrica,(Mestre Escravos)
e de Computação
Serial – Modo 3 (assíncrono de 9 bits)
Programa do Micro Mestre
; PRIMEIRO MICRO ESCRAVO: ENDEREÇO: "1"
; SEGUNDO MICRO ESCRAVO: ENDEREÇO: "2"
; TERCEIRO MICRO ESCRAVO: ENDEREÇO: "3"
CH0 BIT P2.0 Chave CH0 estabelece a comunicação Mestre < --- > Escravo 1
CH1 BIT P2.1
CH2 BIT P2.2
ORG 00H SM0 SM1 SM2 REN TB8 RB8 TI RI
LJMP INICIO
1 1 0 0 0 0 0 0
ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#0C0H ; 11000000B --> Serial no modo 3 com SM2 = 0
MOV TMOD,#20H
MOV TH1,#0FDH ; Baud rate = 9600 bps
MOV TL1,#0FDH

V0: JB CH0,V1 ; Verifica estado de CH0 (P2.0). Se CH0 = 1, desvia para V1


; Se CH0 = 0, envia endereço do Escravo 1
SETB TB8 ; Seta bit TB8 de SCON, para envio do endereço
SETB TR1 ; Dispara o Timer1, que gera o baud rate
MOV A,#’1’ ; Faz A = 31H (número 1)
MOV SBUF,A ; Envia valor para os micros escravos
JNB TI,$ ; Aguarda flag TI setar (fim da transmissão)
CLR TI ; Limpa a Flag TI

Endereço do Escravo 1 (31H = “1”). Enviado junto com TB8 = 1

181
Prof. José Wilson Lima Nerys 181 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Programa do Micro Mestre - CONTINUAÇÃO

LCALL ATRASO ; Aguarda um tempo antes de enviar a msg principal


CLR TB8 ; Limpa TB8, para envio da msg principal
MOV A,#’A’ ; 41H ; Faz A = 41H (Letra A) = mensagem principal
MOV SBUF,A ; Envia valor para o Escravo 1
JNB TI,$ ; Aguarda flag TI setar (fim da transmissão)
CLR TI ; Limpa a Flag TI
JNB CH0,$ ; Aguarda a chave CH0 ser liberada Envia mensagem principal com TB8 = 0
CLR TR1 ; Para Timer1
SJMP V0 ; Retorna para o loop principal

V1: JB CH1,V2 ; Verifica estado de CH1 (P2.1). Se CH1 = 1, desvia para V2


; Se CH1 = 0, envia endereço do Escravo 2
SETB TB8 ; Seta bit TB8 de SCON, para envio do endereço
SETB TR1 ; Dispara o Timer1, que gera o baud rate Endereço do Escravo 2 (“2” =
MOV A,#'2' ; Faz A = 32H (número 2) 32H). Enviado junto com TB8 = 1
MOV SBUF,A ; Envia valor para os micros escravos
JNB TI,$ ; Aguarda flag TI setar (fim da transmissão)
CLR TI ; Limpa a Flag TI
LCALL ATRASO
CLR TB8
MOV A,#41H ; Faz A = 41H (Letra A) = mensagem principal
MOV SBUF,A ; Limpa TB8, para envio da msg principal
JNB TI,$ ; Aguarda flag TI setar (fim da transmissão)
CLR TI ; Limpa a Flag TI
JNB CH1,$ ; Aguarda a chave CH1 ser liberada
CLR TR1 ; Para Timer1 Envia mensagem principal com TB8 = 0
SJMP V0

182
Prof. José Wilson Lima Nerys 182 Microprocessadores
Universidade Federal de Goiás
Programa Escola
do de Engenharia
Micro MestreElétrica, Mecânica e de Computação
- CONTINUAÇÃO
V2: JB CH2,V0 ; Verifica estado de CH2 (P2.2). Se CH2 = 1, volta para V0
SETB TB8 ; Limpa TB8, para envio da msg principal
SETB TR1 ; Dispara Timer1 Endereço do Escravo 3 (“3” = 33H).
MOV A,#'3' ; Faz A = 33H (número 3) Enviado junto com TB8 = 1
MOV SBUF,A ; Envia valor para os micros escravos
JNB TI,$ ; Aguarda flag TI setar (fim da transmissão)
CLR TI ; Limpa a Flag TI
LCALL ATRASO ; Chama atraso de tempo
CLR TB8 ; Limpa TB8, antes de enviar a msg principal
MOV DPTR,#MSG ; DPTR assume o endereço inicial da MSG
MOV R7,#00 ; Offset para leitura da MSG é zerado
V4: MOV A,R7 Envio de mensagem para o Escravo 3.
MOVC A,@A+DPTR ; Acumulador recebe caractere da Mensagem (MSG) Será mostrada em um LCD conectado
CJNE A,#2FH,ENVIA ; Verifica se já chegou ao final da mensagem
MOV SBUF,A ; Envia código de final de msg para o escravo 3
ao escravo 3.
JNB TI,$ ; Aguarda flag TI setar (fim da transmissão) Com TB8 = 0
CLR TI ; Limpa a Flag TI
CLR TR1 ; Para Timer1
JNB CH2,$ ; Aguarda CH2 ser liberada ATRASO: MOV R1,#100
SJMP V0 V3: MOV R2,#250
DJNZ R2,$
ENVIA: MOV SBUF,A ; Envia valor para os micros escravos DJNZ R1,V3
JNB TI,$ ; Aguarda flag TI setar (fim da transmissão) RET
CLR TI ; Limpa a Flag TI
INC R7 ; Incrementa Offset para leiura da Mensagem MSG: DB 'MASTER-->SLAVE3', 2FH
LCALL ATRASO ; Chama atraso de tempo
SJMP V4 END

183
Prof. José Wilson Lima Nerys 183 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia
Programa do MicroElétrica,
Escravo Mecânica
1 e de Computação

; PRIMEIRO MICRO ESCRAVO: ENDEREÇO: "1"


ORG 00H
LJMP INICIO

ORG 23H
SM0 SM1 SM2 REN TB8 RB8 TI RI
LJMP SERIAL
1 1 1 0 0 0 0 0
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#90H
MOV SCON,#0E0H ; SCON = 11100000B --> Serial no modo 3 com SM2 = 1
MOV TMOD,#20H
MOV TH1,#0FDH ; Baud rate = 9600 bps
MOV TL1,#0FDH
CLR P3.7
SETB TR1 Habilita recepção serial e fica
SETB REN
aguardando a flag F0 ser setada
CLR RI
V0: JNB F0,$ ; Fica nesse loop aguardando F0 = 1
CJNE A,#41H,V0 ; Se F0 = 1, verifica se a msg recebida foi 41H = A
MOV A,#11H ; Se a msg foi 41H, faz A = 11H, para acionamento do motor de passo
MOV R0,#100 ; R0 = 100, para contagem dos passos a serem dados pelo motor
V1: MOV P1,A ; Transfere conteúdo de A para o motor de passo
LCALL ATRASO
Se a mensagem recebida for “A”,
RL A ; Rotaciona conteúdo de A à esquerda rotacional o motor de passo 100
DJNZ R0,V1 ; Verifica o número de passo passos no sentido anti-horário
CLR F0 ; Quando R0 = 0, faz F0 = 0
CLR P3.7 ; Desliga Led indicador de conexão
SJMP V0

184
Prof. José Wilson Lima Nerys 184 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Programa do Micro Escravo 1 – CONTINUAÇÃO

Se RB8 = 1, verifica se o endereço recebido na primeira mensagem é


31H = “1”. Se for, faz SM2 = 0 e retorna para o loop de espera da serial.
SERIAL: MOV A,SBUF ; Transfere o conteúdo do SBUF para o acumulador
CLR RI ; Limpa a flag RI, de recepção (ITEM FUNDAMENTAL)
JNB RB8,EXECUTA ; Verifica se o valor recebido em RB8 é 1
CJNE A,#31H,SAI ; Se RB8 = 1, verifica se o endereço é do Escravo 1
CLR SM2 ; Se a mensagem for para o Escravo 1, limpa SM2
SETB P3.7 ; e Seta o pino P3.7 (para verificação visual da conexão)
SJMP SAI

EXECUTA: SETB SM2 ; Seta SM2, voltando ao estado inicial


SETB F0 ; Seta F0, que é usado para entrar no loop do motor
SAI: NOP
RETI ; volta para o loop “JNB F0,$”, de onde sai para acionar o motor, pois F0 = 1

ATRASO: MOV R1,#200


Se RB8 = 0, significa que já foi definido na mensagem anterior
V2: MOV R2,#250 que a mensagem atual é para o Escravo 1. Assim, a flag F0 é
DJNZ R2,$ setada para acionamento do motor de passo e faz-se SM2=1,
DJNZ R1,V2 para voltar ao estágio inicial.
RET

END

185
Prof. José Wilson Lima Nerys 185 Microprocessadores
Universidade Federal de Goiás
Programa
Escola do Micro
de Engenharia Escravo
Elétrica, 2
Mecânica e de Computação
EXECUTA: CJNE A,#'A',SAI2
CPL P1.7 ; Complementa estado da Lâmpada
; SEGUNDO MICRO ESCRAVO: ENDEREÇO: "2" SAI2: CLR P3.7 ; Desliga o Led em P3.7
ORG 00H SETB SM2 ; Seta SM2, voltando ao estado inicial
LJMP INICIO RETI
END
ORG 23H
LJMP SERIAL
SM0 SM1 SM2 REN TB8 RB8 TI RI
ORG 30H
INICIO: MOV SP,#2FH 1 1 1 0 0 0 0 0
MOV IE,#90H
MOV SCON,#0E0H ; SCON = 11100000B --> Serial no modo 3 com SM2 = 1
MOV TMOD,#20H
MOV TH1,#0FDH ; Baud rate = 9600 bps Se RB8 = 0, significa que já foi definido na mensagem
MOV TL1,#0FDH anterior que a mensagem atual é para o Escravo 2.
SETB TR1
Assim, o pino P1.7 é complementado, para ligar/desligar
SETB REN
CLR RI a lâmpada. Faz-se SM2=1, para voltar ao estágio inicial.
CLR P3.7
CLR P1.7 ; Desliga a Lâmpada Habilita recepção serial e fica aguardando em um loop infinito
SJMP $

SERIAL: MOV A,SBUF ; Transfere o conteúdo do SBUF para o acumulador Se RB8 = 1, verifica se o
CLR RI ; Limpa a flag RI, de recepção (ITEM FUNDAMENTAL) endereço recebido na
JNB RB8,EXECUTA ; Verifica se o valor recebido em RB8 é 1 primeira mensagem é
CJNE A,#'2',SAI ; Se RB8 = 1, verifica se o endereço é do Escravo 2 32H = “2”. Se for, faz SM2
CLR SM2 ; Se a mensagem for para o Escravo 2, limpa SM2 = 0 e retorna para o loop
SETB P3.7 ; e Seta o pino P3.7 (para verificação visual)
SAI: NOP
de espera da serial.
RETI

186
Prof. José Wilson Lima Nerys 186 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Programa do Micro Escravo 3

; Rede de Microcontroladores
; TERCEIRO MICRO ESCRAVO: ENDEREÇO: "3"

RS EQU P3.3
RW EQU P3.4
EN EQU P3.5
DADOS EQU P1

ORG 00H
LJMP INICIO SM0 SM1 SM2 REN TB8 RB8 TI RI
ORG 23H 1 1 1 0 0 0 0 0
SJMP SERIAL

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#90H
MOV SCON,#0E0H ; SCON = 11100000B --> Serial no modo 3 com SM2 = 1
MOV TMOD,#20H
MOV TH1,#0FDH ; Baud rate = 9600 bps
MOV TL1,#0FDH
SETB TR1
SETB REN
CLR RI
CLR P3.7
Habilita recepção serial, inicializa o LCD e fica aguardando em um loop infinito
LCALL INICIA

SJMP $

187
Prof. José Wilson Lima Nerys 187 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Programa do Micro Escravo 3
SERIAL: MOV A,SBUF ; Transfere o conteúdo do SBUF para o acumulador Se RB8 = 1, verifica se o
CLR RI ; Limpa a flag RI, de recepção (ITEM FUNDAMENTAL) endereço recebido na
JNB RB8,EXECUTA ; Verifica se o valor recebido em RB8 é 1
primeira mensagem é 33H
CJNE A,#'3',SAI ; Se RB8 = 1, verifica se o endereço é do Escravo 3
CLR SM2 ; Se a mensagem for para o Escravo 3, limpa SM2 = “3”. Se for, faz SM2 = 0
SETB P3.7 ; e Seta o pino P3.7 (para verificação visual) e retorna para o loop
SAI: NOP infinito.
RETI
EXECUTA: CJNE A,#2FH,OK ; Se RB8 = 0, verifica se já chegou ao fim dos dados para o Escravo 3
SETB SM2 ; Seta SM2, voltando ao estado inicial
CLR P3.7 ; Limpa o pino P3.7, após encerrada a comunicação Mestre --> Escravo 3
MOV A,#80H ; código para retornar o cursor para a posição 80H do LCD
LCALL INSTR_WR ; Escreve a instrução de posição 80H no LCD
RETI
OK: LCALL TEXTO_WR ; Mostra no LCD os dados recebidos
RETI

; SUBROTINA DE INICIALIZAÇÃO DO DISPLAY LCD


INICIA: MOV A,#38H ; Código para habilitação da primeira linha do LCD
LCALL INSTR_WR ; Escreve o código no LCD
MOV A,#38H ; Código para habilitação da segunda linha do LCD
LCALL INSTR_WR ; Escreve o código no LCD
MOV A,#0EH
LCALL INSTR_WR Se RB8 = 0, significa que já foi definido na mensagem anterior que a mensagem
MOV A,#06H atual é para o Escravo 3, que receberá uma mensagem a ser enviada ao LCD.
LCALL INSTR_WR Assim, ele passa a verificar se cada caractere recebido é “2FH”, que indica fim
MOV A,#01H da mensagem para o LCD. Enquanto não for, envia caractere para o LCD;
LCALL INSTR_WR
quando for 2FH, faz SM2=1 e retorna para o loop infinito.
RET

188
Prof. José Wilson Lima Nerys 188 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Programa do Micro Escravo 3

INSTR_WR:SETB EN ; Habilita o display LCD


CLR RW ; Operação de escrita no LCD
CLR RS ; Operação de escrita de instrução
MOV DADOS,A ; Transfere o conteúdo de A para o LCD
LCALL ATRASO_LCD ; Chama subrotina de atraso de tempo
CLR EN ; Desabilita o LCD
RET

TEXTO_WR:SETB EN ; Habilita o display LCD


CLR RW ; Operação de escrita no LCD
SETB RS ; Operação de escrita de Dados
MOV DADOS,A ; Transfere o conteúdo de A para o LCD
LCALL ATRASO_LCD ; Chama subrotina de atraso de tempo
CLR EN ; Desabilita o LCD
RET

ATRASO_LCD:
MOV R4,#10
V6: MOV R5,#100
DJNZ R5,$
DJNZ R4,V6
RET

END

189
Prof. José Wilson Lima Nerys 189 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Breve Introdução aos Conversores AD e DA

Como os dados de um microprocessador estão na forma digital e os dados do mundo


exterior estão na forma analógica (contínua), é necessário fazer a conversão entre
esses dados. Assim, tem-se o Conversor Analógico-Digital (ADC), que faz a
conversão de sinal analógico para sinal digital e o Conversor Digital-Analógico (DAC),
que faz a conversão de sinal digital para sinal analógico.

Velocidade
Temperatura
Sinal Micro- Sinal
Sinal ADC Sinal
Tensão Digital controlador Digital DAC
Analógico Analógico
Corrente
Pressão

190
Prof. José Wilson Lima Nerys 190 190
Microprocessadores
Universidade Federal de Goiás Conversor DA Básico de 4 bits
Escola de Engenharia Elétrica, Mecânica e de Computação

VREF VREF
I3  I2 
R 2R
VREF VREF
I1  I0 
4R 8R

I  I 3  I 2  I1  I 0 Vsaída   Rsaída I

VREF 0
I (2  D3  2 1  D2  2  2  D1  2 3  D0 )
R
VREF
I ( D3  0,5  D2  0,25  D1  0,125  D0 )
R
191
191
Prof. José Wilson Lima Nerys 191 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
19
Corrente saída Fração do
2 DA Básico
Conversor D3 D2 D1 D0
(Vref = 5 V e R = 5 kΩ) máximo

De 4 bits 0 0 0 0 0 0
0 0 0 1 0.125 1/15
0 0 1 0 0.250 2/15
0 0 1 1 0.375 3/15
0 1 0 0 0.500 4/15
0 1 0 1 0.625 5/15
0 1 1 0 0.750 6/15
0 1 1 1 0.875 7/15
1 0 0 0 1.000 8/15
1 0 0 1 1.125 9/15
1 0 1 0 1.250 10/15
1 0 1 1 1.375 11/15
1 1 0 0 1.500 12/15
1 1 0 1 1.625 13/15
1 1 1 0 1.750 14/15
1 1 1 1 1.875 15/15

192
Prof. José Wilson Lima Nerys 192 Microprocessadores
Universidade Federal de Goiás Conversor DA Básico de 4 bits
Escola de Engenharia Elétrica, Mecânica e de Computação
193

Fonte: 5 V
N. bits 1 LSB
4 0,33 V
8 19,6 mV
10 4,89 mV
12 1,22 mV
16 0,076 mV

193
Prof. José Wilson Lima Nerys 193 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
19 Resolução de um DA
4
(a) Cada degrau (menor incremento possível) corresponde a 1 LSB
(bit menos significativo)

(b) Número de degraus de um conversor: 2n – 1, onde n é o número de bits.


Para n = 4  15 degraus.

Resolução: É a relação entre o menor incremento possível, 1 LSB e a saída máxima.


1
Resolução = , onde n é número de bits.
2 1
n

No caso de n = 4  Resolução = 1/15

Resolução Percentual = Resolução  100%

No caso de 4 bits  Resolução Percentual = 6.67%

194
Prof. José Wilson Lima Nerys 194 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
19
5
Resolução do DA versus Número de bits

Resolução
Número de bits Resolução
Percentual (%)

4 1/15 6,67

8 1/255 0,392

10 1/1023 0,09775

12 1/4095 0,02442

16 1/65535 0,000381

195
Prof. José Wilson Lima Nerys 195 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
19
6 Conversor DA com resistores em escada

196
Prof. José Wilson Lima Nerys 196 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
19
7
Conversor DAC 0808

197
Prof. José Wilson Lima Nerys 197 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Conversor ADC Básico

198
198
Prof. José Wilson Lima Nerys 198 Microprocessadores
Universidade Federal de Goiás Conversor ADC com
Escola de Engenharia Elétrica, Mecânica e de Computação
Aproximação Sucessiva

Exemplo: supondo Vent = 3,0 V

5𝑉 5𝑉
𝑉𝑠𝑎í𝑑𝑎 = × 𝐷𝐴𝐶𝐼𝑁 = × 𝐷𝐴𝐶𝐼𝑁
28 − 1 255
IN

Saída do Registrador RAS = Entrada do Conversor DA interno


Saída do
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 DACin Vsaída Comparador
1 0 0 0 0 0 0 0 128 2,5 V Nível Alto
1 1 0 0 0 0 0 0 192 3,76 V Nível Baixo
1 0 1 0 0 0 0 0 160 3,14 V Nível Baixo
1 0 0 1 0 0 0 0 144 2,82 V Nível Alto
1 0 0 1 1 0 0 0 152 2,98 V Nível Alto
1 0 0 1 1 1 0 0 156 3,06 V Nível Baixo
199
1 0 0 1 1 0 1 0 149 2,92 V Nível Alto
1 0 0 1 1 0 1 1 155 3,04199
V Nível Alto
199
Prof. José Wilson Lima Nerys Microprocessadores
Universidade Federal de Goiás
Conversor
Escola de Engenharia ADC 0804
Elétrica, Mecânica e de Computação
20
0

Saída

Sinais de Controle
CS\  habilita o CI
RD\  habilita a saída dos dados
RW\  trigger

200
Prof. José Wilson Lima Nerys 200 Microprocessadores
Universidade Federal de Goiás
Diagrama deEscola
Temporização doElétrica,
de Engenharia Conversor ADC0804
Mecânica e de Computação

Tempo de conversão
aproximado: 100 µs

201
201
Prof. José Wilson Lima Nerys 201 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
20 Programa para leitura do Conversor AD
2
Rótulo Instrução Rótulo Instrução Rótulo Instrução

CS EQU P3.4 LE_AD: CLR CS ATRASO: MOV R0,#50


RS EQU P3.5 LCALL ATRASO DJNZ R0,$
RW EQU P3.6 SETB RW RET
LCALL ATRASO
ORG 00H CLR RW END
LJMP INICIO LCALL ATRASO
SETB RW ; Começa a conversão
ORG 30H SETB CS
INICIO: MOV SP,#2FH JB P3.3,$ ; Aguarda fim de
conversão
V1: LCALL LE_AD Loop infinito:
CLR CS Aguarda sinal de fim
MOV P1,A
CLR RS ; Liberada dados na de conversão.
SJMP V1 saída
LCALL ATRASO Pino INTR do AD
conectado ao pino
MOV A,P2 ; Transfere resultado
Loop infinito: Chama subrotina de P3.3 do 8051
para A
Leitura do AD e mostra resultado em A
SETB RS
SETB CS
RET

202
Prof. José Wilson Lima Nerys 202 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Temporização no problema anterior


SETB CS_AD
SETB START_AD
NOP CS\
NOP
CLR CS_AD
NOP
NOP RS\ Leitura
CLR START_AD (libera dad
NOP
NOP
INTR
SETB START_AD Fim da con
NOP
CLR CS_AD WR\
NOP
NOP
JB P3.2,$

Início da conversão
203
Prof. José Wilson Lima Nerys 203 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Programa 2: Conversor AD usando interrupção
20
Rótulo Instrução
4 O conversor AD está operando de forma independente e
ORG 00H ininterrupta. O sinal de final de conversão é usado para
LJMP INICIO dar início à próxima conversão.

ORG 03H
A cada fim de conversão do conversor AD, um sinal de pedido de
MOV A,P2
interrupção é enviado ao 8051, através do pino P3.2 (interrupção zero).
RETI Assim, o processamento desvia para o endereço 03H, onde o resultado
da conversão (disponibilizado na porta P2) é transferido para A
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#81H
Interrupção externa zero é habilitada por transição.
MOV
TCON,#01H

V1: MOV P1,A


Loop infinito: O conteúdo de A é copiado na porta P1 (Leds). A
atualização de A ocorre a cada final de conversão, através da
SJMP V1 interrupção externa zero.
END

204

204
Prof. José Wilson Lima Nerys 204 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Uso 20
do Teclado com Interrupção
5
(Decodificador de teclado: 74C922) Sinal alto (saída) quando
a conversão acaba
A saída (AD3, AD2, AD1, AD0) do
decodificador 74C922 é conectado ao
nibble inferior da Porta P2

Pedido de interrupção
para o 8051 (na transição
de alto para baixo)

Sinal baixo (entrada)


para liberar o
resultado na saída
ABCD

205
Prof. José Wilson Lima Nerys 205 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica
Uso do Teclado e de Computação
com Interrupção
20 (Decodificador de teclado: 74C922)
Rótulo Instrução
6
ORG 00H
LJMP INICIO
Endereço da interrupção externa 1
O conteúdo da porta P2 é copiado no acumulador.
ORG 13H A instrução ANL A,#0FH (AND) elimina o nibble superior da
MOV A,P2 leitura de P2.
ANL A,#0FH
RETI

ORG 30H
INICIO: MOV SP,#2FH
interrupção externa 1 por transição

MOV IE,#84H
MOV
TCON,#04H
Loop infinito: Mostra o conteúdo de A, que é atualizado, através da
interrupção externa 1, a cada vez que o teclado é pressionado
V1: MOV P1,A
SJMP V1
END

206
Prof. José Wilson Lima Nerys 206 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Uso do Teclado com Interrupção Nesse programa o Teclado é usado para
20
(Decodificador de teclado: 74C922) “entrar” com um número de dois dígitos.
7
Rótulo Instrução Rótulo Instrução

ORG 00H LE_TECLADO JB F0,NIBBLE2 Leitura do dígito superior do número de


: dois dígitos.
LJMP INICIO
MOV A,P2
O dado lido de P2 passa por uma operação
AND para eliminar o nibble superior (lixo).
ANL A,#0FH A instrução SWAP A transfere o dado lido
ORG 13H
SWAP A (nibble inferior) para o nibble superior. O
LJMP
LE_TECLADO MOV B,A resultado é guardado em B. A flag F0 é
setada para direcionar a próxima
SETB F0 interrupção para NIBBLE2.
ORG 30H RETI
INICIO: MOV SP,#2FH Leitura do dígito inferior do número de dois
MOV IE,#84H NIBBLE2: MOV A,P2 dígitos.
MOV
O dado lido de P2 passa por uma operação AND
ANL A,#0FH
TCON,#04H para eliminar o nibble superior (lixo).
ORL A,B A instrução OR entre junta conteúdo de A (dígito
CLR F0
CLR F0 inferior) com o conteúdo de B (dígito superior).
A flag F0 é zerada para direcionar a próxima
RETI interrupção para a primeira parte dessa subrotina.
V1: MOV P1,A
END
SJMP V1 Loop infinito: Mostra o conteúdo de A, que é atualizado, através da
interrupção externa 1, a cada vez que o teclado é pressionado

207
Prof. José Wilson Lima Nerys 207 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
20
8

Expansão da Capacidade
de Memória e
Mapeamento de Memória

208
Prof. José Wilson Lima Nerys 208 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Expansão da Capacidade de
Memória do 8051

209
Prof. José Wilson Lima Nerys 209 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Expansão de Memória

Um sistema microcontrolado consiste de Hardware e Firmware. O


Firmware de sistemas experimentais de propósito geral é normalmente
um programa monitor que permite ao usuário inspecionar e modificar
atributos do sistema, tais como memória e portas [3]. O programa monitor
deveria, ainda, permitir baixar e rodar outros programas aplicativos.

Uma vez que o programa aplicativo foi plenamente desenvolvido e


testado, ele pode ser colocado numa ROM e o sistema microcontrolado
pode ser usado como um controlador embarcado (embedded controller).

210
Prof. José Wilson Lima Nerys 210 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Expansão de Memória
Um sistema microcontrolado algumas vezes tem necessidade de
memória além da disponível internamente no microcontrolador,
principalmente para o armazenamento de dados. Assim, pode-se
expandir a memória com um chip externo. O diagrama de blocos a seguir
mostra o diagrama geral de um sistema com extensão de memória.

CPU: 8051 MEMÓRIA


A(0 .. 15) A(0 .. 15)
D(0 .. 7) D(0 .. 7)
RD\ RD\
WR\ WR\

211
Prof. José Wilson Lima Nerys 211 Microprocessadores
Universidade Federal de Goiás
Expansão de Memória
Escola de Engenharia Elétrica, Mecânica e de Computação

Observar que as Portas P0 e P2 são utilizadas, sendo que a Porta P0


tem dupla função: transportar o byte inferior do endereço e os dados

Dados/LSB LSB do
endereço endereço
Sinais
de
controle
Sinais
de
controle

Dados

Byte superior (MSB) do endereço

212
Prof. José Wilson Lima Nerys 212 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Expansão de Memória
Latch 74LS573

O Latch é um componente
importante para separar o
endereço dos dados na Porta P0

213
Prof. José Wilson Lima Nerys 213 Microprocessadores
Universidade Federal de Goiás
Um exemplo de memória EscolaEEPROM é aElétrica,
de Engenharia AT28C64 (8 Kbytes
Mecânica x 8 bits), com
e de Computação
capacidade de memória de 8 Kbytes

13 linhas de endereço: A0 ... A12


213 = 8192 (2000H) = 8 Kbytes
Na 1ª região: 0000h a 1FFFh
Endereç 8 linhas de dados: I/O0 ... I/O7
Endereç os
os
WE\  Write Enable
OE\  Output Enable
Dad Dad CE\  Chip Enable
os os

Operação CE\ WE\ OE\


Leitura de Memória 0 1 0
Escrita de Memória 0 0 1

214
Prof. José Wilson Lima Nerys 214 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Nessa montagem os pinos P2.7, P2.6 e P2.5 são irrelevantes, mas criam sombras
de memória.
Sistema com Memória EEPROM de 8 K
I/O0 I/O7 OE\
EEPROM AT28C64
CE\
WE\
0V A A7 A12 A8
0
Habilita
o CI

OE\ LE
Latch
0V

WR\
ALE

RD\
Microcontrolador AT89S52

MOV DPTR,#1000H Transfere para o endereço 1000H da EEPROM


externa o conteúdo do acumulador
MOVX @DPTR,A

215
Prof. José Wilson Lima Nerys 215 Microprocessadores
Universidade Federal de Goiás Sistema com Memória EEPROM de 8 K
Escola de Engenharia Elétrica, Mecânica e de Computação
Pode-se definir 8 regiões diferentes de 8 Kbytes de memória usando um circuito
lógico com portas NAND Faixa de endereços da EEPROM

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

P2. P2. P2. P2. P2. P2. P2. P2. P0. P0. P0. P0. P0. P0. P0. P0.
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0

Na conexão apresentada, o
 
MOV DPTR,#0000H MOV DPTR,#2000H MOV DPTR,#0E000H
endereço 0000H da memória MOVX @DPTR,A MOVX @DPTR,A MOVX @DPTR,A
pode ser acessado de 8
maneiras diferentes (sombras Exemplo: acessam a mesma216
região de
216
Prof. José Wilson Lima Nerys Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
21exemplo a seguir ilustra a existência das sombras de memória. A memória
O
7 de 8 Kbytes é preenchida 8 vezes, quando o DPTR é incrementado de
única
0000H até FFFFH. O conteúdo enviado para a memória é o valor de A de 00H
a FFH, várias vezes.

ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH

MOV DPTR,#0000H ; Valor inicial de DPTR


MOV A,#0 ; Valor inicial de A

V1: MOVX @DPTR,A ; A é copiado na posição apontada por DPTR


INC A ; Incrementa A
INC DPTR ; Incrementa DPTR
SJMP V1

END

217
Prof. José Wilson Lima Nerys 217 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Procedimento para eliminar as sombras de memória:

Utilizar um circuito habilitador da pastilha de memória a partir das


linhas de endereço A15, A14 e A13, no caso da memória de 8K

A2 A1 A0 Y
0 0 0 1
0 0 1 1 A porta NAND de 3 entradas apresenta
saída em nível lógico baixo (0) somente
A2 0 1 0 1 quando todas as entradas estão em
A1 Y
A0 0 1 1 1 nível lógico alto (1).
1 0 0 1
A pastilha de memória é habilitada com
1 0 1 1 nível lógico baixo: CE\ = 0
1 1 0 1
1 1 1 0

218
Prof. José Wilson Lima Nerys 218 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Procedimento para eliminar as sombras de memória:

Utilizar um circuito habilitador da pastilha de memória a partir das


linhas de endereço A15, A14 e A13, no caso da memória de 8K

P2.7 A2 EEPROM
CE\ Faixa habilitada de
A15 A14 A13 P2.6 A1
Y
endereços:
P2.5 A0 0000H a 1FFFH

P2. P2. P2.


7 6 5 P2.7 A2 EEPROM

0 0 0
CE\ Faixa habilitada de
P2.6 A1 endereços:
Y
P2.5 A0 2000H a 3FFFH
0 0 1

0 1 0 P2.7 A2 EEPROM
CE\ Faixa habilitada de
P2.6 A1 endereços:
0 1 1 P2.5 A0
Y 4000H a 5FFFH

1 0 0

1 0 1

1 1 0
P2.7 A2 EEPROM
1 1 1 P2.6 A1
CE\ Faixa habilitada de
endereços:
Y
P2.5 A0 E000H a FFFFH

219
Prof. José Wilson Lima Nerys 219 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

O decodificador 74LS138 possui internamente 8 portas NAND,


podendo ser usado no Mapeamento de Memória

A divisão da região total de memória (64 K) pode ser feita, nesse caso, em 8
regiões de 8K, como mostrado. No entanto, não é necessário utilizar portas
NANDs isoladas.

Utiliza-se o decodificador 74LS138. Ele possui três entradas para seleção de


uma de 8 saídas. A saída é em nível lógico baio.

220
Prof. José Wilson Lima Nerys 220 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Divisão em Regiões de Memória com o decodificador 74LS138

221
Prof. José Wilson Lima Nerys 221 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Tabela-verdade do 74LS138

222
Prof. José Wilson Lima Nerys 222 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Dividindo-se a região total de memória (64 K) em 8 regiões iguais, pode-


se utilizar 8 pastilhas de memória de 8 K.

Entrada do 74138 Saída do


Endereços Memórias
A2 A1 A0 74138 Região
Inicial e Final de 8 K
(A15) (A14) (A13)
0 0 0 O0 0 0000H – 1FFFH EEPROM 1
0 0 1 O1 1 2000H – 3FFFH EEPROM 2
0 1 0 O2 2 4000H – 5FFFH EEPROM 3
0 1 1 O3 3 6000H – 7FFFH
1 0 0 O4 4 8000H – 9FFFH
1 0 1 O5 5 A000H – BFFFH
1 1 0 O6 6 C000H – DFFFH
1 1 1 O7 7 E000H - FFFFH

223
Prof. José Wilson Lima Nerys 223 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

224

224
Prof. José Wilson Lima Nerys 224 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

225
Pode-se ainda subdividir cada uma das regiões em regiões menores.
Por exemplo, pode-se dividir a região 2 em 4 sub-regiões de 2 Kbytes
usando o decofificador 74139 (2 entradas, 4 saídas)

Entrada do 74138 Saída do Entrada


Endereços Memórias
A2 A1 A0 74138 74139
(A12)(A11) Inicial e Final de 8 K
(A15) (A14) (A13)

0 0 0 O0 0000H – 1FFFH EEPROM 1


0 0 1 O1 2000H – 3FFFH EEPROM 2
0 1 0 EN =O2 0 0 4000H – 47FFH EEPROM 3 – 1
0 1 0 EN =O2 0 1 4800H – 4FFFH EEPROM 3 – 2
0 1 0 EN =O2 1 0 5000H – 57FFH Não usada
0 1 0 EN =O2 1 1 5800h – 5FFFH Não usada

225
Prof. José Wilson Lima Nerys 225 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
22
6

Sub-divisão da
região 2 em regiões
de 2 Kbytes

226
Prof. José Wilson Lima Nerys 226 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

227
Exemplo de código que usa a memória externa

ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH

MOV DPTR,#0000H ; Inicia com DPTR = 0000H


MOV A,#0 ; Inicia com A = 0

V1: MOVX @DPTR,A ; O endereço externo em DPTR recebe conteúdo de A


INC A ; Incrementa valor de A
INC DPTR ; Incremente endereço em DPTR
SJMP V1 ; Volta para V1

END

227
Prof. José Wilson Lima Nerys 227 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Mapeamento de
Memória do 8051

228
Prof. José Wilson Lima Nerys 228 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Mapeamento de Memória
As Portas P0 e P2 podem ser usadas para acionar outros dispositivos, além do
acesso à memória EEPROM. Para isso é necessário fazer uma divisão da
memória em regiões (mapeamento de memória), como feito na expansão da
capacidade de memória.

No entanto, ao invés de dedicar todas as regiões para pastilhas de memória,


reserva-se cada região para um componente diferente. Por exemplo:
Região 0: Memória EEPROM
Região 1: Conjunto de 8 Leds
Região 2: LCD
Região 3: Motor de Passo

Região 7: Teclado

229
Prof. José Wilson Lima Nerys 229 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Mapeamento de Memória
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1

0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1

EEPROM 8 Leds Display LCD


230
Prof. José Wilson Lima Nerys 230 Microprocessadores
Mapeamento de Memória
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Dividindo-se a região total de memória (64 K) em 8 regiões iguais, tem-se a


definição dos intervalos de cada região e os dispositivos acionados.

Entrada do 74138 Saída do


74138 Endereço Inicial e Dispositivo
A2 A1 A0 Região
Final escolhido
(A15) (A14) (A13)
0 0 0 O0 0 0000H – 1FFFH EEPROM 8K

0 0 1 O1 1 2000H – 3FFFH 8 Leds

0 1 0 O2 2 4000H – 5FFFH Display LCD

0 1 1 O3 3 6000H – 7FFFH Motor de Passo

1 0 0 O4 4 8000H – 9FFFH Conversor AD

1 0 1 O5 5 A000H – BFFFH Conversor DA

1 1 0 O6 6 C000H – DFFFH Não utilizado

1 1 1 O7 7 E000H - FFFFH Teclado

231
Prof. José Wilson Lima Nerys 231 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

232

Memória EEPROM
AT28C64
A13 A
Y0 M1
Y1
A14 B
Y2
A15 C
Y3

Y4
RD
E3 Y5
WR
E2\ Y6

E1\ Y7

232
Prof. José Wilson Lima Nerys 232 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Mapeamento de Memória
Seleção de 7 Dispositivos com o decodificador 74138

A15 A14 A13 Dispositivo End. Inicial


M1
0 0 0 EEPROM 0000H
Y0
A13 A Leds 0 0 1 8 Leds 2000H
Y1
A14 B LCD
Y2 0 1 0 Display LCD 4000H
A15 C
Y3
MP
0 1 1 Motor de Passo 6000H
Y4 ADC
RD 1 0 0 ADC 8000H
E3 Y5 DAC
WR
E2\ Y6
1 0 1 DAC A000H
E1\ Y7 Tecla 1 1 0 Não utilizado C000H
1 1 1 Teclado E000H

233
Prof. José Wilson Lima Nerys 233 Microprocessadores
Universidade Federal de Goiás
Mapeamento de Memória – Leds e Motor de Passo
Escola de Engenharia Elétrica, Mecânica e de Computação

Endereço escolhido para o motor de passo: 6000H a 7FFFH.


ULN 2803
Driver para o motor de passo
ULN2004 ou ULN2803 –
Transistores Darlington

Não tem um pino de habilitação

Usar Latch para permitir a


habilitação/desabilitação

Deve-se utilizar também um Latch para o acionamento dos Leds, uma vez que
eles não tem um buffer próprio para habilitação/desabilitação

234
Prof. José Wilson Lima Nerys 234 Microprocessadores
Mapeamento
Universidade Federal dede Memória – Leds e Motor de Passo
Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
23
5

ULN 2803

CI 74LS573

235
Prof. José Wilson Lima Nerys 235 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Endereço escolhido para o Display LCD: 4000H – 5FFFH
Não há necessidade de Latch porque o LCD já tem um pino de
habilitação próprio (E)

236
Prof. José Wilson Lima Nerys 236 Microprocessadores
Mapeamento
Universidade Federalde
de Memória
Goiás – Display LCD  4000H – 5FFFH
Escola de Engenharia Elétrica, Mecânica e de Computação
Os bits de dados (D0 a D7) podem ser ligados diretamente no barramento da porta P0,
mas os pinos A0(RS) e A1(RW) devem ser conectados através de um Latch, que
acionará esses pinos conforme a tabela a seguir.
O Enable (LCD1) é acionado pela saída O2 do decodificador 74138.
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 RW RS

0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1

0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0

0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1

R/W RS
A1 A0

MOV A,#18H O conteúdo de A (18H) é interpretado pelo LCD como uma


MOV DPTR,#4000H instrução, porque foi enviado para o endereço 4000H 
MOVX @DPTR,A deslocamento para a esquerda da mensagem do display

237
Prof. José Wilson Lima Nerys 237 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Comandos mais comuns para o Display LCD


DESCRIÇÃO MODO RS R/W Código (Hexa)

Display Liga (sem cursor) 0 0 0C


Desliga 0 0 0A/08
Limpa Display com Home cursor 0 0 01
Controle do Cursor Liga 0 0 0E
Desliga 0 0 0C
Desloca para Esquerda 0 0 10
Desloca para Direita 0 0 14
Cursor Home 0 0 02
Cursor Piscante 0 0 0D
Cursor com Alternância 0 0 0F
Sentido de deslocamento do cursor Para a esquerda 0 0 04
ao entrar com caractere
Para a direita 0 0 06
Deslocamento da mensagem ao Para a esquerda 0 0 07
entrar com caractere
Para a direita 0 0 05
Deslocamento da mensagem sem Para a esquerda 0 0 18
entrada de caractere
Para a direita 0 0 1C
Endereço da primeira posição Primeira linha 0 0 80
Segunda linha 0 0 C0

238
Prof. José Wilson Lima Nerys 238 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

239 Conexão do Display LCD

239
Prof. José Wilson Lima Nerys 239 Microprocessadores
Universidade Federal de Goiás
ConversoresEscola ADdeeEngenharia
DA – ADC Elétrica,0804 e DAC
Mecânica 0808
e de Computação
24
0

É utilizada a interrupção externa 0 para indicar


240
Prof. José Wilson Lima Nerys que uma conversão do ADC foi concluída 240 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
24
1

Teclado no Endereço 0E000H

É utilizada a interrupção externa 1 para indicar que uma tecla do teclado foi
pressionada

241
Prof. José Wilson Lima Nerys 241 Microprocessadores
Universidade Federal deMapeamento
Goiás Completo
Escola de Engenharia Elétrica, Mecânica e de Computação
24
2

242
Prof. José Wilson Lima Nerys 242 Microprocessadores
Universidade Federal de Goiás
Exemplos de Acionamento – Leds
Escola de Engenharia Elétrica, e Motor
Mecânica de Passo
e de Computação

243
;Acionamento de Motor de Passo por
; Leds no Endereço 2000H
Mapeamento de Memória – End. 6000H
ORG 00H
ORG 00H
LJMP INICIO
LJMP INICIO
ORG 30H
ORG 30H
INICIO: MOV SP,#2FH
INICIO: MOV SP,#2FH
MOV DPTR,#2000H
MOV A,#11H
MOV A,#01H
MOV DPTR,#6000H
V1: MOVX @DPTR,A
V1: MOVX @DPTR,A
LCALL ATRASO
RL A
RL A
LCALL ATRASO
SJMP V1
SJMP V1
ATRASO: MOV R0,#200
ATRASO: MOV R0,#200
V2: MOV R1,#250
V2: MOV R1,#250
DJNZ R1,$
DJNZ R1,$
DJNZ R0,V2
DJNZ R0,V2
RET
RET
END
END

243
Prof. José Wilson Lima Nerys 243 Microprocessadores
Universidade Federal de Goiás
Exemplos de Acionamento para o Mapeamento – LCD
Escola de Engenharia Elétrica, Mecânica e de Computação
24Endereço Inicial 4000H
; LCD no
; SUBROTINA DE INICIALIZAÇÃO DO DISPLAY LCD
4 WR_COMANDO EQU 4000H
INICIA: MOV A,#38H
WR_DADOS EQU 4001H
RD_COMANDO EQU 4002H LCALL INSTR_WR
RD_DADOS EQU 4003H
MOV A,#38H
ORG 00H LCALL INSTR_WR
LJMP INICIO
MOV A,#0EH
ORG 30H LCALL INSTR_WR
INICIO: MOV SP,#2FH
MOV R0,#00 MOV A,#06H
MOV R1,#00 LCALL INSTR_WR
MOV R7,#00H RET
LCALL INICIA
LCALL LIMPA ; SUBROTINA QUE LIMPA O DISPLAY
LIMPA: MOV A,#01H
LINHA1: MOV A,R7 LCALL INSTR_WR
MOV DPTR,#MSG1 RET
MOVC A,@A+DPTR
CJNE A,#0FFH,V1 INSTR_WR:
SJMP $ MOV DPTR,#WR_COMANDO ; end. 4000H
MOVX @DPTR,A
V1: LCALL TEXTO_WR LCALL ATRASO_LCD
LCALL ATRASO_LCD RET
INC R7
SJMP LINHA1
244
Prof. José Wilson Lima Nerys 244 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

245

Exemplos de Acionamento para o Mapeamento – LCD

TEXTO_WR:
MOV DPTR,#WR_DADOS ; end. 4001H
MOVX @DPTR,A
LCALL ATRASO_LCD
RET

ATRASO_LCD:
MOV R4,#10
V6: MOV R5,#80
DJNZ R5,$
DJNZ R4,V6
RET

MSG1: DB 'MICROCONTROLADOR', 0FFH


FIM: NOP
END

245
Prof. José Wilson Lima Nerys 245 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

246
Conversor Analógico-Digital no endereço 8000H e Conversor Digital-
Analógico no enderelo A000H
CS_AD EQU P3.4 ADC: SETB CS_AD
START_AD EQU P3.5 SETB START_AD
NOP
ORG 00H NOP
LJMP INICIO CLR CS_AD
NOP
ORG 03H NOP
MOV DPTR,#8000H ; ADC CLR START_AD
MOVX A,@DPTR NOP
NOP NOP
NOP SETB START_AD
MOV DPTR,#0A000H ; DAC NOP
MOVX @DPTR,A CLR CS_AD
RETI NOP
NOP
JB P3.2,$
ORG 30H
INICIO: MOV SP,#2FH SJMP ADC
MOV IE,#81H
MOV TCON,#01H END

246
Prof. José Wilson Lima Nerys 246 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

247
Leitura do Teclado e Escrita nos Leds
; Teclado no Endereço E000H
; Leds no Endereço 2000H

ORG 00H
LJMP INICIO

ORG 13H
MOV DPTR,#0E000H
MOVX A,@DPTR
ANL A,#00001111B

MOV DPTR,#2000H
MOVX @DPTR,A
RETI

ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#84H
MOV TCON,#04H
SJMP $

END

247
Prof. José Wilson Lima Nerys 247 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

248 Leitura do Teclado e Escrita no LCD

; Teclado no Endereço E000H ORG 30H


; LCD no Endereço 4000H INICIO: MOV SP,#2FH
MOV IE,#84H
WR_COMANDO EQU 4000H MOV TCON,#04H
WR_DADOS EQU 4001H MOV R0,#00
RD_COMANDO EQU 4002H MOV R1,#00
RD_DADOS EQU 4003H MOV R7,#00H
LCALL INICIA
ORG 00H LCALL LIMPA
LJMP INICIO LCALL LINHA1
SJMP $
ORG 13H
MOV A,#199 LINHA1: MOV A,R7
LCALL INSTR_WR MOV DPTR,#MSG1
MOVC A,@A+DPTR
MOV DPTR,#0E000H CJNE A,#0FFH,V1
MOVX A,@DPTR RET
ANL A,#00001111B
ORL A,#30H V1: LCALL TEXTO_WR
LCALL TEXTO_WR LCALL ATRASO_LCD
RETI INC R7
SJMP LINHA1

248
Prof. José Wilson Lima Nerys 248 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

249 Leitura do Teclado e Escrita no LCD

INSTR_WR:
; SUBROTINA DE INICIALIZAÇÃO LCD MOV DPTR,#WR_COMANDO
MOVX @DPTR,A
INICIA: MOV A,#38H LCALL ATRASO_LCD
LCALL INSTR_WR RET

MOV A,#38H TEXTO_WR:


LCALL INSTR_WR MOV DPTR,#WR_DADOS
MOVX @DPTR,A
MOV A,#0EH LCALL ATRASO_LCD
LCALL INSTR_WR RET

MOV A,#06H ATRASO_LCD:


LCALL INSTR_WR MOV R4,#10
RET V6: MOV R5,#80
DJNZ R5,$
; SUBROTINA QUE LIMPA O DISPLAY DJNZ R4,V6
RET
LIMPA: MOV A,#01H
LCALL INSTR_WR MSG1: DB 'LEITURA TECLADO', 0FFH
RET FIM: NOP
END

249
Prof. José Wilson Lima Nerys 249 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Bibliografia

[1] Salvador P. Gimenez, “Microcontroladores 8051: Teoria do hardware


e do software/Aplicações em controle digital/Laboratório e simulação”,
Pearson Education do Brasil, São Paulo, 2002.
ISBN: 85.87918-28-1.

[2] Vidal Pereira da Silva Jr., “Aplicações Práticas do Microcontrolador


8051”, Editora Érica, São Paulo, 1994.
ISBN: 85-7194-194-7

[3] Sencer Yeralan, Ashutosh Ahluwalia, “Programming and Interfacing the


8051 Microcontroller”, Addison-Wesley Publishing Company, 1995.
ISBN: 0-201-63365-5.

250
Prof. José Wilson Lima Nerys 250 Microprocessadores

Você também pode gostar