Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
Autores:
Antônio Marcos de Melo Medeiros
Thyago Gumeratto Pires
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
4
Prof. José Wilson Lima Nerys 4 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
Prof. José Wilson Lima Nerys 6 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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
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
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
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV A,#47H
MOV R0,#80H
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
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)
Instrução Descrição
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.
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
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
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
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
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
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
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
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
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
35
Prof. José Wilson Lima Nerys 35 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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
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 =
NOP 1 µs
2 µs
DJNZ ACC,V2
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 =
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
42
Prof. José Wilson Lima Nerys 42 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
44
Prof. José Wilson Lima Nerys 44 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
45
Prof. José Wilson Lima Nerys 45 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
47
Prof. José Wilson Lima Nerys 47 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
50
Prof. José Wilson Lima Nerys 50 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
51
Prof. José Wilson Lima Nerys 51 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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
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
; CRESCENTE ; DECRESCENTE
END END
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
ORG 30H
INICIO: MOV SP,#2FH MOV SEG,#00H ATRASO: MOV R0,#250
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
62
Prof. José Wilson Lima Nerys 62 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
63
Prof. José Wilson Lima Nerys 63 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
66
Prof. José Wilson Lima Nerys 66 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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
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 $
70
Prof. José Wilson Lima Nerys 70 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
ORG 00H
LJMP INICIO
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
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.
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).
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).
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
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
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
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
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:
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 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
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
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
CJNE A,#00, V12 ; se o quociente da 2ª divisão = 0, encerra a conversão. Caso contrário, desvia para V12
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
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
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
104
Prof. José Wilson Lima Nerys 104 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
109
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
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
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.
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.
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,
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.
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
Período: 227,5 μs
Frequência de chaveamento: 4,4 kHz
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
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
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
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
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
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
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
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
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
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
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
128
Prof. José Wilson Lima Nerys 128 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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
END
Valor da recarga fixa
131
Prof. José Wilson Lima Nerys 131 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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.
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
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
Prof. José Wilson Lima Nerys 135 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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
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
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
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
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
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:
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:
Um bit de início e outro de fim de transmissão devem ser enviados, além dos dados.
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
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
154
Prof. José Wilson Lima Nerys 154 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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
JNB TI,$
CLR TI
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
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
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
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.
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
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
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
08H 0 0 0 0 1 0 0 0 0 0 0 1
STATUS 0 0 0 0 0/1 0 0 0 1 0 1 0
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
A P3 (Chave em P3.3) 1 1 1 1 1 1 1 1
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 ===========
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
Prof. José Wilson Lima Nerys 175 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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)
RX TX TX RX TX RX TX RX
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.
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
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
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
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
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
188
Prof. José Wilson Lima Nerys 188 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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)
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
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
5𝑉 5𝑉
𝑉𝑠𝑎í𝑑𝑎 = × 𝐷𝐴𝐶𝐼𝑁 = × 𝐷𝐴𝐶𝐼𝑁
28 − 1 255
IN
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
202
Prof. José Wilson Lima Nerys 202 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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)
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
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
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.
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
Dados/LSB LSB do
endereço endereço
Sinais
de
controle
Sinais
de
controle
Dados
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
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
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
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
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
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:
P2.7 A2 EEPROM
CE\ Faixa habilitada de
A15 A14 A13 P2.6 A1
Y
endereços:
P2.5 A0 0000H a 1FFFH
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
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.
220
Prof. José Wilson Lima Nerys 220 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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)
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
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.
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
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
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
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
237
Prof. José Wilson Lima Nerys 237 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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 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
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
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
Prof. José Wilson Lima Nerys 248 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
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
250
Prof. José Wilson Lima Nerys 250 Microprocessadores