Você está na página 1de 34

DEPARTAMENTO DE ELECTROTECNIA

Sistemas Digitais

µControladores da Família 51

João Paulo Baptista


Índice

1 Família de Micro Controladores 8051________________________________________________ 1


2 Arquitectura Base________________________________________________________________ 1
3 ‘PinOut’ do µControlador _________________________________________________________ 2
4 Sistema de Memória ______________________________________________________________ 2
4.1 Memória de Programa _______________________________________________________ 3
4.2 Memória de Dados___________________________________________________________ 4
4.2.1 Memória de Dados Interna _________________________________________________ 4
4.2.2 Memória de dados externa__________________________________________________ 7
4.3 Multiplexagem de Barramentos________________________________________________ 8
5 Portos de Entrada / Saída de Dados _________________________________________________ 9
5.1 Porto 0 ___________________________________________________________________ 10
5.2 Porto 1 ___________________________________________________________________ 10
5.3 Porto 2 ___________________________________________________________________ 11
5.4 Porto 3 ___________________________________________________________________ 11
6 Temporizadores / Contadores______________________________________________________ 12
6.1 Registo TMOD_____________________________________________________________ 12
6.2 Registo TCON _____________________________________________________________ 13
6.3 Funcionamento dos Temporizadores / Contadores _______________________________ 13
6.3.1 Modo 0 _______________________________________________________________ 13
6.3.2 Modo 1 _______________________________________________________________ 14
6.3.3 Modo 2 _______________________________________________________________ 14
6.3.4 Modo 3 _______________________________________________________________ 15
7 Porto Série ____________________________________________________________________ 15
7.1 Funcionamento em transmissão de dados_______________________________________ 16
7.2 Funcionamento em recepção de dados _________________________________________ 16
7.3 Registo de Controlo do Porto Série ____________________________________________ 17
7.4 Funcionamento em MODO 0 _________________________________________________ 18
7.5 Funcionamento em MODO 1 _________________________________________________ 18
7.6 Funcionamento em MODO 2 _________________________________________________ 19
7.7 Funcionamento em MODO 3 _________________________________________________ 19
7.8 Comunicações em Rede de µCs _______________________________________________ 19
8 Sistema de Interrupções __________________________________________________________ 21
8.1 Registo de Permissão das Interrupções _________________________________________ 22
8.2 Prioridade das Interrupções__________________________________________________ 22

ii
A1 Conjunto de Instruções do 8051 ___________________________________________________I
A1.1 Endereçamento de Operandos ________________________________________________I
A1.1.1 Endereçamento por Registo__________________________________________________ I
A1.1.2 Endereçamento directo _____________________________________________________ I
A1.1.3 Endereçamento Indirecto por Registo _________________________________________ II
A1.1.4 Endereçamento Imediato ___________________________________________________ II
A1.1.5 Endereçamento Indirecto por Registo Base + Registo Índex _______________________ II
A2 Tabelas de Instruções __________________________________________________________ III

Índice de figuras

Figura 1 – Diagrama de blocos dos μCs da família 51 _______________________________________ 1


Figura 2 – Duas caixas possíveis para o μC _______________________________________________ 2
Figura 3 – Memória interna de dados ____________________________________________________ 4
Figura 4 – Memória interna de dados (0 – 7F) _____________________________________________ 5
Figura 5 – Mapa de memória dos SFRs ___________________________________________________ 5
Figura 6 – Registo de Estados (PSW) _____________________________________________________ 7
Figura 7 – Escrita na memória externa de dados____________________________________________ 8
Figura 8 – Leitura da memória externa de dados____________________________________________ 8
Figura 9 – Leitura de código da memória externa de programa ________________________________ 8
Figura 10 – Interligação do 8051 com memória externa ______________________________________ 9
Figura 11 – Hardware de um bit do Porto 0_______________________________________________ 10
Figura 12 – Hardware de um bit do Porto 1_______________________________________________ 10
Figura 13 – Hardware de um bit do Porto 2_______________________________________________ 11
Figura 14 – Hardware de um bit do Porto 3_______________________________________________ 11
Figura 15 – Registo para definição do modo de funcionamento dos T/Cs ________________________ 12
Figura 16 – Registo de controlo dos T/Cs ________________________________________________ 13
Figura 17 – T/C 1 programado em Modo 0 (contador de 13 bits) ______________________________ 14
Figura 18 – T/C 1 programado em Modo 2: contador de 8 bits com auto recarga _________________ 14
Figura 19 – T/C 0 programado em Modo 3 _______________________________________________ 15
Figura 20 - Diagrama de blocos da UART ________________________________________________ 16
Figura 21 - Registo de controlo do Porto Série (SCON) _____________________________________ 17
Figura 22 - Transmissão de dados em Modo 0_____________________________________________ 18
Figura 23 - Recepção de dados em Modo 0 _______________________________________________ 18
Figura 24 - Rede de μCs master-slave ___________________________________________________ 20
Figura 25 – Sistema base de interrupções dos μCs da família 51 ______________________________ 21
Figura 26 – Registo de permissão das interrupções (IE) _____________________________________ 22
Figura 27 – Registo de prioridade das interrupções (IP)_____________________________________ 22

iii
1 Família de Micro Controladores 8051
O 8051 é um µControlador de 8 bits desenvolvido originalmente pela INTEL em 1980. Trata-se sem dúvida
do núcleo de µControlador mais popular em todo o mundo, sendo desenvolvido por um grande número de
fabricantes que lhe vão introduzindo ao longo do tempo novos melhoramentos essencialmente no que diz
respeito aos periféricos que lhe estão associados.

Um 8051 típico contém:


• CPU com processador booleano
• 6 fontes de interrupção com possibilidade de diferentes níveis de prioridade
• Temporizadores / Contadores de 16 bits
• Porto de comunicação série, com taxas de comunicação programáveis
• RAM de dados interna
• ROM / EPROM / EEPROM / FLASH interna para armazenamento de programa (não existente em
alguns modelos)

O conjunto de instruções do 8051 encontra-se optimizado para as operações ao bit permitindo uma mais fácil
implementação de software de controlo em tempo real. O processador booleano fornece suporte directo para
a manipulação de bits, conduzindo a programas mais eficientes no que toca às operações de entrada e saída de
dados tão importantes na resolução de problemas de controlo digital.

2 Arquitectura Base
A fig. 1 apresenta a arquitectura base dos µControladores da família 51.

Figura 1 – Diagrama de blocos dos μCs da família 51

• CPU – unidade de processamento central.


• Memória de Programa – memória interna destinada a armazenar o código correspondente ao
programa a executar pelo µC. Esta memória pode não existir em alguns modelos de µC.
• Memória de Dados – memória interna destinada ao armazenamento de dados.

1
• Controlo de Interrupções – permite a detecção e consequente processamento de um conjunto de
sinais de interrupção externos e internos.
• Timer 0 e Timer 1 – temporizadores / contadores de 16 bits que podem ser activados a partir do
exterior.
• Porto Série – dispositivo implementado por uma UART (Universal Assynchronous Receiver
Transmiter) permitindo efectuar comunicações série com o exterior.
• Portos de I/O – conjunto de 4 portos paralelos para o interface com o exterior. Dois destes portos
podem ser usados para implementar barramentos de acesso a dispositivos de memória exteriores.
• Controlo do Barramento – quando é utilizada memória externa ao mC, este bloco contém o
hardware necessário para o controlo das transferências de informação.
• Oscilador – permite gerar os sinais de relógio necessários ao funcionamento do µC.

3 ‘PinOut’ do µControlador
Na fig. 2 mostram-se duas caixas possíveis para este µC.

Figura 2 – Duas caixas possíveis para o μC

4 Sistema de Memória
Como já foi referido no parágrafo 2, os diferentes elementos da família 51 dispõe de memória interna de
dados e, na maior parte das vezes, de memória interna de programa. Alguns exemplos de µCs desta família:

2
Mem. Programa Mem. Programa Mem. de Dados Mem. de Dados
µControlador Interna (bytes) Externa (bytes) Interna (bytes) Externa (bytes)
80C31 0 Até 64K 256 Até 64k
87C51 4K (EPROM) Até 64K 256 Até 64k
8051 4K (ROM) Até 64K 256 Até 64k
89C51 4K (Flash) Até 64K 384 Até 64k
89C51RD2 64K (Flash) Até 64K 384 Até 64k
89C2051 2K (Flash) 0 256 0

Tabela 1

De notar que nestes µCs, o espaço de endereçamento da memória de programa é totalmente distinto do
espaço de endereçamento da memória de dados, o que permite, com um barramento de endereços de 16 bits,
obter 64K bytes de programa mais 64K bytes de dados. Comparando com o Z80, em que estes dois espaços
de endereçamento se sobrepõe (64K programa + dados), este µC consegue endereçar o dobro de memória.

A razão de ser deste aumento do espaço de endereçamento tem a ver com o barramento de controlo do 8051.
No processador Z80, conforme foi estudado anteriormente, o barramento de controlo para o acesso às
memórias dispõe unicamente de um sinal de escrita (WR) e de um de leitura (RD). Estes sinais são utilizados
quer se esteja a fazer um acesso à memória de programa quer se esteja a aceder à memória de dados. No caso
dos µCs 51, existe uma distinção entre o barramento de controlo para a memória de programa (PSEN) e o
barramento de controlo para a memória de dados (WR e RD). Este duplo barramento aliado à existência de
instruções específicas para acesso a cada uma daquelas zonas de memória, permite a duplicação da capacidade
de endereçamento nestes µControladores.

4.1 Memória de Programa


Os µCs da família 51 têm capacidade para endereçar um total de 64K bytes de memória de programa. Esta
memória pode estar fisicamente situada
• no interior do µC
• no interior e no exterior do µC
• no exterior do µC

Como foi referido na Tabela 1, a quantidade de memória de programa existente no interior do µC depende do
modelo que se está a utilizar. Normalmente este valor pode variar entre 0 (p. ex. 8031) e 64K bytes (p. ex.
T89C51RD2).

Quando é utilizada memória externa de programa ou de dados, a comunicação com os dispositivos de


memória é feita à custa de 3 barramentos:

• Barramento de Endereços, com 16 bits, implementado fisicamente a partir dos Portos 0 e 2 do µC.
• Barramento de Dados, com 8 bits, implementado fisicamente a partir do Porto 0 do µC.
• Barramento de Controlo que é constituído pelos sinais PSEN (pino 29) e ALE (pino 30). O PSEN
é o sinal de leitura da memória de programa. A função do ALE será analisada num parágrafo
posterior.

3
Como se pode ver, os barramentos de endereços e de dados partilham um porto do 51 – Porto 0. Este
processo de partilha será analisado mais à frente no parágrafo que diz respeito à Multiplexagem de
Barramentos.

Ainda em relação ao acesso à memória de programa, o sinal EA (pino 31) permite-nos indicar ao µC se a
memória de programa está no seu interior ou no seu exterior. Assim, se EA estiver ligado a VCC (nível lógico
1) o µC faz a pesquisa das instruções de programa a partir da sua memória interna de programa. Se EA estiver
ligado ao nível lógico 0 (VSS), a pesquisa é feita da memória externa de programa, através dos barramentos
descritos anteriormente.

De notar que, mesmo que exista uma certa quantidade de memória interna de programa, é sempre possível
fazer a sua expansão até 64K utilizando memória externa. Neste caso EA deverá ser colocado a 1 para
permitir aceder à memória interna. O µC é capaz de detectar quando é feito um acesso a um endereço da
memória externa, colocando automaticamente em funcionamento os barramento para que a instrução possa
ser pesquisada do exterior.

Como se pode ver na Tabela 1, há alguns µCs desta família que não permitem a expansão de memória. É o
caso do 89C2051 que dispõe internamente de 2K bytes de memória de programa mas que, devido à sua
construção, não apresenta os Portos 0 e 2, impossibilitando por isso a implementação dos barramentos de
acesso ao exterior.

4.2 Memória de Dados


Relativamente à memória de dados, os µCs da família 51 dispõe de 256 (384) bytes de RAM interna,
permitindo ainda a implementação de 64K bytes no seu exterior. Em alguns elementos da família é possível
encontrar ainda 64 a 2K bytes de memória com tecnologia E2Prom para o armazenamento de dados que
necessitam de retenção em caso de falha de alimentação.

4.2.1 Memória de Dados Interna


Como se mostra na fig. 3, a memória interna de dados é
constituída por 2 ou 3 espaços de endereçamento. A existência
do 3º espaço de endereçamento, que aparece a tracejado na
figura, depende do modelo do µC.

O primeiro espaço é constituído por 128 bytes (endereços 0 a


127) e destina-se ao armazenamento de operandos necessários
ao processo computacional. Cada uma das posições de
memória pode ser endereçada directa ou indirectamente, isto
é, a operação de leitura ou escrita pode ser feita especificando
o endereço ao qual se vai aceder ou especificando um registo
no qual existe o endereço que vai ser acedido.

Os 128 bytes mais altos do espaço de endereçamento são, em


alguns modelos de µCs, partilhados por 2 blocos de memória. Figura 3 – Memória interna de dados
A única diferença existente entre estes 2 blocos tem a ver com
o processo de endereçamento. Num deles, que existe em todos
os µCs e que contém os registos de função especial (SFRs), o acesso é feito utilizando endereçamento directo.
O outro bloco, cujas posições se destinam a uso genérico, só pode ser acedido utilizando endereçamento
indirecto.

4
Os 128 bytes mais baixos da memória interna de dados do 8051 estão representados na fig. 4.

• Bancos de registos: as primeiras 32


posições de memória estão organizadas em 4
bancos de registos, cada um deles com 8
registos (R0, R1, ..., R7). A selecção de cada
um destes bancos é feita a partir dos bits RS0
e RS1 do registo PSW.

• Zona endereçável ao bit: as 16 posições de


memória seguintes, endereços 20h a 2Fh,
podem ser endereçadas ao bit. Os endereços
de bit utilizados no endereçamento podem
variar entre 0 e 127 (0 é o bit menos
significativo da posição de memória 20h e
127 o bit mais significativo da posição de
memória 2Fh).

• Início da stack: quando é feito o reset do µC, Figura 4 – Memória interna de dados (0 – 7F)
o ponteiro da stack é inicializado com o valor
07h. Isto quer dizer que a estrutura de stack irá crescer a partir desta posição de memória o que
obriga, se não quisermos alterar o seu início, a ter certos cuidados na declaração das variáveis a utilizar
no programa.

Na zona superior da memória interna de dados encontram-se os registos de função especial – SFRs. Estas
posições de memória, que podem ser acedidas unicamente por endereçamento directo, estão ligadas ao
hardware do µC. Na figura seguinte pode ser visto o conjunto base de SFRs.

Figura 5 – Mapa de memória dos SFRs

5
De notar que nesta zona de memória só os endereços correspondentes aos SFRs se encontram descodificados
pelo que não deve ser tentado qualquer acesso às restantes posições de memória.

Ainda nesta zona de memória, todos os SFRs cujo endereço termine em 0 ou 8 podem ser acedidos ao bit.

Os diferentes registos de função especial podem ser agrupados de acordo com as suas funcionalidades:

Registos Aritméticos
o Registo B B
o Acumulador ACC
o Registo de Estados PSW

Ponteiros
o Ponteiro da Stack SP
o Ponteiro de Dados DPH (8 bits + significativos)
DPL (8 bits - significativos)

Portos Paralelos de E/S de Dados


o Porto 0 P0
o Porto 1 P1
o Porto 2 P2
o Porto 3 P3

Sistema de Interrupções
o Controlo de Prioridade IP
o Enable de Interrupções IE

Temporizadores / Contadores
o Modo de funcionamento TMOD
o Controlo TCON
o Timer 0 TH0 (8 bits + significativos)
TL0 (8 bits - significativos)
o Timer 1 TH1 (8 bits + significativos)
TL1 (8 bits - significativos)

Porto Série
o Controlo da Com. Série SCON
o Buffer da Com. Série SBUF

Outras Funções
o Controlo de Potência PCON

Acumulador - Registo ligado à ALU do µC. Embora o nome deste registo seja ACC, as mnemónicas das
instruções que o usam especificamente referem-se ao acumulador como A.

Registo B - Este registo é usado especialmente nas operações de multiplicação e divisão. Fora destas
operações pode ser utilizado como um registo de uso normal.

6
Registo de Estados – o registo PSW contém informações sobre o estado do programa. A sua constituição
encontra-se na figura seguinte.

Bit Símbolo Função


PSW.7 CY Flag de Carry
PSW.6 AC Flag de Carry auxiliar (para operações em BCD)
PSW.5 F0 Flag de uso geral
PSW.4 RS1 Bits de selecção do banco de registos da memória
PSW.3 RS0 interna de dados
PSW.2 OV Flag de overflow
PSW.1 Flag definida pelo utilizador
PSW.0 P Flag de paridade par do Acumulador

Figura 6 – Registo de Estados (PSW)

Ponteiro da Stack – trata-se de um registo de 8 bits cujo em cada instante contém o endereço do topo da
estrutura de stack. Este ponteiro é incrementado antes de os dados serem guardados durante a execução de
instruções de PUSH e CALL, e decrementado depois da recuperação dos dados durante a execução de
instruções de POP e RETURN.

Ponteiro de Dados – o ponteiro DPTR é constituído por um byte mais significativo DPH e um byte menos
significativo DPL. Este registo destina-se a conter um endereço de 16 bits para acesso indirecto às memórias
de programa e de dados.

Portos 0 a 3 – portos de entrada / saída de dados, num total de 32 bits programáveis individualmente como
entrada ou saída de dados.

Buffer de Comunicação Série – registo SBUF, composto por 2 registos separados que constituem o buffer
de transmissão e o buffer de recepção, permitindo uma comunicação em full-duplex.

Temporizadores / Contadores – pares de registos (TH0, TL0) e (TH1, TL1) que constituem os dois
temporizadores / contadores de 16 bits disponíveis no µC.

Registos de Controlo – os registos de função especial IP, IE, TMOD, TCON, SCON e PCON contém bits
de controlo e de estados para o sistema de interrupções, temporizadores / contadores e porto série.

4.2.2 Memória de dados externa


Em aplicações onde seja necessário utilizar uma quantidade de memória de dados superior à existente no
interior do µC, é sempre possível adicionar memória externa de dados até um máximo de 64 Kbytes. No
parágrafo seguinte será explicada a interligação entre diferentes tipos de memória externa e o 8051.

7
4.3 Multiplexagem de Barramentos
Como foi visto no parágrafo anterior, nos µCs da família 51 que dispõe de barramentos para acesso a
memória externa, o barramento de dados é partilhado com os 8 bits menos significativos do barramento de
endereços através de um processo que se designa por multiplexagem de barramentos. Esta multiplexagem no
tempo permite que, durante uma primeira fase do acesso ao exterior, o Porto 0 contenha os 8 bits menos
significativos do endereço e, numa segunda fase, o barramento é comutado para conter os dados que vão ser
transferidos (lidos ou escritos). Este processo pode ser analisado na fig. 7 na qual se mostra a evolução dos
barramentos e sinais de controlo numa operação de escrita na memória externa de dados.

Figura 7 – Escrita na memória externa de dados

No início do processo de escrita, os Portos P0 e P2 contem o endereço da posição de memória a aceder. O


sinal de controlo ALE (Address Latch Enable) é activado para sinalizar que no porto 0 se encontram os 8 bits
menos significativos do endereço. De seguida o conteúdo de P0 é comutado passando a conter os dados a
serem escritos. Nesta altura é activado o sinal WR que vai efectuar a escrita daqueles dados no dispositivo de
memória.

Nas figuras 8 e 9 pode ser vista a evolução dos barramentos e sinais de controlo em operações de leitura da
memória externa de dados e de leitura de código da memória externa de programa.

Figura 8 – Leitura da memória externa de dados

Figura 9 – Leitura de código da memória externa de programa

8
Como já é sabido, para que possa ser feita uma operação de leitura ou escrita num dispositivo de memória, é
necessário que o barramento de endereços permaneça estável durante todo o processo. Analisando os casos
anteriores, podemos verificar que os 8 bits menos significativos daquele barramento são retirados do porto 0
para dar lugar aos dados. É então necessário adicionar algum hardware externo para que possa ser feira a
memorização de A0..7. Isto é feito com o circuito que se apresenta na figura 10 onde pode ser vista a
utilização de uma latch (p. ex. 74HCT573) que permite a memorização dos 8 bits menos significativos do
endereço sempre que é activado o sinal ALE.

Figura 10 – Interligação do 8051 com memória externa

Embora estes µCs disponham de um barramento externo de endereços de 16 bits, a existência de diferentes
barramentos de controlo para memória de programa (PSEN) e memória de dados (RD, WR) permite o
endereçamento de um total 128K bytes (64K de programa + 64K de dados). A activação de cada um destes
barramentos tem a ver com a execução de instruções próprias para cada um dos acessos. Assim, por exemplo,
a instrução MOVC acede à memória de programa enquanto que a instrução MOVX permite aceder à
memória externa de dados.

5 Portos de Entrada / Saída de Dados


O µC8051 disponibiliza 4 portos de E/S de 8 bits cada, num total de 32 bits programáveis individualmente
como entrada ou saída. Cada um destes bits é constituído por um FF D, um driver de saída e um buffer de
entrada. O acesso a estes portos é feito através dos SFRs P0 a P3.

Os drivers de saída dos portos 0 e 2 e o buffer de entrada do porto 0 podem ser utilizados no acesso à
memória externa utilizando o processo de multiplexagem de barramentos analisado no parágrafo anterior.

Os 8 bits que fazem parte do porto 3 disponibilizam, para além da normal E/S de dados, uma segunda
função:

P3.0 RxD (linha de recepção de dados do porto série)


P3.1 TxD (linha de transmissão de dados do porto série)
P3.2 INT0 (entrada de interrupção externa)
P3.3 INT1 (entrada de interrupção externa)
P3.4 T0 (entrada de relógio para o temporizador / contador 0)
P3.5 T1 (entrada de relógio para o temporizador / contador 1)

9
P3.6 WR (sinal de escrita na memória externa de dados)
P3.7 RD (sinal de leitura na memória externa de dados)

5.1 Porto 0
Na fig. 11 está representado o hardware
correspondente a um bit do Porto 0.
Podemos identificar a latch onde podem ser
escritos os dados a enviar para a saída, o
driver de saída e o buffer de entrada.
De notar ainda a existência de um
multiplexador que é comutado sempre que é
necessário activar o barramento externo para
operações de acesso a memória.

Em operações de barramento este porto


apresenta um driver de saída que pode ter 3
estados possíveis: 0, 1 e HiZ (alta
impedância)
Figura 11 – Hardware de um bit do Porto 0
Em operações de E/S de dados existem duas
hipóteses possíveis:

Operação de Entrada de Dados: neste caso deve ser escrito um 1 na latch do porto. Desta maneira os
fets do andar de saída são colocados no estado OFF e o porto fica em alta impedância permitindo
assim a operação de entrada de dados.
Operação de Saída de Dados: dado que o fet superior do andar de saída só entra em estado ON nas
operações de barramento, o Porto 0, como saída de dados, possui um driver em dreno aberto. Isto
obriga à utilização de resistências de pull-up no exterior para poder ser garantido o nível lógico 1.

5.2 Porto 1
A figura ao lado representa o hardware associado a um bit
do Porto 1. A sua estrutura é bastante mais simples do que
a dos restantes portos dado que este porto não possui
segundas funções. Trata-se única e exclusivamente de um
porto de E/S de dados.

Relativamente ao Porto 0, umas das diferenças tem a ver


com a constituição do driver de saída. Neste caso o fet
superior é substituído por um pull-up que apresenta uma
resistência de 20K a 40K.

Operação de Entrada de Dados: para programar o


bit do porto com entrada de dados é necessário Figura 12 – Hardware de um bit do Porto 1
escrever um 1 na latch de dados de maneira a que
o fet inferior seja colocado no estado OFF. De notar que os diferentes bits deste porto, quando
programados como entrada, não apresentam alta impedância devido à existência do pull-up interno.

10
Operação de Saída de Dados: a escrita de um 0 na latch de dados coloca em condução o fet do driver
de saída ligando à massa o pino exterior. A escrita de um 1 na mesma latch coloca o fet em estado
OFF colocando o pino do porto ligado a VDD através do pull-up interno. De notar ainda que,
quando se processa uma transição de 0 para 1 no bit de saída, o pull-up é curto circuitado durante 2
períodos de relógio de maneira a reduzir a 0 a constante de tempo de carga dos circuitos externos e
consequentemente reduzir praticamente a 0 o tempo de subida do sinal no pino do µC.

5.3 Porto 2
O hardware de um bit do Porto 2 está
representado na fig. 13.

Este porto apresenta um driver de saída


semelhante ao existente no Porto 1 e, dado
que uma das suas funções é colocar no exterior
os 8 bits mais significativos do endereço nas
operações de acesso à memória externa, possui
também um multiplexador como acontecia
com o porto 0.

Os processos ligados às operações de E/S de


dados são iguais aos descritos para o Porto 1.
Figura 13 – Hardware de um bit do Porto 2

5.4 Porto 3
O hardware que implementa os diferentes bits do Porto
3 do µC8051 é idêntico ao apresentado para os Portos
1 e 2. A diferença existente tem a ver com a
possibilidade de os bits deste Porto poderem apresentar
funções alternativas como se referiu no início do
parágrafo 5. Estes sinais, que podem estar ligados à
UART (TxD, RxD), ao sistema de interrupções (INT0,
INT1), aos temporizadores / contadores (T0, T1) e à
unidade de controlo (WR, RD), são lidos ou escritos
através das linhas que se apresentam na fig. 14.

De notar que neste porto podem coexistir, em


funcionamento normal, bits de E/S e bits com funções
especiais. Em termos de operações de E/S, o
Figura 14 – Hardware de um bit do Porto 3
funcionamento é o mesmo que foi visto para os Portos
1 e 2.

11
6 Temporizadores / Contadores
Os µCs da família 51 possuem pelo menos 2 temporizadores / contadores de 16 bits, Timer 0 e Timer 1.
podendo ser cada um deles configurado para funcionar como temporizador ou como contador de eventos. Os
registos físicos que implementam o T/C 0 (TH0 e TL0) e o T/C 1 (TH1 e Tl1) estão mapeados na zona de
memória dos SFRs.

No modo de temporizador os registos são incrementados em cada ciclo máquina através de um sinal obtido
do oscilador interno do µC e cuja frequência é fosc/12. No modo de funcionamento de contador, os registos
são incrementados no flanco descendente do sinal que é introduzido nos pinos T0 (para o T/C 0)e T1 (para o
T/C 1). Neste caso, o método de amostragem do sinal de entrada, que necessita de 2 ciclos máquina para
reconhecer uma transição de 1 para 0, limita a frequência do sinal de entrada a fosc/24.

6.1 Registo TMOD

GATE Quando este bit está igual a 1, o Timer/Counter x só funciona se o pino exterior INTx e o bit de
controlo TRx estiverem a nível lógico 1.
Quando este bit for igual a 0, o Timer/Counter x funciona se TRx=1.
C/T =1 permite o funcionamento do Timer/Counter x como contador utilizando para isso o sinal
introduzido a partir do pino exterior Tx
=0 permite o funcionamento do Timer/Counter x como temporizador utilizando para isso o sinal
resultante do oscilador interno (fosc÷12)

M1 M0 Modo de Funcionamento
0 0 T/C de 8 bits crescente com um prescaler de 5 bits (÷32)
0 1 T/C crescente de 16 bits (THx + TLx)
1 0 T/C crescente de 8 bits (TLx) com recarga (THx)
1 1 O T/C 0 funciona como 2 T/Cs independentes de 8 bits (TH0 e TL0)
Este modo de funcionamento para o T/C 1 serve unicamente para parar o seu funcionamento
Figura 15 – Registo para definição do modo de funcionamento dos T/Cs

12
6.2 Registo TCON

Bit Símbolo Função


TCON.7 TF1 Flag que sinaliza o overflow do T/C 1. Esta flag é automaticamente colocada a 0 quando o
processador entra na rotina de atendimento da interrupção. Pode também ser colocada a 0 por
software.
TCON.6 TR1 0 - T/C 1 parado 1 - T/C 1 em funcionamento
TCON.5 TF0 Flag que sinaliza o overflow do T/C 0. Esta flag é automaticamente colocada a 0 quando o
processador entra na rotina de atendimento da interrupção. Pode também ser colocada a 0 por
software.
TCON.4 TR0 0 - T/C 0 parado 1 - T/C 0 em funcionamento
TCON.3 IE1 Flag de activação da interrupção externa INT1 (activação por flanco). Esta flag é colocada a 1
quando é detectado o pedido de interrupção. O seu reset é feito por hardware quando o
processador entra na rotina de atendimento da interrupção.
TCON.2 IT1 0 – Interrupção externa INT1 activada pelo nível 0
1 – Interrupção externa INT1 activada por flanco descendente
TCON.1 IE0 Flag de activação da interrupção externa INT0 (activação por flanco). Esta flag é colocada a 1
quando é detectado o pedido de interrupção. O seu reset é feito por hardware quando o
processador entra na rotina de atendimento da interrupção.
TCON.0 IT0 0 – Interrupção externa INT0 activada pelo nível 0
1 – Interrupção externa INT0 activada por flanco descendente
Figura 16 – Registo de controlo dos T/Cs

6.3 Funcionamento dos Temporizadores / Contadores


Os 2 temporizadores / contadores, T/C 0 e T/C 1, podem funcionar quer como temporizadores quer como
contadores de eventos. Estas duas funções podem ser escolhidas, para cada um deles, através dos bits C/T do
registo de função especial TMOD.

Cada um destes T/Cs dispõe de 4 modos de funcionamento. A selecção de um modo de funcionamento é


feita através dos bits M1 e M0 do registo TMOD. Os modos de funcionamento 0, 1 e 2 são iguais para os dois
T/Cs. No modo 3 os dois T/Cs apresentam diferenças de funcionamento. Nos parágrafos seguintes são
analisados os diferentes modos.

6.3.1 Modo 0
Programando qualquer um dos T/Cs em Modo 0 permite a implementação de um contador de 8 bits com um
divisor de frequência por 32. Este modo de funcionamento é mostrado, para o T/C 1, na fig. 18.

Em Modo 0 o T/C é configurado como um registo de 13 bits em que os 8 bits mais significativos são
implementados pelo registo TH1 e os 5 bits menos significativos pelo TL1. Neste último registo os 3 bits mais
significativos não são utilizados.

Como podemos ver na figura, os impulsos de contagem podem ter origem no oscilador interno ou no pino
exterior T1 dependendo do valor do bit T/C do registo TMOD. A entrada desses impulsos no contador
depende dos valores existentes em TR1, Gate e pino exterior INT1. Assim, se Gate=0 então o ON/OFF do

13
contador é controlado exclusivamente por TR1 (0=OFF, 1=ON). Se Gate=1 então a chegada dos impulsos
de contagem ao contador depende do valor de TR1 e do valor lógico aplicado ao pino exterior INT1. Só
existe contagem de impulsos se TR1=1 e se INT1=1. Isto permite o controlo ON/OFF do contador a partir
de um sinal exterior ao µC.

Figura 17 – T/C 1 programado em Modo 0 (contador de 13 bits)

Quando se verifica o overflow do contador, é activada a flag TF1 que, como veremos mais à frente, está ligada
ao sistema de interrupções do µC.

Embora na fig. 17 esteja representado o T/C 1, tudo o que foi dito também se aplica ao T/C 0, substituindo
TL1 e TH1 por TL0 e TH0, TF1 por TF0, T1 por T0 e TR1 por TR0 e INT1 por INT0. Os bits Gate e T/C
terão que ser os correspondentes ao T/C 0 no registo TMOD.

6.3.2 Modo 1
O Modo 1 de funcionamento é igual ao Modo 0 com a única diferença de que o contador de 13 bits é
substituído por um contador de 16 bits. Neste caso todos os bits de TL1(0) estarão activos podendo então ser
efectuadas contagens entre 0000h e FFFFh. Os sinais de controlo são os mesmos apresentados no parágrafo
anterior.

6.3.3 Modo 2
O Modo 2 de funcionamento configura o T/C como um contador crescente de 8 bits (TL1) com recarga
automática, como se mostra na fig. 18.

Figura 18 – T/C 1 programado em Modo 2: contador de 8 bits com auto recarga

14
O overflow do contador TL1 não só activa a flag TF1 como também provoca a recarga de TL1 com o valor
contido em TH1. Este valor, carregado em TH1 por software, não é alterado após a operação de recarga.

Este modo de funcionamento aplica-se igualmente ao T/C 0.

6.3.4 Modo 3
A programação do T/C 1 em Modo 3 provoca simplesmente a paragem do processo de contagem.

A programação em Modo 3 do T/C 0 configura-o como 2 contadores independentes de 8 bits (TL0 e TH0)
como se mostra na fig. 19.

Figura 19 – T/C 0 programado em Modo 3

Neste modo de programação, o contador TL0 utiliza os sinais de controlo do T/C 0: C/T, Gate, INT0, TR0 e
TF0. No que diz respeito ao contador implementado por TH0, os seus sinais de controlo são os normalmente
atribuídos ao T/C 1: TR1 e TF1. Estes sinais de controlo ficam assim indisponíveis para serem utilizados pelo
T/C 1. De notar que, neste modo de programação do T/C 0, a interrupção do T/C 1 é activada pelo
overflow do contador TH0.

Este modo de funcionamento permite dotar uma aplicação com 3 temporizadores / contadores
independentes, embora fiquem diminuídas algumas funcionalidades do T/C 1. Contudo este T/C pode ser
parado não através de TR1 mas através da sua reprogramação em Modo 3, podendo ainda ser utilizado em
todas as aplicações que não necessitem de interrupções, incluindo como gerador de taxa de transmissão para a
UART como poderemos ver nos parágrafos seguintes.

7 Porto Série
O porto série que se encontra em todos os µCs da família 51 permite comunicações série síncronas e
assíncronas, utilizando para isso uma UART. No caso das comunicações assíncronas, estas podem ser feitas
em modo full-duplex. Na figura seguinte é apresentado um diagrama de blocos que descreve a UART do µC.

15
Figura 20 - Diagrama de blocos da UART

Neste diagrama de blocos podemos ver que a UART é constituída por duas zonas distintas que correspondem
à recepção de dados (à direita na figura) e à transmissão de dados (à esquerda na figura). Estas duas zonas
independentes partilham unicamente o sistema de relógio que permite gerar a taxa de transmissão. Os dois
registos SBUF, embora partilhem um endereço único na zona dos SFRs, são na realidade implementados em
hardware por registos independentes (um só de escrita e o outro só de leitura).

7.1 Funcionamento em transmissão de dados


A escrita no registo SBUF de transmissão provoca a entrada em funcionamento da metade da UART
correspondente à transmissão de dados. Logo que é detectada a escrita neste registo, o seu valor é transferido
para o shift-register de transmissão começando imediatamente o processo de transmissão série dos dados de
acordo com a programação da UART. Os diferentes bits que fazem parte da trama a
transmitir são colocados sucessivamente no pino exterior TxD a uma taxa que é definida pelo gerador de taxa
de transmissão. Como veremos a seguir esta taxa é programável.
Logo que termina a transmissão da trama em questão, é activada a flag TI que está ligada ao sistema de
interrupções do µC podendo, se autorizada, gerar uma interrupção com o consequente processo inerente a
este tipo de evento.

7.2 Funcionamento em recepção de dados


Desde que activado, o sistema de recepção de dados faz uma amostragem do pino exterior RxD a uma taxa 16
vezes superior à taxa de comunicação que foi definida. Logo que seja detectado um start bit (transição de RxD
de 1 para 0) é desencadeado todo o processo de leitura da informação que irá chegar por RxD.

• Após a detecção do flanco descendente do start bit, a UART retira 16 amostras consecutivas da linha
de recepção e, a partir das amostras 7, 8 e 9, correspondentes ao meio do bit, decide por maioria se se
trata ou não de um start bit. Este processo implementa uma detecção de falsos start bits permitindo
anular ruídos que surjam na linha, desde que estes não ultrapassem o tempo de meio bit.
• Para os restantes bits que compõe a trama, o processo é idêntico. São feitas 16 amostras do bit e a
decisão sobre a leitura de um 0 ou de um 1 é feita por maioria a partir das amostras 7, 8 e 9.

Após a determinação do valor de um novo bit, este é deslocado para dentro do shift-register de recepção.

Logo que tenha sido recebida a trama completa, se a flag RI=0, então a nova palavra é transferida para o
registo de recepção SBUF e é activada a flag RI. Esta flag, que está ligada ao sistema de interrupções do µC,

16
indica a recepção de uma nova palavra. O software implementado deve ler o registo SBUF e colocar a 0 a flag
RI.
No caso de ter sido recebida uma nova palavra e a flag RI se encontrar em 1, o conteúdo do shift-register de
recepção não é passado para o SBUF ficando a palavra recebida provisoriamente armazenada no próprio
shift-register. Logo que seja detectada a passagem de RI a 0 é feita a sua transferência para o SBUF de
recepção. Isto quer dizer que o sistema de recepção da UART tem capacidade para armazenar até 2 palavras
sem que haja leitura por parte do CPU, constituindo aquilo que normalmente se designa por um duplo buffer de
recepção.

7.3 Registo de Controlo do Porto Série

SM0 e SM1 especificam o modo de funcionamento do porto série de acordo com a seguinte tabela:

SM0 SM1 Modo Funcionamento Taxa de Comunicação


0 0 0 8 bits síncrono fosc/12
0 1 1 8 bits UART variável
1 0 2 9 bits UART fosc/64 ou fosc/32
1 1 3 9 bits UART variável

SM2 Bit de recepção condicional. Nos modos 2 e 3, se SM2=1, RI só será activada se o 9º bit recebido for igual a 1. No modo
1, se SM2=1, a flag RI só é activada se for recebido um stop bit válido.

REN Coloca em funcionamento o hardware de recepção da UART. Deve ser escrito por software um 1 para activar a unidade de
recepção da UART, deve ser escrito um 0 para a sua desactivação.

TB8 9º bit a ser transmitido nos modos 2 e 3. Colocado em 0 ou 1 por software.

RB8 9º bit recebido nos modos 2 e 3. No modo 1, se SM2=0, RB8 contém o stop bit recebido.

TI Flag de transmissão concluída. É colocada em 1 pelo hardware quando termina a transmissão do 8º bit no modo 0 ou
quando começa a transmissão do stop bit nos restantes modos de funcionamento. Deve ser colocada em 0 por software.

RI Flag de recepção completa. Colocada em 1 por hardware no final da recepção do 8 bit em modo 0 ou durante a recepção
do stop bit nos restantes modos de funcionamento. Deve ser colocada em 0 por software.

Figura 21 - Registo de controlo do Porto Série (SCON)

17
7.4 Funcionamento em MODO 0
Trata-se de um modo de comunicação síncrona em que o sinal de sincronismo é emitido pelo µC quer na
transmissão quer na recepção. Neste modo de funcionamento os dados são transmitidos ou recebidos através
de RxD e o sinal de sincronismo é emitido através de TxD.
No processo de transmissão, logo que é detectada a escrita no registo SBUF a UART começa a efectuar a
transmissão dos 8 bits (primeiro o bit –sig) de acordo com o diagrama seguinte:

Figura 22 - Transmissão de dados em Modo 0

A recepção de uma palavra é iniciada, neste modo de funcionamento, pela condição REN=1 e RI=0. Logo
que esta condição se verifique, o µC começa a emitir o sinal de sincronismo para que o hardware exterior
comece a disponibilizar os diferentes bits que compõe a palavra. Este processo encontra-se esquematizado no
diagrama seguinte:

Figura 23 - Recepção de dados em Modo 0

Trata-se de uma comunicação feita a uma taxa fixa igual a fosc/12. Isto significa que, para um µC a funcionar
com uma frequência de relógio de 12 MHz, a comunicação será efectuada a 1 Mbit/s.

Este modo de funcionamento pode ser utilizado para uma expansão dos portos do µC utilizando um processo
de conversão paralelo / série (porto de entrada) ou série / paralelo (porto de saída).

7.5 Funcionamento em MODO 1


Neste modo de funcionamento a trama transmitida ou recebida é composta por 10 bits:

Start bit + 8 bits de dados + stop bit

Como em qualquer um dos outros modos de funcionamento, a transmissão é iniciada quando é efectuada uma
operação de escrita no registo SBUF. A partir deste momento a UART começa a colocar em TxD o start bit, a
seguir os 8 bits de dados (primeiro o –sig) e finalmente o stop bit.

O processo de recepção é iniciado sempre que, na amostragem que é feita à linha RxD, é encontrado um start
bit válido (ver 7.2). Quando isto acontece, as amostragens seguintes de RxD colocam os diferentes bits da
trama no shift-register de recepção, terminando o processo com a activação da flag RI (caso se encontre em 0)
e a transferência da palavra lida para o SBUF de recepção.

A taxa de comunicação neste modo de funcionamento é conseguida através do T/C1 que deve ser
programado em modo 2 (auto-reload). O valor com que deve ser carregado o registo de recarga (TH1) é
calculado através da seguinte fórmula:

18
em que SMOD é o bit 7 do registo PCON.

Na tabela seguinte são indicadas algumas configurações possíveis para a obtenção de taxas de comunicação
normalizadas.

Timer 1
Taxa de comunicação fosc SMOD C/T Modo Valor de recarga
19200 bps 11.0592 MHz 1 0 2 FDh
9600 bps 11.0592 MHz 0 0 2 FDh
4800 bps 11.0592 MHz 0 0 2 FAh
2400 bps 11.0592 MHz 0 0 2 F4h
1200 bps 11.0592 MHz 0 0 2 E8h
Tabela 2 - Configurações para taxas de comunicação normalizadas

De notar que, tanto no modo 1 como no modo 3 de funcionamento, o T/C1 fica reservado para gerador da
taxa de comunicação, devendo ser desactivada a sua interrupção.

7.6 Funcionamento em MODO 2


Neste modo de funcionamento, a trama transmitida ou recebida é composta por 11 bits:

Start bit + 8 bits de dados + 9º bit + stop bit

O 9º bit da trama pode ser utilizado para controlo de erros de comunicação, p. ex. bit de paridade, ou para a
implementação do protocolo master-slave que será estudado num dos parágrafos seguintes.

A taxa de comunicação neste modo de funcionamento é dada por

7.7 Funcionamento em MODO 3


O modo 3 de funcionamento da UART utiliza uma trama igual à que foi descrita para o modo 2 e uma taxa de
comunicação que é obtida da maneira indicada para o modo 1.

7.8 Comunicações em Rede de µCs


Uma das maneiras mais simples de implementar uma rede de mCs é a utilização de um protocolo do tipo
Master-Slave. Neste tipo de protocolo existe uma disciplina muito rígida de acesso ao meio de comunicação o
que permite evitar colisões de informação e portanto uma grande simplificação nos processos de
comunicação.

Na figura seguinte representa-se uma rede de µCs que poderá funcionar com um protocolo deste tipo.

19
Figura 24 - Rede de μCs master-slave

Num sistema deste tipo, qualquer comunicação só pode ser feita por iniciativa do sistema master. Para isso, o
µC master começa por enviar para a rede o endereço do dispositivo slave com quem quer comunicar. Todos
os slaves, que se encontram a “ouvir” a rede, recebem este endereço e só aquele a quem o endereço diz
respeito fica autorizado a estabelecer uma troca de dados com o master, ficando os restantes à espera que seja
lançado na linha um novo endereço.

Para que seja possível distinguir uma palavra de endereço de uma palavra de dados é normal utilizar o 9º bit de
dados da trama de comunicação. Desta maneira, se o 9º bit for 1 significa que a palavra contém um endereço.
Caso contrário, 9º bit igual a 0, a palavra contém dados para a comunicação entre o master e o slave
endereçado anteriormente. Em resumo, numa troca de informação entre o master e um slave, só a primeira
palavra emitida pelo master deve conter o 9º bit a 1. Todas as restantes palavras trocadas entre os dois devem
conter esse bit a 0.

Uma maneira eficiente de funcionar dentro de uma rede deste tipo é a utilização das interrupções ligadas às
UARTs dos µCs master e slave. Quer isto dizer que cada vez que uma nova palavra é enviada para a linha, os
µCs que se encontram a “ouvir” a linha serão interrompidos. É evidente que para os slaves que não estão
endereçados, a troca de mensagens entre o master e o slave endereçado não tem qualquer tipo de interesse
pelo que todas as interrupções sofridas poderiam ser evitadas.

Os µCs da família 51 dispõe de um mecanismo específico que permite resolver este problema e melhorar
o desempenho da rede onde se encontram inseridos. Este mecanismo tem a ver com a utilização do bit SM2
existente no registo SCON. Quando a UART funciona em modo 2 ou 3 este bit, quando se encontra activado,
permite que só sejam recebidas palavras da linha série quando o 9º bit for igual a 1 e consequentemente só
será gerada uma interrupção ao CPU se isto acontecer. O processo de comunicação na rede será o seguinte:

O master quando necessita de comunicar com um slave envia o seu endereço para a linha, com o 9º
bit a 1.
Todos os slaves que devem estar à “escuta” da linha, e que tem SM2=1, são interrompidos recebendo
o endereço enviado pelo master e comparando-o com o seu próprio endereço.
O slave endereçado deve colocar o SM2=0 de maneira a conseguir receber por interrupção a restante
comunicação do master. SM2 será novamente colocado em 1 quando termina a troca de informação.
Os slaves não endereçado devem manter o SM2=1. Desta maneira a troca de informação entre o
master e o slave endereçado não provocará interrupções no funcionamento do µC. Só quando for
emitido um novo endereço para a linha, no início de uma nova comunicação, é que existirá uma nova
interrupção do slave.

20
8 Sistema de Interrupções
O sistema base de interrupções dos µCs da família 51 é constituído por 6 fontes de interrupção, duas das quais
pertencem a um mesmo periférico (UART), e encontram-se representadas na figura seguinte.

Figura 25 – Sistema base de interrupções dos μCs da família 51

Podemos ver a existência de 6 fontes de interrupção sendo as duas últimas provenientes de um mesmo
periférico que é a UART. Estas 6 fontes dão origem a 5 diferentes níveis de interrupção, correspondendo a
cada um deles um determinado vector de interrupção localizado na memória de programa.

As interrupções externas INT0 e INT1 podem ser activadas por nível ou flanco dependendo do valor dos bits
IT0 e IT1 do registo TCON. As flags que provocam a interrupção são IE0 e IE1, pertencentes também ao
registo TCON. Para o caso das interrupções externas, se estiverem activas por flanco, as flags IE0 e IE1 são
colocadas a zero pelo hardware quando é feita a chamada à rotina de serviço da interrupção. No caso de
serem activadas por nível, o sofware da rotina de serviço da interrupção é responsável pela sua colocação a
zero.

As interrupções dos T/Cs são activadas sempre que se verifique uma situação de overflow dos contadores,
através da activação das respectivas flags TF0 e TF1. Estas flag são colocadas a zero pelo hardware sempre
que é feita a chamada à rotina de interrupção.

A interrupção do porto série é gerada a partir do OU lógico das flags TI (transmissão) e RI (recepção). Dado
que qualquer uma destas flags provoca a chamada da mesma rotina de atendimento, o hardware não faz o seu
reset para permitir o reconhecimento da origem da interrupção por parte do software de serviço. Este reset
deve ser feito pelo próprio software.

Qualquer uma das flags acima descritas pode ser colocada a 0 ou 1 por software, com os mesmos resultados
que seriam gerados se fossem desactivadas ou activadas pelo hardware, isto é, podem ser geradas interrupções
por software ou podem ser canceladas interrupções pendentes.

Cada uma destas interrupções pode ser permitida ou inibida a partir do registo IE que se descreve no
parágrafo seguinte.

21
8.1 Registo de Permissão das Interrupções

Bit Símbolo Função


IE.7 EA EA=0 inibe todas as interrupções independentemente do valor que possam ter os bits de permissão
individuais.
EA=1 permite o desencadear das interrupções cujos bits de permissão individual estejam activados.
IE.6 ------- Reservado
IE.5 ------- Reservado
IE.4 ES Permite ou inibe as interrupções geradas pela UART.
IE.3 ET1 Permite ou inibe a interrupção gerada pelo overflow do T/C1.
IE.2 EX1 Permite ou inibe a interrupção gerada pela entrada externa INT1.
IE.1 ET0 Permite ou inibe a interrupção gerada pelo overflow do T/C0.
IE.0 EX0 Permite ou inibe a interrupção gerada pela entrada externa INT0.

Figura 26 – Registo de permissão das interrupções (IE)

8.2 Prioridade das Interrupções


A cada fonte de interrupção pode ser atribuído um de dois níveis de prioridade - prioridade baixa ou
prioridade alta, através do preenchimento dos respectivos bits do registo IP.

Bit Símbolo Função


IP.7 Reservado
IP.6 Reservado
IP.5 Reservado
Prioridade da interrupção gerada pela UART. PS=1 define prioridade
IP.4 PS
elevada
IP.3 ET1 Prioridade da interrupção gerada pelo T/C1. ET1=1 define prioridade
elevada
IP.2 EX1 Prioridade da interrupção gerada por INT1. EX1=1 define prioridade
elevada
IP.1 ET0 Prioridade da interrupção gerada pelo T/C0. ET0=1 define prioridade
elevada
IP.0 EX0 Prioridade da interrupção gerada por INT0. EX0=1 define prioridade
elevada
Figura 27 – Registo de prioridade das interrupções (IP)

22
A rotina de serviço de uma interrupção de baixa prioridade pode ser interrompida por uma interrupção de
mais alta prioridade, mas não por uma interrupção de baixa prioridade. Uma rotina de serviço de alta
prioridade não pode ser interrompida por qualquer outra fonte de interrupção.

Se forem recebidos simultaneamente dois pedidos de interrupção de níveis de prioridade diferente, é servido
em primeiro lugar o pedido correspondente à interrupção de mais alta prioridade, sendo o outro pedido
servido quando terminar a rotina de serviço da interrupção mais prioritária. No caso de termos pedidos
simultâneos de periféricos com o mesmo nível de prioridade, o serviço das interrupções é feito atendendo à
sequência que se apresenta a seguir:

Fonte Prioridade dentro do mesmo nível


1. IE0 Prioridade mais alta
2. TF0
3. IE1
4. TF1
5. RI + TI Prioridade mais baixa

23
ANEXO

A1 Conjunto de Instruções do 8051


As instruções assembly do 8051 devem ter o seguinte formato:

instrução [operando destino [, operando fonte]]

A1.1 Endereçamento de Operandos


Endereçamento por registo
Endereçamento directo
Endereçamento indirecto por registo
Endereçamento imediato
Endereçamento indirecto por registo base + índex

Estes cinco métodos podem ser utilizados para o endereçamento dos operandos FONTE.

Os 3 primeiros podem ser utilizados para o endereçamento dos operandos DESTINO

A1.1.1 Endereçamento por Registo


Permite o endereçamento dos 8 registos R0 .. R7 pertencentes ao actual banco de registos (definido pelo
PSW). Permite ainda aceder aos registos A, B, C (bit), AB, DPTR.

Ex:

MOV A,R2 MOV C,bit MOV DPTR,#dado(16)


MUL AB DIV AB

A1.1.2 Endereçamento directo


Permite o acesso aos SFRs, aos bits dos SFRs e da RAM interna e aos bytes da RAM interna (endereços entre
0 e 127).

Ex:

MOV A,P0 MOV A,60h CLR P0.5


MOV C,0

I
A1.1.3 Endereçamento Indirecto por Registo
Permite o acesso à RAM interna de dados através dos registos R0 e R1 do actual banco de registos. Este
acesso também pode ser feito através do SP (Stack Pointer) com as instruções PUSH e POP.

Permite ainda o acesso à RAM externa de dados, também utilizando os registos R0 e R1.

Pode ainda ser utilizado o DPTR para o acesso à totalidade dos 64K bytes de RAM externa de dados.

Ex:

MOV A,@R0 MOV @R1,A PUSH A


MOVX A,@R0 MOVX @R1,A
MOVX A,@DPTR MOVX @DPTR,A

A1.1.4 Endereçamento Imediato


O operando existe na própria instrução.

Ex:

MOV A,#26h

A1.1.5 Endereçamento Indirecto por Registo Base + Registo Índex


Utilizado para o acesso a tabelas existentes na memória de programa

Ex:

MOVC A,@A+DPTR
MOVC A,@A+PC

II
A2 Tabelas de Instruções

III
IV
V
VI