Você está na página 1de 161

MICROPROCESSADORES E

MICROCONTROLADORES

Microcontrolador 8051
Prof. Corradi
www.corradi.junior.nom.br

Campinas, 2009

1
Arquitetura do 8051

2
Diagrama de Blocos do 8051

3
Diagrama de Blocos do 8051
Em termos de hardware, o diagrama de blocos mostra onde acaba o
microprocessador e quais as unidades adicionais presentes num
microcontrolador. Assim, enquanto o microprocessador é mais freqüentemente
usado no processamento de informações em computadores, onde são
complementados com os drivers e periféricos que compõem o sistema, um
microcontrolador é mais adequado para sistemas dedicados, tal como um
sistema de controle, onde deseja-se um sistema com um mínimo de
componentes periféricos e um programa gravado em ROM.

CPU – A Unidade de Central de Processamento (UCP ou CPU) é a responsável


por todo o processamento de informações do microcontrolador. Contém os
principais registradores, tal como o acumulador, que é o principal registrador de
um microprocessador. Ela contém ainda a Unidade Lógica e Aritmética (ULA),
responsável pelas operações de adição, subtração, multiplicação, divisão,
rotação, AND, OR e outras.

4
Diagrama de Blocos do 8051
RAM – As versões xx51 possuem memória de dados (RAM) de 128 bytes,
enquanto a capacidade de memória RAM das versões xx52 é de 256 bytes.

ROM – As versões xx51 possuem memória de programa (ROM) interna de 4


kBytes, enquanto as versões xx52 possuem capacidade de 8 kBytes de memória
ROM. A exceção é a versão 8032 que não possui memória ROM interna.

Versão sem Versão com Versão com Versão Memória


ROM RAM
CI ROM EPROM Memória Flash usada na
Interna Interna
Interna Interna Flash plataforma
8051 4k 128 8031 8751 8951
8052 8k 256 8032 8752 8952 AT89S8252

5
Diagrama de Blocos do 8051
Contadores/Temporizadores – O microcontrolador padrão da família 8051
possui dois contadores/temporizadores de 16 bits, que podem trabalhar em 4
(quadro) modos diferentes: modo de 13 bits, modo de 16 bits, modo único de 8
bits com recarga automática e modo duplo independente de 8 bits. O contador
é caracterizado por um clock externo, enquanto o temporizador usa o clock
interno do microcontrolador. Essa unidade trabalha de forma independente da
CPU e pode ser ativada tanto por software quanto por hardware.

Porta Serial – Há dois pinos para porta serial. O pino RxD é o pino de
recepção de dados na forma serial e o pino TxD é o pino de transmissão de
dados na forma serial.

6
Diagrama de Blocos do 8051
Portas Paralelas – As portas paralelas, num total de 4 (quatro), são
numeradas de P0 a P3 e são todas de 8 bits. A porta P3 tem dupla função:
além de servir como canal de entrada e saída de dados também pode ser
usada para a comunicação serial (P3.0 e P3.1), interrupções externas (P3.2 e
P3.3), canal de freqüência para a operação como contador (P3.4 e P3.5) e
canal de controle de gravação e leitura de memória externa (P3.6 e P3.7). A
porta P0 tem uma característica diferente das outras portas: ela é de coletor
aberto, o que significa que necessita de um resistor de pull-up e pode drenar
uma corrente maior que as demais.

7
Pinagem do 8051 de 40 pinos

8
Programação em Assembly do 8051

9
Fluxograma para o 8051

12
Label Mnemônico 8085 Label Mnemônico 8051
Programas LXI SP,20C0 h
MVI A,02 h
$MOD51
ORG 00H

para o OUT 20 h
MVI B,01h
LJMP INICIO

MVI C,00 h ORG 50H


8085 e INICIO: MOV SP,#3FH
Lê chaves: IN 21 h MOV R0,#01H
8051 ANI 88 h
CPI 88 h
MOV R1,#00H

JNZ testa Ch7 REPETE: JNB P1.7, PULA2


MOV A,C JNB P1.3, PULA
OUT 22 h MOV A,R1
CMA MOV P2,A
MOV C,A CPL A
JMP Lê chaves MOV R1,A
SJMP REPETE
testa Ch7: CPI 80 h
JNZ testa Ch3 PULA: MOV A,R0
MOV A,B MOV P2,A
RRC RR A
OUT 22 h MOV R0,A
MOV B,A SJMP REPETE
JMP Lê chaves
PULA2: JNB P1.3, REPETE
testa Ch3: CPI 08 h MOV A,R0
JNZ Lê chaves MOV P2,A
MOV A,B RL A
RLC MOV R0,A
OUT 22 h LJMP REPETE
MOV B,A
JMP Lê chaves END

13
Memórias RAM e ROM do 8051

14
Memória ROM

EA\ = 0  o microcontrolador busca informações na memória ROM externa


EA\ = 1  as informações são buscadas na memória ROM interna.
PSEN\ = 1  a leitura da memória ROM interna está habilitada
PSEN\ = 0  a leitura da memória ROM externa está habilitada.

15
Memória RAM

16
Memória RAM
A memória RAM, em qualquer versão, pode ser adicionada em 64 kbytes (0000 a
FFFFh), além dos 128 ou 256 bytes de memória interna.

A memória RAM interna é subdivida em duas regiões básicas:

Endereço de 00 a 7F h (Parte baixa da RAM) – Contém 128 bytes. Todas as


versões do 8051 possuem essa região. O acesso pode ser direto ou indireto.

Endereço de 7F a FFh (Parte alta da RAM) – Essa faixa de endereço só está


presente nas versões xx52. Ela contém 128 bytes, cujo acesso é sempre através
de endereçamento indireto. Essa faixa de endereços coincide com a faixa de
endereços dos registradores especiais. A diferença está no tipo endereçamento
para acesso. Os registradores especiais são acessados sempre através de
endereçamento direto.

A manipulação de dados na memória RAM interna é através da instrução MOV,


enquanto que na RAM externa é com uso da instrução MOVX (MOV eXtern). Os
sinais RD\ e WR\ são usados na operação com a memória RAM externa.

17
Registradores do 8051

18
Parte Baixa
da RAM

32 registradores de 8 bits

19
32 MOV R0,#15H
Registradores
MOV R1,#25
com endereços
de 00H a 1FH
MOV 15H,R1

4 Bancos, MOV 10H,R0

cada um com 7
MOV @R0,#20H
registradores
denominados
MOV R4,#0101b
R0 a R7

20
Memória RAM – Região endereçável por bit e por byte e
Região endereçável apenas por byte

MOV 20H,#35H

SETB 20.0H =
SETB 00H

CLR 18H =
CLR 23.0H

MOV 25H,#0FFH

21
Registradores Especiais do 8051

22
Registradores Especiais

Os Registradores Especiais ficam localizados na região de 80h a FF h. Os


registradores dessa região, com endereços de final 0 ou 8, são endereçáveis por
byte ou por bit. Os demais, apenas por byte.

23
Registradores Especiais

Deve ser enfatizado que os registradores especiais ocupam os endereços de


80h a FFh, que coincide com os 128 bytes superiores da RAM interna dos
microcontroladores xxx2. A diferença entre o acesso aos Registradores Especiais e
a parte superior da RAM interna é o tipo de endereçamento. Os registros especiais
são acessados sempre por endereçamento direto, enquanto a parte superior da
RAM interna é acessada somente por endereçamento indireto.

MOV A, 80H  carrega o acumulador com o conteúdo do registrador especial 80H


(Porta P0)

MOV RO, #80H  Carrega R0 com valor 80H


MOV A,@RO  Carrega acumulador com o conteúdo da posição da memória
RAM apontada por R0, ou seja, endereço 80H da
memória superior

24
Registrador Especial PSW (Endereço: D0H)
(Program Status Word)

CY AC FD RS1 RS0 0V P

Carry Uso Geral Overflow


Paridade
Auxiliar
de Carry
Para selecionar Banco 1:
RS1 RS0 Banco Selecionado
SETB RS0 ou
0 0 0
SETB PSW.3 ou
0 1 1
1 0 2 SETB D0H.3 ou
1 1 3
ORL PSW,#08H

25
Registradores Especiais
Registrador Mnem End Bits individuais dos registradores
Latch Porta P0 P0 80H 87 86 85 84 83 82 81 80
Latch Porta P1 P1 90H 97 96 95 94 93 92 91 90
Latch Porta P2 P2 A0H A7 A6 A5 A4 A3 A2 A1 A0
Latch Porta P3 P3 B0H B7 B6 B5 B4 B3 B2 B1 B0
Acumulador A ACC E0H E7 E6 E5 E4 E3 E2 E1 E0
Registrador B B F0H F7 F6 F5 F4 F3 F2 F1 F0
Apontador de Pilha SP 81H
D7 D6 D5 D4 D3 D2 D1 D0
Registrador de Estado PSW D0H
CY AC F0 RS1 RS0 OV P

26
Registradores Especiais
Registrador Mnem End Bits individuais dos registradores
Apontador de Dados DPTR 82-83
LSB do DPTR DPL 82H
MSB do DPTR DPH 83H

Controle de Energia PCON 87H

Controle de Porta Serial SCON 98H 9F 9E 9D 9C 9B 9A 99 98


SM1 SM2 SM3 REN TB8 RB8 TI RI

Porta de Dados Seriais SBUF 99H

27
Registradores Especiais

Registrador Mnem End Bits individuais dos registradores


AF AE AD AC AB AA A9 A8
Habilitador de Interrupção IE A8H
EA ES ET1 EX1 ET0 EX0

Controle de Prioridade de BF BE BD BC BB BA B9 B8
IP B8H
Interrupção PS PT1 PX1 PT0 PX0

28
Registradores Especiais - Observações

Apontador de Pilha (Stack Pointer): SP: 81h - Como valor “default”, SP aponta para
o endereço hexadecimal 07h da memória RAM interna. Ao contrário do
Microprocessador 8085, o endereço do apontador de pilha é incrementado a cada
endereço guardado na pilha e o byte menos significativo é guardado primeiro.

Registradores DPH (83h) e DPL (82h) - Equivalem aos registradores H e L do


8085, que juntos formam o par HL. No 8051 DPH e DPL formam o registrador de 16
bits DPTR, usado principalmente no manuseio de tabelas.

29
Registradores Especiais - Observações
Registradores dos Temporizadores/Contadores – TH e TL armazenam as partes
alta e baixa, respectivamente, da contagem dos temporizadores/contadores; TMOD
(89 h) define o modo de operação dos temporizadores/contadores e TCON (88 H)
controla o início e o fim de uma contagem.

Controle da Porta Serial: SCON (98 H) – Registrador que contém todos os bits que
definem o modo de operação e o controle da porta serial. SBUF (99 H) é o
registrador que armazena tanto os dados a serem transmitidos quanto os dados
recebidos via serial. Efetivamente há dois registradores de mesmo nome SBUF e
mesmo endereço (99 H), um responsável pela transmissão e outro pela recepção de
dados.

30
Circuitos de Reset e de Clock

31
Circuito de
Reset

A colocação de um capacitor de 10µF em série com um resistor de 8,2 kΩ conectados


ao pino 9 do 8051 garante que o pino 9 fique em nível lógico alto por pelo menos 2
ciclos de máquina (24 períodos do oscilador) na energização do sistema.

Caso o Microcontrolador seja o 80C51, não é necessário o resistor de 8,2 kΩ, por já
existir um resistor interno.

32
Valores Iniciais após Reset
Registro Valor Registro Valor
PC 0000h TCON 00h
A 00h TH0 00h
B 00h TL0 00h
PSW 00h TH1 00h
SP 07h TL1 00h
DPTR 0000h SCON 00h
P0 - P3 FFh SBUF Indeterminado
IP xxx00000b PCON(NMOS) 0xxxxxxxb

IE 0xx00000b PCON(CMOS) 0xxx0000b

TMOD 00h

33
Circuito de Clock

34
Ciclo de Clock e Ciclo de Máquina
Um ciclo de máquina corresponde a uma seqüência de 6 estados (S1 a S6), cada
um equivalente a 2 períodos do oscilador .

(1 ciclo de máquina = 12 períodos do oscilador).

S1 S2 S3 S4 S5 S6

Ciclo de máquina

Cada instrução é executada em pelo menos 1 ciclo de máquina.

35
Ciclo de Clock e Ciclo de Máquina
Se o oscilador (cristal) for de 12 MHz, 1 ciclo de clock corresponde a:

1 1
Tclock = =
f clock 12 MHz

Tmáquina = 12 × Tclock = 1µs


Cada instrução é executada em pelo menos 1 ciclo de máquina. Isso significa que,
com um cristal de 12 MHz, o tempo mínimo de execução de qualquer instrução do
8051 é 1 µs.

Por exemplo, a instrução MOV é executada em 1 ciclo de máquina e, portanto, 1 µs.


A instrução DJNZ é executada em 2 ciclos de máquina e, portanto, 2 µs.

36
Circuito Mínimo

EA  Nível lógico 1

Microcontrolador
busca instrução na
memória ROM
interna

37
Instruções do 8051
Instruções Gerais

mov a,#dado  Carrega o acumulador com o valor “dado”.


O símbolo “#” é necessário para diferenciar dado de registrador.

Exemplos:
mov a,#25H  carrega acumulador com valor 25H
mov a,#25  carrega acumulador com o decimal 25, que equivale ao
hexadecimal 19 H
mov a,#01011001b  carrega acumulador com o binário que
corresponde a 59 H.
mov a,15H - Copia no acumulador o conteúdo do registrador
cujo endereço é 15h, ou seja, copia no acumulador o
conteúdo do registrador R5 do banco 2 de registradores.

39
Instruções Gerais

mov a,reg  carrega acumulador com o conteúdo do registrador reg do banco


de registradores que estiver selecionado.
`reg´ pode ser R0, ..., R7.

Exemplos:
mov a,R0  carrega acumulador com conteúdo do registrador R0
do banco 0.

Se RS1 = 0 e RS0 = 1 (Registrador Especial PSW):


mov a,R1  carrega acumulador com conteúdo do registrador R1 do
banco 1, ou seja, conteúdo do registrador 09H.

40
Instruções Gerais

mov R0,#20h  Carrega registrador R0 com valor 20h


mov @R0,#55h  Copia o valor 55h na posição apontada pelo registrador R0.
Se R0 = 20h, então copia valor 55h na posição 20h, ou seja,
na primeira posição acima do banco de registradores.

mov dptr,#200h  Carrega registrador de 16 bits “dptr” com valor 200h.


movc a,@a+dptr  Carrega acumulador com o conteúdo da posição apontada
por “a+dptr”.

Se, por exemplo, dptr = 200 H, e a = 04 h, então carrega acumulador com o


conteúdo da posição 204 H. É uma instrução adequada para trabalhar com tabelas.

41
Instruções Gerais

add a,reg  Adiciona o conteúdo do registrador “reg” ao conteúdo do acumulador:


A = A + reg

Exemplo:
add a,R1  Se a = 07 H e R1 = 03 H, então, após a instrução, a = 0AH.

subb a,byte  Subtrai o conteúdo do acumulador do “byte”. A = A – byte.

Exemplo:
subb a,#05H  Se a = 07 H, então, após a instrução, a = 02 H.

42
Instruções Gerais

rl a Rotaciona o conteúdo do acumulador para a esquerda (rotate left).


Por exemplo, se originalmente A = 21 H (0010 0001b),
após a instrução, tem-se: A = 42 H (0100 0010b).

rr a Rotaciona o conteúdo do acumulador para a direita (rotate right).


Por exemplo, se originalmente A = 8C H (1000 1100b),
após a instrução, tem: A = 46 H (0100 0110b).

inc reg Incrementa conteúdo do registrador “reg”. Por exemplo, se R1 = 05H,


então inc R1 resulta em R1 = 06 H.

dec reg Decrementa conteúdo do registrador “reg”. Por exemplo, se R2 = 0B H,


então dec R2 resulta em R2 = 0A H.

43
Instruções Gerais

cpl a Complementa o conteúdo do acumulador. Por exemplo, se originalmente,


A = 55 H, então, após a instrução, A = AA H.

swap a Faz a troca dos nibbles do acumulador, ou seja, o nibble mais significativo
passa a ocupar o quatro primeiros bits do acumulador e o nibble menos
significativo passa a ocupar os quatro últimos bits.
Por exemplo, se originalmente, A = 35 H, após a instrução, A = 53 H.

da a Faz o ajuste decimal do acumulador. Adiciona “6” ao dígito que esteja no


intervalo de A a F.
Por exemplo, se originalmente A = 7A H, após a instrução torna-se A = 80 H.

44
Instruções Gerais

mul ab – Multiplica o conteúdo de A pelo conteúdo de B. O resultado está em B A.


O resultado da multiplicação é um número de 16 bits, por isso precisa de
dois registradores para o resultado.
Exemplo:
mul ab  se A = 25 H e B = 30 H, após a instrução, tem-se: B = 06 H
e A = F0 H, pois o resultado da multiplicação é: 6F0 H

div ab Divide o conteúdo de A pelo conteúdo de B. A recebe o quociente


e B o resto.
Exemplo:
div ab  se A = CA H (202) e B = 19 H (25), após a instrução,
tem-se: A = 08 H e B = 02,
pois a divisão em decimal é: 202/25, que dá 8 e resta 2.

45
Instruções Gerais

anl a,byte Faz uma operação AND entre acumulador e BYTE.


A = A (AND) BYTE.

Exemplo:
anl a,#0FH  se originalmente a = 35 H, após a instrução torna-se:
A = 05H.

orl A,byte Faz uma operação OR entre o acumulador e byte.


A = A (OR) byte.

Exemplo:
orl a,#20H  se originalmente a = 07 H, após a instrução torna-se:
A = 27 H.

46
Instruções Gerais – Comparação, decisão e desvio

sjmp desvio Desvio incondicional curto (short jump) relativo.


Pula até 127 bytes para a frente e até 128 bytes para trás.

ajmp desvio Instrução de desvio para distâncias correspondentes a até


2048 bytes. (endereço de 11 bits).

ljmp desvio Desvio incondicional longo, para qualquer posição da memória


de programa. Endereço de 16 bits.

jnz desvio Instrução de desvio condicional: (Jump if Not Zero).


Vai para “desvio” se a operação anterior não for zero.
Verifica automaticamente a flag de Zero.

lcall subrotina Chamada de subrotina. Desvia para o endereço onde a


subrotina está localizada. Retorna para a posição seguinte quando
encontra a instrução “ret”.

47
Instruções Gerais – Comparação, decisão e desvio

jc desvio Desvio condicional para a posição indicada por “desvio”.


Desvia se a flag de CARRY estiver setada.

jnc desvio Desvio condicional para a posição indicada por “desvio”.


Desvia se a flag de CARRY não estiver setada.

djnz reg,desvio Decrementa registrador “reg” e pula para a posição “desvio”


se o resultado não for zero. É uma combinação das instruções
“DEC” e “JNZ” do microprocessador 8085.

cjne a,#dado,desvio Compara conteúdo do acumulador com “dado”


e pula para a posição “desvio” se não forem iguais

48
Instruções Gerais – Operações com Bit
jb bit,desvio Desvia para a posição “desvio”, caso o “bit” esteja setado.

Exemplo: jb ligado,desliga  Se ligado = 1, então o programa desvia para a


posição “deliga”.

jnb bit,desvio Desvia para “desvio”, caso o “bit” NÃO esteja setado.

Exemplo: jnb ligado,liga  Se ligado = 0, então o programa desvia para a


posição “liga”.

setb bit Seta o “bit”.

Exemplo: setb ligado  Torna o bit ligado igual a 1.

clr bit – Limpa o “bit”

Exemplo: clr ligado  Torna o bit ligado igual a zero.

49
Diretivas de Programação do 8051
e Programação em Assembly

50
Diretivas de Programação
org endereço  Informa ao compilador o endereço onde deve ser
armazenada a próxima instrução.
Exemplo:
org 30 H
mov sp,#2Fh  Esta instrução será armazenada na posição 30 H
da memória ROM.

variável equ ender. reg.  informa ao compilador que a “variável”


equivale ao registrador cujo endereço é “ender. reg”.
Exemplo:
velocidade equ 05H  Esta diretiva diz ao compilador que as
operações com a variável “velocidade” equivalem às
operações com o registrador R5 do banco 0
(endereço do registrador: 05 H).
mov velocidade,#52H equivale à instrução mov R5,#52H.

51
Diretivas de Programação
variável bit ender. bit  informa ao compilador que a “variável” é do tipo
bit e será armazenada no endereço dado por “ender.bit”.
Exemplo:
sentido bit 00H  Esta diretiva diz ao compilador que a variável
“sentido” é do tipo bit e será armazenada no endereço
00H da região acima dos bancos de registradores.
O endereço do bit 00H corresponde ao primeiro endereço
dessa região, ou seja, posição 20.0H.

db byte  Esta diretiva diz ao compilador que o byte a seguir é um


dado e não uma instrução.
Exemplo:
db 45H  O valor 45H é tratado como um dado, não como uma instrução.

52
Programa que gera uma onda quadrada no pino 0 da porta P1:

$MOD51 ; Biblioteca com definições básicas do 8051


ORG 00H ; informa ao compilador que a instrução LJMP será
LJMP INICIO ; armazenada na posição 00H da memória ROM

ORG 30H ; Instrução P1.0 será armazenada na posição 30H


INICIO: CPL P1.0 ; Complementa o pino P1.0 (pino 0 da porta P1)
MOV R0,#50 ; Carrega R0 com o valor decimal 50
DJNZ R0,$ ; Decrementa R0 até esse registrador tornar-se ZERO
SJMP INICIO ; Volta para o início do programa
END ; Informa ao compilador o FIM do programa

53
Frequência da onda quadrada gerada no pino P1.0 para uma frequência
de clock de 12 MHz:
Instrução Ciclos por Tempo por Número de Tempo
instrução Instrução Execuções Total
por semiciclo
INICIO: CPL P1.0 1 1 µs 1 1 µs
MOV R0,#50 1 1 µs 1 1 µs
DJNZ R0,$ 2 2 µs 50 100 µs
SJMP INICIO 2 2 µs 1 2 µs
END 104 µs

Meio período da onda quadrada: 104 µs


Período da onda quadrada : 208 µs
Frequência da onda quadrada : 4800 Hz

54
Programa que faz a leitura de uma Tabela e envia valores para P2
Rótulo Mnemônico Rótulo Mnemônico
$mod51 continua: mov P2,a
org 00h pop acc
ljmp inicio inc a
sjmp volta
org 30h
Inicio: mov sp,#2Fh
mov dptr,#tabela tabela: db 0Ah
repete: mov a,#00h db 06H
volta: push acc db 05H
movc a, @a+dptr db 09H
cjne a,#0FFh,continua db 0FFH
pop acc end
sjmp repete

55
Programa que faz uma contagem hexadecimal crescente ininterrupta de 0 a FFH

Rótulo Mnemônico
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV A,#00H
VOLTA: MOV P1,A
INC A
SJMP VOLTA
END

56
Programa que faz uma contagem hexadecimal ininterrupta de 0  30H  0

RÓTULO MNEMÔNICO
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV A,#00H
VOLTA: MOV P1,A
INC A
CJNE A,#30H,VOLTA
VOLTA2: MOV P1,A
DJNZ ACC,VOLTA2
SJMP VOLTA
END

57
Programa que faz uma contagem decimal ininterrupta de 0 a 59
RÓTULO MNEMÔNICO
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV A,#00H
VOLTA: MOV P1,A
ADD A,#01H
DA A
CJNE A,#60H,VOLTA
SJMP INICIO
END

58
Subrotina de atraso de tempo de 2 ms

Rótulo Mnemônico No. No. Tempo de


ciclos vezes atraso
ATRASO: MOV R0,#10 1 1 1 µs
REPETE: MOV R1,#100 1 10 10 µs
DJNZ R1,$ 2 1000 2000 µs
DJNZ 2 10 20 µs
R0,REPETE
RET 2 1 2 µs
2033 µs

59
Programa que faz uma contagem decimal decrescente de 59 a 0

RÓTULO MNEMÔNICO
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV A,#60H
VOLTA: ADD A,#99H
DA A
MOV P1,A
CJNE A,#00H,VOLTA
SJMP INICIO
END

60
Rotação de bits do acumulador para a esquerda e para a direita
RÓTULO MNEMÔNICO
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV A,#10000000B
VOLTA: RL A
MOV P0,A
LCALL ATRASO
CJNE A,#80H,VOLTA
VOLTA2: RR A
MOV P0,A
LCALL ATRASO
CJNE A,#01H,VOLTA2
SJMP VOLTA
END

78
Programa que lê os valores de uma
tabela e mostra na porta P1 o maior
desses valores.

O maior valor será guardado em R0.

O último elemento da tabela é FFh.


DPTR aponta para o início da tabela

79
RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
$MOD51 PULA2: POP ACC
ORG 00H INC A
LJMP INICIO SJMP VOLTA

ORG 30H ORG 100H


INICIO: MOV SP,#2FH TABELA: DB 05H
MOV A,#00H DB 35H
MOV R0,#00H DB 12H
MOV DPTR,#TABELA DB 98H
VOLTA: PUSH ACC DB 0A1H
MOVC A,@A+DPTR DB 0B5H
CJNE A,#0FFH,PULA DB 5AH
MOV P1,R0 DB 09H
LJMP FIM DB 72H
PULA: MOV B,A DB 40H
SUBB A,R0 DB 0FFH
JC PULA2
MOV R0,B FIM: NOP
END
80
Interrupções do 8051

81
Interrupções

O microcontrolador 8051 pode ter seu processamento interrompido através de uma, de


3 fontes:
Interrupção por Software – Uso de uma instrução
Interrupção pedida por periférico – Interrupção externa
Interrupção pedida por componente interno (Temporizador/Contador ou Porta Serial)

São 5 as maneiras possíveis de interrupção:

Interrupção externa 0 (INTO\) - pino 12 (P3.2)


Interrupção através do timer/counter 0 (temporizador/contador 0) – TIMER0
Interrupção externa 1 (INT1\) – pino 13 (P3.3)
Interrupção através do timer/counter 1 (temporizador/contador 1) – TIMER1
Interrupção através do canal de comunicação Serial (Pinos 10 e 11 = P3.0 e P3.1)

82
Interrupções
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 que comandam a 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

83
Interrupções
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.
84
Interrupções

Exemplo 1:
IE = 1 0 0 0 0 0 0 1

Sendo IE = 81h, então EA =1 e EX0 = 1, ou seja, a interrupção externa 0


está habilitada. Nesse caso, havendo um pedido de interrupção através
do pino P3.2, o processamento será desviado para o endereço 03h.

Uma opção de instrução para habilitar a interrupção 0 é:

MOV IE,#81H

Exemplo 1A – Interrupção Externa 0  Quando a interrupção externa é


solicitada, o programa mostra uma contagem crescente na
porta P1.

85
Interrupções
Exemplo 2:
IE = 1 0 0 0 0 1 0 1

Sendo IE = 85h, então EA =1, EX0 = 1 e EX1 = 1, ou seja, as interrupções


externas 0 e 1 estão habilitadas. Nesse caso, havendo um pedido de
interrupção através do pino P3.2, o processamento será desviado para o
endereço 03h; havendo um pedido através de P3.3, o desvio é para o
endereço 13h.

Uma opção de instrução para habilitar a interrupção 0 é:

MOV IE,#85H

Exemplo 2A – A interrupção INT0 dá início a uma contagem crescente na


porta P1. A interrupção INT1 dá início a uma contagem decrescente.

86
Interrupções
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).
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 (retorno da subrotina de atendimento).
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).

87
Interrupções

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

TCON = 0 0 0 0 0 0 0 1

Sendo TCON = 01h, interrupção externa 0 será acionada por transição do


nível lógico 1 para 0.

Uma opção de instrução para habilitar a interrupção 0 é:

MOV IE,#81H
MOV TCON,#01H

Exemplo 1B  A interrupção externa ZERO é acionada por transição.

88
Interrupções

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

TCON = 0 0 0 0 0 0 0 1

Sendo TCON = 01h, interrupção externa 0 será acionada por transição do


nível lógico 1 para 0.

Uma opção de instrução para habilitar a interrupção 0 é:

MOV IE,#81H
MOV TCON,#01H

Exemplo 1B  A interrupção externa ZERO é acionada por transição.

89
Interrupções
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.

90
Interrupções

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

91
Interrupções

IP = 0 0 0 0 0 0 0 1

Sendo IP = 01h, a interrupção externa 0 tem prioridade 1. As demais


interrupções tem prioridade 0.

Os comandos a seguir, habilitam as interrupções externas 0 e 1, sendo a


ZERO por transição e com prioridade 1.

MOV IE,#85H
MOV TCON,#01H
MOV IP,#01H

Exemplo 3  Rotação de bits na porta P1.

92
Programa que envia uma contagem crescente para a porta P1 a cada solicitação da
interrupção INT0, através do pino P3.2.

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


$MOD51 ATENDE: MOV P1,A
ORG 00H INC A
LJMP INICIO LCALL ATRASO
ORG 03H CJNE A,#00H,ATENDE
LJMP ATENDE MOV A,#01H
RETI

ORG 30H
ATRASO: MOV R0,#10
INICIO: MOV SP, #2FH
REPETE: MOV R1,#100
MOV IE, #81H
DJNZ R1, $
MOV TCON, #01H DJNZ R0, REPETE
MOV A, #00H RET
CJNE A,#01H, $ FIM: NOP
SJMP FIM END

93
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
$MOD51 ATENDE0: PUSH ACC ATENDE1: PUSH ACC

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


ORG 00H
VOLTA2: MOV P1,A
LJMP INICIO VOLTA: MOV P1,A
LCALL ATRASO
ORG 03H INC A
DEC A
LJMP ATENDE0 LCALL ATRASO
CJNE A,#0FFH,VOLTA2
ORG 13H CJNE A,#00H,VOLTA POP ACC
LJMP ATENDE1 POP ACC RETI
ORG 30H RETI
INICIO: MOV SP, #2FH ATRASO: MOV R0,#10
REPETE: MOV R1,#100
MOV IE, #85H
DJNZ R1, $
MOV TCON,
DJNZ R0, REPETE
#05H
RET
MOV A, #00H
END
SJMP $

94
Programa que faz o deslocamento à esquerda dos bits da porta P1 a cada
solicitação da interrupção INT0 e deslocamento à direita a cada solicitação da INT1.
RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO RÓTULO MNEMÔNICO
$MOD51 ATENDE0: PUSH ACC ATENDE1: PUSH ACC
ORG 00H MOV A,#01H MOV A,#80H
LJMP INICIO VOLTA: MOV P1,A VOLTA2: MOV P1,A
ORG 03H LCALL ATRASO LCALL ATRASO
LJMP ATENDE0 RL A RR A
ORG 13H CJNE A,#01H,VOLTA CJNE A,#80H,VOLTA2
LJMP ATENDE1 POP ACC POP ACC
ORG 30H RETI RETI
INICIO: MOV SP, #2FH
MOV IE, #85H ATRASO: MOV R0,#10
MOV TCON, #05H REPETE: MOV R1,#100
MOV A, #00H DJNZ R1, $
SJMP $ DJNZ R0, REPETE
RET
END
95
Temporizadores/Contadores
Microcontrolador 8051

96
Temporizadores

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


4 modos distintos:

Modo 0  Contador/Temporizador de 8 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.

97
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

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

TCON = TF1 TR1 TF0 TR0 IT1 IE1 IT0 IE0

98
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 freqüência do cristal oscilador.
Sendo 1, a freqüência é determinada por um componente externo,
através do pino P3.4 (T0) ou P3.5 (T1).

99
Temporizadores

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

TCON = TF1 TR1 TF0 TR0 IT1 IE1 IT0 IE0

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


contagem a partir do valor armazenado em TH e TL. TR = 0 pára
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.

100
Temporizadores

101
Temporizadores

O diagrama do temporizador/contador auxilia na análise do funcionamento.


O bit C/T\ do registrador TMOD, por exemplo, define se o funcionamento é
como contador (C/T\ = 1), ou como temporizador (C/T\ = 0).
Como temporizador, o clock é interno, vindo do oscilador. A freqüência é 1/12
da freqüê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.

102
Temporizadores

Exemplo 1: Contagem ininterrupta de 0 a 65535 do temporizador 0 no


modo 1 e de 0 a 8192 do temporizador 1 no modo 0.

TMOD = 0 0 0 0 0 0 0 1

Instrução Descrição
Seta o Temporizador 0 no modo 1 e o
MOV TMOD,#01H
Temporizador 1 no modo 0.

SETB TR0 Dispara o Temporizador 0.

SETB TR1 Dispara o Temporizador 1.

103
Temporizadores

Exemplo 2: Contagem do temporizador 0 no modo 1 e do temporizador 1


no modo 0, a partir de 2050 H para a primeira contagem.

Instrução Descrição
Seta o Temporizador 0 no modo 1. Conta até FFFF H
MOV TMOD,#01H
(65535).

MOV TH0,#20H
Setam início da contagem para 2050H. A partir da
MOV TL0,#50H segunda contagem começa em 0000H.

SETB TR0 Dispara o Temporizador 0.

SETB TR1 Dispara o Temporizador 1.

104
Temporizadores

Exemplo 3: Contagem do temporizador 1 no modo 2, com recarga de 7FH.

Instrução Descrição
Seta o Temporizador 1 no modo 2, com recarga
MOV TMOD,#20H
automática.

MOV TH0,#7FH Define valor da recarga para 7FH.

SETB TR1 Dispara o Temporizador 1

105
Temporizadores

Exemplo 4: Contagem do temporizador 0 com interrupção.

Instrução Descrição
Seta o Temporizador 0 no modo 1, contagem até
MOV TMOD,#01H
65535.

MOV IE,#82H Habilita a interrupção do Temporizador 0.

SETB TR0 Dispara o Temporizador 0.

Exemplo 5: Acrescenta uma contagem decrescente, de forma que o


microcontrolador faça duas tarefas simultâneas:
a contagem e a operação do temporizador. Usa o
temporizador 0 no modo 3.

106
Temporizadores

Exemplo 6: Contagem decrescente na P1, através de INT0 e crescente na


P2, através do temporizador 0, com prioridade 1.

Instrução Descrição
Seta o Temporizador 0 no modo 1, contagem até
MOV TMOD,#01H
65535.
Habilita as interrupções do Temporizador 0 e a
MOV IE,#83H
Externa 0.
MOV TCON,#01H Seta INT0 por transição

MOV IP,#02H Estabelece Prioridade 1 para o Temporizador 0.

SETB TR0 Dispara o Temporizador 0.

SJMP $ Aguarda interrupções num loop infinito.

107
Programa com uma subrotina de atraso de tempo com temporizador

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


$MOD51 ATRASO: MOV R0,#20
ORG 00H VOLTA: MOV TH0,#3CH
LJMP INICIO MOV TL0,#0AFH
SETB TR0
ORG 30H ESPERA: JNB TF0, ESPERA
INICIO: MOV SP, #2FH CLR TF0
MOV TMOD,#01H DJNZ R0, VOLTA
LCALL ATRASO CLR TR0
SJMP FIM RET

FIM: NOP
END

108
RÓTULO MNEMÔNICO
$MOD51
ORG 00H
LJMP INICIO

Programa que gera uma onda ORG 1BH


quadrada com período variável LJMP ATENDE1

ORG 30H
Temporizador no modo de INICIO: MOV SP, #2FH
recarga automática MOV TMOD,#20H
MOV TH1,#00H
Uso de interrupção do MOV TL1,TH1
temporizador SETB TR1
SJMP $

ATENDE1: CPL P1.0


INC TH1
RETI

END

109
Exemplos com Interrupções
e Temporizadores do 8051

110
Acionamento de Lâmpada

Relé:
Bobina: 12 V
Contatos: 220 V / 1 A
Transistor BJT: BC548C

111
Acionamento de uma Lâmpada Incandescente
Rótulo Mnemônico Rótulo Mnemônico

$MOD51 ORG 30H


INICIO: MOV SP,#2FH
MOV TMOD,#01H
ORG 00H
MOV IE,#82H
LJMP INICIO
MOV R7,#200
SETB TR0
ORG 0BH
SJMP $
LJMP TEMP

TEMP: DJNZ R7,PULA

A lâmpada acende e apaga a CPL P2.0


cada 200*65 ms ≈ 13 s MOV R7,#200
PULA: CLR TF0
RETI
END

112
Sensor de Presença

113
Acionamento de uma Lâmpada Incandescente – v2
A lâmpada é acionada através de um sensor de presença
Rótulo Mnemônico Rótulo Mnemônico
$MOD51 CPL LAMPADA
SENSOR EQU P3.0 JNB SENSOR,$
LAMPADA EQU P2.7 LCALL ATRASO
SJMP VOLTA
ORG 00H
LJMP INICIO ATRASO: MOV R5,#200
REP: MOV R6,#200

ORG 30H DJNZ R6,$

INICIO: MOV SP,#2FH DJNZ R5,REP

VOLTA: JB SENSOR,$ RET

LCALL ATRASO
END

114
Acionamento de Motor de Passo

115
Acionamento de Motor de Passo

Meio passo Passo Completo


Passo T0 T1 T2 T3 HEX Passo T0 T1 T2 T3 HEX
1 1 0 1 0 0A 1 1 0 1 0 0A
2 0 0 1 0 02 2 0 1 1 0 06
3 0 1 1 0 06 3 0 1 0 1 05
4 0 1 0 0 04 4 1 0 0 1 09
5 0 1 0 1 05 5 1 0 1 0 0A
6 0 0 0 1 01
7 1 0 0 1 09
8 1 0 0 0 08
9 1 0 1 0 0A

116
Acionamento de Motor de Passo
Rótulo Mnemônico Rótulo Mnemônico
$MOD51 MOV DPTR,#DIRETO
SENTIDO BIT 00H SJMP FRENTE
SENSOR1 EQU P3.0
SENSOR2 EQU P3.1 INVERSO: MOV DPTR,#REVERSO
ORG 00H FRENTE: PUSH ACC
LJMP INICIO MOVC A,@A+DPRT
ORG 30H CJNE A,#0FFH,PULA
INICIO: MOV SP,#2FH POP ACC
CLR SENTIDO SJMP COMECO
COMECO: MOV A,#00H
DECIDE: JB SENSOR1,OUTRO PULA: MOV P2,A
CLR SENTIDO LCALL ATRASO
OUTRO: JB SENSOR2,VAI POP ACC
SETB SENTIDO INC A
VAI: JB SENTIDO,INVERSO SJMP DECIDE

117
Acionamento de Motor de Passo
Rótulo Mnemônico Rótulo Mnemônico

ATRASO: MOV R0,#3FH DIRETO: DB 0AH

VOLTA: MOV R1,#3FH DB 06H


DB 05H
DJNZ R1,$
DB 09H
DJNZ R0,VOLTA
DB 0FFH
RET

REVERSO: DB 09H
DB 05H
DB 06H
DB 0AH
DB 0FFH
RET

END

118
Acionamento de Motor de Passo – Sensores de Extremidade
Rótulo Mnemônico Rótulo Mnemônico
$MOD51 VAI: JB SENTIDO,INVERSO
SENTIDO BIT 00H MOV DPTR,#DIRETO
SENSOR1 EQU P2.7 SJMP FRENTE
SENSOR2 EQU P2.6
ORG 00H INVERSO: MOV DPTR,#REVERSO
LJMP INICIO FRENTE: PUSH ACC
MOVC A,@A+DPRT
ORG 30H CJNE A,#0FFH,PULA
INICIO: MOV SP,#2FH POP ACC
CLR SENTIDO SJMP COMECO
COMECO: MOV A,#00H PULA: MOV P2,A
DECIDE: JNB SENSOR1,OUTRO LCALL ATRASO
CLR SENTIDO POP ACC
OUTRO: JNB SENSOR2,VAI INC A
SETB SENTIDO SJMP DECIDE

119
Acionamento de Motor de Passo – Sensores de Extremidade
Rótulo Mnemônico Rótulo Mnemônico

ATRASO: MOV R0,#3FH DIRETO: DB 0AH

VOLTA: MOV R1,#3FH DB 06H


DB 05H
DJNZ R1,$
DB 09H
DJNZ R0,VOLTA
DB 0FFH
RET

REVERSO: DB 09H
DB 05H
DB 06H
DB 0AH
DB 0FFH
RET

END

120
Acionamento de Motor de Passo – Com Interrupção
Rótulo Mnemônico Rótulo Mnemônico
$MOD51 DECIDE: JB SENTIDO,INVERSO
SENTIDO BIT 00H MOV DPTR,#DIRETO
ORG 00H SJMP FRENTE
LJMP INICIO INVERSO: MOV DPTR,#REVERSO
ORG 13H FRENTE: PUSH ACC
CPL SENTIDO MOVC A,@A+DPRT
RETI CJNE A,#0FFH,PULA
POP ACC
ORG 30H SJMP COMECO
INICIO: MOV SP,#2FH PULA: MOV P0,A
MOV IE,#84H LCALL ATRASO
MOV TCON,#04H POP ACC
CLR SENTIDO INC A
COMECO: MOV A,#00H SJMP DECIDE

121
Acionamento de Motor de Passo – Com Interrupção
Rótulo Mnemônico Rótulo Mnemônico

ATRASO: MOV R0,#3FH DIRETO: DB 0AH

VOLTA: MOV R1,#3FH DB 06H


DB 05H
DJNZ R1,$
DB 09H
DJNZ R0,VOLTA
DB 0FFH
RET

REVERSO: DB 09H
DB 05H
DB 06H
DB 0AH
DB 0FFH
RET

END

122
Acionamento de Motor de Corrente Contínua

12 V

Driver para acionamento em


um único sentido de rotação
1N4001

Diodo de roda livre 


BC548
necessário para circulação da
10 kΩ
corrente do motor quando a
P2.1 chave principal é fechada 
BD139
energia armazenada nos
circuitos magnéticos do motor
é dissipada nas resistências do
circuito.

123
Acionamento de Motor de Corrente Contínua – Ponte H
Driver para acionamento nos
dois sentidos de rotação

Chaves A e B fechadas

sentido direto

Chaves C e D fechadas

sentido reverso

124
Acionamento de Motor de Corrente Contínua
Ponte H – L298N

In2 In1 Efeito


0 0 Motor parado
0 1 Gira no sentido direto
1 0 Gira no sentido reverso
1 1 Motor parado

125
Acionamento de Motor de Corrente Contínua
Variação de Velocidade

T
VMAX V max
Va

TON TON TOFF


Va = VMAX
T
1
Supondo T = 255 µs f chav = = 3,92 kHz
255µs
Acionamento de Motor de Corrente Contínua
Variação de Velocidade
A variação de velocidade pode ser obtida variando-se o período ligado (TON) de
0 a 255 µs, ao mesmo tempo em que o período desligado (TOFF) deve variar
de 255 µs a 0, para manter constante o período total (T).

Essa contagem do período ligado e desligado pode ser feita através do


temporizador do 8051, modo 2 (com recarga automática), gerando um sinal
PWM. Nesse modo a contagem é feita através de TL e o valor de TH é
usado para definir o início da próxima contagem.

Se o temporizador começa sempre no valor dado em TL e vai até FFh (255), e


sendo TON = T – TOFF, e sendo ainda escolhido T = 255, o procedimento
usado no programa é:

1. Para o período ligado faz-se TL = TOFF; dessa forma, o temporizador conta


de TOFF até 255, o que corresponde ao período ligado;

127
Acionamento de Motor de Corrente Contínua
Variação de Velocidade
2. Para o período desligado faz-se TL = TON; dessa forma, o temporizador conta
de TON até 255, o que corresponde ao período desligado.
3. No início do programa desliga-se o motor (CLR P2.0 e CLR P2.1) e faz-se TL
= TON = 09H, o que faz com que o temporizador, na primeira contagem já
conte o período desligado, que começa em TON e vai até 255.
4. Após fazer TL = TON, encontra-se o complementar de TON (CPL A), ou seja,
TOFF, e carrega-se em TH. Dessa forma, a próxima contagem começará em
TOFF, o que significa que o temporizador contará o período ligado.
5. Cada vez que a subrotina de controle é executada define-se o próximo valor
de recarga, TH.
6. Para aumentar a velocidade aumenta-se o período ligado TON. Para diminuir
a velocidade, aumenta-se TOFF.

128
Programa para Acionamento de Motor de Corrente Contínua
Rótulo Mnemônico Rótulo Mnemônico
$MOD51 ORG 30H
INICIO: MOV SP,#2FH
TON EQU 03H MOV TMOD,#02H
TOFF EQU 04H MOV IE,#86H
LIGADO BIT 00H MOV TCON,#04H
MOV IP,#02H
ORG 00H CLR P2.0
LJMP INICIO CLR P2.1
CLR LIGADO
ORG 0BH MOV TON,#0FH
LJMP PWM MOV TL0,TON
MOV A,TON
ORG 13H CLR A
LJMP TECLADO MOV TH0,A
MOV T0FF,A
SJMP $
129
Programa para Acionamento de Motor de Corrente Contínua
Rótulo Mnemônico Rótulo Mnemônico
PWM: JB LIGADO,DESLIGA ANL A,#0FH
SETB P2.0 CJNE A,#01H,VERIF8
SETB LIGADO SJMP AUMENTA
MOV TH0,TON
RETI VERIF8: CJNE A,#09H,VERIF5
SJMP DIMINUI
DESLIGA: CLR P2.0
CLR LIGADO VERIF5: CJNE A,#05H,VOLTA
MOV TH0,TOFF SJMP PARA
RETI
VOLTA: SETB EX1
TECLADO: SETB TR0 RETI
CLR EX1
MOV A,P3
SWAP A
Programa para Acionamento de Motor de Corrente Contínua
Rótulo Mnemônico Rótulo Mnemônico
AUMENTA: MOV A,TON MOV B,A
ADD A,#08H SUBB A,#0F0H
MOV B,A JC PULA2
SUBB A,#0F0H MOV B,#0F0H
JC PULA PULA2: MOV A,B
MOV B,#0F0H MOV TOFF,A
PULA: MOV A,B CPL A
MOV TON,A MOV TON,A
CPL A SETB EX1
MOV T0FF,A RETI
SETB EX1
RETI

DIMINUI: MOV A,TOFF


ADD A,#08H

131
Programa para Acionamento de Motor de Corrente Contínua
Rótulo Mnemônico
PARA: CLR P2.0
CLR P2.1
CLR TR0
CLR LIGADO
MOV TON,#0FH
MOV TL0,TON
CPL A
Tecla 2  aumenta a velocidade
MOV TH0,A
MOV TOFF,A Tecla 8  diminui a velocidade
SETB EX1 Tecla 5  pára o motor
RETI
Obs.:

END O driver utilizado resulta em código 01h


para a Tecla 2 e 09H para a Tecla 8 e 05h
para a Tecla 5.

132
Comunicação Serial do 8051

133
Princípios da 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.

Equipamento 8051

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.

134
Comunicação Serial Síncrona

Na comunicação serial síncrona, são utilizados dois canais: um para transmitir os


dados e um outro para transmitir um sinal de sincronismo. O transmissor, portanto,
é o responsável pela sincronização. A cada sinal de sincronismo recebido o
receptor lê o canal de dados.

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.

135
Comunicação Serial Assíncrona

Na comunicação assíncrona não há um 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 da transmissão deve ser enviado
Um bit de fim de transmissão deve ser enviado

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 serem recebidos a quantidade de
bits especificada.
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.

136
Comunicação Serial Assíncrona

137
Comunicação Serial Assíncrona
(SCON) = SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0 SM1 Modo Descrição Baud Rate


0 0 0 Registrador de Deslocamento fosc./12
0 1 1 UART de 8 bits variável
1 0 2 UART de 9 bits fosc./64 ou fosc./32
1 1 3 UART de 9 bits variável
Símbolo Nome e Significado
SM2 Habilita a característica de comunicação de multiprocessadores no modo 2 e 3. Nesses
modos, se SM2=1, RI não será ativado se o nono bit de dado recebido for igual a 0. No
modo 1, se SM2=1, RI não será ativado se um stop bit válido não for recebido. No modo 0,
deverá ser 0.
REN Bit habitador da recepção serial. Setado/limpado por software para habilitar ou desabilitar
a recepção serial.
TB8 É o nono bit de dado que será transmitido no modo 2 e 3. Setado ou limpado por software.
RB8 No modo 2 e 3, é o nono bit de dado que foi recebido. No modo 1, se SM2=0, RB8 é o stop
bit que foi recebido. No modo 0, RB8 não é usado.
TI É o flag de interrupção de transmissão. Setado por hardware no final do tempo do 8° bit no
modo 0 ou no início do stop bit em outros modos, em qualquer transmissão serial. Deverá
ser limpado por software.
RI É o flag de interrupção de recepção. Setado por hardware no final do tempo do 8° bit no
modo 0 ou na metade do tempo do stop bit em outros modos, em qualquer recepção serial.
Deverá ser limpado por software.

138
Comunicação Serial – Modo 0 (Síncrono)

Taxa de transmissão fixa e igual à freqüência de clock dividida por 12.

f OSC
Baud Rate = (bits/s)
12
A recepção tem início com REN = 1 e RI = 0.
Ao final da recepção o bit RI é setado por hardware e o conteúdo recebido é
transferido para um registrador denominado por SBUF.
RI deve ser ressetado antes da próxima recepção.

A transmissão é iniciada automaticamente quando o conteúdo do acumulador é


transferido para o SBUF.
Há um registrador SBUF para transmissão e outro para recepção
Ao final da transmissão o bit TI é setado por hardware.
TI deve ser ressetado antes da próxima transmissão.

139
Comunicação Serial – Modo 1 (Assíncrono 8 bits)

Taxa de transmissão definida pelo usuário seguindo a expressão:

2 SMOD f osc
Baud rate = * (bits / s )
32 12 * (256 − TH 1)
São transmitidos 8 bits de dados, além de um bit de início e um bit de fim.
TH1  valor de recarga automática do temporizador 1 operando no modo 2.
SMOD  variável que pode assumir valor 0 ou 1.
A recepção tem início quando há uma transição do nível lógico 1 para 0 no pino
RxD (pino P3.0) e o bit RI está zerado.
Ao final da recepção o RI é setado por hardware.
A transmissão é iniciada quando há uma transferência de dados para SBUF.
Ao final da transmissão o bit TI é setado.
Comunicação Serial – Modo 2 (Assíncrono 9 bits)

Taxa de transmissão fixa e definida pela expressão:

f osc
Baud rate = 2 SMOD
* (bits / s )
64
São transmitidos 9 bits de dados, além de um bit de início e um bit de fim.
SMOD  variável que pode assumir valor 0 ou 1.
A recepção tem início quando há uma transição do nível lógico 1 para 0 no pino
RxD (pino P3.0) e o bit RI está zerado. O nono bit de dados é guardado em RB8.
Esse bit pode ser o bit de paridade.
Ao final da recepção o RI é setado por hardware.
A transmissão é iniciada quando há uma transferência de dados para SBUF. O
nono bit a ser transmitido é guardado em TB8. Esse bit pode ser o bit de
paridade.
Ao final da transmissão o bit TI é setado.

141
Comunicação Serial – Modo 3 (Assíncrono 9 bits)

Taxa de transmissão definida pelo usuário seguindo a expressão:

2 SMOD f osc
Baud rate = * (bits / s )
32 12 * (256 − TH 1)
São transmitidos 9 bits de dados, além de um bit de início e um bit de fim.
TH1  valor de recarga automática do temporizador 1 operando no modo 2.
SMOD  variável que pode assumir valor 0 ou 1.
A recepção tem início quando há uma transição do nível lógico 1 para 0 no pino
RxD (pino P3.0) e o bit RI está zerado.
Ao final da recepção o RI é setado por hardware.
A transmissão é iniciada quando há uma transferência de dados para SBUF.
Ao final da transmissão o bit TI é setado.

142
Comunicação Serial –
Taxas de Transmissão mais comuns

Timer 1
Baud Rate (bits/seg) Freq. Osc. (MHz) SMOD C/T barra Modo Valor Recar.
Modo 0 Máx: 1MHz 12 X X X X
Modo 2 Máx: 375K 12 1 X X X
Modo 1, 3: 62,5K 12 1 0 2 FFh
19,2K 11,059 1 0 2 FDh
9,6K 11,059 0 0 2 FDh
4,8K 11,059 0 0 2 FAh
2,4K 11,059 0 0 2 F4h
1.2K 11,059 0 0 2 E8h
137,5 11,059 0 0 2 1Dh
110 6 0 0 2 72h
110 12 0 0 1 FEEBh

143
RÓTULO INSTRUÇÃO
$MOD51
Comunicação Serial CONTADOR EQU 07H

Programa Modo Síncrono ORG 00H


LJMP INICIO

Transmite contagem ORG 30H


crescente e mostra no INICIO: MOV SP,#2FH
display de 7-segmentos MOV R0,#00H
LOOP: MOV SBUF,R0
JNB TI,$
LCALL MOSTRAP1
MOV A,R0
ADD A,#01
DA A
MOV R0,A
SJMP LOOP

144
Comunicação Serial – Programa Modo Síncrono
RÓTULO INSTRUÇÃO RÓTULO INSTRUÇÃO
MOSTRAP1: CLR TI MOV A,#0FH
MOV CONTADOR,#200 ANL A,R0
ESPERA: MOV A,#0F0H ORL A,#10H
ANL A,R0 MOV P1,A
SWAP A LCALL ATRASO
ORL A,#20H DJNZ CONTADOR,ESPERA
MOV P1,A RET
LCALL ATRASO ATRASO: MOV R4,#10
REPETE: MOV R5,#100
DJNZ R5,$
DJNZ R4,REPETE
RET
END

145
Comunicação Serial – Programa Modo 1 Assíncrono
RÓTULO INSTRUÇÃO RÓTULO INSTRUÇÃO
$MOD51 LOOP: MOV SBUF,R0
JNB TI,$
CONTADOR EQU 07H LCALL SERIAL
MOV A,R0
ORG 00H ADD A,#01
LJMP INICIO DA A
MOV R0,A
ORG 30H SJMP LOOP
INICIO: MOV SP,#2FH
MOV SCON,#40H Transmite e mostra no display de 7-
MOV TMOD,#20H segmentos uma contagem crescente,
MOV TL1,#0FDH usando o modo de comunicação serial
MOV TH1,#0FDH assíncrono, modo 1 (8 bits de dados)
MOV R0,#00H
SETB TR1 serial 5.asm

146
Comunicação Serial – Programa Modo 1 Assíncrono
RÓTULO INSTRUÇÃO RÓTULO INSTRUÇÃO
SERIAL: CLR TI MOV A,#0FH
MOV CONTADOR,#200 ANL A,R0
ESPERA: MOV A,#0F0H ORL A,#10H
ANL A,R0 MOV P1,A
SWAP A LCALL ATRASO
ORL A,#20H DJNZ CONTADOR,ESPERA
MOV P1,A RET
LCALL ATRASO
ATRASO: MOV R4,#10
Baud rate = 9600 bps REPETE: MOV R5,#100
DJNZ R5,$
SMOD = 0 DJNZ R4,REPETE
RET
fosc = 11,059 MHz
TH1 = FDH
END

147
Comunicação Serial – Programa Modo 1 Assíncrono
RÓTULO INSTRUÇÃO RÓTULO INSTRUÇÃO
$MOD51 MOV R0,#00H
SETB TR1
ORG 00H SETB REN
LJMP INICIO MOSTRA: LCALL DISPLAY
SJMP MOSTRA
ORG 23H
LJMP SERIAL SERIAL: CLR RI
MOV R0,SBUF
ORG 30H RETI
INICIO: MOV SP,#2FH
MOV SCON,#40H Programa que recebe dados no modo 1
MOV IE,#90H assíncrono a uma taxa de 4800 bps
MOV TMOD,#20H
serial 6.asm
MOV TL1,#0FAH TH1 = 0FAH
MOV TH1,#0FAH fosc = 11,059 MHz

148
Comunicação Serial – Programa Modo 1 Assíncrono
RÓTULO INSTRUÇÃO RÓTULO INSTRUÇÃO
DISPLAY: MOV A,#0F0H ATRASO: MOV R4,#10
ANL A,R0 REPETE: MOV R5,#100
ESPERA: SWAP A DJNZ R5,$
ORL A,#20H DJNZ R4,REPETE
MOV P1,A RET
LCALL ATRASO END
MOV P1,A
MOV A,#0FH
ANL A,R0
ORL A,#10H
MOV P1,A
LCALL ATRASO
RET

149
Comunicação Serial – Observações

A conexão serial entre o microcontrolador 8051 e um computador exige um


componente para adaptação dos níveis de tensão porque, enquanto no
microcontrolador, tensão zero representa nível lógico 0 e tensão de 5 V representa
o nível lógico 1, no computador é diferente. No computador o nível lógico 0 é
representado por uma tensão de + 12 V e o nível lógico 1 é representado por uma
tensão de – 12 V. Essa adaptação entre os níveis de tensão é conseguida com o
componente MAX232.

150
Comunicação Serial – Observações

O cabo de conexão entre o microcontrolador e o PC, para o caso da


plataforma, deve ser do tipo invertido, conforme mostra o diagrama a seguir.

151
;============ Transmissão Serial no Modo Síncrono ===============
;============ SCON = 00 ===============

Rótulo Mnemônico Descrição


$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV A,#00H O acumulador recebe o valor 00h
LOOP: MOV SBUF,A SBUF recebe o conteúdo de A, o que inicia automaticamente a
transmissão via serial
JNB TI,$ Loop de espera. Quando TI = transmissão chegou ao final.
CLR TI Limpa o bit TI, para permitir uma nova transmissão via serial
MOV P1,A Transfere para a porta P1 o conteúdo do acumulador
INC A Incrementa valor de a
SJMP LOOP Volta para a transmissão do próximo dado.
END

152
;============ Recepção Serial no Modo Síncrono ===============
;============ SCON = 00 ===============
Rótulo Mnemônico Descrição
$MOD51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
SETB REN Seta o bit REN, que habilita a recepção via serial
LOOP: JNB RI,LOOP Loop de espera. Quando RI = recepção chegou ao final.
CLR RI Limpa o bit RI, para permitir uma nova recepção via serial
MOV A,SBUF Transfere para o acumulador o conteúdo recebido pela serial.
MOV P1,A Transfere para a porta P1 o conteúdo do acumulador
SJMP LOOP Volta para a espera de um novo byte via serial
END

153
; ============== Serial no Modo 1 Assíncrono ================
; ============== SCON = 0100 0000 ================
; ============== TRANSMISSÃO
$mod51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H ; Serial no modo 1
MOV TMOD,#20H ; Temp 1 no modo 2
MOV TL1,#0FDH ; Baud rate de 9600 bps para clock de 11,059 MHz
MOV TH1,#0FDH
MOV A,#00H
SETB TR1
LOOP: MOV SBUF,A
JNB TI,$
MOV P1,A
INC A
CLR TI
SJMP LOOP

END
154
; ============== Serial no Modo 1 Assíncrono ================
; ============== SCON = 0100 0000 ================
; ============== RECEPÇÃO
$mod51
ORG 00H
LJMP INICIO

ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#40H ; Serial no modo 1
MOV TMOD,#20H ; Temp 1 no modo 2
MOV TL1,#0FDH ; Baud rate de 9600 bps para clock de 11,059 MHz
MOV TH1,#0FDH
SETB TR1
SETB REN
LOOP:
JNB RI,$ ; Aguarda fim de recepção
MOV A,SBUF ; Guarda em A conteúdo recebido via serial
MOV P1,A
CLR RI
SJMP LOOP

END
155
; ============== Serial no Modo 1 Assíncrono Com Interrupção ================
$mod51
ORG 00H
LJMP INICIO

ORG 23H
LJMP SERIAL

ORG 30H
INICIO: MOV SP,#2FH
MOV SCON,#01000000b ; Serial no modo 1
MOV IE,#90H ; Habilita interrupção da serial
MOV TMOD,#20H ; Temp 1 no modo 2
MOV TL1,#0FDH ; Baud rate de 9600 bps para clock de 11,059 MHz
MOV TH1,#0FDH
MOV A,#00H
SETB TR1
LOOP: MOV SBUF,A
JNB TI,$
SJMP LOOP

SERIAL: CLR TI
MOV P1,A
INC A
RETI
END

156
Expansão da Capacidade de
Memória do 8051

157
Expansão de Memória

Um sistema microcontrolado consiste de Hardware e Firmware. O


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

Uma vez que o programa aplicativo foi plenamente desenvolvido e


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

158
Expansão de Memória

Um sistema microcontrolado algumas vezes necessidade de memória


além da disponível internamente no microcontrolador. O diagrama de
blocos a seguir mostra o diagrama geral de um sistema com extensão de
memória.
CPU: 8051 MEMÓRIA
A(0 .. 15) A(0 .. 15)
D(0 .. 7) D(0 .. 7)
RD\ RD\
WR\ WR\

159
Expansão de Memória
Memória EEPROM AT28C256
(256 K = 32 K × 8 bits)

15 linhas de endereço: A0 ... A14


215 = 32768 (8000H) = 32 Kbytes

8 linhas de dados: I/O0 ... I/O7

WE\  Write Enable


OE\  Output Enable
CE\  Chip Enable

160
Expansão de Memória
Memória EEPROM AT28C256
(256 K = 32 K × 8 bits)

Operação CE\ WE\ OE\

Leitura de Memória 0 1 0

Escrita de Memória 0 0 1

161
Expansão de Memória
Latch 74LS573

162
Sistema com Memória EEPROM de 32 K

I/O0 I/O7 OE\


EEPROM AT28C256
CE\
WE\
0V A A7 A14 A8
0

OE\ LE
Latch
0V

WR\
ALE

RD\
MOV DPTR,#2000H Copia o conteúdo do acumulador na posição
MOVX @DPTR,A 2000H da RAM externa

163
Parte do Sistema do Diário de Classe
Memória EEPROM de 8 K AT28C64
(64 K = 8 K × 8 bits)

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


213 = 8192 (2000H) = 8 Kbytes

8 linhas de dados: I/O0 ... I/O7

WE\  Write Enable


OE\  Output Enable
CE\  Chip Enable

164
Sistema com Memória EEPROM de 8 K

I/O0 I/O7 OE\


EEPROM AT28C64
CE\
WE\
0V A A7 A12 A8
0

OE\ LE
Latch
0V

WR\
ALE

RD\
MOV DPTR,#1000H Copia no acumulador o conteúdo da posição 1000H
MOVX A,@DPTR da RAM externa

165
Mapeamento de
Memória do 8051

166
Mapeamento de Memória

A Porta P0 e P2 podem ser usadas para acionar outros dispositivos, além


do acesso à memória RAM. Para isso é necessário fazer um
mapeamento de memória, de modo que cada dispositivo tenha um
endereço, ou região de endereços associados a ele. Pode-se, por
exemplo, compartilhar as Portas P0 e P2 para acionar um motor de
passo e um display LCD, além da memória RAM.

A divisão da região total de memória (64 K) pode ser feita, nesse caso,
em 8 regiões de 8K. Um componente que pode ser usado nesse
processo é o decodificador 74LS138, que contém 3 entradas de seleção
e 8 saídas.

167
Mapeamento de Memória

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


o quadro a seguir, com a escolha do dispositivo das regiões:

Região Endereço Inicial e Final


0 0000H – 1FFFH
1 2000H – 3FFFH
2 4000H – 5FFFH
3 6000H – 7FFFH
4 8000H – 9FFFH
5 A000H – BFFFH
6 C000H – DFFFH
7 E000H - FFFFH

168
Sistema com Memória EEPROM de 8 K

I/O0 I/O7 OE\


EEPROM AT28C64
CE\
WE\
0V A A7 A12 A8
0

OE\ LE
Latch
0V

WR\
ALE

RD\
MOV DPTR,#1000H Copia no acumulador o conteúdo da posição 1000H
MOVX A,@DPTR da RAM externa

169
Memória EEPROM de 8 K AT28C64
(64 K = 8 K × 8 bits)

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


213 = 8192 (2000H) = 8 Kbytes

8 linhas de dados: I/O0 ... I/O7

WE\  Write Enable


OE\  Output Enable
CE\  Chip Enable

170
Mapeamento de Memória no Sistema do Diário de Classe

74LS138

171
Tabela-verdade do 74LS138

172
Mapeamento de Memória

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


o quadro a seguir, com a escolha do dispositivo das regiões:

Região Endereços Inicial e Final Dispositivo


0 0000 H – 1FFF H Memória EEPROM
1 2000 H – 3FFF H Motor de passo
2 4000 H – 5FFF H Display LCD
3 6000 H – 7FFF H Reservado para expansão
4 8000 H – 9FFF H Reservado para expansão
5 A000 H – BFFF H Reservado para expansão
6 C000 H – DFFF H Reservado para expansão
7 E000 H – FFFF H Reservado para expansão

173
Mapeamento de Memória

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

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

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

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

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

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

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

EEPROM Motor de Passo LCD

174
Mapeamento de Memória – Motor de Passo
Endereço escolhido para o motor de passo: 2000H a 3FFFH.

Driver para o motor de passo


UL2004 – Transistores Darlington

Não tem um pino de habilitação

Usar Latch

175
Endereço escolhido para o Display LCD: 4000H – 5FFFH

176
Mapeamento de Memória – Display LCD  4000H – 5FFFH

R/W RS
A1 A0

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


MOV DPTR,#4000H uma instrução  deslocamento para a esquerda da
MOVX @DPTR,A mensagem do display

177
Comandos mais comuns para o Display LCD
DESCRIÇÃO MODO RS R/W Código (Hexa)

Display Liga (sem cursor) 0 0 0C


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

178
Mapeamento de Memória – Seleção do Dispositivo

Habilita EEPROM
Habilita Motor de Passo
Habilita LCD

A15 A14 A13 Dispositivo


0 0 0 EEPROM
0 0 1 Motor de Passo
0 1 0 Display LCD

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

180