Você está na página 1de 147

Universidade Federal de Goiás

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

MICROPROCESSADORES E
MICROCONTROLADORES
Parte 2
Microcontrolador 8051

José Wilson Lima Nerys


Página: www.emc.ufg/~jwilson
Emails: jwlnerys@gmail.com e jose_wilson_nerys@ufg.br

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

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)
2

2
Prof. José Wilson Lima Nerys 2 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Leitura de Tabela no 8085 x 8051
Mostra valores menores que 50H e valores maiores que 85H
Início Início

Fluxograma Configurações iniciais: Configurações iniciais:


SP ß 2FH, DPTR ß #Tabela
Fluxograma
SP ß 2070H, HL ß 2050H
para o 8085 R0 ß 00H, R7 ß 00H para o 8051
A ß ((H,L))
A ß R7
A ß ((A + DPTR))

S
A < 50H? S
A = FFH? Fim
N
N
S S
A > 85H? A < 50H?

N N
Display ß A S
A > 85H?
HL ß HL + 1
LßA N
P1 ß A
N
A = 60H? R7 ß R7 + 1

S
Fim

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

Assembly do 8085
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
4
201EH CPI 60H 205EH 33H 206FH 20H

42020H
Prof. José Wilson LimaJNZ 2006H
Nerys 205FH D2H 2070H 4 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

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

0000H LJMP INICIO JC V2 TABELA: 10H


Assembly do 8051

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

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

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

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

Memória RAM

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

Memória RAM

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

Memória RAM

10

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

Memória RAM

11

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

MOV R0,#80H MOV 80H,A


MOV @R0,A

Conteúdo de A é armazenado
Conteúdo de A é armazenado no registrador especial 80H,
na posição 80H da memória que corresponde à Porta P0
RAM

12

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

Registradores
Especiais

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

Registradores Especiais

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

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
Copia em A o conteúdo do registrador identificado pelo endereço
MOV A,direto
“direto”
Copia no registrador identificado pelo endereço “dir1” o conteúdo do
MOV dir1,dir2
registrador identificado pelo endereço “dir2”
MOV @R0,A Copia o conteúdo de A na posição apontada por R0
MOV DPTR,#dado16 O registrador duplo DPTR recebe um dado de 16 bits
MOVC A,@A+DPTR Carrega acumulador com o conteúdo da posição apontada por A+DPTR

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

Algumas Instruções do 8051


Instrução Descrição
Compara conteúdo de A com o “dado”; se não forem iguais, desvia para
CJNE A,#dado,Ender
o endereço “Ender”
Compara conteúdo do registrador Rn (n = 0 a 7) com o “dado”; se não
CJNE Rn,#dado,Ender
forem iguais, desvia para o endereço “Ender”
Decrementa o registrador Rn (n = 0 a 7); se o resultado não for zero,
DJNZ Rn,desvio
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”

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

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
Subtrai o conteúdo do registrador identificado pelo endereço “direto”, do
SUBB A,direto
conteúdo do acumulador
Subtrai o conteúdo da posição apontada pelo registrador R0 do conteúdo
SUBB A,@R0
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

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

Algumas Instruções do 8051

Instrução Descrição
Multiplica o conteúdo de A pelo conteúdo de B. O resultado está em B A. O
MUL AB 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
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
SWAP A
significativo passa a ocupar os quatro últimos bits. Por exemplo, se
originalmente, A = 35 H, após a instrução, A = 53 H.

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

Algumas Instruções do 8051


Operações com bits

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

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

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)

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

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
Endereço END Instrução obrigatória no fim de todo programa 4 µs
da próxima
instrução 1 ORG 00H
Codificação: 0000 020030 2 LJMP INICIO Intervalo entre cada
3
V1 corresponde ao endereço dois envios para a
4 ORG 30H
0030 7400 5 INICIO: MOV A,#00H Porta P1: 4 µs
0032H = 0037 + FB 0032 F590 6 V1: MOV P1,A
0034 04 7 INC A Período: 256 x 4 µs =
(considerando somente o 0035 80FB 8 SJMP V1 1024 µs
byte menos significativo) 9 END

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

Contagem crescente – Resultado visual (saída do Conversor Digital-Analógico):


Onda Dente de Serra

Rótulo Mnemônico Tempo


ORG 00H
LJMP INICIO

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

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

Período calculado: 255 x 4 µs = 1020 µs

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

Contagem crescente e decrescente

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


Início ORG 00H A próxima instrução estará no endereço 00h

A ß 00H
LJMP INICIO Pula para o endereço indicado com o rótulo ´inicio´

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

Aß A + 1 INICIO: MOV A,#00H Carrega acumulador com valor 00h


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

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

Rótulo Mnemônico Tempo Período


ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV A,#00H 255 x 4 µs
V1: MOV P0,A 1 µs = 1020 µs
INC A 1 µs
CJNE A,#0FFH,V1 2 µs
µs=765 µs

V2: MOV P0,A 1 µs


255 x 3

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


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

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

Rótulo Mnemônico Tempo Período


ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV A,#00H 255 x 4 µs
V1: MOV P0,A 1 µs = 1020 µ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 Com a inclusão da instrução NOP, os dois semi-


períodos ficaram com tempos calculados iguais e
2 µs
DJNZ ACC,V2 tempos medidos muito próximos (1020 µs e 1030 µs)

SJMP V1
Instrução NOP (No Operation) usada apenas para
END gerar um atraso de 1 µs. 25

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

Onda quadrada no pino P1.0


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

Tempo calculado para meio período

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

Cristal oscilador: 12 MHz

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

Leitura de Tabela adaptada para ler 256 valores que, enviados para o Conversor DA,
resulta em uma curva senoidal

Rótulo Mnemônico Mnemônico Tempo


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

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

27
Prof. José Wilson Lima Nerys 27 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
Tabela: seno

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 DB28 113 DB 38
DB 200 DB 249 DB 245 DB 191 DB 110 DB 36
DB Lima
203Nerys DB 250 DB 244 DB 188 DB 107 DB 34
28
Prof. José Wilson 28 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

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


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

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

Gerador de Função com valores fixos de frequência para cada onda:


CONTADOR EQU 07H
1 – Onda quadrada QUAD EQU P2.0  Chave de escolha Onda quadrada
2 – Onda dente de serra SERRA EQU P2.1  Chave de escolha Dente de serra
3 – Onda triangular TRI EQU P2.2  Chave de escolha Triangular
4 – Onda senoidal SENO EQU P2.3  Chave de escolha Senoide

ORG 00H
LJMP INICIO

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

V1: MOV A,#00H


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

30

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

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)

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

Leitura de Tabela com Quantidade de Dados menor que 256


Usando tabela para acionamento de motor de passo

32

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

Acionamento de Motor de Passo com Passo


Completo e Meio Passo
Rótulo Tabela Tabela
Passo Meio Passo
Rótulo Mnemônico Rótulo Mnemônico Completo Offset R7
ORG 00H V2: MOV A,R7 Tabela: DB 03H DB 01H 0
LJMP INICIO MOVC A,@A+DPTR DB 06H DB 03H 1
MOV P1,A DB 0CH DB 02H 2
ORG 30H LCALL ATRASO DB 09H DB 06H 3
INICIO: MOV SP,#2FH INC R7 DB 04H 4
MOV DPTR,#Tabela CJNE R7,#04H,V2 DB 0CH 5
V1: MOV R7,#00h SJMP V1 DB 08H 6
DB 09H 7
A subrotina de atraso de
8
tempo não foi incluída
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.
33

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

Acionamento de Motor de Passo

Driver ULN 2803


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

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

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

Mostra em P1 o Maior valor


Início
de uma Tabela

R0 recebe o maior valor, Configurações iniciais:


SP ß 2FH, DPTR ß #Tabela
antes de mostrar em P1 R0 ß 00H, R7 ß 00H

A ß R7
A ß ((A + DPTR))

S
A = FF?

N
S P1 ß R0
A >= R0?

R0 ß A N

Fim

R7 ß R7 + 1

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

Mostra em P1 o Maior valor de uma Tabela

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


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

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

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

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


ORG 00H ORG 00H
LJMP INICIO LJMP INICIO

ORG 30H ORG 30H


INICIO: MOV SP,#2FH INICIO: MOV SP,#2FH
MOV A,#00H MOV A,#60H
V1: MOV P1,A V1: ADD A,#99H
ADD A,#01H DA A
DA A MOV P1,A
CJNE A,#60H,V1 CJNE A,#00H,V1
SJMP INICIO SJMP INICIO
END END
Enquanto A < 60H, continua contagem Enquanto A > 00H, continua contagem decrescente
crescente

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

Relógio HH:MM:SS

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

RÓTULO MNEMÔNICO Relógio HH:MM:SS


SEG EQU 10H RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO

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

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

ORG 00H DA A MOV HORA,A

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


CJNE A,#60H,V2 SJMP V1
ORG 30H
INICIO: MOV SP,#2FH MOV SEG,#00H ATRASO: MOV R0,#250
V1: MOV SEG,#00H MOV A,MIN V3: MOV R1,#250
MOV MIN,#00H ADD A,#01H DJNZ R1,$
MOV HORA,#00H DA A DJNZ R0,V3
MOV MIN,A RET
V2: MOV P2,SEG CJNE A,#60H,V2
MOV P1,MIN END
MOV P0,HORA MOV MIN,#00H
LCALL ATRASO MOV A,HORA

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

Cronômetro: MM:SS

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

Cronômetro Decrescente: MM:SS


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

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

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)

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

Interrupções do 8051
Endereços de Desvio das Interrupções:

Interrupção Solicitada Endereço de desvio


Reset 0000h
INT0\ 0003h
Timer/counter 0 000Bh
INT1\ 0013h
Timer/counter 1 001Bh
Canal Serial 0023h

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

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

Registrador de Habilitação: IE (Interrupt Enable) = Registrador A8h


Bit 7 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
EA x x ES ET1 EX1 ET0 EX0
EA  Enable All. Com EA = 1, todas as interrupções podem ser habilitadas
individualmente. Com EA = 0, ficam todas mascaradas.
ES  Enable Serial. Com ES = 1, a interrupção pelo canal serial fica habilitada.
Com ES = 0 os pedidos de interrupção da serial são ignorados.
ET1  Enable Timer 1. Com ET1 = 1, as interrupções pedidas pelo Timer 1
são atendidas. Com ET1 = 0 elas são ignoradas.
EX1  Enable External Interrupt 1. Com EX1 = 1, as interrupções pedidas através
do pino P3.3 são atendidas. Com EX1 = 0 elas são ignoradas.
ET0  Enable Timer 0. Com ET0 = 1, as interrupções pedidas pelo Timer 0
são atendidas. Com ET0 = 0 elas são ignoradas.
EX0  Enable External Interrupt 0. Com EX0 = 1, as interrupções pedidas através
pino P3.2 são atendidas. Com EX0 = 0 elas são ignoradas.
45
Prof. José Wilson Lima Nerys 45 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

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


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

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

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

IP = X X X PS PT1 PX1 PT0 PX0

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


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

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

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

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

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

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

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


RÓTULO MNEMÔNICO COMENTÁRIO
ORG 00H
LJMP INICIO

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


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

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


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

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

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

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

RÓTULO MNEMÔNICO COMENTÁRIO


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

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

Rotação de Leds à esquerda (CH0 = 0) e à direita (CH1 = 0)

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


CH0 EQU P3.2 MOV P1,A ATRASO: MOV R0,#100
CH1 EQU P3.3 RL A V2: MOV R1,#200
LCALL ATRASO DJNZ R1,$
ORG 00H SJMP V1 DJNZ R0,V2
LJMP INICIO RET
VCH1: JB CH1,V1
ORG 30H MOV P1,A END
INICIO: MOV SP,#2FH RR A
MOV A,#01H LCALL ATRASO
V1: JB CH0,VCH1 SJMP V1

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

Leds piscando (CH0 = 0) e alternando (CH1 = 0)

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


CH0 EQU P3.2 MOV P1,R6 ATRASO: MOV R0,#100
CH1 EQU P3.3 MOV A,R6 V2: MOV R1,#200
LCALL ATRASO DJNZ R1,$
ORG 00H CPL A DJNZ R0,V2
LJMP INICIO MOV R6,A RET
SJMP V1
ORG 30H END
INICIO: MOV SP,#2FH VCH1: JB CH1,V1
MOV R6,#00H MOV P1,R7
MOV R7,#55H MOV A,R7
V1: JB CH0,VCH1 LCALL ATRASO
CPL A
MOV R7,A
SJMP V1

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

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

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


ORG 00H ORG 00H
LJMP INICIO LJMP INICIO

ORG 00H ORG 00H


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

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

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

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

; ADIÇÃO DE NÚMEROS DE 16 BITS Z = X + Y

XH EQU 10H ; Número X de 16 bits


XL EQU 11H
YH EQU 12H ; Número Y de 16 bits
YL EQU 13H
ZH EQU 14H ; Resultado da adição de 16 bits
ZL EQU 15H
ZOV BIT 00H ; Flag de carry do resultado de 16 bits

ORG 00H
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

55
Prof. José Wilson Lima Nerys 55 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
; SUBTRAÇÃO DE NÚMEROS DE 16 BITS Z = X - Y

XH EQU 10H ; Número X de 16 bits


XL EQU 11H
YH EQU 12H ; Número Y de 16 bits
YL EQU 13H
ZH EQU 14H ; Resultado da adição de 16 bits
ZL EQU 15H
ZOV BIT 00H ; Flag de carry do resultado de 16 bits

ORG 00H
LJMP INICIO

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

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

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

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

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)

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

Programa que envia uma contagem crescente para a porta P1 a cada solicitação da
interrupção INT0 (através do pino P3.2). Contagem encerra quando A retorna para 00
RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
ORG 00H CONTAGEM: MOV P1,A
Exemplos

LJMP INICIO INC A


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

ATRASO: MOV R0,#10


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

Laço infinito aguardando interrupção


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

Programa que envia uma contagem crescente para a porta P1 a cada solicitação da
interrupção INT0 e uma decrescente a cada solicitação da INT1.
RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC

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


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

Programa que envia uma contagem decimal crescente para a porta P1 a cada solicitação da
interrupção INT0 e uma decimal decrescente a cada solicitação da INT1.
RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC
LJMP INICIO V1: MOV P1,A V2: ADD A,#99H
DA A
ADD A,#01H
MOV P1,A
ORG 03H DA A
LCALL ATRASO
LJMP ATENDE0 LCALL ATRASO
CJNE A,#00H,V2
CJNE A,#00H,V1 POP ACC
ORG 13H POP ACC RETI
LJMP ATENDE1 RETI
ATRASO: MOV R0,#250
Adiciona 1 e faz
ORG 30H Subtrai 1 e faz V3: MOV R1,#250
ajuste decimal
INICIO: MOV SP, #2FH ajuste decimal DJNZ R1, $

MOV IE, #85H DJNZ R0, V3


Habilita Interrupções INT0
RET
MOV TCON, #05H e INT1 por transição
END
MOV A,#00H
SJMP $ Laço infinito aguardando interrupção
60
Prof. José Wilson Lima Nerys 60 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Programa que envia uma contagem crescente para a porta P1 a cada solicitação da
interrupção INT0 e uma decrescente a cada solicitação da INT1 (Prioridade alta).
RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC

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


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

Programa rotaciona Leds conectados à porta P1.


INT0 rotaciona à esquerda; INT1 rotaciona à direita.
RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC

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


LJMP INICIO
V2: MOV P1,A
V1: MOV P1,A
LCALL ATRASO
ORG 03H RL A
RR A
LJMP ATENDE0 LCALL ATRASO
CJNE A,#80H,V2
CJNE A,#01H,V1 POP ACC
ORG 13H POP ACC RETI
LJMP ATENDE1 RETI
ATRASO: MOV R0,#250
Exemplos V3: MOV R1,#250
ORG 30H
DJNZ R1, $
INICIO: MOV SP, #2FH
DJNZ R0, V3
MOV IE, #85H Habilita Interrupções INT0
e INT1 por transição RET
MOV TCON, #05H
END
SJMP $
Laço infinito aguardando interrupção
62
Prof. José Wilson Lima Nerys 62 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Programa rotaciona Leds conectados à porta P1.


INT0 rotaciona à esquerda; INT1 rotaciona à direita (com prioridade alta).
RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC

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


LJMP INICIO
V2: MOV P1,A
V1: MOV P1,A
LCALL ATRASO
ORG 03H RL A
RR A
LJMP ATENDE0 LCALL ATRASO
CJNE A,#80H,V2
CJNE A,#01H,V1 POP ACC
ORG 13H POP ACC RETI
LJMP ATENDE1 RETI
ATRASO: MOV R0,#250
Exemplos V3: MOV R1,#250
ORG 30H
DJNZ R1, $
INICIO: MOV SP, #2FH
Habilita Interrupções INT0 DJNZ R0, V3
MOV IE, #85H
e INT1 por transição. RET
MOV TCON, #05H INT1 tem prioridade alta END
MOV IP,#04H
SJMP $
63
Prof. José Wilson Lima Nerys Laço infinito aguardando interrupção 63 Microprocessadores
Universidade Federal de Goiás Exemplos
Escola de Engenharia Elétrica, Mecânica e de Computação

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 RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
ORG 00H ATENDE0: PUSH ACC ATENDE1: PUSH ACC

MOV R7,#18 MOR R7,#36


LJMP INICIO
V2: MOV P1,A
V1: MOV P1,A
RR A
ORG 03H RL A
LCALL ATRASO
LJMP ATENDE0 LCALL ATRASO
DJNZ R7,V2
DJNZ R7,V1 POP ACC
ORG 13H POP ACC RETI
LJMP ATENDE1 RETI
ATRASO: MOV R0,#250
São 18 passos de 5º V3: MOV R1,#250
ORG 30H Total: 90º
DJNZ R1, $
INICIO: MOV SP, #2FH
DJNZ R0, V3
MOV IE, #85H
Habilita Interrupções INT0 RET
MOV TCON, #05H e INT1 por transição END
MOV A,#11H
SJMP $
64
Prof. José Wilson Lima Nerys Laço infinito aguardando interrupção 64 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

INT0 mostra em P1 maior valor de uma Tabela. INT1 mostra o menor valor

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


ORG 00H ORG 30H
LJMP INICIO INICIO: MOV SP,#2FH
MOV IE,#85H
ORG 03H MOV TCON,#05H
LJMP MAIOR MOV DPTR,#TABELA
V1: MOV R7,#00H
ORG 13H MOV R0,#00H
LJMP MENOR MOV R1,#0FFH
SJMP V1

65

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

INT0 mostra em P1 maior valor de uma Tabela. INT1 mostra o menor valor
Rótulo Mnemônico Rótulo Mnemônico Rótulo Dado
MAIOR: MOV A,R7 MENOR: MOV A,R7 TABELA: DB 05H
MOVC A,@A+DPTR MOVC A,@A+DPTR DB 35H
CJNE A,#0FFH,V2 CJNE A,#0FFH,V4 DB 12H
MOV P1,R0 MOV P1,R1 DB 98H
RETI RETI DB 0A1H
V2: CLR CY V4: CLR CY DB 0B5H
MOV B,A MOV B,A DB 5AH
SUBB A,R0 SUBB A,R1 DB 09H
JC V3 JNC V5 DB 72H
MOV R0,B MOV R1,B DB 40H
V3: INC R7 V5: INC R7 DB 0FFH
SJMP MAIOR SJMP MENOR END
66

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

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)

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

Breve Introdução aos Conversores AD e DA

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


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

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

68

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

Conversor DA Básico de 4 bits

VREF
I3 
R
Vsaída   Rsaída I V
I 2  REF
2R
V
I1  REF
I  I 3  I 2  I1  I 0 4R
V
I 0  REF
8R
VREF 0
I (2  D3  2 1  D2  2  2  D1  2 3  D0 )
R
V
I  REF ( D3  0,5  D2  0,25  D1  0,125  D0 )
R
69

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

Corrente saída Fração do


Conversor DA Básico D3 D2 D1 D0
(Vref = 5 V e R = 5 kΩ) máximo

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

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

Conversor DA Básico de 4 bits


máx

1 LSB

71

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

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.


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

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

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

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

72

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

Resolução do DA versus Número de bits

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

4 1/15 6,67

8 1/255 0,392

10 1/1023 0,09775

12 1/4095 0,02442

16 1/65535 0,000381

73

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

Conversor DA com resistores em escada

74

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

Conversor DAC 0808

75

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

Conversor ADC Básico

76

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

Conversor ADC com Aproximação Sucessiva

77

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

Conversor ADC 0804

Saída

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

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

Diagrama de Temporização do Conversor ADC0804

Tempo de conversão
aproximado: 100 µs

79

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

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)

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

Programa para leitura do Conversor AD


Rótulo Instrução Rótulo Instrução Rótulo Instrução

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


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

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

Temporização no problema anterior

CS\

RS\ Leitura habilitada


(libera dados na saída)

INTR
Fim da conversão
WR\

Início da conversão
82
Prof. José Wilson Lima Nerys 82 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Programa 2: Conversor AD usando interrupção


Rótulo Instrução
O conversor AD está operando de forma independente e
ORG 00H ininterrupta. O sinal de final de conversão é usado para
LJMP INICIO dar início à próxima conversão.

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

V1: MOV P1,A Loop infinito: O conteúdo de A é copiado na porta P1 (Leds). A


SJMP V1 atualização de A ocorre a cada final de conversão, através da
interrupção externa zero.
END

83

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

Uso do Teclado com Interrupção


(Decodificador de teclado: 74C922) Sinal alto (saída) quando
a conversão acaba
A saída (AD3, AD2, AD1, AD0) do
decodificador 74C922 é conectado ao
nibble inferior da Porta P2

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

Sinal baixo (entrada)


para liberar o
resultado na saída
ABCD

84

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

Uso do Teclado com Interrupção


Rótulo Instrução (Decodificador de teclado: 74C922)
ORG 00H
LJMP INICIO
Endereço da interrupção externa 1
O conteúdo da porta P2 é copiado no acumulador.
ORG 13H A instrução ANL A,#0FH (AND) elimina o nibble superior da
MOV A,P2 leitura de P2.
ANL A,#0FH
RETI

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

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

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

Uso do Teclado com Interrupção Nesse programa o Teclado é usado para


(Decodificador de teclado: 74C922) “entrar” com um número de dois dígitos.

Rótulo Instrução Rótulo Instrução

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


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

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)

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

Temporizadores

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.

O microcontrolador AT89S8252 possui 3 temporizadores.

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

Temporizadores

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


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

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

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

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

TCON = TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Temporizador 1 Temporizador zero

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

Temporizadores

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

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

G Gate Sendo 0, o disparo do temporizador/contador é interno,


através de TR. Sendo 1, 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).
90

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

Temporizadores

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

TCON = TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

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


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

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


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

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

Temporizadores

Lógica para
habilitar contagem

92

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

Temporizadores

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.
93

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

Exemplos com temporizadores e contadores Cristal de 12 MHz

ORG 00H Nesse exemplo o temporizador zero foi


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

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

Exemplos com temporizadores e contadores Cristal de 12 MHz

ORG 00H Nesse exemplo o temporizador zero foi


LJMP INICIO configurado para o modo 1
(TMOD = 0000 0001). Ao contrário do
ORG 30H exemplo anterior, todas as contagens
INICIO: MOV SP,#2FH começam do valor 15.535 porque, a cada final
MOV TMOD,#01H de contagem (quando TF0 = 1), o
processamento retorna para V1, onde os
V1: MOV TH0,#HIGH(15535) valores de TH0 e TL0 são recarregados.
MOV TL0,#LOW(15535) Assim, a contagem é de 50.000 pulsos. Sendo
SETB TR0 o cristal de 12 MHz, o contador conta 50 ms.
CPL P1.0
JNB TF0,$ O exemplo também apresenta uma forma de
CLR TF0 verificar o tempo de contagem do
SJMP V1 temporizador, gerando uma onda quadrada no
pino P1.0.
END
Loop de espera do fim da contagem
A Flag TF0 (fim de contagem) deve ser zerada antes de recarregar TH0 e TL0
95
Prof. José Wilson Lima Nerys 95 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Exemplos com temporizadores e contadores Cristal de 11.0592 MHz

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


LJMP INICIO diferença de usar um cristal oscilador de
11.0592 MHz.
ORG 30H
INICIO: MOV SP,#2FH Dessa forma, cada período do temporizador
MOV TMOD,#01H corresponde a 1,085 µs, ao invés de 1 µs.

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

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

Exemplos com temporizadores e contadores Cristal de 11.0592 MHz

ORG 00H Nesse exemplo, o temporizador zero, no modo


LJMP INICIO 1, gera uma onda quadrada com período de
100 ms (contagem de 19455 a 65535, com
ORG 30H cristal de 11.0592 MHz).
INICIO: MOV SP,#2FH
MOV TMOD,#09H
No entanto, o disparo do temporizador é
SETB TR0 EXTERNO, através do pino P3.2 (uma chave
tipo push-button deve ser conectada entre o
V1: MOV TH0,#HIGH(19455) pino P3.2 e o Terra). Com P3.2 = 0, o
MOV TL0,#LOW(19455) temporizador fica parado; com P3.2 = 1, o
CPL P1.0 temporizador prossegue a contagem.
JNB TF0,$
CLR TF0 TMOD = 09H = 0000 1001  Pino G\ = 1
SJMP V1 (disparo externo) e M1-M0 = 01
(temporizador zero no modo 1)
END

A Flag TR0 é setada para habilitar esse disparo externo.

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

Exemplos com temporizadores e contadores Cristal de 11.0592 MHz

ORG 00H Nesse exemplo tem-se um CONTADOR no modo 1 (16


LJMP INICIO bits).

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


INICIO: MOV SP,#2FH
MOV TMOD,#05H Duas situações podem ser criadas, no Proteus:
SETB TR0 1. Conectar uma chave entre os pinos P3.4 e o Terra. A
cada pulso dessa chave, a contagem em TH0-TL0 é
V1: MOV P2,TH0 incrementada em 1.
MOV P1,TL0 2. Conectar um gerador de função, com pulso quadrado,
SJMP V1 ao pino P3.4. A contagem em TH0-TL0 seguirá esse
clock.,
END
TMOD = 05H = 0000 0101  Pino C/T\ = 1 (contador) e
O valor de TH0 é mostrado
M1-M0 = 01 (contador zero no modo 1)
na porta P2
O valor de TL0 é mostrado A Flag TR0 é setada para o início da contagem
na prota P1
98
Prof. José Wilson Lima Nerys 98 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Exemplos com temporizadores e contadores Cristal de 11.0592 MHz


ORG 00H
LJMP INICIO Nesse exemplo tem-se um CONTADOR no modo 0 (13
bits).
ORG 30H
INICIO: MOV SP,#2FH O Sinal de clock é aplicado ao pino P3.4. As mesmas
MOV TMOD,#04H situações do exemplo anterior podem ser utilizadas.
SETB TR0 A diferença é que os valores mostrados em P2 e P1 são
diferentes:
V1: MOV P2,TH0 P1 (valor de TL0) mostra uma contagem de 00h até 1Fh,
MOV P1,TL0 continuamente.
SJMP V1 Ao final de cada contagem, o valor mostrado em P2 (valor
de TH0) é incrementado em 1
END
TMOD = 04H = 0000 0100  Pino C/T\ = 1 (contador) e
M1-M0 = 00 (contador zero no modo 0)
O valor de TH0 é mostrado
na porta P2
O valor de TL0 é mostrado A Flag TR0 é setada para o início da contagem
na prota P1
99
Prof. José Wilson Lima Nerys 99 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Exemplos com temporizadores e contadores Cristal de 11.0592 MHz


ORG 00H
LJMP INICIO Nesse exemplo tem-se um CONTADOR no modo 2
(8 bits com recarga automática).
ORG 30H
INICIO: MOV SP,#2FH No modo 2 (recarga automática), cada nova contagem
MOV TMOD,#06H começa do valor de TH0. Assim, no programa mostrado,
SETB TR0 cada nova contagem começa de TH0 = 40H.
MOV TH0,#40H
O sinal de clock deve ser conectado ao pino P3.4.
V1: MOV P2,TH0
MOV P1,TL0
TMOD = 06H = 0000 0110  Pino C/T\ = 1 (contador) e
SJMP V1
M1-M0 = 10 (contador zero no modo 0)
END

Valor da recarga
O valor de TH0 é mostrado na porta P2
O valor de TL0 é mostrado na prota P1

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

Exemplos com temporizadores e contadores Cristal de 11.0592 MHz


ORG 00H
LJMP INICIO Nesse exemplo tem-se um CONTADOR no modo 2
(8 bits com recarga automática).
ORG 03H
MOV A,TH0 É idêntico ao exemplo anterior, com uma exceção:
ADD A,#5 A interrupção externa zero (por transição) é usada para
MOV TH0,A incrementar em 5 o valor da recarga, TH0.
RETI

ORG 30H
Assim, cada nova contagem começa do valor anterior de
INICIO: MOV SP,#2FH TH0 + 5.
MOV IE,#81H
MOV TCON,#01H
Subrotina de atendimento da interrupção externa zero
MOV TMOD,#06H
SETB TR0
MOV TH0,#40H IE = 81h = 1000 0001  Interrupção externa zero
habilitada
V1: MOV P2,TH0 TCON = 01H = 0000 0001  Interrupção externa zero por
MOV P1,TL0 transição
SJMP V1
END
101
Prof. José Wilson Lima Nerys 101 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

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)

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

Exemplos com temporizadores e contadores COM INTERRUPÇAO


ORG 00H Nesse exemplo tem-se um TEMPORIZADOR no
LJMP INICIO modo 1 (16 bits), com interrupção ao final de cada
contagem.
ORG 0BH
MOV TH0,#HIGH(19455) A cada final de contagem (de 19455 a 65535) o
MOV TL0,#LOW(19455) processamento desvia para o endereço 0BH.
CPL P1.0 Nesse endereço, recarrega-se TH0 e TL0 e
RETI complementa-se o pino P1.0 (gera onda
quadrada).
ORG 30H
INICIO: MOV SP,#2FH Com uma contagem de 46080 e um cristal de
MOV IE,#82H 11.0592 MHz, tem 50 ms para cada meio período
MOV TMOD,#01H (onda quadrada com 100 ms de período)
MOV TH0,#HIGH(19455)
Subrotina de atendimento da interrupção do
MOV TL0,#LOW(19455)
temporizador zero.
SETB TR0
SJMP $ IE = 1000 0010  Interrupção do temporizador
END zero habilitada.

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

Exemplos com temporizadores e contadores COM INTERRUPÇAO


ORG 00H Nesse exemplo tem-se um TEMPORIZADOR no modo 1 (16 bits),
LJMP INICIO com interrupção ao final de cada contagem.

ORG 0BH A cada final de contagem (de 19455 a 65535) o processamento


MOV TH0,#HIGH(19455) desvia para o endereço 0BH. Nesse endereço, recarrega-se TH0 e
MOV TL0,#LOW(19455) TL0. No entanto, o pino P1.0 somente é complementado a 10
DJNZ R0,V1 passagens pela subrotina (R0 = 10).
CPL P1.0
MOV R0,#10 Com uma contagem de 46080 e um cristal de 11.0592 MHz, tem 50
V1: NOP ms para cada meio período, mas o pino P1. 0 é complementado a
RETI cada 10 x 50 ms = 0,5 s (resulta em onda quadrada com 1,0 s de
período)
ORG 30H
INICIO: MOV SP,#2FH Subrotina de atendimento da interrupção do temporizador zero.
MOV IE,#82H P1.0 somente é complementado a cada 10 atendimentos dessa
MOV TMOD,#01H subrotina.
MOV TH0,#HIGH(19455)
MOV TL0,#LOW(19455)
IE = 1000 0010  Interrupção do temporizador zero habilitada.
MOV R0,#10
SETB TR0
SJMP $ R0 = 10  contador para contar 10 vezes 50 ms

END Loop infinito esperando interrupção

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

Exemplos com temporizadores e contadores COM INTERRUPÇAO

ORG 00H Nesse exemplo tem-se o TEMPORIZADOR zero no modo 0 (13


LJMP INICIO bits) e o TEMPORIZADOR 1 no modo 1 (16 bits)

ORG 0BH Ambos começam a contagem de 0 e ambos utilizam suas


CPL P1.0 interrupções.
RETI
Ao final de cada contagem de 13 bits (0 a 8.191) o processamento
ORG 1BH desvia para o endereço 0Bh, onde o pino P1.0 é complementado
CPL P1.1 (gerando uma onda quadrada no pino P1.0).
RETI
Ao final de cada contagem de 16 bits (0 a 65.535) o processamento
ORG 30H desvia para o endereço 1Bh, onde o pino P1.1 é complementado
INICIO: MOV SP,#2FH (gerando uma onda quadrada no pino P1.1).
MOV IE,#8AH
MOV TMOD,#10H IE = 1000 1010  Interrupções dos temporizadores zero e 1
SETB TR0 habilitadas.
SETB TR1
SJMP $
TMOD = 10h = 0001 0000  Temporizador zero no modo 0 (13 bits);
END Temporizador 1 modo 1 (16 bits)

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

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.

106

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

Programa com uma subrotina de atraso de tempo com temporizador

RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO São 20 contagens de 50 ms


(tempo total: 1 s)
ORG 00H ATRASO: MOV R0,#20
LJMP INICIO V2: MOV TH0,#3CH
Contador conta de 15.535
MOV TL0,#0AFH até 65.535 (50.000 pulsos)

ORG 30H SETB TR0 Dispara o temporizador


Espera o final de cada
INICIO: MOV SP, #2FH ESPERA: JNB TF0, ESPERA contagem do temporizador
MOV TMOD,#01H CLR TF0 Limpa a flag que indica fim de contagem
V1: CPL P1.0 DJNZ R0, V2 Decrementa R0; se não der zero,
volta para nova contagem de 50 ms
LCALL ATRASO CLR TR0
SJMP V1 RET
Para o temporizador

Onda quadrada em P1.0 END


Cristal oscilador: 12 MHz
107

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

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)

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

Relógio HH:MM:SS

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

SEG EQU 10H MOV A,SEG ATRASO:


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

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

HH MM SS

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

Cronômetro: MM:SS

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

SEG EQU 10H V4: MOV P2,MIN


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

MM SS

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

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 CLR IN1 ATRASO: SETB TR0


IN2 EQU P2.2 CLR IN2 V3: MOV TH0,#3CH
LIGA EQU P3.2 MOV R7,#5 MOV TL0,#0AFH
V2: LCALL ATRASO JNB TF0,$
ORG 00H DJNZ R7,V2 CLR TF0
LJMP INICIO DJNZ R0,V3
CLR IN1 MOV R0,#20
ORG 30H SETB IN2 CLR TR0
INICIO: MOV SP,#2FH MOV R7,#10 RET
MOV TMOD,#01H V4: LCALL ATRASO
MOV R0,#20 DJNZ R7,V4 END

V0: JB LIGA,$ CLR IN1


CLR IN2
SETB IN1 SJMP V0 Cristal de 12 MHz
CLR IN2
MOV R7,#10
V1: LCALL ATRASO
DJNZ R7,V1
115

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

Acionamento temporizado de Motor de Passo: REVERSO:MOV P1,A


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

 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

117

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

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)

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

Comunicação
Serial

119

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

Comunicação Serial

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


informação bit a bit.

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


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

Uma grande questão da transmissão serial é


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

Assim, existem dois tipos de comunicação:

síncrona e assíncrona.
120

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

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.

121

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

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. 122

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

Formato da Comunicação Serial Assíncrona

123

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

Registrador SCON – Configuração da Comunicação Serial

124

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

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

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

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


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

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


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

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


125

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

Rótulo Instruções
MOV SCON,#00H Instrução que dá início à transmissão
MOV A,#00H
Aguarda a transmissão de todos os bits.
V1: MOV SBUF,A Quando o processo acaba, o micro faz TI = 1.
JNB TI,$
Sinais de RxD e TxD durante uma
CLR TI transmissão síncrona
INC A
SJMP V1
END

126

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

Serial – Modo 1 (assíncrono de 8 bits)

Taxa de comunicação (baud rate): Bit 7 do registrador especial PCON

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


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

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


registrador é transferido para o registrador SBUF.
Ao final da transmissão o bit TI é setado por hardware, e deve
127 ser ressetado
por software (CLR TI) antes da transmissão seguinte.
127
Prof. José Wilson Lima Nerys 127 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Rótulo Instruções
Configura serial modo 1 (assíncrono modo 1)
MOV SCON,#40H Timer 1 no modo 2. Baud rate de 9600 bps, para
MOV TMOD,#20H cristal de 11,0592 MHz.

MOV TH1,#0FDH Sinal de TxD (P3.1) durante uma


transmissão assíncrona no modo 1
MOV TL1,#0FDH

SETB TR1

MOV A,#00H

V1: MOV SBUF,A

JNB TI,$

CLR TI

INC A

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


END Aguarda a transmissão de todos os bits.
Quando o processo acaba, o micro faz TI = 1.
128
Prof. José Wilson Lima Nerys 128 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

ORG 00H Transmissão Serial no Modo 1


LJMP INICIO

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

V1: MOV R7,#00


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

ENVIA: MOV SBUF,A


JNB TI,$
CLR TI
INC R7
SJMP V2

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


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

end Código ASCII para mudança de linha


129

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

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 As mensagens MSG e MSG1
MSG1: DB 4DH, 49H, 43H, 52H, 4FH, 20H, 32H, 30H, 31H, 37H, 0DH, 0FFH são equivalentes
END
130

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

LAMP EQU P2.7 V4: CJNE R0,#'M',V0


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

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

Serial – Modo 2 (assíncrono de 9 bits)


Taxa de comunicação (baud rate): Bit 7 do registrador especial PCON

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

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


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

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


registrador é transferido para o registrador SBUF.
Ao final da transmissão o bit TI é setado por hardware, e deve
133 ser ressetado
por software (CLR TI) antes da transmissão seguinte. O nono bit é
transmitido através de TB8.
133
Prof. José Wilson Lima Nerys 133 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Serial – Modo 3 (assíncrono de 9 bits)

Taxa de comunicação (baud rate): Bit 7 do registrador especial PCON

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


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

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


registrador é transferido para o registrador SBUF.
Ao final da transmissão o bit TI é setado por hardware, e deve
134 ser ressetado
por software (CLR TI) antes da transmissão seguinte.
134
Prof. José Wilson Lima Nerys 134 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

135

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

136

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

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)

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

138
Prof. José Wilson Lima Nerys Serial_LCD_22_6.asm 138 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
Motor de Passo via serial Rótulo Mnemônico
V2: CJNE R0,#44H,V1
Rótulo Mnemônico LJMP DIREITA
ORG 00H
LJMP INICIO V1: CJNE R0,#45H,V2
LJMP ESQUERDA

ORG 23H DIREITA: MOV P1,A


RR A
CLR RI
LCALL ATRASO
MOV R0,SBUF SJMP V2
RETI
ESQUERDA: MOV P1,A
ORG 30H RL A
INICIO: MOV SP,#2FH LCALL ATRASO
MOV SCON,#40H SJMP V2
MOV IE,#90H
MOV TMOD,#20H ATRASO: MOV R7,#200
MOV TL1,#0FDH V3: MOV R6,#250
MOV TH1,#0FDH DJNZ R6,$
MOV R0,#00H DJNZ R7,V3
MOV A,#11H RET
SETB TR1 END
SETB REN
139

139
Prof. José Wilson Lima Nerys Serial_Passo_22_6.asm
139 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
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
Serial_estado_22_6.asm
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
Transfere conteúdo de P3 para A, isola o pino P3.3
CLR M1 ; Motor CC parado
e verifica se houve mudança de estado
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
140
STATUS.3
SJMP V1

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

Continuação do programa Serial_estado_22_6.asm

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

141

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

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)

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

Rotação de Leds via serial Rótulo Mnemônico


V2: CJNE R0,#44H,V1
Rótulo Mnemônico
MOV B,#44H
Serial_Leds_28_6.asm

ORG 00H SJMP DIREITA


LJMP INICIO
V1: CJNE R0,#45H,V4
MOV B,#45H
ORG 23H SJMP ESQUERDA
CLR RI
MOV R0,SBUF V4: CJNE R0,#50H,V5
RETI SJMP V2

ORG 30H V5: MOV R0,B


INICIO: MOV SP,#2FH SJMP V2
MOV SCON,#40H
MOV IE,#90H DIREITA: MOV P1,A
MOV TMOD,#20H RR A
MOV TL1,#0FDH LCALL ATRASO
MOV TH1,#0FDH SJMP V2
MOV R0,#00H
MOV A,#01H ESQUERDA: MOV P1,A
SETB TR1 RL A
SETB REN LCALL ATRASO
SJMP V2 143
END
Prof. José Wilson Lima Nerys 143 143 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

Acionamentos diversos com informação de status para o computador

144
Prof. José Wilson Lima Nerys 144 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação
CH_STEP EQU P2.0 ;== Acionamento da Lâmpada ===========
CH_MCC EQU P2.1
CH_LAMP EQU P2.2 V5: JNB CH_LAMP,LIGA_Lamp
STATUS indica o estado atual MOV DPTR,#Lamp_OFF
M0 EQU P0.0 dos dispositivos. LCALL SERIAL
M1 EQU P0.1 CLR LAMP
LAMP EQU P0.7 STATUS.0 = 0  motor de SETB STATUS.2
SJMP V2
passo ligado
STATUS EQU 22H
STATUS.1 = 0  motor CC LIGA_Lamp: MOV DPTR,#Lamp_ON
ORG 00H ligado LCALL SERIAL
LJMP INICIO STATUS.2 = 0  lâmpada SETB LAMP
ligada CLR STATUS.2 ;
ORG 30H
INICIO: MOV SP,#2FH ;== Acionamento do Motor CC ============
MOV TMOD,#20H
MOV SCON,#40H Compara o estado atual das V2: JNB CH_MCC,LIGA_M
MOV TH1,#0FAH chaves (leitura de P2) com o MOV DPTR,#M_OFF
MOV TL1,#0FAH conteúdo de STATUS LCALL SERIAL
SETB TR1 (XRL A,STATUS). CLR M0
MOV R7,#00H CLR M1
MOV P1,#00H SETB STATUS.1
Enquanto eles forem iguais SJMP V3
MOV STATUS,#00H (Z=1), aguarda no loop.
CLR M0 LIGA_M: MOV DPTR,#M_ON
CLR M1 Quando houver mudança da LCALL SERIAL
CLR LAMP posição de qualquer das SETB M0
CLR M1
V1: MOV A,P2
chaves, sai desse loop e CLR STATUS.1
ANL A,#00000111B atualiza tudo. 145

XRL A,STATUS
145 JZ V1
Prof. José Wilson Lima Nerys Envia a atualização via serial 145 Microprocessadores
Universidade Federal de Goiás
Escola de Engenharia Elétrica, Mecânica e de Computação

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

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

Bibliografia
[1] Salvador P. Gimenez, “Microcontroladores 8051: Teoria do hardware
e do software/Aplicações em controle digital/Laboratório e simulação”,
Pearson Education do Brasil, São Paulo, 2002.
ISBN: 85.87918-28-1.

[2] Vidal Pereira da Silva Jr., “Aplicações Práticas do Microcontrolador


8051”, Editora Érica, São Paulo, 1994.
ISBN: 85-7194-194-7

[3] Sencer Yeralan, Ashutosh Ahluwalia, “Programming and Interfacing the


8051 Microcontroller”, Addison-Wesley Publishing Company, 1995.
ISBN: 0-201-63365-5.

147
Prof. José Wilson Lima Nerys 147 Microprocessadores

Você também pode gostar