microprocessadores e …jwilson/pdf/micro_parte_2_(8051).pdfuniversidade federal de goiás escola de...
TRANSCRIPT
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
1Prof. José Wilson Lima Nerys 1 Microprocessadores
MICROPROCESSADORES E MICROCONTROLADORES
José Wilson Lima Nerys
Página: www.emc.ufg/~jwilsonEmails: [email protected] e [email protected]
Parte 2
Microcontrolador 8051
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
2Prof. José Wilson Lima Nerys 2 Microprocessadores
2
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
3Prof. José Wilson Lima Nerys 3 Microprocessadores
Leitura de Tabela no 8085 x 8051
Mostra valores menores que 50H e valores maiores que 85H
Início
Configurações iniciais:
SP ß 2FH, DPTR ß #Tabela
R0 ß 00H, R7 ß 00H
A ß R7
A ß ((A + DPTR))
A < 50H?
P1 ß A
A > 85H?
Fim
R7 ß R7 + 1
N
S
N
S
A = FFH?S
N
Início
Configurações iniciais:
SP ß 2070H, HL ß 2050H
A ß ((H,L))
A < 50H?
Display ß A
A > 85H?
HL ß HL + 1
L ß A
N
S
N
S
A = 60H?N
S
Fim
Fluxograma
para o 8051
Fluxograma
para o 8085
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
4Prof. José Wilson Lima Nerys 4 Microprocessadores
4
Endereço Mnemônico Endereço Dado Endereço Mnemônico
2000H LXI SP, 2070H 2050H 10H 2030H MVI C,50H
2003H LXI H,2050H 2051H 50H 2032H DCR C
2006H MOV A,M 2052H 25H 2033H JNZ 2032H
2007H CPI 50H 2053H 60H 2036H RET
2009H JC 2014H 2054H 65H
200CH CPI 85H 2055H A0H
200EH JC 201CH 2056H 70H
2011H JZ 201CH 2057H 90H
2014H PUSH H 2058H 85H 2069H
2015H CALL MOSTRA 2059H 87H 206AH
2018H CALL ATRASO 205AH 45H 206BH
201BH POP H 205BH 39H 206CH 1BH
201CH INX H 205CH C5H 206DH 20H
201DH MOV A,L 205DH 11H 206EH 55H
201EH CPI 60H 205EH 33H 206FH 20H
2020H JNZ 2006H 205FH D2H 2070H
2023H HLT
Assembly do 8085
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
5Prof. José Wilson Lima Nerys 5 Microprocessadores
Rótulo Mnemônico Rótulo Mnemônico Rótulo Dado
0000H LJMP INICIO JC V2 TABELA: 10H
JZ V2 50H
ORG 30H MOSTRA: MOV P1,R0 25H
INICIO: MOV SP,#2FH LCALL ATRASO 60H
MOV DPTR,#TABELA V2: INC R7 65H
MOV R7,#00H SJMP V0 A0H
V0: MOV A,R7 70H
MOVC A,@A+DPTR ATRASO: MOV R1,#200 90H
CJNE A,#0FFH,V1 DJNZ R1,$ 85H
SJMP FIM RET 87H
V1: CLR CY 45H
MOV R0,A 39H
SUBB A,#50H C5H
JC MOSTRA 11H
MOV A,R0 33H
SUBB A,#85H D2H
FFH
Assem
bly
do 8
051
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
6Prof. José Wilson Lima Nerys 6 Microprocessadores
6
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
7Prof. José Wilson Lima Nerys 7 Microprocessadores
7
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
8Prof. José Wilson Lima Nerys 8 Microprocessadores
8
Memória RAM
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
9Prof. José Wilson Lima Nerys 9 Microprocessadores
9
Memória RAM
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
10Prof. José Wilson Lima Nerys 10 Microprocessadores
10
Memória RAM
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
11Prof. José Wilson Lima Nerys 11 Microprocessadores
11
Memória RAM
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
12Prof. José Wilson Lima Nerys 12 Microprocessadores
12
MOV R0,#80H
MOV @R0,A
Conteúdo de A é armazenado
na posição 80H da memória
RAM
MOV 80H,A
Conteúdo de A é armazenado
no registrador especial 80H,
que corresponde à Porta P0
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
13Prof. José Wilson Lima Nerys 13 Microprocessadores
Registradores
Especiais
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
14Prof. José Wilson Lima Nerys 14 Microprocessadores
Registradores Especiais
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
15Prof. José Wilson Lima Nerys 15 Microprocessadores
Algumas Instruções do 8051
Instrução Descrição
MOV A,#Dado8 Carrega acumulador com o Dado de 8 bits
MOV Rn,#Dado8 Carrega registrador Rn (n=0 a 7) com o Dado de 8 bits
MOV A,B Copia no registrador A (acumulador) o conteúdo do registrador B
MOV Rn,A Copia no registrador Rn (n = 0 a 7) o conteúdo do acumulador
MOV A,diretoCopia em A o conteúdo do registrador identificado pelo endereço
“direto”
MOV dir1,dir2Copia no registrador identificado pelo endereço “dir1” o conteúdo do
registrador identificado pelo endereço “dir2”
MOV @R0,A Copia o conteúdo de A na posição apontada por R0
MOV DPTR,#dado16 O registrador duplo DPTR recebe um dado de 16 bits
MOVC A,@A+DPTR Carrega acumulador com o conteúdo da posição apontada por A+DPTR
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
16Prof. José Wilson Lima Nerys 16 Microprocessadores
Algumas Instruções do 8051
Instrução Descrição
CJNE A,#dado,EnderCompara conteúdo de A com o “dado”; se não forem iguais, desvia para
o endereço “Ender”
CJNE Rn,#dado,EnderCompara conteúdo do registrador Rn (n = 0 a 7) com o “dado”; se não
forem iguais, desvia para o endereço “Ender”
DJNZ Rn,desvioDecrementa o registrador Rn (n = 0 a 7); se o resultado não for zero,
desvia para “desvio”
SJMP ender Desvia para o endereço “ender”. SJMP = Short Jump (2 bytes de código)
LJMP ender Desvia para o endereço “ender”. LJMP = Long Jump (3 bytes de código)
JNZ ender Desvia para o endereço “ender”, se a flag Z = 0
JZ ender Desvia para “ender”, se a flag Z = 1
JNC ender Desvia para “ender”, se a flag CY = 0
JC ender Desvia para “ender”, se a flag CY = 1
Codificação: 80 XX, onde XX = número de bytes (em complemento de 2) a ser adicionado ao endereço
da próxima instrução, para desviar para o endereço “ender”
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
17Prof. José Wilson Lima Nerys 17 Microprocessadores
Algumas Instruções do 8051
Instrução Descrição
ADD A,Rn Adiciona o conteúdo de Rn (n = 0 a 7) ao conteúdo do acumulador
ADD A,#dado8 Adiciona o “dado8”, de 8 bits ao conteúdo do acumulador
SUBB A,diretoSubtrai o conteúdo do registrador identificado pelo endereço “direto”, do
conteúdo do acumulador
SUBB A,@R0Subtrai o conteúdo da posição apontada pelo registrador R0 do conteúdo
do acumulador
RL A Rotaciona o conteúdo de A para a esquerda
RR A Rotaciona o conteúdo de A para a direita
DA A Faz o ajuste decimal do conteúdo de A
INC Rn Incrementa em uma unidade o conteúdo do registrador Rn
INC DPTR Incrementa em uma unidade o conteúdo do registrador duplo DPTR
CPL A Complementa o conteúdo do acumulador
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
18Prof. José Wilson Lima Nerys 18 Microprocessadores
Algumas Instruções do 8051
Instrução Descrição
MUL AB
Multiplica o conteúdo de A pelo conteúdo de B. O resultado está em B A. O
resultado da multiplicação é um número de 16 bits, por isso precisa de dois
registradores para o resultado.
DIV AB Divide o conteúdo de A pelo conteúdo de B. A recebe o quociente e 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
SWAP A
Faz a troca dos nibbles do acumulador, ou seja, o nibble mais significativo
passa a ocupar os quatro primeiros bits do acumulador e 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.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
19Prof. José Wilson Lima Nerys 19 Microprocessadores
Algumas Instruções do 8051
Operações com bits
Instrução Descrição
JB bit,desvio
Desvia para a posição “desvio”, caso o “bit” esteja setado (se bit=1).
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.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
20Prof. José Wilson Lima Nerys 20 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
21Prof. José Wilson Lima Nerys 21 Microprocessadores
Contagem crescente
Rótulo Mnemônico Comentário sobre o Efeito da Operação Tempo
ORG 00H A próxima instrução estará no endereço 00h
LJMP INICIO Pula para o endereço indicado com o rótulo ́ inicio´
ORG 30H A próxima instrução estará no endereço 30h
INICIO: MOV A,#00H Carrega acumulador com valor 00h
V1: MOV P1,A Transfere para a porta P1 o conteúdo do acumulador 1 µs
INC A Incrementa em 1 o conteúdo do acumulador. A ß A + 1 1 µs
SJMP V1 Pula para o endereço indicado pelo rótulo ́ V1´ 2 µs
END Instrução obrigatória no fim de todo programa 4 µs
1 ORG 00H
0000 020030 2 LJMP INICIO
3
4 ORG 30H
0030 7400 5 INICIO: MOV A,#00H
0032 F590 6 V1: MOV P1,A
0034 04 7 INC A
0035 80FB 8 SJMP V1
9 END
Codificação:
V1 corresponde ao endereço
0032H = 0037 + FB
(considerando somente o
byte menos significativo)
Endereço
da próxima
instrução
Intervalo entre cada
dois envios para a
Porta P1: 4 µs
Período: 256 x 4 µs =
1024 µs
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
22Prof. José Wilson Lima Nerys 22 Microprocessadores
Contagem crescente – Resultado visual (saída do Conversor Digital-Analógico):
Onda Dente de Serra
Rótulo Mnemônico Tempo
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV A,#00H
V1: MOV P1,A 1 µs
INC A 1 µs
SJMP V1 2 µs
END 4 µs
Intervalo entre cada dois envios para a Porta P1: 4 µs
Período calculado: 255 x 4 µs = 1020 µs
Período medido com o Proteus: 1020 µs
Cristal oscilador: 12 MHz
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
23Prof. José Wilson Lima Nerys 23 Microprocessadores
23
Rótulo Mnemônico Comentário sobre o Efeito da Operação
ORG 00H A próxima instrução estará no endereço 00h
LJMP INICIO Pula para o endereço indicado com o rótulo ´inicio´
ORG 30H A próxima instrução estará no endereço 30h
INICIO: MOV A,#00H Carrega acumulador com valor 00h
V1: MOV P0,A Transfere para a porta P0 o conteúdo do acumulador
INC A Incrementa o conteúdo do acumulador
CJNE A,#0FFH,V1Compara conteúdo do acumulador com “30h”. Caso não seja
igual (Compare, Jump if Not Equal), desvia para “V1”
V2: MOV P0,A Transfere para a porta P0 o conteúdo do acumulador
DJNZ ACC,V2Decrementa conteúdo do acumulador e vai para “V2” se não
for “zero”
SJMP V1Pula para “V1”. Não precisa usar “LJMP” porque a distância é
curta.
END Instrução obrigatória no fim de todo programa
Contagem crescente e decrescente
Quando A = FFH, vai para a
próxima linha. Acaba o ciclo
crescente e começa o decrescente
Início
A ß 00H
Aß A + 1
A = FFH?
S
N
SN
P0 ß A
P0 ß A
Aß A - 1
A = 00?
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
24Prof. José Wilson Lima Nerys 24 Microprocessadores
24
Rótulo Mnemônico Tempo Período
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV A,#00H
V1: MOV P0,A 1 µs
255
x 4
µs
= 1
020 µ
s
INC A 1 µs
CJNE A,#0FFH,V1 2 µs
V2: MOV P0,A 1 µs
255
x 3
µs=
765 µ
s
DJNZ ACC,V22 µs
SJMP V1
END
Contagem crescente e decrescente
Saída do Conversor Digital-Analógico: Onda Triangular
O primeiro semi-período (crescente: 1020 µs,
calculado e 1010 µs medido) é maior que o segundo
(decrescente: 765 µs calculado e 781 µs medido)
porque o número de instruções executadas é diferente
para o primeiro e para o segundo semi-período.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
25Prof. José Wilson Lima Nerys 25 Microprocessadores
25
Rótulo Mnemônico Tempo Período
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV A,#00H
V1: MOV P0,A 1 µs
255
x 4
µs
= 1
020 µ
s
INC A 1 µs
CJNE A,#0FFH,V1 2 µs
V2: MOV P0,A 1 µs
255
x 4
µs
=
1020 µ
s
NOP 1 µs
DJNZ ACC,V22 µs
SJMP V1
END
Contagem crescente e decrescente
Saída do Conversor Digital-Analógico: Onda Triangular
Com a inclusão da instrução NOP, os dois semi-
períodos ficaram com tempos calculados iguais e
tempos medidos muito próximos (1020 µs e 1030 µs)
Instrução NOP (No Operation) usada apenas para
gerar um atraso de 1 µs.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
26Prof. José Wilson Lima Nerys 26 Microprocessadores
Endereço Código Rótulo Mnemônico Comentário sobre o Efeito da Operação Tempo
ORG 00H A próxima instrução estará no endereço 00h
0000H 02 00 30 LJMP INICIO Pula para o endereço indicado com o rótulo ´inicio´
ORG 30H A próxima instrução estará no endereço 30h
0030H B2 90 INICIO: CPL P1.0 Complementa o bit 0 da Porta P1 1 µs
0032H 78 32 MOV R0,#50 Carrega registrador R0 com valor decimal 50 1 µs
0034H D8 FE DJNZ R0,$ Decrementa o conteúdo de R0, até R0 = 0 100 µs
0036H 80 F8 SJMP INICIO Retorna para o início 2 µs
0038H END Instrução obrigatória no fim de todo programa 104 µs
Onda quadrada no pino P1.0
Cristal oscilador: 12 MHz
Tempo calculado para meio período
Tempo medido para meio período com o Proteus: 105,10 µs
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
27Prof. José Wilson Lima Nerys 27 Microprocessadores
27
Rótulo Mnemônico
CONTADOR EQU 07H
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV DPTR,#Tabela
MOV CONTADOR,#00h
Leitura de Tabela adaptada para ler 256 valores que, enviados para o Conversor DA,
resulta em uma curva senoidal
Mnemônico Tempo
V1: MOV A,CONTADOR 1 µs
MOVC A,@A+DPTR 2 µs
MOV P0,A 1 µs
INC CONTADOR 1 µs
SJMP V1 2 µs
Tempo entre leituras: 7 µs
Período senoide:
7 µs x 256 = 1792 µ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.
Período medido: 1,80 ms ≡ 556 Hz
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
28Prof. José Wilson Lima Nerys 28 Microprocessadores
28
Parte 1 Parte 2 Parte 3 Parte 4 Parte 5 Parte 6
DB 127 DB 205 DB 250 DB 243 DB 186 DB 104
DB 130 DB 208 DB 251 DB 241 DB 183 DB 101
DB 133 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
DB 152 DB 223 DB 254 DB 230 DB 163 DB 80
DB 155 DB 225 DB 254 DB 228 DB 159 DB 77
DB 158 DB 227 DB 254 DB 226 DB 156 DB 74
DB 161 DB 229 DB 254 DB 224 DB 153 DB 71
DB 164 DB 231 DB 254 DB 222 DB 150 DB 68
DB 167 DB 233 DB 254 DB 220 DB 147 DB 66
DB 170 DB 235 DB 253 DB 218 DB 144 DB 63
DB 173 DB 236 DB 253 DB 216 DB 141 DB 60
DB 176 DB 238 DB 252 DB 214 DB 138 DB 58
DB 179 DB 239 DB 252 DB 211 DB 135 DB 55
DB 181 DB 241 DB 251 DB 209 DB 132 DB 52
DB 184 DB 242 DB 251 DB 207 DB 129 DB 50
DB 187 DB 243 DB 250 DB 204 DB 125 DB 47
DB 190 DB 245 DB 249 DB 202 DB 122 DB 45
DB 193 DB 246 DB 248 DB 199 DB 119 DB 43
DB 195 DB 247 DB 247 DB 196 DB 116 DB 40
DB 198 DB 248 DB 246 DB 194 DB 113 DB 38
DB 200 DB 249 DB 245 DB 191 DB 110 DB 36
DB 203 DB 250 DB 244 DB 188 DB 107 DB 34
Tabela
: seno
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
29Prof. José Wilson Lima Nerys 29 Microprocessadores
Parte 7 Parte 8 Parte 9 Parte 10 Parte 11 Parte 12
DB 32 DB 7 DB 0 DB 13 DB 44 DB 87
DB 30 DB 6 DB 1 DB 15 DB 46 DB 90
DB 28 DB 5 DB 1 DB 16 DB 49 DB 93
DB 26 DB 4 DB 1 DB 18 DB 51 DB 96
DB 24 DB 3 DB 2 DB 19 DB 54 DB 99
DB 22 DB 3 DB 2 DB 21 DB 56 DB 102
DB 20 DB 2 DB 3 DB 23 DB 59 DB 105
DB 19 DB 2 DB 4 DB 25 DB 61 DB 108
DB 17 DB 1 DB 4 DB 27 DB 64 DB 111
DB 15 DB 1 DB 5 DB 29 DB 67 DB 115
DB 14 DB 0 DB 6 DB 31 DB 70 DB 118
DB 13 DB 0 DB 7 DB 33 DB 73 DB 121
DB 11 DB 0 DB 8 DB 35 DB 75 DB 124
DB 10 DB 0 DB 9 DB 37 DB 78 DB 127
DB 9 DB 0 DB 11 DB 39 DB 81
DB 8 DB 0 DB 12 DB 41 DB 84
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
30Prof. José Wilson Lima Nerys 30 Microprocessadores
30
Gerador de Função com valores fixos de frequência para cada onda:
1 – Onda quadrada
2 – Onda dente de serra
3 – Onda triangular
4 – Onda senoidal
CONTADOR EQU 07H
QUAD EQU P2.0 Chave de escolha Onda quadrada
SERRA EQU P2.1 Chave de escolha Dente de serra
TRI EQU P2.2 Chave de escolha Triangular
SENO EQU P2.3 Chave de escolha Senoide
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV DPTR,#Tabela
MOV CONTADOR,#00h
V1: MOV A,#00H
JNB QUAD, QUADRADA Se QUAD = 0 quadrada
JNB SERRA, DENTE_SERRA
JNB TRI, TRIANGULAR
JNB SENO, SENOIDAL Se SENO = 0 Senoidal
SJMP V1
Primeira parte
do programa:
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
31Prof. José Wilson Lima Nerys 31 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
32Prof. José Wilson Lima Nerys 32 Microprocessadores
32
Leitura de Tabela com Quantidade de Dados menor que 256
Usando tabela para acionamento de motor de passo
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
33Prof. José Wilson Lima Nerys 33 Microprocessadores
33
Rótulo Mnemônico
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV DPTR,#Tabela
V1: MOV R7,#00h
Acionamento de Motor de Passo com Passo
Completo e Meio Passo
Rótulo Mnemônico
V2: MOV A,R7
MOVC A,@A+DPTR
MOV P1,A
LCALL ATRASO
INC R7
CJNE R7,#04H,V2
SJMP V1
Rótulo Tabela
Passo
Completo
Tabela
Meio Passo
Tabela: DB 03H DB 01H
DB 06H DB 03H
DB 0CH DB 02H
DB 09H DB 06H
DB 04H
DB 0CH
DB 08H
DB 09H
END END
Essa tabela, com apenas 4 valores, pode ser usada para o acionamento de um
motor de passo (PASSO COMPLETO). A tabela com 8 valores é para
acionamento do motor de passo com MEIO PASSO. O motor deve estar
conectado, através de um driver, ao nibble inferior da Porta P1.
Offset R7
0
1
2
3
4
5
6
7
8A subrotina de atraso de
tempo não foi incluída
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
34Prof. José Wilson Lima Nerys 34 Microprocessadores
Acionamento de Motor de Passo
Driver ULN 2803
Capacidade de corrente: 500 mA
Tensão máxima no pino COM: 50 V
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
35Prof. José Wilson Lima Nerys 35 Microprocessadores
Rótulo Mnemônico
CH0 EQU P2.0
CH1 EQU P2.1
CH2 EQU P2.2
CH3 EQU P2.3
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
V1: MOV R7,#00h
Usando Chaves externas para
escolher a configuração do
acionamento
Rótulo Mnemônico
V0: JB CH0,VCH1
MOV DPTR,#Tabela1
SJMP V2
VCH1: JB CH1,VCH2
MOV DPTR,#Tabela2
SJMP V2
VCH2: JB CH2,VCH3
MOV DPTR,#Tabela3
SJMP V2
VCH3: JB CH3,V0
MOV DPTR,#Tabela4
V2: MOV A,R7
MOVC A,@A+DPTR
CJNE A,#0FFH,V4
SJMP V1
V4: MOV P1,A
LCALL ATRASO
INC R7
SJMP V2
CH0 sentido horário com passo completo
CH1 sentido anti-horário com passo completo
CH2 sentido horário com meio passo
CH3 sentido anti-horário com meio passo
Rótulo Mnemônico
ATRASO: MOV R0,#80
V3: MOV R1,#25
DJNZ R1,$
DJNZ R0,V3
RET
Tabela1: DB 03H, 06H, 0CH, 09H, 0FFH
Tabela2: DB 09H, 0CH, 06H, 03H, 0FFH
Tabela3: DB 01H, 03H, 02H, 06H, 04H, 0CH, 08H, 09H, 0FFH
Tabela4: DB 09H, 08H, 0CH, 04H, 06H, 02H, 03H, 01H, 0FFH
Tarefa:
1. Escolher uma das chaves para
Ligar/Desligar
2. Escolher uma das chaves para definir o
sentido horário ou anti-horário
3. Escolher uma das chaves para definir se o
acionamento é com meio passo ou passo
completo
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
36Prof. José Wilson Lima Nerys 36 Microprocessadores
Mostra em P1 o Maior valor
de uma Tabela
R0 recebe o maior valor,
antes de mostrar em P1
Início
Configurações iniciais:
SP ß 2FH, DPTR ß #Tabela
R0 ß 00H, R7 ß 00H
A ß R7
A ß ((A + DPTR))
A = FF?
P1 ß R0A >= R0?
Fim
R0 ß A
R7 ß R7 + 1
NS
N
S
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
37Prof. José Wilson Lima Nerys 37 Microprocessadores
Rótulo Mnemônico
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV DPTR,#Tabela
MOV R0,#00h
MOV R7,#00H
Rótulo Mnemônico
V1: MOV A,R7
MOVC A,@A+DPTR
CJNE A,#0FFH,SEGUE
MOV P1,R0
SJMP FIM
SEGUE: CLR CY
MOV B,A
SUBB A,R0
JC V2
MOV R0,B
V2: INC R7
SJMP V1
Rótulo Mnemônico
Tabela: DB 0A3H
DB 16H
DB 05H
DB 09H
DB 0A1H
DB 35H
DB 0C5H
DB 72H
DB 40H
DB 0FFH
FIM: END
Offset R7
0
1
2
3
4
5
6
7
8
9
Mostra em P1 o Maior valor de uma Tabela
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
38Prof. José Wilson Lima Nerys 38 Microprocessadores
Rótulo Mnemônico
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV A,#00H
V1: MOV P1,A
ADD A,#01H
DA A
CJNE A,#60H,V1
SJMP INICIO
END
Contagem decimal crescente de 0 a 59 e decrescente de 59 a 0
Rótulo Mnemônico
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV A,#60H
V1: ADD A,#99H
DA A
MOV P1,A
CJNE A,#00H,V1
SJMP INICIO
END
Enquanto A < 60H, continua contagem
crescenteEnquanto A > 00H, continua contagem decrescente
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
39Prof. José Wilson Lima Nerys 39 Microprocessadores
Relógio HH:MM:SS
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
40Prof. José Wilson Lima Nerys 40 Microprocessadores
Relógio HH:MM:SSRÓTULO MNEMÔNICO
SEG EQU 10H
MIN EQU 11H
HORA EQU 12H
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
V1: MOV SEG,#00H
MOV MIN,#00H
MOV HORA,#00H
V2: MOV P2,SEG
MOV P1,MIN
MOV P0,HORA
LCALL ATRASO
RÓTULO MNEMÔNICO
MOV A,SEG
ADD A,#01H
DA A
MOV SEG,A
CJNE A,#60H,V2
MOV SEG,#00H
MOV A,MIN
ADD A,#01H
DA A
MOV MIN,A
CJNE A,#60H,V2
MOV MIN,#00H
MOV A,HORA
RÓTULO MNEMÔNICO
ADD A,#01H
DA A
MOV HORA,A
CJNE A,#24H,V2
SJMP V1
ATRASO: MOV R0,#250
V3: MOV R1,#250
DJNZ R1,$
DJNZ R0,V3
RET
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
41Prof. José Wilson Lima Nerys 41 Microprocessadores
Cronômetro: MM:SS
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
42Prof. José Wilson Lima Nerys 42 Microprocessadores
Cronômetro Decrescente: MM:SS
RÓTULO MNEMÔNICO
MIN EQU 11H
SEG EQU 12H
BUZZER EQU P3.7
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
CLR BUZZER
MOV MIN,#20H
MOV SEG,#00H
V1: MOV P2,MIN
MOV P1,SEG
LCALL ATRASO
RÓTULO MNEMÔNICO
MOV A,SEG
ADD A,#99H
DA A
MOV SEG,A
CJNE A,#99H,V1
MOV SEG,#59H
MOV A,MIN
ADD A,#99H
DA A
MOV MIN,A
CJNE A,#99H,V1
MOV MIN,#00H
MOV SEG,#00H
RÓTULO MNEMÔNICO
MOV P2,MIN
MOV P1,SEG
SETB BUZZER
MOV R7,#10
V2: LCALL ATRASO
DJNZ R7,V2
CLR BUZZER
SJMP $
ATRASO: MOV R0,#250
V3: MOV R1,#250
DJNZ R1,$
DJNZ R0,V3
RET
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
43Prof. José Wilson Lima Nerys 43 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
44Prof. José Wilson Lima Nerys 44 Microprocessadores
Interrupções do 8051
Registradores associados à interrupção:
Registrador de Habilitação: IE (Interrupt Enable) = Registrador A8h
Registrador de Prioridades: IP (Interrupt Priority) = Registrador B8h
Registrador de Controle: TCON (Timer Control) = Registrador 88h
Interrupção Solicitada Endereço de desvio
Reset 0000h
INT0\ 0003h
Timer/counter 0 000Bh
INT1\ 0013h
Timer/counter 1 001Bh
Canal Serial 0023h
Endereços de Desvio das Interrupções:
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
45Prof. José Wilson Lima Nerys 45 Microprocessadores
Bit 7 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
EA x x ES ET1 EX1 ET0 EX0
Registrador de Habilitação: IE (Interrupt Enable) = Registrador A8h
EA Enable All. Com EA = 1, todas as interrupções podem ser habilitadas
individualmente. Com EA = 0, ficam todas mascaradas.
ES Enable Serial. Com ES = 1, a interrupção pelo canal serial fica habilitada.
Com ES = 0 os pedidos de interrupção da serial são ignorados.
ET1 Enable Timer 1. Com ET1 = 1, as interrupções pedidas pelo Timer 1
são atendidas. Com ET1 = 0 elas são ignoradas.
EX1 Enable External Interrupt 1. Com EX1 = 1, as interrupções pedidas através
do pino P3.3 são atendidas. Com EX1 = 0 elas são ignoradas.
ET0 Enable Timer 0. Com ET0 = 1, as interrupções pedidas pelo Timer 0
são atendidas. Com ET0 = 0 elas são ignoradas.
EX0 Enable External Interrupt 0. Com EX0 = 1, as interrupções pedidas através
pino P3.2 são atendidas. Com EX0 = 0 elas são ignoradas.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
46Prof. José Wilson Lima Nerys 46 Microprocessadores
TCON = TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Registrador de Controle: TCON (Timer Control) = Registrador 88h
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).
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
47Prof. José Wilson Lima Nerys 47 Microprocessadores
IP = X X X PS PT1 PX1 PT0 PX0
Registrador de Prioridade: IP (Interrupt Priority) = Registrador B8h
PS Priority of Serial Port Interrupt Sendo PS = 1, a interrupção serial tem
prioridade alta.
PT1 Priority of Timer Interrupt 1 Sendo PT1 = 1, a interrupção do temporizador
1 tem prioridade alta.
PX1 Priority of External Interrupt 1 Sendo PX1 = 1, a interrupção externa 1
tem prioridade alta.
PT0 Priority of Timer Interrupt 0 Sendo PT0 = 1, a interrupção do temporizador
0 tem prioridade alta.
PX0 Priority of External Interrupt 0 Sendo PX0 = 1, a interrupção externa 0
tem prioridade alta.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
48Prof. José Wilson Lima Nerys 48 Microprocessadores
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
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
49Prof. José Wilson Lima Nerys 49 Microprocessadores
Usando Interrupções (antes de estudar interrupções)
Para escolher o valor inicial do cronômetro e para iniciar a contagem
RÓTULO MNEMÔNICO COMENTÁRIO
ORG 00H
LJMP INICIO
ORG 03H Endereço da Interrupção externa 0 (EX0)
MOV A,MIN A recebe o valor atual dos Minutos
ADD A,#01H Acrescenta 01H ao conteúdo de A
DA A Faz o ajuste decimal do conteúdo de A
MOV MIN,A Transfere para MIN o conteúdo atualizado dos minutos
RETI Retorna da Interrupção externa 0
ORG 13H Endereço da Interrupção externa 0 (EX1)
SETB F0 Faz F0 = 1 para dar início à contagem
RETI Retorna da interrupção externa 1
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
50Prof. José Wilson Lima Nerys 50 Microprocessadores
Usando Interrupções (antes de estudar interrupções)
Para escolher o valor inicial do cronômetro e para iniciar a contagem
RÓTULO MNEMÔNICO COMENTÁRIO
ORG 30H
INÍCIO: MOV SP,#2FH
MOV IE,#85H Habilita as interrupções externas 0 e 1
MOV TCON,#05H As interrupções externas 0 e 1 são por transição
CLR F0 Limpa a flag F0, que é usada para iniciar a contagem
MOV SEG,#00H Faz o registrador SEG = 0
CLR BUZZER Limpa a saída que aciona o alarme
V1: MOV P1,SEG Mostra valor atual de MINuto e SEGundo
MOV P2,MIN
JNB F0,V1 Aguarda enquanto F0 = 0
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
51Prof. José Wilson Lima Nerys 51 Microprocessadores
Rotação de Leds à esquerda (CH0 = 0) e à direita (CH1 = 0)
Rótulo Mnemônico
CH0 EQU P3.2
CH1 EQU P3.3
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV A,#01H
V1: JB CH0,VCH1
Rótulo Mnemônico
MOV P1,A
RL A
LCALL ATRASO
SJMP V1
VCH1: JB CH1,V1
MOV P1,A
RR A
LCALL ATRASO
SJMP V1
Rótulo Mnemônico
ATRASO: MOV R0,#100
V2: MOV R1,#200
DJNZ R1,$
DJNZ R0,V2
RET
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
52Prof. José Wilson Lima Nerys 52 Microprocessadores
Leds piscando (CH0 = 0) e alternando (CH1 = 0)
Rótulo Mnemônico
CH0 EQU P3.2
CH1 EQU P3.3
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV R6,#00H
MOV R7,#55H
V1: JB CH0,VCH1
Rótulo Mnemônico
MOV P1,R6
MOV A,R6
LCALL ATRASO
CPL A
MOV R6,A
SJMP V1
VCH1: JB CH1,V1
MOV P1,R7
MOV A,R7
LCALL ATRASO
CPL A
MOV R7,A
SJMP V1
Rótulo Mnemônico
ATRASO: MOV R0,#100
V2: MOV R1,#200
DJNZ R1,$
DJNZ R0,V2
RET
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
53Prof. José Wilson Lima Nerys 53 Microprocessadores
Multiplicação e Divisão de Números de 8 bits
Rótulo Mnemônico
ORG 00H
LJMP INICIO
ORG 00H
INICIO: MOV SP,#2FH
MOV A,#200
MOV B,#40
MUL AB
JB P3.2,$
MOV P2,A
MOV P1,B
END
Rótulo Mnemônico
ORG 00H
LJMP INICIO
ORG 00H
INICIO: MOV SP,#2FH
MOV A,#200
MOV B,#40
DIV AB
JB P3.2,$
MOV P2,A
MOV P1,B
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
54Prof. José Wilson Lima Nerys 54 Microprocessadores
Adição e Subtração de Números de 16 bits
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
55Prof. José Wilson Lima Nerys 55 Microprocessadores
; ADIÇÃO DE NÚMEROS DE 16 BITS Z = X + Y
XH EQU 10H ; Número X de 16 bits
XL EQU 11H
YH EQU 12H ; Número Y de 16 bits
YL EQU 13H
ZH EQU 14H ; Resultado da adição de 16 bits
ZL EQU 15H
ZOV BIT 00H ; Flag de carry do resultado de 16 bits
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV XH,#40H
MOV XL,#00H
MOV YH,#35H
MOV YL,#50H
MOV A,XL
ADD A,YL ; Adição do byte inferior, sem carry
MOV ZL,A
MOV A,XH
ADDC A,YH ; Adição do byte superior, com carry
MOV ZH,A
MOV ZOV,C
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
56Prof. José Wilson Lima Nerys 56 Microprocessadores
; 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
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
57Prof. José Wilson Lima Nerys 57 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
58Prof. José Wilson Lima Nerys 58 Microprocessadores
Programa que envia uma contagem crescente para a porta P1 a cada solicitação da
interrupção INT0 (através do pino P3.2).
RÓTULO MNEMÔNICO
ORG 00H
LJMP INICIO
ORG 03H
LJMP CONTAGEM
ORG 30H
INICIO: MOV SP, #2FH
MOV IE, #81H
MOV TCON, #01H
MOV A, #00H
SJMP $
RÓTULO MNEMÔNICO
CONTAGEM: MOV P1,A
INC A
LCALL ATRASO
CJNE A,#00H,CONTAGEM
RETI
ATRASO: MOV R0,#10
V1: MOV R1,#100
DJNZ R1, $
DJNZ R0, V1
RET
END
Exem
plo
s
Habilita interrupção externa 0 por transição
Laço infinito aguardando interrupção
Contagem encerra quando A retorna para 00
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
59Prof. José Wilson Lima Nerys 59 Microprocessadores
Programa que envia uma contagem crescente para a porta P1 a cada solicitação da
interrupção INT0 e uma decrescente a cada solicitação da INT1.
RÓTULO MNEMÔNICO
ORG 00H
LJMP INICIO
ORG 03H
LJMP ATENDE0
ORG 13H
LJMP ATENDE1
ORG 30H
INICIO: MOV SP, #2FH
MOV IE, #85H
MOV TCON, #05H
SJMP $
RÓTULO MNEMÔNICO
ATENDE0: PUSH ACC
MOV A,#00H
V1: MOV P1,A
INC A
LCALL ATRASO
CJNE A,#00H,V1
POP ACC
RETI
RÓTULO MNEMÔNICO
ATENDE1: PUSH ACC
MOV A,#0FFH
V2: MOV P1,A
LCALL ATRASO
DEC A
CJNE A,#0FFH,V2
POP ACC
RETI
ATRASO: MOV R0,#10
V3: MOV R1,#100
DJNZ R1, $
DJNZ R0, V3
RET
END
Exemplos
Habilita Interrupções INT0
e INT1 por transição
Laço infinito aguardando interrupção
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
60Prof. José Wilson Lima Nerys 60 Microprocessadores
Programa que envia uma contagem decimal crescente para a porta P1 a cada solicitação da
interrupção INT0 e uma decimal decrescente a cada solicitação da INT1.
RÓTULO MNEMÔNICO
ORG 00H
LJMP INICIO
ORG 03H
LJMP ATENDE0
ORG 13H
LJMP ATENDE1
ORG 30H
INICIO: MOV SP, #2FH
MOV IE, #85H
MOV TCON, #05H
MOV A,#00H
SJMP $
RÓTULO MNEMÔNICO
ATENDE0: PUSH ACC
V1: MOV P1,A
ADD A,#01H
DA A
LCALL ATRASO
CJNE A,#00H,V1
POP ACC
RETI
RÓTULO MNEMÔNICO
ATENDE1: PUSH ACC
V2: ADD A,#99H
DA A
MOV P1,A
LCALL ATRASO
CJNE A,#00H,V2
POP ACC
RETI
ATRASO: MOV R0,#250
V3: MOV R1,#250
DJNZ R1, $
DJNZ R0, V3
RET
END
Exemplos
Habilita Interrupções INT0
e INT1 por transição
Laço infinito aguardando interrupção
Adiciona 1 e faz
ajuste decimal Subtrai 1 e faz
ajuste decimal
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
61Prof. José Wilson Lima Nerys 61 Microprocessadores
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 (Prioridade alta).
RÓTULO MNEMÔNICO
ORG 00H
LJMP INICIO
ORG 03H
LJMP ATENDE0
ORG 13H
LJMP ATENDE1
ORG 30H
INICIO: MOV SP, #2FH
MOV IE, #85H
MOV TCON, #05H
MOV IP,#04H
SJMP $
RÓTULO MNEMÔNICO
ATENDE0: PUSH ACC
MOV A,#00H
V1: MOV P1,A
INC A
LCALL ATRASO
CJNE A,#00H,V1
POP ACC
RETI
RÓTULO MNEMÔNICO
ATENDE1: PUSH ACC
MOV A,#0FFH
V2: MOV P1,A
LCALL ATRASO
DEC A
CJNE A,#0FFH,V2
POP ACC
RETI
ATRASO: MOV R0,#10
V3: MOV R1,#100
DJNZ R1, $
DJNZ R0, V3
RET
END
Exemplos
Habilita Interrupções INT0
e INT1 por transição.
INT1 tem prioridade alta
Laço infinito aguardando interrupção
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
62Prof. José Wilson Lima Nerys 62 Microprocessadores
Programa rotaciona Leds conectados à porta P1.
INT0 rotaciona à esquerda; INT1 rotaciona à direita.
RÓTULO MNEMÔNICO
ORG 00H
LJMP INICIO
ORG 03H
LJMP ATENDE0
ORG 13H
LJMP ATENDE1
ORG 30H
INICIO: MOV SP, #2FH
MOV IE, #85H
MOV TCON, #05H
SJMP $
RÓTULO MNEMÔNICO
ATENDE0: PUSH ACC
MOV A,#01H
V1: MOV P1,A
RL A
LCALL ATRASO
CJNE A,#01H,V1
POP ACC
RETI
RÓTULO MNEMÔNICO
ATENDE1: PUSH ACC
MOV A,#80H
V2: MOV P1,A
LCALL ATRASO
RR A
CJNE A,#80H,V2
POP ACC
RETI
ATRASO: MOV R0,#250
V3: MOV R1,#250
DJNZ R1, $
DJNZ R0, V3
RET
END
Exemplos
Habilita Interrupções INT0
e INT1 por transição
Laço infinito aguardando interrupção
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
63Prof. José Wilson Lima Nerys 63 Microprocessadores
RÓTULO MNEMÔNICO
ORG 00H
LJMP INICIO
ORG 03H
LJMP ATENDE0
ORG 13H
LJMP ATENDE1
ORG 30H
INICIO: MOV SP, #2FH
MOV IE, #85H
MOV TCON, #05H
MOV IP,#04H
SJMP $
RÓTULO MNEMÔNICO
ATENDE0: PUSH ACC
MOV A,#01H
V1: MOV P1,A
RL A
LCALL ATRASO
CJNE A,#01H,V1
POP ACC
RETI
RÓTULO MNEMÔNICO
ATENDE1: PUSH ACC
MOV A,#80H
V2: MOV P1,A
LCALL ATRASO
RR A
CJNE A,#80H,V2
POP ACC
RETI
ATRASO: MOV R0,#250
V3: MOV R1,#250
DJNZ R1, $
DJNZ R0, V3
RET
END
Exemplos
Habilita Interrupções INT0
e INT1 por transição.
INT1 tem prioridade alta
Laço infinito aguardando interrupção
Programa rotaciona Leds conectados à porta P1.
INT0 rotaciona à esquerda; INT1 rotaciona à direita (com prioridade alta).
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
64Prof. José Wilson Lima Nerys 64 Microprocessadores
Programa rotaciona Motor de Passo conectado ao nibble inferior da porta P1.
INT0 rotaciona para a esquerda; INT1 rotaciona para a direita.
RÓTULO MNEMÔNICO
ORG 00H
LJMP INICIO
ORG 03H
LJMP ATENDE0
ORG 13H
LJMP ATENDE1
ORG 30H
INICIO: MOV SP, #2FH
MOV IE, #85H
MOV TCON, #05H
MOV A,#11H
SJMP $
RÓTULO MNEMÔNICO
ATENDE0: PUSH ACC
MOV R7,#18
V1: MOV P1,A
RL A
LCALL ATRASO
DJNZ R7,V1
POP ACC
RETI
RÓTULO MNEMÔNICO
ATENDE1: PUSH ACC
MOR R7,#36
V2: MOV P1,A
RR A
LCALL ATRASO
DJNZ R7,V2
POP ACC
RETI
ATRASO: MOV R0,#250
V3: MOV R1,#250
DJNZ R1, $
DJNZ R0, V3
RET
END
Exemplos
Habilita Interrupções INT0
e INT1 por transição
Laço infinito aguardando interrupção
São 18 passos de 5º
Total: 90º
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
65Prof. José Wilson Lima Nerys 65 Microprocessadores
65
Rótulo Mnemônico
ORG 00H
LJMP INICIO
ORG 03H
LJMP MAIOR
ORG 13H
LJMP MENOR
INT0 mostra em P1 maior valor de uma Tabela. INT1 mostra o menor valor
Rótulo Mnemônico
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#85H
MOV TCON,#05H
MOV DPTR,#TABELA
V1: MOV R7,#00H
MOV R0,#00H
MOV R1,#0FFH
SJMP V1
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
66Prof. José Wilson Lima Nerys 66 Microprocessadores
66
Rótulo Mnemônico
MAIOR: MOV A,R7
MOVC A,@A+DPTR
CJNE A,#0FFH,V2
MOV P1,R0
RETI
V2: CLR CY
MOV B,A
SUBB A,R0
JC V3
MOV R0,B
V3: INC R7
SJMP MAIOR
INT0 mostra em P1 maior valor de uma Tabela. INT1 mostra o menor valor
Rótulo Mnemônico
MENOR: MOV A,R7
MOVC A,@A+DPTR
CJNE A,#0FFH,V4
MOV P1,R1
RETI
V4: CLR CY
MOV B,A
SUBB A,R1
JNC V5
MOV R1,B
V5: INC R7
SJMP MENOR
Rótulo Dado
TABELA: DB 05H
DB 35H
DB 12H
DB 98H
DB 0A1H
DB 0B5H
DB 5AH
DB 09H
DB 72H
DB 40H
DB 0FFH
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
67Prof. José Wilson Lima Nerys 67 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
68Prof. José Wilson Lima Nerys 68 Microprocessadores
68
Breve Introdução aos Conversores AD e DA
ADC DACMicro-
controladorSinal
AnalógicoSinal
Analógico
Sinal Digital
Sinal Digital
Como os dados de um microprocessador estão na forma digital e os dados do mundo
exterior estão na forma analógica (contínua), é necessário fazer a conversão entre
esses dados. Assim, tem-se o Conversor Analógico-Digital (ADC), que faz a
conversão de sinal analógico para sinal digital e o Conversor Digital-Analógico (DAC),
que faz a conversão de sinal digital para sinal analógico.
Velocidade
Temperatura
Tensão
Corrente
Pressão
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
69Prof. José Wilson Lima Nerys 69 Microprocessadores
69
)2222( 0
3
1
2
2
1
3
0 DDDDR
VI REF
R
VI REF3
R
VI REF
22
R
VI REF
41
R
VI REF
80
Conversor DA Básico de 4 bits
0123 IIIII
)125,025,05,0( 0123 DDDDR
VI REF
IRV saídasaída
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
70Prof. José Wilson Lima Nerys 70 Microprocessadores
70
Conversor DA Básico
De 4 bits
D3 D2 D1 D0
Corrente saída
(Vref = 5 V e R = 5 kΩ)
Fração do
máximo
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
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
71Prof. José Wilson Lima Nerys 71 Microprocessadores
71
Conversor DA Básico de 4 bits
máx
1 LSB
0
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
72Prof. José Wilson Lima Nerys 72 Microprocessadores
72
Resolução de um DA
(a) Cada degrau (menor incremento possível) corresponde a 1 LSB
(bit menos significativo)
(b) Número de degraus de um conversor: 2n – 1, onde n é o número de bits.
Para n = 4 15 degraus.
Resolução: É a relação entre o menor incremento possível, 1 LSB e a saída máxima.
Resolução = , onde n é número de bits.
No caso de n = 4 Resolução = 1/15
Resolução Percentual = Resolução 100%
No caso de 4 bits Resolução Percentual = 6.67%
12
1
n
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
73Prof. José Wilson Lima Nerys 73 Microprocessadores
73
Resolução do DA versus Número de bits
Número de bits ResoluçãoResoluçã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
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
74Prof. José Wilson Lima Nerys 74 Microprocessadores
74
Conversor DA com resistores em escada
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
75Prof. José Wilson Lima Nerys 75 Microprocessadores
75
Conversor DAC 0808
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
76Prof. José Wilson Lima Nerys 76 Microprocessadores
76
Conversor ADC Básico
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
77Prof. José Wilson Lima Nerys 77 Microprocessadores
77
Conversor ADC com Aproximação Sucessiva
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
78Prof. José Wilson Lima Nerys 78 Microprocessadores
78
Conversor ADC 0804
Sinais de Controle
CS\ habilita o CI
RD\ habilita a saída dos dados
RW\ trigger
Saída
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
79Prof. José Wilson Lima Nerys 79 Microprocessadores
79
Diagrama de Temporização do Conversor ADC0804
Tempo de conversão
aproximado: 100 µs
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
80Prof. José Wilson Lima Nerys 80 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
81Prof. José Wilson Lima Nerys 81 Microprocessadores
81
Programa para leitura do Conversor AD
Rótulo Instrução
CS EQU P3.4
RS EQU P3.5
RW EQU P3.6
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
V1: LCALL LE_AD
MOV P1,A
SJMP V1
Rótulo Instrução
LE_AD: CLR CS
LCALL ATRASO
SETB RW
LCALL ATRASO
CLR RW
LCALL ATRASO
SETB RW ; Começa a conversão
SETB CS
JB P3.3,$ ; Aguarda fim de conversão
CLR CS
CLR RS ; Liberada dados na saída
LCALL ATRASO
MOV A,P2 ; Transfere resultado para A
SETB RS
SETB CS
RET
Rótulo Instrução
ATRASO: MOV R0,#50
DJNZ R0,$
RET
END
Loop infinito: Chama subrotina de
Leitura do AD e mostra resultado em A
Loop infinito:
Aguarda sinal de fim
de conversão.
Pino INTR do AD
conectado ao pino
P3.3 do 8051
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
82Prof. José Wilson Lima Nerys 82 Microprocessadores
WR\
INTR
RS\
CS\
Temporização no problema anterior
Início da conversão
Fim da conversão
Leitura habilitada
(libera dados na saída)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
83Prof. José Wilson Lima Nerys 83 Microprocessadores
83
Programa 2: Conversor AD usando interrupção
83
Rótulo Instrução
ORG 00H
LJMP INICIO
ORG 03H
MOV A,P2
RETI
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#81H
MOV TCON,#01H
V1: MOV P1,A
SJMP V1
END
Loop infinito: O conteúdo de A é copiado na porta P1 (Leds). A
atualização de A ocorre a cada final de conversão, através da
interrupção externa zero.
A cada fim de conversão do conversor AD, um sinal de pedido de
interrupção é enviado ao 8051, através do pino P3.2 (interrupção zero).
Assim, o processamento desvia para o endereço 03H, onde o resultado
da conversão (disponibilizado na porta P2) é transferido para A
Interrupção externa zero é habilitada por transição.
O conversor AD está operando de forma independente e
ininterrupta. O sinal de final de conversão é usado para
dar início à próxima conversão.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
84Prof. José Wilson Lima Nerys 84 Microprocessadores
84
Uso do Teclado com Interrupção
(Decodificador de teclado: 74C922) Sinal alto (saída) quando
a conversão acaba
Sinal baixo (entrada)
para liberar o
resultado na saída
A B C D
Pedido de interrupção
para o 8051 (na transição
de alto para baixo)
A saída (AD3, AD2, AD1, AD0) do
decodificador 74C922 é conectado ao
nibble inferior da Porta P2
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
85Prof. José Wilson Lima Nerys 85 Microprocessadores
85
Uso do Teclado com Interrupção
(Decodificador de teclado: 74C922)
Loop infinito: Mostra o conteúdo de A, que é atualizado, através da
interrupção externa 1, a cada vez que o teclado é pressionado
interrupção externa 1 por transição
Endereço da interrupção externa 1
O conteúdo da porta P2 é copiado no acumulador.
A instrução ANL A,#0FH (AND) elimina o nibble superior da
leitura de P2.
Rótulo Instrução
ORG 00H
LJMP INICIO
ORG 13H
MOV A,P2
ANL A,#0FH
RETI
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#84H
MOV TCON,#04H
V1: MOV P1,A
SJMP V1
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
86Prof. José Wilson Lima Nerys 86 Microprocessadores
86
Uso do Teclado com Interrupção
(Decodificador de teclado: 74C922)
Rótulo Instrução
ORG 00H
LJMP INICIO
ORG 13H
LJMP LE_TECLADO
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#84H
MOV TCON,#04H
CLR F0
V1: MOV P1,A
SJMP V1
Rótulo Instrução
LE_TECLADO: JB F0,NIBBLE2
MOV A,P2
ANL A,#0FH
SWAP A
MOV B,A
SETB F0
RETI
NIBBLE2: MOV A,P2
ANL A,#0FH
ORL A,B
CLR F0
RETI
END
Leitura do dígito superior do número de
dois dígitos.
O dado lido de P2 passa por uma operação
AND para eliminar o nibble superior (lixo).
A instrução SWAP A transfere o dado lido
(nibble inferior) para o nibble superior. O
resultado é guardado em B. A flag F0 é
setada para direcionar a próxima
interrupção para NIBBLE2.
Nesse programa o Teclado é usado para
“entrar” com um número de dois dígitos.
Leitura do dígito inferior do número de dois
dígitos.
O dado lido de P2 passa por uma operação AND
para eliminar o nibble superior (lixo).
A instrução OR entre junta conteúdo de A (dígito
inferior) com o conteúdo de B (dígito superior).
A flag F0 é zerada para direcionar a próxima
interrupção para a primeira parte dessa subrotina.
Loop infinito: Mostra o conteúdo de A, que é atualizado, através da
interrupção externa 1, a cada vez que o teclado é pressionado
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
87Prof. José Wilson Lima Nerys 87 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
88Prof. José Wilson Lima Nerys 88 Microprocessadores
O 8051 tem 2 temporizadores/contadores de 16 bits que podem operar de
4 modos distintos:
Modo 0 Contador/Temporizador de 13 bits com divisor de frequência de
até 32 vezes. Pode contar até 8192 (32 255).
Modo 1 Contador/Temporizador de 16 bits. Pode contar até 65535.
Modo 2 2 contadores/temporizadores de 8 bits com recarga automática.
Modo 3 2 contadores/temporizadores independentes de 8 bits.
Temporizadores
O microcontrolador AT89S8252 possui 3 temporizadores.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
89Prof. José Wilson Lima Nerys 89 Microprocessadores
Temporizadores
TMOD = G1 C/T1 M11 M10 G0 C/T0 M01 M00
Os registradores que comandam o Contador-Temporizador são:
TCON = TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Registrador de Controle: TCON (Timer Control) = Registrador 88h
Registrador do Temporizador: TMOD (Timer Mode) = Registrador 89h
0 0 Modo 0
0 1 Modo 1
1 0 Modo 2
1 1 Modo 3
0 0 Modo 0
0 1 Modo 1
1 0 Modo 2
1 1 Modo 3
Temporizador zeroTemporizador 1
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
90Prof. José Wilson Lima Nerys 90 Microprocessadores
90
Temporizadores
TMOD = G1 C/T1 M11 M10 G0 C/T0 M01 M00
G GateSendo 0, o disparo do temporizador/contador é interno,
através de TR. Sendo 1, o disparo pode ser através de TR ou
através do pino externo P3.2 (INT0\) ou P3.3 (INT1\).
C/T\ Sendo 0, a operação é como temporizador, onde a freqüência de
operação é 1/12 da frequência do cristal oscilador.
Sendo 1, a frequência é determinada por um componente externo,
através do pino P3.4 (T0) ou P3.5 (T1).
Registrador do Temporizador: TMOD (Timer Mode) = Registrador 89h
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
91Prof. José Wilson Lima Nerys 91 Microprocessadores
91
Temporizadores
TCON = TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TR Quando G = 0, fazendo-se TR = 1, o temporizador inicia a
contagem a partir do valor armazenado em TH e TL. TR = 0
para o temporizador.
TF A cada fim de contagem TF é setado (TF = 1) pelo hardware.
Se a interrupção do temporizador estiver habilitada, ocorre o
desvio para o endereço correspondente, 0Bh para o temporizador
0 e 1Bh para o temporizador 1.
Registrador de Controle: TCON (Timer Control) = Registrador 88h
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
92Prof. José Wilson Lima Nerys 92 Microprocessadores
92
Temporizadores
Lógica para
habilitar contagem
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
93Prof. José Wilson Lima Nerys 93 Microprocessadores
93
O bit C/T\ do registrador TMOD define se o funcionamento é como contador
(C/T\ = 1), ou como temporizador (C/T\ = 0).
Como temporizador, o clock é interno, vindo do oscilador.
A frequência é 1/12 da frequência do cristal oscilador.
Como contador, o clock é externo, vindo através de T0 (P3.4).
O pino Gate\ define se o sinal de disparo do contador/temporizador vem
através de software (bit TR0), ou de um sinal externo, através do pino INT0\
(P3.2).
Se Gate\ = 0, o comando SETB TR0 dispara o contador/temporizador e CLR
TR0 interrompe.
Temporizadores
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
94Prof. José Wilson Lima Nerys 94 Microprocessadores
94
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#01H
MOV TH0,#HIGH(55535)
MOV TL0,#LOW(55535)
SETB TR0
SJMP $
END
Exemplos com temporizadores e contadores
Nesse exemplo o temporizador zero foi
configurado para o modo 1
(TMOD = 0000 0001) e a primeira
contagem começa do valor 55.535.
Toda contagem vai até 65.535, e,
então, o valor de TH0-TL0 torna-se
zero e a contagem continua.
A contagem não para, enquanto TR0
permanecer em nível lógico alto
(TR0 = 1).
Assim, a primeira contagem, nesse
exemplo, conta 10.000 pulsos. A partir
da segunda contagem, no entanto,
TH0-TL0 contam, continuamente, de 0
a 65.535.TH0 = D8H
TL0 = EFH
Cristal de 12 MHz
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
95Prof. José Wilson Lima Nerys 95 Microprocessadores
Exemplos com temporizadores e contadores
Nesse exemplo o temporizador zero foi
configurado para o modo 1
(TMOD = 0000 0001). Ao contrário do
exemplo anterior, todas as contagens
começam do valor 15.535 porque, a cada final
de contagem (quando TF0 = 1), o
processamento retorna para V1, onde os
valores de TH0 e TL0 são recarregados.
Assim, a contagem é de 50.000 pulsos. Sendo
o cristal de 12 MHz, o contador conta 50 ms.
O exemplo também apresenta uma forma de
verificar o tempo de contagem do
temporizador, gerando uma onda quadrada no
pino P1.0.
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#01H
V1: MOV TH0,#HIGH(15535)
MOV TL0,#LOW(15535)
SETB TR0
CPL P1.0
JNB TF0,$
CLR TF0
SJMP V1
ENDLoop de espera do fim da contagem
A Flag TF0 (fim de contagem) deve ser zerada antes de recarregar TH0 e TL0
Cristal de 12 MHz
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
96Prof. José Wilson Lima Nerys 96 Microprocessadores
Exemplos com temporizadores e contadores
Esse exemplo é idêntico ao anterior, com a
diferença de usar um cristal oscilador de
11.0592 MHz.
Dessa forma, cada período do temporizador
corresponde a 1,085 µs, ao invés de 1 µs.
Assim, para gerar uma contagem de 50 ms, são
necessários 46.080 pulsos, ou seja, a contagem
deve começar de TH0-TL0 = 4BFFH, que
corresponde ao número decimal 19.455.
No programa poderia ter sido usado:
MOV TH0, #HIGH(19455)
MOV TL0,#LOW(19455)
Cristal de 11.0592 MHz
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#01H
V1: MOV TH0,#4BH
MOV TL0,#0FFH
SETB TR0
CPL P1.0
JNB TF0,$
CLR TF0
SJMP V1
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
97Prof. José Wilson Lima Nerys 97 Microprocessadores
Exemplos com temporizadores e contadores
Nesse exemplo, o temporizador zero, no modo
1, gera uma onda quadrada com período de
100 ms (contagem de 19455 a 65535, com
cristal de 11.0592 MHz).
No entanto, o disparo do temporizador é
EXTERNO, através do pino P3.2 (uma chave
tipo push-button deve ser conectada entre o
pino P3.2 e o Terra). Com P3.2 = 0, o
temporizador fica parado; com P3.2 = 1, o
temporizador prossegue a contagem.
Cristal de 11.0592 MHz
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#09H
SETB TR0
V1: MOV TH0,#HIGH(19455)
MOV TL0,#LOW(19455)
CPL P1.0
JNB TF0,$
CLR TF0
SJMP V1
END
TMOD = 09H = 0000 1001 Pino G\ = 1
(disparo externo) e M1-M0 = 01
(temporizador zero no modo 1)
A Flag TR0 é setada para habilitar esse disparo externo.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
98Prof. José Wilson Lima Nerys 98 Microprocessadores
Exemplos com temporizadores e contadores
Nesse exemplo tem-se um CONTADOR no modo 1 (16
bits).
O Sinal de clock é aplicado ao pino P3.4.
Duas situações podem ser criadas, no Proteus:
1. Conectar uma chave entre os pinos P3.4 e o Terra. A
cada pulso dessa chave, a contagem em TH0-TL0 é
incrementada em 1.
2. Conectar um gerador de função, com pulso quadrado,
ao pino P3.4. A contagem em TH0-TL0 seguirá esse
clock.,
Cristal de 11.0592 MHz
TMOD = 05H = 0000 0101 Pino C/T\ = 1 (contador) e
M1-M0 = 01 (contador zero no modo 1)
A Flag TR0 é setada para o início da contagem
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#05H
SETB TR0
V1: MOV P2,TH0
MOV P1,TL0
SJMP V1
END
O valor de TH0 é mostrado
na porta P2
O valor de TL0 é mostrado
na prota P1
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
99Prof. José Wilson Lima Nerys 99 Microprocessadores
Exemplos com temporizadores e contadores
Nesse exemplo tem-se um CONTADOR no modo 0 (13
bits).
O Sinal de clock é aplicado ao pino P3.4. As mesmas
situações do exemplo anterior podem ser utilizadas.
A diferença é que os valores mostrados em P2 e P1 são
diferentes:
P1 (valor de TL0) mostra uma contagem de 00h até 1Fh,
continuamente.
Ao final de cada contagem, o valor mostrado em P2 (valor
de TH0) é incrementado em 1
Cristal de 11.0592 MHz
TMOD = 04H = 0000 0100 Pino C/T\ = 1 (contador) e
M1-M0 = 00 (contador zero no modo 0)
A Flag TR0 é setada para o início da contagem
O valor de TH0 é mostrado
na porta P2
O valor de TL0 é mostrado
na prota P1
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#04H
SETB TR0
V1: MOV P2,TH0
MOV P1,TL0
SJMP V1
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
100Prof. José Wilson Lima Nerys 100 Microprocessadores
Exemplos com temporizadores e contadores
Nesse exemplo tem-se um CONTADOR no modo 2
(8 bits com recarga automática).
No modo 2 (recarga automática), cada nova contagem
começa do valor de TH0. Assim, no programa mostrado,
cada nova contagem começa de TH0 = 40H.
O sinal de clock deve ser conectado ao pino P3.4.
Cristal de 11.0592 MHz
TMOD = 06H = 0000 0110 Pino C/T\ = 1 (contador) e
M1-M0 = 10 (contador zero no modo 0)
Valor da recarga
O valor de TH0 é mostrado na porta P2
O valor de TL0 é mostrado na prota P1
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#06H
SETB TR0
MOV TH0,#40H
V1: MOV P2,TH0
MOV P1,TL0
SJMP V1
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
101Prof. José Wilson Lima Nerys 101 Microprocessadores
Exemplos com temporizadores e contadores
Nesse exemplo tem-se um CONTADOR no modo 2
(8 bits com recarga automática).
É idêntico ao exemplo anterior, com uma exceção:
A interrupção externa zero (por transição) é usada para
incrementar em 5 o valor da recarga, TH0.
Assim, cada nova contagem começa do valor anterior de
TH0 + 5.
Cristal de 11.0592 MHz
Subrotina de atendimento da interrupção externa zero
IE = 81h = 1000 0001 Interrupção externa zero
habilitada
TCON = 01H = 0000 0001 Interrupção externa zero por
transição
ORG 00H
LJMP INICIO
ORG 03H
MOV A,TH0
ADD A,#5
MOV TH0,A
RETI
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#81H
MOV TCON,#01H
MOV TMOD,#06H
SETB TR0
MOV TH0,#40H
V1: MOV P2,TH0
MOV P1,TL0
SJMP V1
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
102Prof. José Wilson Lima Nerys 102 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
103Prof. José Wilson Lima Nerys 103 Microprocessadores
Exemplos com temporizadores e contadores COM INTERRUPÇAO
Nesse exemplo tem-se um TEMPORIZADOR no
modo 1 (16 bits), com interrupção ao final de cada
contagem.
A cada final de contagem (de 19455 a 65535) o
processamento desvia para o endereço 0BH.
Nesse endereço, recarrega-se TH0 e TL0 e
complementa-se o pino P1.0 (gera onda
quadrada).
Com uma contagem de 46080 e um cristal de
11.0592 MHz, tem 50 ms para cada meio período
(onda quadrada com 100 ms de período)
Cristal de 11.0592 MHz
IE = 1000 0010 Interrupção do temporizador
zero habilitada.
Subrotina de atendimento da interrupção do
temporizador zero.
ORG 00H
LJMP INICIO
ORG 0BH
MOV TH0,#HIGH(19455)
MOV TL0,#LOW(19455)
CPL P1.0
RETI
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#82H
MOV TMOD,#01H
MOV TH0,#HIGH(19455)
MOV TL0,#LOW(19455)
SETB TR0
SJMP $
END
Loop infinito esperando interrupção
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
104Prof. José Wilson Lima Nerys 104 Microprocessadores
Exemplos com temporizadores e contadores COM INTERRUPÇAO
Nesse exemplo tem-se um TEMPORIZADOR no modo 1 (16 bits),
com interrupção ao final de cada contagem.
A cada final de contagem (de 19455 a 65535) o processamento
desvia para o endereço 0BH. Nesse endereço, recarrega-se TH0 e
TL0. No entanto, o pino P1.0 somente é complementado a 10
passagens pela subrotina (R0 = 10).
Com uma contagem de 46080 e um cristal de 11.0592 MHz, tem 50
ms para cada meio período, mas o pino P1. 0 é complementado a
cada 10 x 50 ms = 0,5 s (resulta em onda quadrada com 1,0 s de
período)
Cristal de 11.0592 MHz
IE = 1000 0010 Interrupção do temporizador zero habilitada.
Subrotina de atendimento da interrupção do temporizador zero.
P1.0 somente é complementado a cada 10 atendimentos dessa
subrotina.
Loop infinito esperando interrupção
ORG 00H
LJMP INICIO
ORG 0BH
MOV TH0,#HIGH(19455)
MOV TL0,#LOW(19455)
DJNZ R0,V1
CPL P1.0
MOV R0,#10
V1: NOP
RETI
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#82H
MOV TMOD,#01H
MOV TH0,#HIGH(19455)
MOV TL0,#LOW(19455)
MOV R0,#10
SETB TR0
SJMP $
END
R0 = 10 contador para contar 10 vezes 50 ms
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
105Prof. José Wilson Lima Nerys 105 Microprocessadores
Exemplos com temporizadores e contadores COM INTERRUPÇAO
Nesse exemplo tem-se o TEMPORIZADOR zero no modo 0 (13
bits) e o TEMPORIZADOR 1 no modo 1 (16 bits)
Ambos começam a contagem de 0 e ambos utilizam suas
interrupções.
Ao final de cada contagem de 13 bits (0 a 8.191) o processamento
desvia para o endereço 0Bh, onde o pino P1.0 é complementado
(gerando uma onda quadrada no pino P1.0).
Ao final de cada contagem de 16 bits (0 a 65.535) o processamento
desvia para o endereço 1Bh, onde o pino P1.1 é complementado
(gerando uma onda quadrada no pino P1.1).
Cristal de 11.0592 MHz
IE = 1000 1010 Interrupções dos temporizadores zero e 1
habilitadas.
TMOD = 10h = 0001 0000 Temporizador zero no modo 0 (13 bits);
Temporizador 1 modo 1 (16 bits)
ORG 00H
LJMP INICIO
ORG 0BH
CPL P1.0
RETI
ORG 1BH
CPL P1.1
RETI
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#8AH
MOV TMOD,#10H
SETB TR0
SETB TR1
SJMP $
END
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
106Prof. José Wilson Lima Nerys 106 Microprocessadores
106
Exemplos com temporizadores e contadores COM INTERRUPÇAO
Período da onda quadrada no modo zero:
17,77 ms
Período da onda quadrada no modo 1:
141,92 ms
1 período no modo 16 bits corresponde a
8 períodos do modo 13 bits.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
107Prof. José Wilson Lima Nerys 107 Microprocessadores
107
RÓTULO MNEMÔNICO
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP, #2FH
MOV TMOD,#01H
V1: CPL P1.0
LCALL ATRASO
SJMP V1
RÓTULO MNEMÔNICO
ATRASO: MOV R0,#20
V2: MOV TH0,#3CH
MOV TL0,#0AFH
SETB TR0
ESPERA: JNB TF0, ESPERA
CLR TF0
DJNZ R0, V2
CLR TR0
RET
END
Programa com uma subrotina de atraso de tempo com temporizador
Onda quadrada em P1.0
Cristal oscilador: 12 MHz
Contador conta de 15.535
até 65.535 (50.000 pulsos)
São 20 contagens de 50 ms
(tempo total: 1 s)
Espera o final de cada
contagem do temporizador
Limpa a flag que indica fim de contagem
Decrementa R0; se não der zero,
volta para nova contagem de 50 ms
Dispara o temporizador
Para o temporizador
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
108Prof. José Wilson Lima Nerys 108 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
109Prof. José Wilson Lima Nerys 109 Microprocessadores
Relógio HH:MM:SS
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
110Prof. José Wilson Lima Nerys 110 Microprocessadores
Relógio HH:MM:SS
SEG EQU 10H
MIN EQU 11H
HORA EQU 12H
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#01H
CLR P3.7
V1: MOV SEG,#00H
MOV MIN,#00H
MOV HORA,#00H
V2: MOV P1,SEG
MOV P2,MIN
MOV P0,HORA
LCALL ATRASO
MOV A,SEG
ADD A,#01H
DA A
MOV SEG,A
CJNE A,#60H,V2
MOV SEG,#00H
MOV A,MIN
ADD A,#01H
DA A
MOV MIN,A
CJNE A,#60H,V2
MOV MIN,#00H
MOV A,HORA
ADD A,#01H
DA A
MOV HORA,A
CJNE A,#24H,V2
SJMP V1
ATRASO:
SETB TR0
V3: MOV TH0,#HIGH(15535)
MOV TL0,#LOW(15535)
JNB TF0,$
CLR TF0
DJNZ R0,V3
MOV R0,#20
CLR TR0
RET
END
Cristal de 12 MHz
Subrotina de atraso de 1 s
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
111Prof. José Wilson Lima Nerys 111 Microprocessadores
HH MM SS
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
112Prof. José Wilson Lima Nerys 112 Microprocessadores
Cronômetro: MM:SS
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
113Prof. José Wilson Lima Nerys 113 Microprocessadores
SEG EQU 10H
MIN EQU 11H
BUZZER EQU P3.7
ORG 00H
LJMP INICIO
ORG 03H MOV A,MIN
ADD A,#01H
DA A
MOV MIN,A
RETI
ORG 13H SETB F0
RETI
;======Configurações iniciais
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#01H
MOV IE,#85H
MOV TCON,#05H
MOV R0,#20
CLR F0
CLR BUZZER
MOV SEG,#00H
V4: MOV P2,MIN
MOV P1,SEG
JNB F0,V4
;--------------------------------------
V1: MOV P2,MIN
MOV P1,SEG
LCALL ATRASO
MOV A,SEG
ADD A,#99H
DA A
MOV SEG,A
CJNE A,#99H,V1
MOV SEG,#59H
MOV A,MIN
ADD A,#99H
DA A
MOV MIN,A
CJNE A,#99H,V1
MOV MIN,#00H
MOV SEG,#00H
MOV P2,MIN
MOV P1,SEG
SETB BUZZER
MOV R7,#3
V2: LCALL ATRASO
DJNZ R7,V2
CLR BUZZER
CLR F0
SJMP INICIO
ATRASO: SETB TR0
V3: MOV TH0,#3CH
MOV TL0,#0AFH
JNB TF0,$
CLR TF0
DJNZ R0,V3
MOV R0,#20
CLR TR0
RET
END
1 sCristal de 12 MHz
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
114Prof. José Wilson Lima Nerys 114 Microprocessadores
MM SS
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
115Prof. José Wilson Lima Nerys 115 Microprocessadores
115
Acionamento temporizado de Motor de Corrente Contínua:
1. Motor gira no sentido horário por 10 s e para por 5 s
2. Motor gira no sentido anti-horário por 10 s e para.
IN1 EQU P2.3
IN2 EQU P2.2
LIGA EQU P3.2
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#01H
MOV R0,#20
V0: JB LIGA,$
SETB IN1
CLR IN2
MOV R7,#10
V1: LCALL ATRASO
DJNZ R7,V1
CLR IN1
CLR IN2
MOV R7,#5
V2: LCALL ATRASO
DJNZ R7,V2
CLR IN1
SETB IN2
MOV R7,#10
V4: LCALL ATRASO
DJNZ R7,V4
CLR IN1
CLR IN2
SJMP V0
ATRASO: SETB TR0
V3: MOV TH0,#3CH
MOV TL0,#0AFH
JNB TF0,$
CLR TF0
DJNZ R0,V3
MOV R0,#20
CLR TR0
RET
END
Cristal de 12 MHz
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
116Prof. José Wilson Lima Nerys 116 Microprocessadores
116
Acionamento temporizado de Motor de Passo:
1. Motor gira no sentido horário por 10 s e para por 5 s
2. Motor gira no sentido anti-horário por 10 s e para.
ORG 00H
LJMP INICIO
ORG 0BH
LJMP TEMPO_R7s
;===== Configurações =====
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#82H
MOV TMOD,#01H
MOV TH0,#4BH
MOV TL0,#0FFH
MOV R0,#20
LIGA: JB P3.2,$
CLR TR0
CLR F0
MOV R7,#10
SETB TR0
MOV A,#01H
DIRETO: MOV P1,A
LCALL ATRASO
RL A
CJNE A,#10H,VF0
MOV A,#01H
VF0: JNB F0,DIRETO
CLR TR0
CLR F0
MOV R7,#5
SETB TR0
JNB F0,$
CLR TR0
CLR F0
MOV R7,#10
SETB TR0
MOV A,#08H
REVERSO:MOV P1,A
LCALL ATRASO
RR A
CJNE A,#80H,VF1
MOV A,#08H
VF1: JNB F0,REVERSO
SJMP LIGA
;== Atraso para o motor de passo
ATRASO: MOV R6,#150
V1: MOV R5,#250
DJNZ R5,$
DJNZ R6,V1
RET
;----------------------------------------------
TEMPO_R7s:
DJNZ R0,SAI
MOV R0,#20
DJNZ R7,SAI
SETB F0
SAI: MOV TH0,#4Bh
MOV TL0,#0FFH
RETI
END
Cristal de 11.0592 MHz
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
117Prof. José Wilson Lima Nerys 117 Microprocessadores
117
Temporizador no modo 2 – recarga automática (Temp_9_6A)
Modo 2 com interrupção – complementa TH
Modo 2 com interrupção – complementa TH e P1.0
PWM fixo para acionamento de motor CC
Incrementa TH e complementa P1.0
• Aciona motor CC com velocidade variável
• Aciona motor CC com velocidade variável e mudança de sentido de rotação
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
118Prof. José Wilson Lima Nerys 118 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
119Prof. José Wilson Lima Nerys 119 Microprocessadores
119
Comunicação
Serial
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
120Prof. José Wilson Lima Nerys 120 Microprocessadores
120
A comunicação serial consiste em enviar ou receber pacotes de
informação bit a bit.
No caso do 8051 o canal de comunicação serial é do tipo ”full duplex”,
o que significa que ele pode, ao mesmo tempo, receber e transmitir
dados.
Uma grande questão da transmissão serial é
“como informar o receptor do início e do final do pacote de
informação”,
ou seja, qual o primeiro bit da informação e qual é o último.
Assim, existem dois tipos de comunicação:
síncrona e assíncrona.
Comunicação Serial
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
121Prof. José Wilson Lima Nerys 121 Microprocessadores
121
Na comunicação serial síncrona, são utilizados dois canais:
um para transmitir/receber os dados e outro para transmitir/receber o
sinal de sincronismo.
No caso do 8051 a transmissão e também a recepção síncrona de
dados são feitas através do pino RxD (pino P3.0).
O pino TxD (pino P3.1) é usado para o sinal de sincronismo.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
122Prof. José Wilson Lima Nerys 122 Microprocessadores
122
Na comunicação assíncrona não há a sinal de sincronismo e, portanto, alguns
cuidados especiais devem ser tomados:
As taxas de recepção e de transmissão devem ser iguais.
Um bit de início e outro de fim de transmissão devem ser enviados, além dos dados.
O bit de início de transmissão é zero, isto porque o canal normalmente fica em
repouso no nível lógico alto.
Assim, a primeira passagem para zero, após a habilitação da transmissão, é
interpretada como o sinal de início.
O sinal de parada é de nível lógico alto, após ser recebida a quantidade de bits
previstos.
Além do bit de início (Start bit) e do bit de fim (Stop bit), também pode existir um
terceiro bit extra, que é o bit de paridade, usado para verificar a consistência dos
dados.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
123Prof. José Wilson Lima Nerys 123 Microprocessadores
123
Formato da Comunicação Serial Assíncrona
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
124Prof. José Wilson Lima Nerys 124 Microprocessadores
124
Registrador SCON – Configuração da Comunicação Serial
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
125Prof. José Wilson Lima Nerys 125 Microprocessadores
125
Taxa de comunicação (baud rate): igual à frequência de clock dividida por 12.
Recepção: Fica habilitada fazendo REN = 1 e RI = 0.
Ao final da recepção o bit RI é setado por hardware, e deve ser
ressetado por software (CLR RI) antes da recepção seguinte.
O conteúdo recebido é transferido para o registrador SBUF.
Transmissão: É iniciada automaticamente quando o conteúdo de um
registrador é transferido para o registrador SBUF.
Ao final da transmissão o bit TI é setado por hardware, e deve ser
ressetado por software (CLR TI) antes da transmissão seguinte.
Obs.: Há um registrador SBUF para transmissão e outro para recepção
Serial – Modo 0 (síncrono – registrador de deslocamento)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
126Prof. José Wilson Lima Nerys 126 Microprocessadores
126
Rótulo Instruções
MOV SCON,#00H
MOV A,#00H
V1: MOV SBUF,A
JNB TI,$
CLR TI
INC A
SJMP V1
END
Sinais de RxD e TxD durante uma
transmissão síncrona
Instrução que dá início à transmissão
Aguarda a transmissão de todos os bits.
Quando o processo acaba, o micro faz TI = 1.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
127Prof. José Wilson Lima Nerys 127 Microprocessadores
127
Taxa de comunicação (baud rate):
O pacote de comunicação inclui 8 bits de dados,
1 bit de start e um bit de stop.
Recepção: Fica habilitada fazendo REN = 1 e RI = 0.
Tem início quando há uma transição de nível alto para baixo no pino P3.0 (RxD)
Ao final da recepção o bit RI é setado por hardware, e deve ser ressetado por
software (CLR RI) antes da recepção seguinte.
O conteúdo recebido é transferido para o registrador SBUF.
Transmissão: É iniciada automaticamente quando o conteúdo de um
registrador é transferido para o registrador SBUF.
Ao final da transmissão o bit TI é setado por hardware, e deve ser ressetado
por software (CLR TI) antes da transmissão seguinte.
Serial – Modo 1 (assíncrono de 8 bits)
Bit 7 do registrador especial PCON
Recarga do Temporizador 1
no modo 2
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
128Prof. José Wilson Lima Nerys 128 Microprocessadores
Rótulo Instruções
MOV SCON,#40H
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
MOV A,#00H
V1: MOV SBUF,A
JNB TI,$
CLR TI
INC A
SJMP V1
END
Sinal de TxD (P3.1) durante uma
transmissão assíncrona no modo 1
Instrução que dá início à transmissão
Aguarda a transmissão de todos os bits.
Quando o processo acaba, o micro faz TI = 1.
Configura serial modo 1 (assíncrono modo 1)
Timer 1 no modo 2. Baud rate de 9600 bps, para
cristal de 11,0592 MHz.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
129Prof. José Wilson Lima Nerys 129 Microprocessadores
129
Transmissão Serial no Modo 1 ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
MOV DPTR,#MSG1
V1: MOV R7,#00
V2: MOV A,R7
MOVC A,@A+DPTR
CJNE A,#0FFH,ENVIA
SJMP V1
ENVIA: MOV SBUF,A
JNB TI,$
CLR TI
INC R7
SJMP V2
MSG1: DB 'HELLO WORLD!!!', 0DH, 0FFH
MSG2: DB 'MICRO 2017 ', 0Dh, 0FFH
end Código ASCII para mudança de linha
Baud-rate de 9600 bps, no modo 1
Cristal oscilador: 11,0592 MHz
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
130Prof. José Wilson Lima Nerys 130 Microprocessadores
130
; Transmissão de mensagem via serial. Cristal: 11.0592 MHz. Taxa de transmissão: 4800 bps
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH ; Posição inicial da Pilha: 2FH
MOV SCON,#40H ; Serial no modo 1: assíncrona de 8 bits
MOV TMOD,#20H ; Timer 1 no modo 2 (recarga automática)
MOV TH1,#0FAH ; Valor da recarga: FAH baud rate: 4800 bps
SETB TR1 ; Dispara Timer 1
MOV DPTR,#MSG ; DPTR assume o valor do endereço inicial da tabela MSG
V2: MOV R7,#00H ; Offset para leitura da MSG assume valor inicial 00H
V3: MOV A,R7 ; Acumulador recebe o valor atual do Offset
MOVC A,@A+DPTR ; Acumulador recebe o conteúdo da posição A+DPTR da MSG
CJNE A,#0FFH,V1 ; Verifica se A = FFH (fim da MSG). Se não for, desvia para V1
SJMP V2 ; Retorna para V2 após cada fim de MSG
V1: MOV SBUF,A ; Transfere de A para SBUF o valor ser transmitido via serial
JNB TI,$ ; Aguarda final da transmissão do conteúdo de SBUF
CLR TI ; Limpa a flag TI, de transmissão serial
INC R7 ; Incrementa o valor do Offset
SJMP V3 ; Retorna para V3, para ler o próximo caractere de MSG
MSG: DB ' MICRO 2016 ', 0DH, 0FFH
MSG1: DB 4DH, 49H, 43H, 52H, 4FH, 20H, 32H, 30H, 31H, 37H, 0DH, 0FFH
END
As mensagens MSG e MSG1
são equivalentes
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
131Prof. José Wilson Lima Nerys 131 Microprocessadores
131
Recepção Serial no Modo 1 LAMP EQU P2.7
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
CLR RI
SETB REN
MOV A,#01H
V0: JNB RI,$
MOV R0,SBUF
CLR RI
CJNE R0,#'D',V1
SJMP LED_DIREITA
V1: CJNE R0,#'E',V3
SJMP LED_ESQUERDA
V3: CJNE R0,#'L',V4
CPL LAMP
SJMP V0
Se R0 = 43H (ASCII de D),
rotaciona Leds para a direita.
Enquanto RI = 0, continua
rotacionando para a esquerda
Aguarda receber dados via serial
e transfere os dados para R0
V4: CJNE R0,#'M',V0
MOTOR: CLR P2.3
CPL P2.2
SJMP V0
LED_DIREITA:
V5: MOV P1,A
RR A
LCALL ATRASO
JNB RI,V5
SJMP V0
LED_ESQUERDA:
MOV R3,#64
V6: MOV P1,A
RL A
LCALL ATRASO
DJNZ R3,V6
SJMP V0
ATRASO: MOV R1,#100
V2: MOV R2,#200
DJNZ R2,$
DJNZ R1,V2
RET
END
Se R0 = 44H (ASCII de E),
rotaciona Leds para a esquerda.
São 64 passos para a esquerda,
que corresponde a 8 giros
completos para a esquerda.
Se R0 = 4CH (ASCII de L), aciona
a lâmpada (apaga/liga)
Se R0 = 4DH (ASCII de M),
aciona o motor CC (liga/desliga)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
132Prof. José Wilson Lima Nerys 132 Microprocessadores
132
Recepção Serial no Modo 1
Com interrupção
LAMP EQU P2.7
ORG 00H
LJMP INICIO
ORG 23H
MOV R0,SBUF
CLR RI
RETI
ORG 30H
INICIO: MOV SP,#2FH
MOV IE,#90H
MOV SCON,#40H
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
CLR RI
SETB REN
MOV A,#01H
V0: CJNE R0,#'D',V1
SJMP LED_DIREITA
V1: CJNE R0,#'E',V3
SJMP LED_ESQUERDA
V3: CJNE R0,#'L',V4
SETB LAMP
SJMP V0
V4: CJNE R0,#'F',V5
CLR LAMP
SJMP V0
Se R0 = 43H (ASCII de D),
rotaciona Leds para a direita.
Continua rotação, até R0
receber outro caractere.
R0 recebe os dados recebidos
via serial, através de interrupção
V5: CJNE R0,#'M',V6
MOTOR: CLR P2.3
SETB P2.2
SJMP V0
V6: CJNE R0,#'N',V0
CLR P2.3
CLR P2.2
SJMP V0
LED_DIREITA:
MOV P1,A
RR A
LCALL ATRASO
SJMP V0
LED_ESQUERDA:
MOV P1,A
RL A
LCALL ATRASO
SJMP V0
ATRASO: MOV R1,#100
V2: MOV R2,#200
DJNZ R2,$
DJNZ R1,V2
RET
END
Se R0 = 44H (ASCII de E),
rotaciona Leds para a esquerda.
Enquanto R0 = 44H, continua
rotacionando para a esquerda
Se R0 = 4CH (ASCII de L), liga a
lâmpada.
Se R0 = 45H (ASCII de F),
desliga a lâmpada.
Se R0 = 4DH (ASCII de M),
aciona o motor CC (liga/desliga)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
133Prof. José Wilson Lima Nerys 133 Microprocessadores
133
Taxa de comunicação (baud rate):
O pacote de comunicação inclui 8 bits de dados, 1 bit extra (RB8 ou TB8), 1 bit de
start e um bit de stop. O bit extra pode ser a paridade.
Recepção: Fica habilitada fazendo REN = 1 e RI = 0.
Tem início quando há uma transição de nível alto para baixo no pino P3.0 (RxD)
Ao final da recepção o bit RI é setado por hardware, e deve ser ressetado por
software (CLR RI) antes da recepção seguinte.
O nono bit chega através do bit RB8.
Transmissão: É iniciada automaticamente quando o conteúdo de um
registrador é transferido para o registrador SBUF.
Ao final da transmissão o bit TI é setado por hardware, e deve ser ressetado
por software (CLR TI) antes da transmissão seguinte. O nono bit é
transmitido através de TB8.
Serial – Modo 2 (assíncrono de 9 bits)
Bit 7 do registrador especial PCON
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
134Prof. José Wilson Lima Nerys 134 Microprocessadores
134
Taxa de comunicação (baud rate):
O pacote de comunicação inclui 8 bits de dados,
1 bit extra, 1 bit de start e um bit de stop.
Recepção: Fica habilitada fazendo REN = 1 e RI = 0.
Tem início quando há uma transição de nível alto para baixo no pino P3.0 (RxD)
Ao final da recepção o bit RI é setado por hardware, e deve ser ressetado por
software (CLR RI) antes da recepção seguinte.
O conteúdo recebido é transferido para o registrador SBUF.
Transmissão: É iniciada automaticamente quando o conteúdo de um
registrador é transferido para o registrador SBUF.
Ao final da transmissão o bit TI é setado por hardware, e deve ser ressetado
por software (CLR TI) antes da transmissão seguinte.
Serial – Modo 3 (assíncrono de 9 bits)
Bit 7 do registrador especial PCON
Recarga do Temporizador 1
no modo 2
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
135Prof. José Wilson Lima Nerys 135 Microprocessadores
135
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
136Prof. José Wilson Lima Nerys 136 Microprocessadores
136
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
137Prof. José Wilson Lima Nerys 137 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
138Prof. José Wilson Lima Nerys 138 Microprocessadores
Mensagens: Computador Micro LCDRS EQU P3.5
RW EQU P3.6
EN EQU P3.7
DADOS EQU P0
ORG 00H
LJMP INICIO
ORG 23H
CLR RI
MOV A,SBUF
MOV P1,A
LCALL TEXTO_WR
RETI
ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H
MOV IE,#90H
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV R7,#0FFH
SETB TR1
SETB REN
LCALL INICIA
SJMP $
INICIA: MOV A,#38H
LCALL INSTR_WR
MOV A,#38H
LCALL INSTR_WR
MOV A,#0EH
LCALL INSTR_WR
MOV A,#06H
LCALL INSTR_WR
MOV A,#01H
LCALL INSTR_WR
RET
INSTR_WR: SETB EN
CLR RW
CLR RS
MOV DADOS,A
CLR EN
LCALL ATRASO_LCD
RET
TEXTO_WR:SETB EN
CLR RW
SETB RS
MOV DADOS,A
CLR EN
LCALL ATRASO_LCD
RET
ATRASO_LCD:
MOV R4,#10
V6: MOV R5,#80
DJNZ R5,$
DJNZ R4,V6
RET
END
Serial_LCD_22_6.asm
Subrotina de inicialização do LCD
Subrotina para escrever
instrução no LCD
Subrotina para escrever
dados no LCD
A recebe valor via serial e
envia para P1 e para o LCD
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
139Prof. José Wilson Lima Nerys 139 Microprocessadores
139
Rótulo Mnemônico
ORG 00H
LJMP INICIO
ORG 23H
CLR RI
MOV R0,SBUF
RETI
ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H
MOV IE,#90H
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV R0,#00H
MOV A,#11H
SETB TR1
SETB REN
Rótulo Mnemônico
V2: CJNE R0,#44H,V1
LJMP DIREITA
V1: CJNE R0,#45H,V2
LJMP ESQUERDA
DIREITA: MOV P1,A
RR A
LCALL ATRASO
SJMP V2
ESQUERDA: MOV P1,A
RL A
LCALL ATRASO
SJMP V2
ATRASO: MOV R7,#200
V3: MOV R6,#250
DJNZ R6,$
DJNZ R7,V3
RET
END
Motor de Passo via serial
Serial_Passo_22_6.asm
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
140Prof. José Wilson Lima Nerys 140 Microprocessadores
140
CHAVE EQU P3.3 ; CHAVE (P3.3) – MOTOR LIGA (P3.3 = 0) OU DESLIGA (P3.3 = 1)
STATUS EQU 22H ; registrador que guarda o estado das chaves
M0 EQU P2.2 ; IN0 do driver para acionamento do motor CC
M1 EQU P2.3 ; IN1 do driver para acionamento do motor CC
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH ; Pilha no endereço inicial 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 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 na posição STATUS.3
SJMP V1
Serial_estado_22_6.asm
Transfere conteúdo de P3 para A, isola o pino P3.3
e verifica se houve mudança de estado
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
141Prof. José Wilson Lima Nerys 141 Microprocessadores
141
LIGA_M: MOV DPTR,#M_ON ; DPTR aponta para o início da mensagem de motor ligado
LCALL SERIAL ; Chama subrotina para mostrar a mensagem de motor ligado
SETB M0
CLR M1 ; Motor ligado
CLR STATUS.3 ; Atualiza registrador de STATUS com valor 0 na posição STATUS.3
SJMP V1
SERIAL: MOV A,R7 ; Transfere para A o valor do offset
MOVC A,@A+DPTR ; A recebe o conteúdo da tabela
CJNE A,#0FFH,ENVIA ; Verifica se já chegou ao final da tabela
MOV R7,#00H ; Se a tabela já acabou, faz R7 = 0
RET ; Retorna da subrotina SERIAL
ENVIA: MOV SBUF,A ; Envia conteúdo da tabela/mensagem para o computador
JNB TI,$ ; Aguarda terminar a transmissão
CLR TI ; limpa flag de transmissão
INC R7 ; incrementa R7 (offset para leitura da tabela / mensagem)
SJMP SERIAL ; retorna para SERIAL
M_ON: DB 'MOTOR DE CORRENTE CONTINUA LIGADO', 0DH, 0DH, 0FFH
M_OFF: DB 'MOTOR DE CORRENTE CONTINUA DESLIGADO', 0DH, 0DH, 0FFH
END
Continuação do programa Serial_estado_22_6.asm
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
142Prof. José Wilson Lima Nerys 142 Microprocessadores
Aula Data Conteúdo
10 13/04 (Qui) Instruções básicas do microcontrolador 8051
11 18/04 (Ter) Programação usando o assembly do 8051
12 20/04 (Qui) Programação usando o assembly do 8051
13 25/04 (Ter) Princípio de funcionamento das interrupções do 8051
14 27/04 (Qui) Programação com e sem interrupções
15 02/05 (Ter) Programação do 8051 com e sem interrupções
04/05 (Qui) CET
16 09/05 (Ter) Programação do 8051 com e sem interrupções
17 11/05 (Qui) Princípio de funcionamento dos temporizadores do microcontrolador 8051
18 16/05 (Ter) Programação utilizando interrupções e temporizadores do microcontrolador 8051
19 18/05 (Qui) Programação utilizando interrupções e temporizadores do microcontrolador 8051
20 23/05 (Ter) Princípio de funcionamento da comunicação serial
21 25/05 (Qui) Programação utilizando a comunicação serial
22 30/05 (Ter) Programação utilizando a comunicação serial
23 01/06 (Qui) Prova 2 – conteúdo das aulas 10 a 22 (interrupções, temporizadores e serial do 8051)
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
143Prof. José Wilson Lima Nerys 143 Microprocessadores
143143
Rótulo Mnemônico
ORG 00H
LJMP INICIO
ORG 23H
CLR RI
MOV R0,SBUF
RETI
ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H
MOV IE,#90H
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV R0,#00H
MOV A,#01H
SETB TR1
SETB REN
Rótulo Mnemônico
V2: CJNE R0,#44H,V1
MOV B,#44H
SJMP DIREITA
V1: CJNE R0,#45H,V4
MOV B,#45H
SJMP ESQUERDA
V4: CJNE R0,#50H,V5
SJMP V2
V5: MOV R0,B
SJMP V2
DIREITA: MOV P1,A
RR A
LCALL ATRASO
SJMP V2
ESQUERDA: MOV P1,A
RL A
LCALL ATRASO
SJMP V2
END
Rotação de Leds via serial
Serial_
Leds_28_6.a
sm
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
144Prof. José Wilson Lima Nerys 144 Microprocessadores
Acionamentos diversos com informação de status para o computador
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
145Prof. José Wilson Lima Nerys 145 Microprocessadores
145
CH_STEP EQU P2.0
CH_MCC EQU P2.1
CH_LAMP EQU P2.2
M0 EQU P0.0
M1 EQU P0.1
LAMP EQU P0.7
STATUS EQU 22H
ORG 00H
LJMP INICIO
ORG 30H
INICIO: MOV SP,#2FH
MOV TMOD,#20H
MOV SCON,#40H
MOV TH1,#0FAH
MOV TL1,#0FAH
SETB TR1
MOV R7,#00H
MOV P1,#00H
MOV STATUS,#00H
CLR M0
CLR M1
CLR LAMP
V1: MOV A,P2
ANL A,#00000111B
XRL A,STATUS
JZ V1
;== Acionamento da Lâmpada ===========
V5: JNB CH_LAMP,LIGA_Lamp
MOV DPTR,#Lamp_OFF
LCALL SERIAL
CLR LAMP
SETB STATUS.2
SJMP V2
LIGA_Lamp: MOV DPTR,#Lamp_ON
LCALL SERIAL
SETB LAMP
CLR STATUS.2 ;
;== Acionamento do Motor CC ============
V2: JNB CH_MCC,LIGA_M
MOV DPTR,#M_OFF
LCALL SERIAL
CLR M0
CLR M1
SETB STATUS.1
SJMP V3
LIGA_M: MOV DPTR,#M_ON
LCALL SERIAL
SETB M0
CLR M1
CLR STATUS.1
STATUS indica o estado atual
dos dispositivos.
STATUS.0 = 0 motor de
passo ligado
STATUS.1 = 0 motor CC
ligado
STATUS.2 = 0 lâmpada
ligada
Compara o estado atual das
chaves (leitura de P2) com o
conteúdo de STATUS
(XRL A,STATUS).
Enquanto eles forem iguais
(Z=1), aguarda no loop.
Quando houver mudança da
posição de qualquer das
chaves, sai desse loop e
atualiza tudo.
Envia a atualização via serial
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
146Prof. José Wilson Lima Nerys 146 Microprocessadores
;== Acionamento do Motor de Passo =======
V3: JNB CH_STEP,LIGA_P
MOV DPTR,#PASSO_OFF
LCALL SERIAL
MOV P1,#00H
SETB STATUS.0
SJMP V1
LIGA_P:MOV DPTR,#PASSO_ON
LCALL SERIAL
CLR STATUS.0
MOV R6,#11H
V6: MOV P1,R6
LCALL ATRASO
MOV A,P2
ANL A,#00000111B
XRL A,STATUS
JNZ V5
MOV A,R6
RL A
MOV R6,A
SJMP V6
;== Envia Mensagem via Serial =======
SERIAL: MOV A,R7
MOVC A,@A+DPTR
CJNE A,#0FFH,ENVIA
MOV R7,#00H
RET
ENVIA: MOV SBUF,A
JNB TI,$
CLR TI
INC R7
SJMP SERIAL
ATRASO: MOV R0,#100
V4: MOV R1,#150
DJNZ R1,$
DJNZ R0,V4
RET
Lamp_ON: DB 'Lampada Ligada', 0DH, 0FFH
Lamp_OFF: DB 'Lampada Desligada', 0DH, 0FFH
M_ON: DB 'Motor de Corrente Continua Ligado', 0DH, 0FFH
M_OFF: DB 'Motor de Corrente Continua Desligado', 0DH, 0FFH
PASSO_ON: DB 'Motor de Passo Ligado', 0DH, 0DH, 0FFH
PASSO_OFF: DB 'Motor de Passo Desligado', 0DH, 0DH, 0FFH
END
Para manter o motor de passo
ligado, é necessário
rotacionar os bits da porta P1.
Assim, é necessário manter-
se nesse loop de V6,
verificando se há mudança
em alguma chave.
Universidade Federal de GoiásEscola de Engenharia Elétrica, Mecânica e de Computação
147Prof. José Wilson Lima Nerys 147 Microprocessadores
Bibliografia
[1] Salvador P. Gimenez, “Microcontroladores 8051: Teoria do hardware
e do software/Aplicações em controle digital/Laboratório e simulação”,
Pearson Education do Brasil, São Paulo, 2002.
ISBN: 85.87918-28-1.
[2] Vidal Pereira da Silva Jr., “Aplicações Práticas do Microcontrolador
8051”, Editora Érica, São Paulo, 1994.
ISBN: 85-7194-194-7
[3] Sencer Yeralan, Ashutosh Ahluwalia, “Programming and Interfacing the
8051 Microcontroller”, Addison-Wesley Publishing Company, 1995.
ISBN: 0-201-63365-5.