Você está na página 1de 25

A família 80C51 µCs) e

Microcontroladores (µ
microprocessadores (µµPs)
• Organização: • Um microcontrolador é fundamentalmente um
– Microcontroladores versus microprocessadores componente que integra os três blocos principais na
– Os microcontroladores da família 80C51 arquitectura de um computador: CPU, memória e E/S
– Interface com o exterior • Entre µCs e µPs existem as seguintes diferenças:
– Modelo de programação – Os µCs dispõem de E/S interna de vários tipos
– Processamento dos pedidos de interrupção – Os µCs podem dispor de ROM / EPROM
– Modos de endereçamento e tipos de instruções – Os µCs são sobretudo vocacionados para tarefas de
– Exemplo: Simulação de um registo de deslocamento controlo, onde 8 bits são a solução mais comum
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 1 A família 80C51 - 2

Os µCs da família 80C51 80C51: Arquitectura do


núcleo de base
• A família 80C51 apresenta uma arquitectura interna Interrupções
Controlo
de Interrupções
4K 128

algo complexa, o que a poderia desaconselhar como externas interrupções internas


ROM RAM

veículo para a introdução a este domínio. Contudo: Sinais de CPU


controlo
– Trata-se de componentes com grande uso na prática, para
os quais existe uma enorme variedade de aplicações de 4 portas de Porta
Temporizadores /
Oscilador Contadores
apoio ao projecto, comerciais ou do domínio público E/S paralela série
(2 T/C de 16 bits)

– A complexidade não é tanto devida à arquitectura do CPU P0 P2 P1 P3 TxD RxD Entradas dos contadores
interno, mas mais pela necessidade de se multiplexarem (cristal
exterior) Endereços / dados
muitos sinais em poucos pinos
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 3 A família 80C51 - 4
Variantes dentro da família Organização de memória
80C51
• As variantes principais que estão disponíveis nesta • A família 80C51 distingue entre memória de
família têm as seguintes características principais: programa (MP) e memória de dados (MD):
Função Variantes – A MP contém o programa a executar (instruções e
RAM 64 bytes a 1.024 bytes operandos), enquanto a MD serve apenas para dados
(EP)ROM 0 a 32 Kbytes
Timers / counters 1 a 3 (16 bits) – Uma vez que existe apenas um barramento de endereços
E/S paralela 2 a 7 portas (8 bits)
Interfaces série RS-232C, I2C, CAN
e um barramento de dados, a distinção entre MP e MD é
Interrupções externas 1 a 10 feita através do sinal de leitura (MP: /PSEN, MD: /RD)
Frequência de relógio 32 KHz a 40 MHz
Encapsulamento 24 a 80 pinos (DIP, LCC, QFP) – Na MP efectuam-se apenas operações de leitura, sendo
que na MD se efectuam operações de leitura e escrita
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 5 A família 80C51 - 6

Organização de memória Organização de memória


(cont.) (cont.)
• Ainda a distinção MP / MD: • Os recursos internos de MP e MD podem ser
– A existência de dois tipos de memória obriga o 80C51 a complementados externamente:
ter internamente dois apontadores (PC, DP) Memória de programa (MP) Memória de dados (MD)

FFFFh (externa) FFFFh


– A selecção do sinal de leitura apropriado (/PSEN ou /RD) (externa)

é feita automaticamente pela instrução a executar


– MP e MD não são necessariamente ROM e RAM, 1000h

podendo mesmo coexistir no mesmo componente de 0FFFh FFh


(interna)

/EA=0 /EA=1
memória, e.g. uma NVRAM (de onde viria o sinal de (externa) 0000h (interna) 00h 0000h

leitura, neste caso?) /PSEN /RD /WR

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 7 A família 80C51 - 8
Organização de memória Organização de memória
(cont.) (cont.) FFh
(interna)

00h

• O 80C51 inicializa a execução do programa a partir • Alguns aspectos importantes quanto à MD:
do endereço 0000H, que poderá ser de MP interna ou – Os 128 endereços superiores permitem de facto aceder a
externa, de acordo com o estado do pino /EA: 256 posições, de acordo com o modo de endereçamento
– Quando /EA=0, o 80C51 começa a execução do programa (conforme seja directo ou indirecto, como veremos
pela MP externa adiante)
– Nos casos em que existe MP interna, forçar /EA=0 – Do total de 384 posições assim existentes, 128
significa que esta memória não deve ser considerada (no correspondem aos registos de funções especiais (SFR,
entanto, se existir MP interna, será normalmente por aí special function registers) (por exemplo, o DP ocupa dois
que se iniciará a execução do programa) destes 128 SFR)
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 9 A família 80C51 - 10

Interface com o exterior Interface com o exterior


(cont.)
+5 V
VCC
8
XTAL1 P0 / AD[0:7]
cristal
XTAL2 8
P1

• Barramentos: +5 V • Repare-se ainda que: 8 P2 / A[8:15]

VCC
8 – O barramento de endereços é partilhado com P3 / …
8

XTAL1 Porto 0 (ou barramento de


cristal
dados e endereços — AD[0:7]) os portos de E/S paralela 0 e 2
XTAL2 8
Porto 1 – O porto 0 é também partilhado com o barramento de
RST 8 Porto 2 (ou barramento de dados
/EA-VPP endereços — A[8:15])
8
– AD[0..7]: A multiplexagem dados / endereços (oito bits
ALE-/PROG Porto 3 (ou os seguintes sinais:
/PSEN RxD, TxD, /INT0 e /INT1, T0 e menos significativos) é feita no domínio temporal (primeiro
VSS
T1, /WR e /RD)
o endereço e depois os dados)

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 11 A família 80C51 - 12
Interface com o exterior Interface com o exterior
(cont.) (cont.)
• Atendendo à multiplexagem temporal em AD[0..7], o • Barramento de controlo:
80C51 proporciona o sinal de controlo (ALE) para – RST (reset) – /WR
uma latch externa que memoriza a metade menos – /EA-VPP – /RD
significativa do endereço: 80C51
AD[0:7] 8 D[0:7]
Memória
– /PSEN – XTAL1 e XTAL2 (pinos
Porto 0
8 Registo
8 A[0:7] – ALE - /PROG do oscilador interno)
ALE
– /INT0 e /INT1 (entradas
A[8:15] A[8:15]
Porto 2
de interrupção)
/WR
Porto 3 /RD – T0 e T1
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 13 A família 80C51 - 14

Configuração de pinos Diagramas temporais


• Leitura da MP externa:
P1.0 1 40 +5 V
P1.1 2 39 P0.0 - AD0
P1.2 3 38 P0.1 - AD1
P1.3 4 37 P0.2 - AD2
P1.4 5 36 P0.3 - AD3
P1.5 6 35 P0.4 - AD4 ≈ 140 ns (mín.)
P1.6 7 34 P0.5 - AD5
P1.7 8 33 P0.6 - AD6 ALE
RST 9 32 P0.7 - AD7
P3.0 - RxD 10 31 /EA - V PP
P3.1 - TxD 11 30 ALE - /PROG /PSEN
P3.2 - /INT0 12 29 /PSEN ≈ 80 ns
(máx.)
P3.3 - /INT1 13 28 P2.7 - A15
P3.4 - T0 14 27 P2.6 - A14 A0:A7 Instrução A0:A7
P3.5 - T1 15 26 P2.5 - A13 Porto 0
P3.6 - /W R 16 25 P2.4 - A12
≈ 397 ns (máx.)
P3.7 - /RD 17 24 P2.3 - A11
XTAL2 18 23 P2.2 - A10 Porto 2 A8:A15 A8:A15
XTAL1 19 22 P2.1 - A9
0V 20 21 P2.0 - A8

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 15 A família 80C51 - 16
Diagramas temporais Diagramas temporais
(cont.) (cont.)
• Leitura da MD externa: • Escrita na MD externa:
ALE ALE

/PSEN /PSEN
≈ 440 ns (mín.) ≈ 440 ns (mín.)

/RD /WR
≈ 152 ns (máx.) ≈ 70 ns (mín.)
A0:A7 (Ri Dados A0:A7 (PCL) Instr. A0:A7 (Ri Dados A0:A7 (PCL) Instr.
Porto 0 ou DPL) Porto 0 ou DPL)
≈ 648 ns (máx.)
Porto 2 P2.0:P2.7 ou A8:A15 (do DPH) A8:A15 (PCH) Porto 2 P2.0:P2.7 ou A8:A15 (do DPH) A8:A15 do PCH

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 17 A família 80C51 - 18

Modelo de programação A RAM (MD) interna


revisitada
8 8 FFH
• Diagrama de P0 drivers P2 drivers
(128 bytes
Acessível por
endereçamento
Acessível por
endereçamento

blocos da RAM
P0 latch P2 latch
EPROM
superiores)
80H
indirecto (RAM) directo (SFRs)
7FH

arquitectura 7FH
(128 bytes
Acessível por
endereçamento Registos de Bits de selecção do banco
na palavra de estado (PSW) 30H
funções
de base: Reg. B Stack pointer inferiores) directo e
especiais 2FH
Prog. counter indirecto (RAM) Espaço endereçável ao
Acum. 0 (SFRs)
bit (endereços de bit 20H
Controlo
entre 0 e 7F) 11 1FH
SFR
Data pointer 18H
IR PSW
ALU Quatro bancos 10 17H
de oito registos 10H
cada (registos 01 0FH
P1 latch P3 latch 08H
R0 a R7) 07H
00
0
P1 drivers P3 drivers Valor inicial (após reset) do
8 8 apontador para a stack (SP)
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 19 A família 80C51 - 20
Os registos de funções Pedidos de interrupção
especiais (SFR)
F8H
(conjuntos de oito bytes)
FFH • A arquitectura do núcleo de base do 80C51 suporta
F0H B F7H
E8H EFH cinco fontes de interrupção:
E0H ACC E7H
D8H
D0H PSW
DFH
D7H
– Duas interrupções externas (pinos /INT0 e /INT1)
C8H
C0H
CFH
C7H
– Duas interrupções provenientes dos timers
B8H IP BFH
B0H P3 B7H – Uma interrupção proveniente do porto série
A8H IE AFH
A0H
98H
P2
SCON SBUF
A7H
9FH
• Cada uma destas fontes pode ser habilitada ou
90H
88H
P1
TCON TMOD TL0 TL1 TH0 TH1
97H
8FH
inibida e a cada uma pode ser atribuída alta ou baixa
80H P0 SP DPL DPH PCON 87H
prioridade (em ambos os casos, individualmente)
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 21 A família 80C51 - 22

Pedidos de interrupção Pedidos de interrupção


(cont.) (cont.)
• Sobre a prioridade das interrupções: • O atendimento a um pedido de interrupção começa
– O atendimento a uma interrupção de baixa prioridade com o armazenamento do valor actual do PC na
pode ser interrompido por uma interrupção de alta stack, a que se segue uma chamada à respectiva
prioridade, mas não vice-versa (e se forem interrupções rotina de atendimento:
da mesma prioridade?)
Fonte de interrupção Endereço de atendimento
– No que respeita a pedidos simultâneos, será atendido Pino exterior External Interrupt 0 (/INT0) 0003H
Overflow no timer 0 (TF0) 000BH
primeiro o que tiver mais alta prioridade; se forem iguais, Pino exterior External Interrupt 1 (/INT1) 0013H
será realizada uma sequência de pooling para determinar Overflow no timer 1 (TF1) 001BH
Concluiu-se uma recepção ou transmissão série (RI, TI) 0023H
qual será atendido primeiro
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 23 A família 80C51 - 24
Modos de endereçamento Endereçamento directo
• Será adoptada nesta apresentação a mesma • O operando é especificado através de um endereço
classificação e organização que são seguidas na de oito bits que se encontra na posição de MP
folha de características do componente (Philips) seguinte à que contém o código da instrução (só
• Por cada modo de endereçamento, apresenta-se pode ser usado com as posições internas de RAM e
uma explicação sumária e alguns exemplos com os SFR):
ilustrativos da sua utilização Mnemónica Operação Flags Código #Byte #M
mov r0,5fh (r0) ← (5fh) nenhuma A8 5F 2 2
mov a,p1 (a) ← (90h) nenhuma E5 90 2 1

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 25 A família 80C51 - 26

Endereçamento indirecto Endereçamento ao registo


• É usado um registo para especificar o endereço do • O próprio código da instrução contém um campo com
operando (tanto pode ser usado com as posições de três bits que identifica qual dos registos R0 a R7 deve
RAM internas como externas): ser usado (dentro do banco seleccionado):
Mnemónica Operação Flags Código #Byte #M Mnemónica Operação Flags Código #Byte #M
mov a,@r1 (a) ← ((r1)) nenhuma E7 1 1 mov a,r1 (a) ← (r1) nenhuma E9 1 1
movx a,@r1 (a) ← ((r1)) nenhuma E3 1 2 inc r5 (r5) ← (r5)+1 nenhuma 0D 1 1
movx @dptr,a ((dptr)) ← (a) nenhuma F0 1 2

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 27 A família 80C51 - 28
Endereçamento específico Endereçamento imediato
dos registos
• No caso das instruções que são específicas de certos • O valor do operando está contido na posição de MP
registos (por exemplo, do acumulador): seguinte à que contém o código da instrução:
Mnemónica Operação Flags Código #Byte #M
Mnemónica Operação Flags Código #Byte #M
cjne r5,#2ah,marca (pc) ← (pc)+3 se BD 2A 3 2
cpl a (a) ← /(a) nenhuma F4 1 1 (r5)<2ah F1
se (r5)≠2ah
inc dptr (dptr) ← (dptr)+1 nenhuma A3 1 2 (c) ← 1
(pc) ← (pc)+rel
senão
(c) ← 0
mov a,#76h (a) ← #76h nenhuma 74 76 2 1

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 29 A família 80C51 - 30

Endereçamento indexado Ainda os modos de


endereçamento
• É usado para a leitura de valores armazenados na • Apesar de a folha de características do 80C51 não o
MP, servindo como apontador um registo de 16 bits referir explicitamente, este componente suporta
(DP ou PC): também um modo de endereçamento a que é
Mnemónica Operação Flags Código #Byte #M
habitualmente dada a designação de endereçamento
movc
movc
a,@a+dptr
a,@a+pc
(a) ← ((a)+(dptr))
(pc) ← (pc)+1
nenhuma
nenhuma
93
83
1
1
2
2
relativo (e.g. jb P1.2,marca)
jmp @a+dptr
(a) ← ((a)+(pc))
(pc) ← (a)+(dptr) nenhuma 73 1 2
• Neste modo, e em vez do endereço de destino, o
operando consiste na diferença (offset) entre esse
endereço e o endereço actual
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 31 A família 80C51 - 32
Ainda os modos de Ainda os modos de
endereçamento (cont.) endereçamento (cont.)
• O offset é apresentado Decimal Complemento para dois • Esta solução permite poupar um byte na
como um byte em -128
-127
10000000 (hexadecimal 80)
10000001 (hexadecimal 81) especificação do endereço, sendo o valor do offset
complemento para -126
...
10000010 (hexadecimal 82)
...
calculado pela aplicação que gera o código objecto
dois, o que permite -2
-1
11111110 (hexadecimal FE)
11111111 (hexadecimal FF)
Endereços no exemplo
• Exemplo: considerado: 0006 01100000 (60h, código de
saltos de até 127 bytes 0 00000000 (hexadecimal 00)
)
0007 00000101
jz marca
(05h, valor do offset)
1 00000001 (hexadecimal 01)
para a frente ou 128 2 00000010 (hexadecimal 02)
0008
0009
Código instr. endereço da instrução seguinte
(deverá ser incrementado 5

bytes para trás: ...


126
...
01111110 (hexadecimal 7E)
000A
000B
vezes para chegar ao endereço
da marca)
127 01111111 (hexadecimal 7F) 000C
endereço para onde se
marca: 000D Código instr.
pretende saltar

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 33 A família 80C51 - 34

Tipos de instruções Instruções aritméticas


• O importante não é conhecer todas as instruções Mnemónica Operação Modos endereçamento
dir. ind. reg. im.
Tempo de
execução

(nem isso seria possível), mas sim conhecer bem as add a,<byte> (a) = (a)+<byte>    
(µs)
1
características dos seus cinco grupos principais: addc a,<byte> (a) = (a)+<byte>+(c)     1
subb a,<byte> (a) = (a)-<byte>-(c)     1
– Instruções aritméticas (arithmetical) inc a (a) = (a)+1 (específico do ACC) 1
inc <byte> <byte> = <byte>+1    1
– Instruções lógicas (logical) inc dptr (dptr) = (dptr)+1 (específico do DP) 2
dec a (a) = (a)-1 (específico do ACC) 1
– Transferência de dados (data transfer) dec <byte> <byte> = <byte>-1    1
mul ab (b)←b.a[15:8], (a)←b.a[7:0] (específico do ACC e B) 4
– Instruções Booleanas (Boolean) div ab (a)=Int[a/b], (b)=Mod[a/b] (específico do ACC e B) 4
da a Ajuste para decimal (específico do ACC) 1
– Instruções de salto (jump)
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 35 A família 80C51 - 36
Instruções aritméticas Instruções lógicas
(cont.)
Mnemónica Operação Modos endereçamento Tempo de

• Exemplos: anl a,<byte> (a) = (a)∧<byte>


dir.

ind.

reg.

im.

execução (µs)
1
anl <byte>,a <byte> = <byte>∧(a)  1
Mnemónica Operação Flags Código #Byte #M anl <byte>,#data <byte> = <byte>∧#data  2
orl a,<byte> (a) = (a)∨<byte>     1
addc a,#3bh (a) ← (a)+(c)+#3bh c, ac, ov 34 3B 2 1
orl <byte>,a <byte> = <byte>∨(a)  1
mul ab b← b.a[15:8], c=0, ov A4 1 4 orl <byte>,#data <byte> = <byte>∨#data  2
a ← b.a[7:0] xrl a,<byte> (a) = (a)⊕<byte>     1
xrl <byte>,a <byte> = <byte>⊕(a)  1
xrl <byte>,#data <byte> = <byte>⊕#data  2
clr a (a) = 0 (específico do ACC) 1
cpl a (a) = /(a) (específico do ACC) 1
rl a Rotaciona (a) à (específico do ACC) 1
esquerda
rlc a Rotaciona (a) à (específico do ACC) 1
esquerda através do c
rr a Rotaciona (a) à direita (específico do ACC) 1
rrlc a Rotaciona (a) à direita (específico do ACC) 1
através do c
swap a (a[3:0]) ↔ (a[7:4]) (específico do ACC) 1
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 37 A família 80C51 - 38

Instruções lógicas (cont.) Instruções de transferência


de dados
• Exemplos: • Estas instruções sub-dividem-se em três grupos
principais:
Mnemónica
orl 4eh,#3bh
Operação
(4eh) ← (4eh)∨#3bh
Flags
nenhuma
Código
43 4E 3B
#Byte
3
#M
2
– Transferência de dados na MD interna
clr a (a) ← 0 nenhuma E4 1 1
– Transferência de dados na MD externa
– Leitura de tabelas armazenadas na MP
• Cada um destes tipos será agora considerado
individualmente

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 39 A família 80C51 - 40
Transferência de dados: Transferência de dados:
MD interna MD interna (cont.)
Mnemónica Operação Modos endereçamento Tempo de • Exemplos:
dir. ind. reg. im. execução (µs)
mov a,<fonte> (a) = <fonte>     1 Mnemónica Operação Flags Código #Byte #M
mov <dest>,a <destino> = (a)    1 mov 7fh,3bh (7fh) ← (3bh) nenhuma 85 3B 7F 3 2
mov <dest>,<fonte> <destino> = <fonte>     2 mov dptr,#3b07h dptr[15:8] ← #3bh nenhuma 90 3B 07 3 2
mov dptr,#data16 (dptr) = #data16  2 dptr[7:0] ← #07h
push <fonte> inc (sp);  2 xch a,r7 (a) ↔ (r7) nenhuma CF 1 1
mov ((sp)),<fonte>
pop <destino> mov <destino>,((sp));  2
dec (sp)
xch a,<byte> (a) ↔ <byte>    1
xchd a,@ri (a[3:0]) ↔ ((ri[3:0]))  1

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 41 A família 80C51 - 42

Transferência de dados: Transferência de dados:


MD externa Leitura de tabelas na MP
Bits de endereço Mnemónica Operação Tempo de Mnemónica Operação Tempo de
execução (µs) execução (µs)
8 bits movx a,@ri (i=0 ou 1) Carrega (a) com ((ri)) 2 movc a,@a+dptr Carrega (a) com o conteúdo da MP 2
8 bits movx @ri,a (i=0 ou 1) Carrega ((ri)) com (a) 2 em ((a)+(dptr))
16 bits movx a,@dptr Carrega (a) com ((dptr)) 2 movc a,@a+pc Carrega (a) com o conteúdo da MP 2
em ((a)+(pc))
16 bits movx @dptr,a Carrega ((dptr)) com (a) 2

Mnemónica Operação Flags Código #Byte #M Mnemónica Operação Flags Código #Byte #M
(a) ← ((r1)) movc a,@a+dptr (a) ← ((a)+(dptr)) nenhuma 93 1 2
movx a,@r1 nenhuma E3 1 2
((dptr)) ← (a) movc a,@a+pc (pc) ← (pc)+1; nenhuma 83 1 2
movx @dptr,a nenhuma F0 1 2
(a) ← ((a)+(pc))

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 43 A família 80C51 - 44
Instruções Booleanas Instruções Booleanas
(cont.)
Mnemónica Operação Tempo de

anl c,<bit> (c) = (c)∧<bit>


execução (µs)
2
• Exemplos:
anl c,/<bit> (c) = (c)∧/<bit> 2
orl c,<bit> (c) = (c)∨<bit> 2 Mnemónica Operação Flags Código #Byte #M
orl c,/<bit> (c) = (c)∨/<bit> 2
orl c,/acc.4 (c) ← (c)∨/acc.4 c A0 E4 2 2
mov c,<bit> (c) = <bit> 1
mov <bit>,c <bit> = (c) 2 clr p2.7 (p2.7) ← 0 nenhuma C2 A7 2 1
clr c (c) = 0 1 jb p1.2,marca (pc) ← (pc)+3; nenhuma 20 92 D3 3 2
clr <bit> <bit> = 0 1 se (p1.2)=1 então
setb c (c) = 1 1 (pc) ← (pc)+rel
setb <bit> <bit> = 1 1
cpl c (c) = /(c) 1
cpl <bit> <bit> = /<bit> 1
jc marca Salta para marca se (c)=1 2
jnc marca Salta para marca se (c)=0 2
jb <bit>,marca Salta para marca se <bit>=1 2
jnb <bit>,marca Salta para marca se <bit>=0 2
jbc <bit>,marca Se <bit>=1 então [salta para marca; <bit> ← 0] 2
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 45 A família 80C51 - 46

Instruções de salto Instruções de salto não


condicional
• Estas instruções sub-dividem-se em dois grupos
Mnemónica Operação Tempo de
principais: execução (µs)
jmp marca Salta para marca (ljmp, sjmp) 2
– Salto não condicional jmp @a+dptr Salta para ((a)+(dptr)) 2
call marca Chama a subrotina em marca (lcall, acall) 2
– Salto condicional ret Retorna da subrotina 2

• Cada um destes tipos será agora considerado reti


nop
Retorna da interrupção
Nenhuma operação (para além de (pc) ← (pc)+1)
2
1

individualmente

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 47 A família 80C51 - 48
Instruções de salto não Instruções de salto
condicional (cont.) condicional
• Exemplos: Mnemónica Operação Modos endereçamento Tempo de
exec. (µs)
dir. ind. reg. im.

Mnemónica Operação Flags Código #Byte #M jz marca Salta para marca se (específico do ACC) 1
(a)=0
ljmp marca (pc) ← marca nenhuma 02 80 00 3 2
jnz marca Salta para marca se (específico do ACC) 1
lcall marca (pc) ← (pc)+3; nenhuma 12 80 00 3 2 (a)≠0
(sp) ← (sp)+1;
djnz <byte>,marca Decrementa <byte> e   2
((sp)) ← (pc[7:0]); salta para marca se
(sp) ← (sp)+1; <byte>≠0
((sp)) ← (pc[15:8]) cjne a,<byte>,marca Salta para marca se   2
(a)≠<byte>
(pc) ← marca
cjne <byte>,#data,marca Salta para marca se   2
reti (pc[15:8]) ← ((sp)); nenhuma 32 1 2 <byte>≠#data
(sp) ← (sp)-1;
(pc[7:0]) ← ((sp));
(sp) ← (sp)-1;

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 49 A família 80C51 - 50

Instruções de salto Exemplo de aplicação


condicional (cont.)
• Exemplos: • Para consolidar os conhecimentos adquiridos,
Mnemónica
jz marca
Operação
(pc) ← (pc)+2;
Flags
nenhuma
Código
60 CA
#Byte
2
#M
2
consideraremos agora o caso de pretendermos
se (a)=0 então
(pc) ← (pc)+rel
simular o funcionamento de um registo de
djnz 5fh,marca (pc) ← (pc)+3; nenhuma D5 5F C7 3 2 deslocamento, como o que se apresenta a seguir:
(5fh) ← (5fh)-1;
se (5fh)≠0 então
OUT[0] OUT[1] OUT[2] OUT[3]
IN

(pc) ← (pc)+rel
D Q D Q D Q D Q

CLK CLK CLK CLK

cjne @r1,#22h,marca (pc) ← (pc)+3; se B7 22 C4 3 2


se ((r1))≠#22h então ((r1))<#22h CLK

(pc) ← (pc)+rel (c) ← 1


se ((r1))<#22h senão OUT[4] OUT[5] OUT[6] OUT[7]

então (c) ← 1; (c) ← 0 D Q D Q D Q D Q

senão (c) ← 0 CLK CLK CLK CLK

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 51 A família 80C51 - 52
Exemplo de aplicação Sequência de passos
(cont.)
• Os pressupostos são os seguintes: • A sequência de passos até à solução é a seguinte:
– O sinal de relógio é activo à transição OUT[0]
OUT[1]
OUT[2]
– Efectuar a atribuição entre os sinais exteriores e os pinos
ascendente IN
OUT[3]
OUT[4]
OUT[5]
de E/S paralela do microcontrolador
OUT[6]
– No estado inicial, todas as saídas CLK
OUT[7]
– Reflectir sobre a sequência de operações que
deverão estar a 0 implementem a funcionalidade pretendida
– A relação entre as entradas (IN e CLK) e as saídas – Codificar esta sequência em assembly
(OUT[0..7]) deverá ser tão próxima quanto possível da – Obter o código objecto, simular o seu funcionamento
que teria lugar através da implementação em hardware (verificação de projecto) e implementar na prática
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 53 A família 80C51 - 54

Atribuição de recursos Sequência de operações a


realizar
• A simplicidade do exemplo considerado dispensa-nos • A sequência de operações a realizar pode
o uso de recursos externos a um 87C51, pelo que especificar-se como se segue:
poderemos especificar a seguinte atribuição: – Aguardar pela subida no sinal de relógio (CLK)
– Linhas de saída OUT[0..7] do registo de deslocamento – Após a subida em CLK, deslocar o conteúdo de OUT[0..7]
estarão ligadas ao porto 1 (respectivamente P1[0..7]) uma posição, no sentido de OUT[0] para OUT[7] (para a
– Linhas de entrada ligadas ao porto 0 (CLK em P0.0 e IN esquerda, considerando que OUT[7] está à esquerda)
em P0.1) – Se a entrada IN estiver em 1, colocar OUT[0] em 1; caso
contrário, colocar OUT[0] em 0
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 55 A família 80C51 - 56
Codificação em assembly Verificação de projecto
0003
0004
0000
0000 E4 inicio clr a
• É necessário esperar pela descida do relógio (linha
0005
0006
0001
0003
F5
30
90
80 FD marca1
mov
jnb
p1,a
p0.0,marca1
;
;
coloca OUT[0..7] em 0
espera que CLK suba
10), para evitar que uma única subida em CLK
0007
0008
0006
0008
A2
33
81 mov
rlc
c,p0.1
a
;
;
coloca IN no Carry
realiza o deslocamento
provoque múltiplas operações de deslocamento
0009 0009 F5 90 mov p1,a ; actualiza as saidas (dependendo da relação entre CLK e o relógio do
0010 000B 20 80 FD marca2 jb p0.0,marca2 ; espera que o CLK desca
0011 000E 80 F3 sjmp marca1 87C51): CLK
0012 0010
0013 0010 .end
OUT[0]
tasm: Number of errors = 0
Intervalo correspondente à execução das linhas
(analisar com pormenor; para que serve a linha 10?) 0006 a 0009, após o que tem lugar a
actualização das saídas P1[0..7]
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 57 A família 80C51 - 58

Verificação de CLK
Verificação de projecto
projecto (cont.) OUT[0]
(cont.)
• Considerando CLK a 1 KHz e o relógio do 87C51 a • É ainda também importante atentarmos na diferença
12 MHz, quantas operações de deslocamento entre o tempo de t – Momento em que é efectuada a 1
leitura de CLK (jnb p0.0)
ocorreriam se não tivéssemos aquele cuidado? propagação de um t – Momento em que é efectuada a 2

inicio clr a 1 µs (1 ciclo máquina @ 12 MHz) circuito com FF-D e a leitura de IN (mov c,p0.1)

marca1
mov
jnb
p1,a
p0.0,marca1
1 µs (1 ciclo máquina @ 12 MHz)
2 µs (2 ciclo máquina @ 12 MHz) simulação via 87C51: IN (P0.1)
1 µs (1 ciclo máquina @ 12 MHz) 2 µs
• Poderão daqui advir
mov c,p0.1
rlc a 1 µs (1 ciclo máquina @ 12 MHz)
1 µs (1 ciclo máquina @ 12 MHz) CLK (P0.0)
problemas (funciona-
mov p1,a
marca2 jb p0.0,marca2 2 µs (2 ciclo máquina @ 12 MHz)
sjmp marca1 2 µs (2 ciclos máquina @ 12 MHz)
mento incorrecto)? OUT[0] (P1.0)
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 59 A família 80C51 - 60
Expansão da Expansão da
funcionalidade funcionalidade (cont.)
• Suportar uma entrada Habilita (em P0.2): • Suportar entradas de Habilita (P0.2) e Sentido (P0.3):
.org 0 .org 0
#include def8752.asm #include def8752.asm

inicio clr a inicio clr a


mov p1,a ; coloca OUT[0..7] em 0 mov p1,a ; coloca OUT[0..7] em 0
marca1 jnb p0.0,marca1 ; espera que CLK suba marca1 jnb p0.0,marca1 ; espera que CLK suba
mov c,p0.1 ; coloca IN no Carry mov c,p0.1 ; coloca IN no Carry
jnb p0.2,marca2 ; Habilita activo? jnb p0.2,marca2 ; Habilita activo?
rlc a ; realiza o deslocamento jnb p0.3,dir ; Sentido para a direita?
mov p1,a ; actualiza as saidas esq rlc a ; deslocamento para a esquerda
marca2 jb p0.0,marca2 ; espera que o CLK desca sjmp actual
sjmp marca1 dir rrc a ; deslocamento para a direita
actual mov p1,a ; actualiza as saidas

“.org...”? “#include...”?
.end marca2 jb p0.0,marca2 ; espera que o CLK desca
sjmp marca1

.end
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 61 A família 80C51 - 62

Avaliação do resultado As interrupções revisitadas


• Comparando as duas alternativas (FF-D e 87C51) /INT0 0
IE0
para a implementação do exemplo considerado, que 1
IT0

conclusões podemos tirar relativamente a: TF0

– Tempo de desenvolvimento?
Fontes de
– Flexibilidade da implementação? /INT1 0

IT1
IE1
interrupção

1
– Rapidez de funcionamento? IE0 e IE1 são flags de interrupção
que pertencem ao registo TCON
TF1
• Como é que a resposta às questões anteriores é (SFR com endereço 88H)

TI
afectada pela complexidade do caso em estudo? RI

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 63 A família 80C51 - 64
/INT0 0
IE0
IT0

Gestão das interrupções Interrupções externas


1

TF0

/INT1 0
IE1
IT1
1

TF1

TI
RI

• O código executado pelo microcontrolador pode • /INT0 e /INT1 podem ser activos ao nível ou à
activar / desactivar (set / cleared) todas as flags de transição, de acordo com o conteúdo do registo
interrupção TCON (SFR com endereço 88H)
• Cada fonte de interrupção pode ser habilitada / • Se as interrupções forem activas à transição, as flags
inibida individualmente (registo IE nos SFR) que as geram são limpas pelo hardware quando a
• A cada fonte de interrupção pode ser atribuída uma respectiva rotina é executada (caso contrário, terá
prioridade alta ou baixa (registo IP nos SFR) que ser o código do utilizador a fazê-lo)

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 65 A família 80C51 - 66

Interrupções da
/INT0 0 /INT0 0
IE0 IE0
IT0 IT0

Interrupções dos T/C


1 1

TF0 TF0

/INT1

TF1

TI
0

1
IT1
IE1

comunicação série /INT1

TF1

TI
0

1
IT1
IE1

RI RI

• As interrupções pedidas pelos temporizadores / • Os pedidos de interrupção do periférico de


contadores são geradas por TF0 e TF1, activadas por comunicação série resultam do OR entre as flags RI
“rollover” nos registos dos respectivos T/C (excepto (recepção) e TI (transmissão)
T/C 0 em modo 3, como veremos adiante) • Nenhuma destas flags é limpa pelo hardware quando
• Quando é gerada uma interrupção proveniente dos a respectiva rotina é executada (o código da rotina
T/C, a flag que a gerou é limpa pelo hardware quando tem primeiro que identificar a causa da interrupção e
a respectiva rotina é executada depois limpar a flag)

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 67 A família 80C51 - 68
O registo IE (end. SFR A8H) O registo IP (end. SFR B8H)
– endereçável ao bit – endereçável ao bit
• Este registo permite-nos habilitar / inibir cada fonte de • Este registo permite-nos atribuir a cada fonte de
interrupção: interrupção uma prioridade alta ou baixa:
IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0 IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0

EA - - ES ET1 EX1 ET0 EX0 - - - PS PT1 PX1 PT0 PX0

– EA inibe todas as interrupções se estiver em 0; se estiver – Uma fonte de interrupção terá alta prioridade quando o
em 1, estarão habilitadas as que tiverem o seu IE.x em 1 seu bit IP.x estiver em 1 baixa quando estiver em 0
– ES: periférico série; ET1 e ET0: dos T/C; EX1 e EX0: – PS: periférico série; PT1 e PT0: dos T/C; PX1 e PX0:
externas (pinos /INT1 e /INT0) externas (pinos /INT1 e /INT0)
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 69 A família 80C51 - 70

O registo TCON (end. SFR Atendimento das


88H) – endereçável ao bit interrupções
• Para além de controlar os T/C, este registo também • Ao atender uma interrupção, o hardware do 80C51
se relaciona com as interrupções externas: determina a execução de uma instrução LCALL para
TC.7 TC.6 TC.5 TC.4 TC.3 TC.2 TC.1 TC.0 a respectiva rotina de atendimento:
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 – Endereços de atendimento: IE0 - 0003H; TF0 - 000BH;
IE1 - 0013H; TF1 - 001BH; RI ou TI - 0023H
– IEx: O hardware activa (set) esta flag à transição
descendente em /INTx e limpa-a (cleared) quando a – A flag associada à interrupção é limpa pelo hardware nuns
respectiva rotina de atendimento é executada casos, mas noutros terá que o ser pelo código
– ITx: Se estiver em 1 a interrupção em /INTx é activa à – LCALL força o PC na stack, mas quaisquer outros registos
transição descendente; caso contrário, é activa ao nível 0. (e.g. ACC, PSW, ...) terão que ser guardados pelo código
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 71 A família 80C51 - 72
Retorno das interrupções Exemplo (KEIL):
Interrupções via /INT0
; código para ilustrar o atendimento de interrupções
• A execução da rotina de atendimento continua até ; externas em /INT0, activas à transição
cseg at 0
que seja encontrada uma instrução RETI (return from salta:
jmp inicio
; uma vez que 0003H tem que conter o código de atendimento
interrupt): ; a /INT0, em 0000 cabe apenas uma instrução de salto
intext0:
cseg at 0003h

– RETI informa o processador que terminou o atendimento à


inc r1
reti
; o atendimento a /INT0 apenas incrementa o R1, pelo que o
interrupção e extrai da stack o endereço de retorno ; seu conteúdo nos diz quantas interrupções foram atendidas
inicio:
cseg at 0010h

– RET (retorno de subrotina) faria algo semelhante, mas


mov r1,#0
; inicializa R1 com 0
mov tcon,#01
manter-se-ia a indicação de estar em curso o atendimento mov ie,#81h
; programa o funcionamento das interrupções via /INT0
ciclo: mov a,p0
a uma interrupção (qual o problema?) add
mov
a,p1
p2,a
jmp ciclo
; está sempre a colocar em P2 o valor de P1+P0
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto
endcom Sistemas Digitais e Microcontroladores
A família 80C51 - 73 A família 80C51 - 74

Int. via /INT0: Visualização Os temporizadores /


no dScope contadores (T/C) do 80C51
• Existem dois T/C com 16 bits, podendo cada um
funcionar como temporizador (T) ou contador (C):
– Como temporizador o registo é incrementado por cada
ciclo máquina (12 ciclos de relógio)
– Como contador o registo é incrementado à descida do
sinal no pino (T0 ou T1) – sendo T0 / T1 amostrados uma
vez em cada ciclo máquina, a detecção de descida leva
24 ciclos de relógio (primeira amostra 1, segunda 0)

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 75 A família 80C51 - 76
Controlo de funcionamento T/C: Modos 0 e 1 TCON:
dos T/C (iguais nos dois T/C) TMOD:
• O controlo de cada T/C é feito através dos registos
TMOD e TCON (dois dos SFR):
– O estado (activo / parado) é controlado através do registo
TCON
– A definição da função pretendida (temporizador ou – Este modo é compatível com o temporizador
contador) é feita pelo bit C-/T em TMOD do 8048 (8 bits com pré-divisão por 32)
– Para cada T/C (seja como temporizador ou como – No modo temporizador, e com Gate em 1, podemos medir a
contador) existem quatro modos de funcionamento, largura do impulso em /INTx
definidos pelos pares de bits (M1,M0) em TMOD – O modo 1 é igual ao 0, mas agora em 16 bits
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 77 A família 80C51 - 78

T/C: Modo 2 TCON: T/C: Modo 3 TCON: TMOD:


(igual nos dois T/C) TMOD: (diferente para cada T/C)

– A contagem é em 8 bits (TL1)


– Quando se excede o limite da contagem (“overflow”) é
pedida uma interrupção e TL1 é automaticamente
recarregado com o conteúdo de TH1 (que se mantém)
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 79 A família 80C51 - 80
T/C: Modo 3 O registo TCON (end. SFR
(cont.) 88H) – endereçável ao bit
• Comentários ao modo 3: • Os bits TFx e TRx estão associados aos T/C:
– Neste modo, o T/C 1 está parado (como quando TR1=0) TC.7 TC.6 TC.5 TC.4 TC.3 TC.2 TC.1 TC.0

– TL0 e TH0 funcionam de modo independente (em 8 bits) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

– TH0 funciona como temporizador, controlado por TR1 e – TFx: Pede as interrupções do T/C x (set por hardware
pedindo interrupções via TF1 (repare-se que TR1 e TF1 quando ocorre overflow; limpa por hardware quando se
pertenciam ao T/C 1, nos outros modos de funcionamento) salta para a rotina de atendimento)
– Nota: O T/C 1 pode ainda ser usado (retirando-o do modo – TRx: controlo de estado (activo / parado) do T/C x
3), mas sem poder controlar TF1 (controlado por software para activar / parar o T/C x)
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 81 A família 80C51 - 82

O registo TMOD (end. SFR Exemplo (KEIL):


89H) – endereçável ao bit Funcionamento do T/C 1
; exemplo para ilustrar o funcionamento dos T/C com interrupções

• Existem quatro bits por cada T/C: ; T/C 1 funciona como contador de 8 bits com auto-reload
; deve complementar-se P1.0 quando forem contados três impulsos exteriores
cseg at 0
TM.7 TM.6 TM.5 TM.4 TM.3 TM.2 TM.1 TM.0
inicio:
mov tmod,#60H ; contador, modo 2 (quando TR1=1 e T1 desce)
Gate C-/T M1 M0 Gate C-/T M1 M0 mov ie,#88H ; permite interrupções do T/C 1
mov tl1,#0fdh ; para contar apenas três vezes
mov th1,#0fdh ; para recarregar o TL1
setb tr1 ; permite início da contagem
– Gate: Em conjunto com TRx, controla o estado (activo / jmp $ ; apenas para ficar aqui parado

parado) do C/T (ver esquemas que descrevem os modos cseg at 001bh

de funcionamento) tc1int:
cpl
reti
p1.0
; complementa o bit P1.0

– C-/T: Define a função (0: temporizador; 1: contador) end

– M1,M0: Definem o modo de funcionamento (0 a 3)


Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 83 A família 80C51 - 84
T/C 1: Visualização no A porta de comunicação
dScope série no 80C51
• Pode transmitir e receber em simultâneo (é do tipo
“full duplex”)
• Os registos de recepção e transmissão são ambos
acedidos através do SBUF (SFR c/ end. 99H):
– A escrita no SBUF carrega o registo de transmissão
– A leitura do SBUF acede ao registo de recepção
(fisicamente diferente)
• A porta série tem quatro modos de funcionamento
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 85 A família 80C51 - 86

Porta série: Modos de Porta série: Modos de


funcionamento 0 e 1 funcionamento 2 e 3
• Modo 0 - Transmissão em 8 bits (LSB primeiro), com • Modo 2 - Transmissão em 11 bits: Start bit (0), bits de
taxa de transmissão (baud rate) de 1/12 da dados (LSB primeiro), um nono bit programável (e.g.
frequência de relógio. Os dados entram e saem via o bit de paridade no registo PSW) e um Stop bit (1). O
RxD, estando o relógio de transmissão em TxD. baud rate pode ser 1/32 ou 1/64 da frequência do
• Modo 1 - Transmissão em 10 bits: Start bit (0), bits de relógio. Envio por TxD e recepção por RxD.
dados (LSB primeiro) e um Stop bit (1), com baud • Modo 3 - Como no modo 2, mas agora com baud rate
rate variável. Envio por TxD e recepção por RxD. variável.

Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 87 A família 80C51 - 88
Taxas de transmissão Uso do T/C 1 para
(baud rate) determinar o baud rate
• No modo 0, o baud rate é fixo e igual a 1/12 da • Nos modos 1 e 3 o baud rate é determinado pela
frequência de relógio seguinte expressão:
• No modo 2, o baud rate depende do bit SMOD no (2SMOD / 32) x (ritmo de overflow do T/C 1)
registo PCON (SFR c/ end. 87H), sendo dado por – As interrupções através deste T/C devem estar inibidas
(2SMOD / 64) x (frequência) (1/64 ou 1/32, portanto) – O T/C 1 pode funcionar como temporizador ou como
• Nos modos 1 e 3, o baud rate é variável e contador, em qualquer modo de funcionamento, excepto o
determinado pelo T/C 1 (e também depende do bit modo 3 (recorde-se que neste modo o T/C 1 está parado)
SMOD)
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 89 A família 80C51 - 90

Geração do baud rate via O registo SCON (end. SFR


T/C 1: Forma habitual 98H) – endereçável ao bit
• No caso mais comum, o T/C é usado no seu modo 2 • Bits SM0, SM1 e SM2:
(modo 2 do T/C 1)
(como temporizador com auto-reload) SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0

• O baud rate da porta série, nos seus modos 1 e 3, é


SM0 SM1 SM2 REN TB8 RB8 TI RI

(modos 1 e 3 da porta série)


então dado por – SM0 e SM1: Definem o modo de funcionamento (0 a 3).
(2SMOD / 32) x (frequência / (12 x (256-(TH1)))) – SM2: Habilita a capacidade de comunicação em sistemas
– (TH1): Conteúdo do T/C 1, oito bits mais significativos do tipo multiprocessador, nos modos 2 e 3. Neste caso, o
– Para uma frequência de 11,0592 MHz, quais os valores de nono bit em 1 dá origem a um pedido de interrupção, para
SMOD e (TH1), para resultar um baud rate de 19.200 bps? indicar que chegou um endereço de nó.
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 91 A família 80C51 - 92
SCON (end. SFR 98H) – SCON (end. SFR 98H) –
endereçável ao bit (2) endereçável ao bit (3)
• Bits REN, TB8 e RB8: • Bits TI e RI:
SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0 SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0

SM0 SM1 SM2 REN TB8 RB8 TI RI SM0 SM1 SM2 REN TB8 RB8 TI RI

– REN: Controlado por software para permitir (1) ou inibir (0) – TI: Flag de interrupção por envio. Activada por hardware
a recepção. no final do oitavo bit em modo 0, ou no início do Stop bit
– TB8: Nono bit a transmitir nos modos 2 e 3 (controlado por nos restantes modos. Deve ser limpa por software.
software). – RI: Flag de interrupção por recepção. Activada por
– RB8: Nos modos 2 e 3, é o nono bit recebido. No modo 1, hardware no final do oitavo bit em modo 0, ou a meio do
se SM2=0, é o stop bit recebido. No modo 0, não é usado. Stop bit nos restantes modos. Deve ser limpa por software.
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 93 A família 80C51 - 94

Exemplo (KEIL): Escreve Porta série: Visualização no


em P1 o byte recebido dScope
; segmento de código para ilustrar a recepção série no 80C51
; cada byte recebido é escrito na porta 1
cseg at 0
salta:
jmp inicio
cseg at 0023h
int_psr:
clr ri
; limpa a flag que indica interrupção por recepção
mov p1,sbuf
; copia para a porta 1 o byte que acabou de chegar
reti
cseg at 0030h
inicio:
mov scon,#70h
; porta série em modo 1 (SM0,SM1)=(0,1), recepção habilitada (REN=1)
; activa RI quando lê o Stop bit (SM2=1)
mov tmod,#20h
; T/C 1 como temporizador (C/T=0) em modo 2 (M1,M0)=(1,0)
mov tl1,#0fdh
mov th1,#0fdh
; com SMOD em 0 por omissão, resulta um baud rate de 9.600 bps
mov ie,#90h
; habilita apenas as interrupções da porta série
setb tr1
; activa o funcionamento do T/C 1
jmp $
Introdução ao Projecto
endcom Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 95 A família 80C51 - 96
Outro exemplo: Recepção Conclusão
de uma tabela de valores
• Requisitos: • Objectivo principal do capítulo: Apresentar a
– Armazena os bytes recebidos em MD interna, a começar arquitectura em que se baseia a família de
em 30H microcontroladores 80C51
– Termina quando receber a sequência ASCII “FIM”: 46H- • Pistas para a continuação do estudo:
49H-4DH (nesse caso, reinicializa o apontador para 30H)
– Evolução da arquitectura 80C51 (e.g. arquitectura XA)
– Baud rate de 19.200 bps (gerados pelo T/C 1), palavras
– Outros microcontroladores (e.g. Motorola 68HCXX e
de 10 bits (start bit, dados, stop bit)
Microchip PIC)
– Considere-se o funcionamento a 11,0592 MHz
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução ao Projecto com Sistemas Digitais e Microcontroladores
A família 80C51 - 97 A família 80C51 - 98

Você também pode gostar