Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 1 A família 80C51 • Organização: – Microcontroladores versus microprocessadores – Os microcontroladores da família 80C51 – Interface com o exterior – Modelo de programação – Processamento dos pedidos de interrupção – Modos de endereçamento e tipos de instruções – Exemplo: Simulação de um registo de deslocamento
98
Embed
Introdução ao Projecto com Sistemas Digitais e Microcontroladores A família 80C51 - 1 A família 80C51 Organização: –Microcontroladores versus microprocessadores.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 1
A família 80C51• Organização:
– Microcontroladores versus microprocessadores– Os microcontroladores da família 80C51– Interface com o exterior– Modelo de programação– Processamento dos pedidos de interrupção– Modos de endereçamento e tipos de instruções– Exemplo: Simulação de um registo de deslocamento
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 2
Microcontroladores (Cs) e microprocessadores (Ps)• Um microcontrolador é fundamentalmente um
componente que integra os três blocos principais na arquitectura de um computador: CPU, memória e E/S
• Entre Cs e Ps existem as seguintes diferenças:– Os Cs dispõem de E/S interna de vários tipos– Os Cs podem dispor de ROM / EPROM– Os Cs são sobretudo vocacionados para tarefas de
controlo, onde 8 bits são a solução mais comum
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 3
Os Cs da família 80C51• A família 80C51 apresenta uma arquitectura interna
algo complexa, o que a poderia desaconselhar como veículo para a introdução a este domínio. Contudo:– Trata-se de componentes com grande uso na prática, para
os quais existe uma enorme variedade de aplicações de apoio ao projecto, comerciais ou do domínio público
– A complexidade não é tanto devida à arquitectura do CPU interno, mas mais pela necessidade de se multiplexarem muitos sinais em poucos pinos
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 4
80C51: Arquitectura do núcleo de base
Controlo de
interrupções 4K
ROM 128
RAM
Temporizadores / Contadores
CPU
Oscilador 4 portas de
E/S paralela Porta série
TxD RxD P0 P2 P1 P3
Interrupções externas
Entradas dos contadores Endereços / dados
Interrupções internas
Sinais de controlo
(cristal exterior)
(2 T/C de 16 bits)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 5
Variantes dentro da família 80C51• As variantes principais que estão disponíveis nesta
família têm as seguintes características principais:Função VariantesRAM 64 bytes a 1.024 bytes(EP)ROM 0 a 32 KbytesTimers / counters 1 a 3 (16 bits)E/S paralela 2 a 7 portas (8 bits)Interfaces série RS-232C, I2C, CANInterrupções externas 1 a 10Frequência de relógio 32 KHz a 40 MHzEncapsulamento 24 a 80 pinos (DIP, LCC, QFP)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 6
Organização de memória• A família 80C51 distingue entre memória de programa
(MP) e memória de dados (MD):– A MP contém o programa a executar (instruções e
operandos), enquanto a MD serve apenas para dados– Uma vez que existe apenas um barramento de endereços e
um barramento de dados, a distinção entre MP e MD é feita através do sinal de leitura (MP: /PSEN, MD: /RD)
– 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 MicrocontroladoresA família 80C51 - 7
Organização de memória (cont.)• Ainda a distinção MP / MD:
– A existência de dois tipos de memória obriga o 80C51 a ter internamente dois apontadores (PC, DP)
– A selecção do sinal de leitura apropriado (/PSEN ou /RD) é feita automaticamente pela instrução a executar
– MP e MD não são necessariamente ROM e RAM, podendo mesmo coexistir no mesmo componente de memória, e.g. uma NVRAM (de onde viria o sinal de leitura, neste caso?)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 8
Organização de memória (cont.)• Os recursos internos de MP e MD podem ser
complementados externamente:
(externa)
/EA=0(externa) 0000h
0FFFh
1000h
FFFFhh
/EA=1(interna)
(externa) FFFFh
(interna)
00h
FFh
/PSEN /WR/RD
Memória de programa (MP) Memória de dados (MD)
0000h
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 9
Organização de memória (cont.)• O 80C51 inicializa a execução do programa a partir do
endereço 0 (zero), que poderá ser de MP interna ou externa, de acordo com o estado do pino /EA:– Quando /EA=0, o 80C51 começa a execução do programa
pela MP externa– Nos casos em que existe MP interna, forçar /EA=0 significa
que esta memória não deve ser considerada (no entanto, se existir MP interna, será normalmente por aí que se iniciará a execução do programa)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 10
Organização de memória (cont.)• Alguns aspectos importantes quanto à MD:
– Os 128 endereços superiores permitem de facto aceder a 256 posições, de acordo com o modo de endereçamento (conforme seja directo ou indirecto, como veremos adiante)
– Do total de 384 posições assim existentes, 128 correspondem aos registos de funções especiais (SFR, special function registers) (por exemplo, o DP ocupa dois destes 128 SFR)
(interna)
00h
FFh
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 11
Interface com o exterior• Barramentos:
Porto 0 (ou barramento dedados e endereços — AD[0:7])
Porto 1
Porto 2 (ou barramento deendereços — A[8:15])
Porto 3 (ou os seguintes sinais:RxD, TxD, /INT0 e /INT1, T0 eT1, /WR e /RD)
XTAL1
XTAL2
RST
ALE-/PROG
VCC8
8
8
8/EA-VPP
/PSENVSS
+5 V
cristal
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 12
Interface com o exterior (cont.)• Repare-se ainda que:
– O barramento de endereços é partilhado com os portos de E/S paralela 0 e 2
– O porto 0 é também partilhado com o barramento de dados
– AD[0..7]: A multiplexagem dados / endereços (oito bits menos significativos) é feita no domínio temporal (primeiro o endereço e depois os dados)
P0 / AD[0:7]
P1
P2 / A[8:15]
P3 / …
XTAL1
XTAL2
VCC8
8
8
8
+5 V
cristal
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 13
Interface com o exterior (cont.)• Atendendo à multiplexagem temporal em AD[0..7], o
80C51 proporciona o sinal de controlo (ALE) para uma latch externa que memoriza a metade menos significativa do endereço:
AD[0:7]
A[0:7]
D[0:7]
A[8:15]
Porto 0
Porto 2
Porto 3/WR/RD
Registo
80C51 Memória
A[8:15]
ALE
8
88
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 14
Interface com o exterior (cont.)• Barramento de controlo:
– RST (reset)– /EA-VPP– /PSEN– ALE - /PROG– /INT0 e /INT1 (entradas
de interrupção)– T0 e T1
– /WR – /RD– XTAL1 e XTAL2 (pinos
do oscilador interno)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 15
Configuração de pinosP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 22
Pedidos de interrupção• A arquitectura do núcleo de base do 80C51 suporta
cinco fontes de interrupção:– Duas interrupções externas (pinos /INT0 e /INT1)– Duas interrupções provenientes dos timers– Uma interrupção proveniente do porto série
• Cada uma destas fontes pode ser habilitada ou inibida e a cada uma pode ser atribuída alta ou baixa prioridade (em ambos os casos, individualmente)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 23
Pedidos de interrupção (cont.)• Sobre a prioridade das interrupções:
– O atendimento a uma interrupção de baixa prioridade pode ser interrompido por uma interrupção de alta prioridade, mas não vice-versa (e se forem interrupções da mesma prioridade?)
– No que respeita a pedidos simultâneos, será atendido primeiro o que tiver mais alta prioridade; se forem iguais, será realizada uma sequência de pooling para determinar qual será atendido primeiro
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 24
Pedidos de interrupção (cont.)• O atendimento a um pedido de interrupção começa
com o armazenamento do valor actual do PC na stack, a que se segue uma chamada à respectiva rotina de atendimento:
Fonte de interrupção Endereço de atendimentoPino exterior External Interrupt 0 (/INT0) 0003HOverflow no timer 0 (TF0) 000BHPino exterior External Interrupt 1 (/INT1) 0013HOverflow no timer 1 (TF1) 001BHConcluiu-se uma recepção ou transmissão série (RI , TI ) 0023H
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 25
Modos de endereçamento• Será adoptada nesta apresentação a mesma
classificação e organização que são seguidas na folha de características do componente (Philips)
• Por cada modo de endereçamento, apresenta-se uma explicação sumária e alguns exemplos ilustrativos da sua utilização
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 26
Endereçamento directo• O operando é especificado através de um endereço
de oito bits que se encontra na posição de MP seguinte à que contém o código da instrução (só pode ser usado com as posições internas de RAM e com os SFR):
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 32
Ainda os modos de endereçamento• Apesar de a folha de características do 80C51 não o
referir explicitamente, este componente suporta também um modo de endereçamento a que é habitualmente dada a designação de endereçamento relativo (e.g. jb P1.2,marca)
• 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 MicrocontroladoresA família 80C51 - 33
Ainda os modos de endereçamento (cont.)• O offset é apresentado
como um byte em complemento para dois, o que permite saltos de até 127 bytes para a frente ou 128 bytes para trás:
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 34
Ainda os modos de endereçamento (cont.)• Esta solução permite poupar um byte na
especificação do endereço, sendo o valor do offset calculado pela aplicação que gera o código objecto
• Exemplo:0110000000000101
Código instr.
(60h, código de jz marca)(05h, valor do offset)
Código instr. endereço para onde sepretende saltar
0006000700080009000A000B000C000D
Endereços no exemploconsiderado:
endereço da instrução seguinte(deverá ser incrementado 5vezes para chegar ao endereçoda marca)
marca:
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 35
Tipos de instruções• O importante não é conhecer todas as instruções
(nem isso seria possível), mas sim conhecer bem as características dos seus cinco grupos principais:– Instruções aritméticas (arithmetical)– Instruções lógicas (logical)– Transferência de dados (data transfer)– Instruções Booleanas (Boolean)– Instruções de salto (jump)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 36
Instruções aritméticasMnemónica Operação Modos endereçamento Tempo de
dir. ind. reg. im. execução(s)
add a,<byte> (a) = (a)+<byte> 1addc a,<byte> (a) = (a)+<byte>+(c) 1subb a,<byte> (a) = (a)-<byte>-(c) 1inc a (a) = (a)+1 (específico do ACC) 1inc <byte> <byte> = <byte>+1 1inc dptr (dptr) = (dptr)+1 (específico do DP) 2dec a (a) = (a)-1 (específico do ACC) 1dec <byte> <byte> = <byte>-1 1mul ab (b) b.a[15:8], (a) b.a[7:0] (específico do ACC e B) 4div ab (a)=Int[a/b], (b)=Mod[a/b] (específico do ACC e B) 4da a Ajuste para decimal (específico do ACC) 1
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 37
Instruções aritméticas (cont.)• Exemplos:
Mnemónica Operação Flags Código #Byte #Maddc a,#3bh (a) (a)+(c)+#3bh c, ac, ov 34 3B 2 1mul ab b b.a[15:8],
a b.a[7:0]c=0, ov A4 1 4
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 38
Instruções lógicasMnemónica Operação Modos endereçamento Tempo de dir. ind. reg. im. execução (s) anl a,<byte> (a) = (a) <byte> 1 anl <byte>,a <byte> = <byte> (a) 1 anl <byte>,#data <byte> = <byte> #data 2 orl a,<byte> (a) = (a) <byte> 1 orl <byte>,a <byte> = <byte> (a) 1 orl <byte>,#data <byte> = <byte> #data 2 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) à
esquerda (específico do ACC) 1
rlc a Rotaciona (a) à esquerda através do c
(específico do ACC) 1
rr a Rotaciona (a) à direita (específico do ACC) 1 rrc a Rotaciona (a) à direita
através do c (específico do ACC) 1
swap a (a[3:0]) (a[7:4]) (específico do ACC) 1
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 39
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 47
Instruções de salto• Estas instruções sub-dividem-se em dois grupos
principais:– Salto não condicional– Salto condicional
• Cada um destes tipos será agora considerado individualmente
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 48
Instruções de salto não condicional
Mnemónica Operação Tempo deexecução (s)
jmp marca Salta para marca (ljmp, sjmp) 2jmp @a+dptr Salta para ((a)+(dptr)) 2call marca Chama a subrotina em marca (lcall, acall) 2ret Retorna da subrotina 2reti Retorna da interrupção 2nop Nenhuma operação (para além de (pc) (pc)+1) 1
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 49
Instruções de salto não condicional (cont.)• Exemplos:
Mnemónica Operação Flags Código #Byte #Mljmp marca (pc) marca nenhuma 02 80 00 3 2lcall marca (pc) (pc)+3;
(sp) (sp)+1;((sp)) (pc[7:0]);(sp) (sp)+1;((sp)) (pc[15:8])(pc) marca
nenhuma 12 80 00 3 2
reti (pc[15:8]) ((sp));(sp) (sp)-1;(pc[7:0]) ((sp));(sp) (sp)-1;
nenhuma 32 1 2
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 50
Instruções de salto condicional
Mnemónica Operação Modos endereçamento Tempo dedir. ind. reg. im. exec. (s)
jz marca Salta para marca se(a)=0
(específico do ACC) 1
jnz marca Salta para marca se(a)0
(específico do ACC) 1
djnz<byte>,marca Decrementa <byte> esalta para marca se<byte>0
2
cjne a,<byte>,marca Salta para marca se(a)<byte>
2
cjne <byte>,#data,marca Salta para marca se<byte>#data
2
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 51
Instruções de salto condicional (cont.)• Exemplos:
Mnemónica Operação Flags Código #Byte #Mjz marca (pc) (pc)+2;
– A relação entre as entradas (IN e CLK) e as saídas (OUT[0..7]) deverá ser tão próxima quanto possível da que teria lugar através da implementação em hardware
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 54
Sequência de passos• A sequência de passos até à solução é a seguinte:
– Efectuar a atribuição entre os sinais exteriores e os pinos de E/S paralela do microcontrolador
– Reflectir sobre a sequência de operações que implementem a funcionalidade pretendida
– Codificar esta sequência em assembly– Obter o código objecto, simular o seu funcionamento
(verificação de projecto) e implementar na prática
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 55
Atribuição de recursos• A simplicidade do exemplo considerado dispensa-nos
o uso de recursos externos a um 87C51, pelo que poderemos especificar a seguinte atribuição:– Linhas de saída OUT[0..7] do registo de deslocamento
estarão ligadas ao porto 1 (respectivamente P1[0..7])– Linhas de entrada ligadas ao porto 0 (CLK em P0.0 e IN
em P0.1)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 56
Sequência de operações a realizar• A sequência de operações a realizar pode
especificar-se como se segue:– Aguardar pela subida no sinal de relógio (CLK)– Após a subida em CLK, deslocar o conteúdo de OUT[0..7]
uma posição, no sentido de OUT[0] para OUT[7] (para a esquerda, considerando que OUT[7] está à esquerda)
– 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 MicrocontroladoresA família 80C51 - 57
Codificação em assembly0003 00000004 0000 E4 inicio clr a0005 0001 F5 90 mov p1,a ; coloca OUT[0..7] em 00006 0003 30 80 FD marca1 jnb p0.0,marca1 ; espera que CLK suba0007 0006 A2 81 mov c,p0.1 ; coloca IN no Carry0008 0008 33 rlc a ; realiza o deslocamento0009 0009 F5 90 mov p1,a ; actualiza as saidas0010 000B 20 80 FD marca2 jb p0.0,marca2 ; espera que o CLK desca0011 000E 80 F3 sjmp marca10012 00100013 0010 .end
tasm: Number of errors = 0
(analisar com pormenor; para que serve a linha 10?)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 58
Verificação de projecto• É necessário esperar pela descida do relógio (linha
10), para evitar que uma única subida em CLK provoque múltiplas operações de deslocamento (dependendo da relação entre CLK e o relógio do 87C51):
CLK
OUT[0]
Intervalo correspondente à execução das linhas0006 a 0009, após o que tem lugar aactualização das saídas P1[0..7]
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 59
Verificação de projecto (cont.)• Considerando CLK a 1 KHz e o relógio do 87C51 a
12 MHz, quantas operações de deslocamento ocorreriam se não tivéssemos aquele cuidado?
inicio clr a 1 s (1 ciclo máquina @ 12 MHz)mov p1,a 1 s (1 ciclo máquina @ 12 MHz)
marca1 jnb p0.0,marca1 2 s (2 ciclo máquina @ 12 MHz)mov c,p0.1 1 s (1 ciclo máquina @ 12 MHz)rlc a 1 s (1 ciclo máquina @ 12 MHz)mov p1,a 1 s (1 ciclo máquina @ 12 MHz)
marca2 jb p0.0,marca2 2 s (2 ciclo máquina @ 12 MHz)sjmp marca1 2 s (2 ciclos máquina @ 12 MHz)
CLK
OUT[0]
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 60
Verificação de projecto (cont.)• É ainda também importante atentarmos na diferença
CLK (P0.0)
OUT[0] (P1.0)
IN (P0.1) 2 s
t1 – Momento em que é efectuada a leitura de CLK (jnb p0.0) t2 – Momento em que é efectuada a leitura de IN (mov c,p0.1)
entre o tempo de propagação de um circuito com FF-D e a simulação via 87C51:
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 61
Expansão da funcionalidade• Suportar uma entrada Habilita (em P0.2):
.org 0#include def8752.asm
inicio clr amov p1,a ; coloca OUT[0..7] em 0
marca1 jnb p0.0,marca1 ; espera que CLK subamov c,p0.1 ; coloca IN no Carryjnb p0.2,marca2 ; Habilita activo?rlc a ; realiza o deslocamentomov p1,a ; actualiza as saidas
marca2 jb p0.0,marca2 ; espera que o CLK descasjmp marca1
.end “.org...”? “#include...”?
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 62
Expansão da funcionalidade (cont.)• Suportar entradas de Habilita (P0.2) e Sentido (P0.3):
.org 0#include def8752.asm
inicio clr amov p1,a ; coloca OUT[0..7] em 0
marca1 jnb p0.0,marca1 ; espera que CLK subamov c,p0.1 ; coloca IN no Carryjnb p0.2,marca2 ; Habilita activo?jnb p0.3,dir ; Sentido para a direita?
esq rlc a ; deslocamento para a esquerdasjmp actual
dir rrc a ; deslocamento para a direitaactual mov p1,a ; actualiza as saidasmarca2 jb p0.0,marca2 ; espera que o CLK desca
sjmp marca1
.end
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 63
Avaliação do resultado• Comparando as duas alternativas (FF-D e 87C51)
para a implementação do exemplo considerado, que conclusões podemos tirar relativamente a:– Tempo de desenvolvimento?– Flexibilidade da implementação?– Rapidez de funcionamento?
• Como é que a resposta às questões anteriores é afectada pela complexidade do caso em estudo?
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 64
As interrupções revisitadas
IT0/INT0
IE0
IT1/INT1
IE1
0
1
0
1
TF0
TF1
TIRI
Fontes deinterrupção
IE0 e IE1 são flags de interrupção que pertencem ao registo TCON (SFR com endereço 88H)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 65
Gestão das interrupções• O código executado pelo microcontrolador pode
activar / desactivar (set / cleared) todas as flags de interrupção
• Cada fonte de interrupção pode ser habilitada / inibida individualmente (registo IE nos SFR)
• A cada fonte de interrupção pode ser atribuída uma prioridade alta ou baixa (registo IP nos SFR)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 66
Interrupções externas• /INT0 e /INT1 podem ser activos ao nível ou à
transição, de acordo com o conteúdo do registo TCON (SFR com endereço 88H)
• Se as interrupções forem activas à transição, as flags que as geram são limpas pelo hardware quando a respectiva rotina é executada (caso contrário, terá que ser o código do utilizador a fazê-lo)
IT0/INT0
IE0
IT1/INT1
IE1
0
1
0
1
TF0
TF1
TIRI
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 67
Interrupções dos T/C• As interrupções pedidas pelos temporizadores /
contadores são geradas por TF0 e TF1, activadas por “rollover” nos registos dos respectivos T/C (excepto T/C 0 em modo 3, como veremos adiante)
• Quando é gerada uma interrupção proveniente dos T/C, a flag que a gerou é limpa pelo hardware quando a respectiva rotina é executada
IT0/INT0
IE0
IT1/INT1
IE1
0
1
0
1
TF0
TF1
TIRI
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 68
Interrupções da comunicação série• Os pedidos de interrupção do periférico de
comunicação série resultam do OR entre as flags RI (recepção) e TI (transmissão)
• Nenhuma destas flags é limpa pelo hardware quando a respectiva rotina é executada (o código da rotina tem primeiro que identificar a causa da interrupção e depois limpar a flag)
IT0/INT0
IE0
IT1/INT1
IE1
0
1
0
1
TF0
TF1
TIRI
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 69
O registo IE (end. SFR A8H) – endereçável ao bit• Este registo permite-nos habilitar / inibir cada fonte de
interrupção:
– EA inibe todas as interrupções se estiver em 0; se estiver em 1, estarão habilitadas as que tiverem o seu IE.x em 1
– ES: periférico série; ET1 e ET0: dos T/C; EX1 e EX0: externas (pinos /INT1 e /INT0)
ET1 EX1 ET0 EX0EA - - ES
IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 70
O registo IP (end. SFR B8H) – endereçável ao bit• Este registo permite-nos atribuir a cada fonte de
interrupção uma prioridade alta ou baixa:
– Uma fonte de interrupção terá alta prioridade quando o seu bit IP.x estiver em 1 baixa quando estiver em 0
– PS: periférico série; PT1 e PT0: dos T/C; PX1 e PX0: externas (pinos /INT1 e /INT0)
PT1 PX1 PT0 PX0- - - PS
IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 71
O registo TCON (end. SFR 88H) – endereçável ao bit• Para além de controlar os T/C, este registo também
se relaciona com as interrupções externas:
– IEx: O hardware activa (set) esta flag à transição descendente em /INTx e limpa-a (cleared) quando a respectiva rotina de atendimento é executada
– ITx: Se estiver em 1 a interrupção em /INTx é activa à transição descendente; caso contrário, é activa ao nível 0.
IT1 IE0 IT0
TC.7 TC.6 TC.5 TC.4 TC.3 TC.2 TC.1 TC.0
IE1TR0TF0TR1TF1
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 72
Atendimento das interrupções• Ao atender uma interrupção, o hardware do 80C51
determina a execução de uma instrução LCALL para a respectiva rotina de atendimento:– Endereços de atendimento: IE0 - 0003H; TF0 - 000BH;
IE1 - 0013H; TF1 - 001BH; RI ou TI - 0023H– A flag associada à interrupção é limpa pelo hardware nuns
casos, mas noutros terá que o ser pelo código– LCALL força o PC na stack, mas quaisquer outros registos
(e.g. ACC, PSW, ...) terão que ser guardados pelo código
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 73
Retorno das interrupções• A execução da rotina de atendimento continua até
que seja encontrada uma instrução RETI (return from interrupt):– RETI informa o processador que terminou o atendimento à
interrupção e extrai da stack o endereço de retorno– RET (retorno de subrotina) faria algo semelhante, mas
manter-se-ia a indicação de estar em curso o atendimento a uma interrupção (qual o problema?)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 74
Exemplo (KEIL): Interrupções via /INT0; código para ilustrar o atendimento de interrupções; externas em /INT0, activas à transição
cseg at 0salta:
jmp inicio; uma vez que 0003H tem que conter o código de atendimento; a /INT0, em 0000 cabe apenas uma instrução de salto
cseg at 0003hintext0:
inc r1reti
; o atendimento a /INT0 apenas incrementa o R1, pelo que o ; seu conteúdo nos diz quantas interrupções foram atendidas
cseg at 0010hinicio:
mov r1,#0; inicializa R1 com 0
mov tcon,#01mov ie,#81h
; programa o funcionamento das interrupções via /INT0ciclo: mov a,p0
add a,p1mov p2,ajmp ciclo
; está sempre a colocar em P2 o valor de P1+P0
end
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 75
Int. via /INT0: Visualização no dScope
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 76
Os temporizadores / 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 MicrocontroladoresA família 80C51 - 77
Controlo de funcionamento dos T/C• 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
contador) é feita pelo bit C-/T em TMOD– Para cada T/C (seja como temporizador ou como
contador) existem quatro modos de funcionamento, definidos pelos pares de bits (M1,M0) em TMOD
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 78
T/C: Modos 0 e 1(iguais nos dois T/C) TMOD:
TCON:
– Este modo é compatível com o temporizador do 8048 (8 bits com pré-divisão por 32)
– No modo temporizador, e com Gate em 1, podemos medir a largura do impulso em /INTx
– O modo 1 é igual ao 0, mas agora em 16 bits
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 79
T/C: Modo 2(igual nos dois T/C) TMOD:
TCON:
– 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 MicrocontroladoresA família 80C51 - 80
T/C: Modo 3(diferente para cada T/C)
TMOD:TCON:
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 81
T/C: Modo 3 (cont.)• Comentários ao modo 3:
– Neste modo, o T/C 1 está parado (como quando TR1=0)– TL0 e TH0 funcionam de modo independente (em 8 bits)– TH0 funciona como temporizador, controlado por TR1 e
pedindo interrupções via TF1 (repare-se que TR1 e TF1 pertenciam ao T/C 1, nos outros modos de funcionamento)
– Nota: O T/C 1 pode ainda ser usado (retirando-o do modo 3), mas sem poder controlar TF1
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 82
O registo TCON (end. SFR 88H) – endereçável ao bit• Os bits TFx e TRx estão associados aos T/C:
– TFx: Pede as interrupções do T/C x (set por hardware quando ocorre overflow; limpa por hardware quando se salta para a rotina de atendimento)
– TRx: controlo de estado (activo / parado) do T/C x (controlado por software para activar / parar o T/C x)
IT1 IE0 IT0
TC.7 TC.6 TC.5 TC.4 TC.3 TC.2 TC.1 TC.0
IE1TR0TF0TR1TF1
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 83
O registo TMOD (end. SFR 89H) – endereçável ao bit• Existem quatro bits por cada T/C:
– Gate: Em conjunto com TRx, controla o estado (activo / parado) do C/T (ver esquemas que descrevem os modos de funcionamento)
– C-/T: Define a função (0: temporizador; 1: contador)– M1,M0: Definem o modo de funcionamento (0 a 3)
C-/T M1 M0
TM.7 TM.6 TM.5 TM.4 TM.3 TM.2 TM.1 TM.0
M0M1C-/TGate Gate
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 84
Exemplo (KEIL): Funcionamento do T/C 1; exemplo para ilustrar o funcionamento dos T/C com interrupções; 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 inicio:
mov tmod,#60H ; contador, modo 2 (quando TR1=1 e T1 desce)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 TL1setb tr1 ; permite início da contagemjmp $ ; apenas para ficar aqui parado
cseg at 001bh
tc1int: ; complementa o bit P1.0cpl p1.0reti
end
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 85
T/C 1: Visualização no dScope
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 86
A porta de comunicação 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 MicrocontroladoresA família 80C51 - 87
Porta série: Modos de funcionamento 0 e 1• Modo 0 - Transmissão em 8 bits (LSB primeiro), com
taxa de transmissão (baud rate) de 1/12 da frequência de relógio. Os dados entram e saem via RxD, estando o relógio de transmissão em TxD.
• Modo 1 - Transmissão em 10 bits: Start bit (0), bits de dados (LSB primeiro) e um Stop bit (1), com baud rate variável. Envio por TxD e recepção por RxD.
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 88
Porta série: Modos de funcionamento 2 e 3• Modo 2 - Transmissão em 11 bits: Start bit (0), bits
de dados (LSB primeiro), um nono bit programável (e.g. o bit de paridade no registo PSW) e um Stop bit (1). O baud rate pode ser 1/32 ou 1/64 da frequência do relógio. Envio por TxD e recepção por RxD.
• Modo 3 - Como no modo 2, mas agora com baud rate variável.
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 89
Taxas de transmissão (baud rate)• No modo 0, o baud rate é fixo e igual a 1/12 da
frequência de relógio• No modo 2, o baud rate depende do bit SMOD no
registo PCON (SFR c/ end. 87H), sendo dado por (2SMOD / 64) x (frequência) (1/64 ou 1/32, portanto)
• Nos modos 1 e 3, o baud rate é variável e determinado pelo T/C 1 (e também depende do bit SMOD)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 90
Uso do T/C 1 para determinar o baud rate• Nos modos 1 e 3 o baud rate é determinado pela
seguinte expressão: (2SMOD / 32) x (ritmo de overflow do T/C 1)
– As interrupções através deste T/C devem estar inibidas– O T/C 1 pode funcionar como temporizador ou como
contador, em qualquer modo de funcionamento, excepto o modo 3 (recorde-se que neste modo o T/C 1 está parado)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 91
Geração do baud rate via T/C 1: Forma habitual • No caso mais comum, o T/C é usado no seu modo 2
(como temporizador com auto-reload)• O baud rate da porta série, nos seus modos 1 e 3, é
então dado por (2SMOD / 32) x (frequência / (12 x (256-(TH1))))
– (TH1): Conteúdo do T/C 1, oito bits mais significativos– Para uma frequência de 11,0592 MHz, quais os valores de
SMOD e (TH1), para resultar um baud rate de 19.200 bps?
(modo 2 do T/C 1)
(modos 1 e 3 da porta série)
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 92
O registo SCON (end. SFR 98H) – endereçável ao bit• Bits SM0, SM1 e SM2:
– SM0 e SM1: Definem o modo de funcionamento (0 a 3).– SM2: Habilita a capacidade de comunicação em sistemas
do tipo multiprocessador, nos modos 2 e 3. Neste caso, o nono bit em 1 dá origem a um pedido de interrupção, para indicar que chegou um endereço de nó.
RB8 TI RI
SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0
TB8RENSM2SM1SM0
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 93
SCON (end. SFR 98H) – endereçável ao bit (2)• Bits REN, TB8 e RB8:
– REN: Controlado por software para permitir (1) ou inibir (0) a recepção.
– TB8: Nono bit a transmitir nos modos 2 e 3 (controlado por software).
– RB8: Nos modos 2 e 3, é o nono bit recebido. No modo 1, se SM2=0, é o stop bit recebido. No modo 0, não é usado.
RB8 TI RI
SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0
TB8RENSM2SM1SM0
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 94
SCON (end. SFR 98H) – endereçável ao bit (3)• Bits TI e RI:
– TI: Flag de interrupção por envio. Activada por hardware no final do oitavo bit em modo 0, ou no início do Stop bit nos restantes modos. Deve ser limpa por software.
– RI: Flag de interrupção por recepção. Activada por hardware no final do oitavo bit em modo 0, ou a meio do Stop bit nos restantes modos. Deve ser limpa por software.
RB8 TI RI
SC.7 SC.6 SC.5 SC.4 SC.3 SC.2 SC.1 SC.0
TB8RENSM2SM1SM0
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 95
Exemplo (KEIL): Escreve em P1 o byte recebido
; segmento de código para ilustrar a recepção série no 80C51; cada byte recebido é escrito na porta 1
cseg at 0salta:
jmp iniciocseg at 0023h
int_psr:clr ri
; limpa a flag que indica interrupção por recepçãomov p1,sbuf
; copia para a porta 1 o byte que acabou de chegarreticseg 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,#0fdhmov th1,#0fdh
; com SMOD em 0 por omissão, resulta um baud rate de 9.600 bpsmov ie,#90h
; habilita apenas as interrupções da porta sériesetb tr1
; activa o funcionamento do T/C 1jmp $
end
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 96
Porta série: Visualização no dScope
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 97
Outro exemplo: Recepção de uma tabela de valores• Requisitos (assuma-se a frequência de 11,0592 MHz):
– Baud rate de 19.200 bps (gerados pelo T/C 1), palavras de 10 bits (start bit, dados, stop bit)
– Armazena os bytes recebidos em MD interna, a começar em 30H
– Termina quando receber a sequência ASCII “FIM”: 46H-49H-4DH
– Quando terminar, reinicializa apontador para a tabela e salta para 2000H
Introdução ao Projecto com Sistemas Digitais e MicrocontroladoresA família 80C51 - 98
Conclusão• Objectivo principal do capítulo: Apresentar a
arquitectura em que se baseia a família de microcontroladores 80C51
• Pistas para a continuação do estudo:– Evolução da arquitectura 80C51 (e.g. arquitectura XA)– Outros microcontroladores (e.g. Motorola 68HCXX e