Você está na página 1de 21

MicroControlador 8051

SUMÁRIO
1- Introdução
1.1- O que é um microcontrolador
1.2 - Fabricantes de Microcontroladores
1.3 – Mercado de Microcontroladores
2- SAB 8051 - Diagrama em Blocos
3- Características Gerais
4- Organização de Memória em Dispositivos SAB-51
4.1 - Separação Lógica de Memória de Programa e de Dados
4.2 - Memória de Programas
4.3 - Memória de Dados
5- O Conjunto de Instruções
5.1 - Program Status Word (PSW)
5.2 - Modos de Endereçamento
5.3 - Instruções Aritméticas
5.4 - Instruções Lógicas
5.5 - Instruções de Transferência de Dados
5.6 - Instruções Booleanas
5.7 - Instruções de Jumps
6- Ciclo de Máquina
7- Estrutura de Interrupção
7.1 - Interrupt Enable (IE)
7.2 - Prioridade de Interrupções
8- Temporizadores
9- Interface Serial
10- Principais Vantagens do Microcontrolador 8051
11- Atuais Tendências
1- Introdução

1.1- O que é um Microcontrolador?

Microcontrolador é um dispositivo utilizado para controlar e monitorar funções durante um


processo.

A partir do advento dos circuitos integrados TTL, pode-se delinear três gerações no que diz
respeito à implementação de controladores.

Na primeira geração estão os projetos envolvendo circuitos integrados TTL, na sua maioria. O
alto consumo de energia, a grande quantidade de chips envolvidos e a dificuldade em se
realizar reengenharia tornou a segunda geração atraente aos projetistas.

O advento dos microprocessadores tornou versátil o projetos de circuitos destinados ao


controle: era a segunda geração dos controladores. Boa parte das funções antes
implementadas por hardware passaram a ser implementadas por software.

A terceira geração veio para integrar em um único chip boa parte dessa estrutura.
Microcontroladores integram as funções de um microprocessador, memória de dados e de
instruções e ainda, dependendo da complexidade, portas seriais e paralelas bidirecionais,
conversores A/D, timers, watchdog e outros.

1.2- Fabricantes de Microcontroladores

 Motorola  Microchip
 Mitsubish  Matsushitta
 Siemens  Toshiba
 NEC  National Semiconductor
 Hitach  Zilog
 Philips  Texas Instruments
 Intel  Sharp

1.3- Mercado de Microcontroladores

WorldWide Microcontroller Shipments (in millions of dollars)


1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
4 – bit 1393 1597 1596 1698 1761 1826 1849 1881 1856 1816 1757
8 – bit 2077 2615 2862 3703 4689 5634 6553 7529 8423 9219 9715
16 – bit 192 303 340 484 810 1170 1628 2191 2969 3678 4405
Fonte: WSTS & ICE – 1994

WorldWide Microcontroller Shipments (in Millions)


1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
4-bit 778 906 979 1036 1063 1110 1100 1096 1064 1025 970
8-bit 588 753 843 1073 1490 1803 2123 2374 2556 2681 2700
16- 22 38 45 59 106 157 227 313 419 501 585
bit
Fonte: WSTS & ICE – 1994

Na tabela acima, podemos notar que o mercado de microcontroladores tende a aumentar,


principalmente os de 8 e 16 bits. Pode-se notar também que mais da metade dos negócios são
efetuados com microcontroladores de 8 bits.

2 - SAB 8051 - Diagrama em Blocos


3- Características Gerais
Esse trabalho focaliza o microcontrolador da Siemens Components, Inc. mas o componente é
totalmente compatível com o de outros fabricantes.

O SAB 8051 é o membro original da família SAB-51. Entre as características do SAB-8051,


estão:

 CPU de 8bits otimizada para aplicações em controle.


 Alta capacidade de processamento booleano ( manipulação de variáveis de um bit ).
 32 linhas de E/S bidirecionais e individualmente endereçáveis.
 128 bytes de RAM interna destinada a dados
 RAM de baixo consumo de energia.
 2 temporizadores/contadores de 16bits
 UART full duplex
 5 estruturas de interrupção com 2 níveis de prioridade
 Clock interno
 4 Kbytes de memória de programa interna
 64 Kbytes de memória de programa endereçáveis
 64 Kbytes de memória de dados endereçáveis
 Freqüência de clock entre 1.2 MHz e 12 MHz

O SAB 8051 é um microcontrolador de alta-performance que opera em +5V, construído sob a


alta tecnologia Siemens MYMOS (III). O SAB 8031 difere do SAB 8051 por não ter memória
ROM interna. Dessa forma, todas as instruções são buscadas na memória externa.

4- Organização de Memória em Dispositivos SAB-51

4.1- Separação Lógica de Memória de Programa e de Dados


Toda a família SAB-51 tem espaços de endereços separados para memória de
programas e de dados (configuração Harvard). Essa separação permite que a memória
de dados seja acessada por endereços de 8bits, podendo ser mais rapidamente
manipulada pela CPU de também 8bits. Não obstante, endereços de 16bits para essa
memória possam ser gerados através do registrador DPTR.
O microcontrolador pode acessar 4Kbytes de memória de programas internamente e
mais 64Kbytes externamente. O dispositivo emite o sinal PSEN ( Program Store Enable)
para ler a memória de programa externa.
Os 64Kbytes de Memória de Dados Externa são acessados pelo dispositivo através dos
sinais RD e WR. Os sinais PSEN e RD podem ser injetados na entrada de um porta AND
e a saída dessa porta utilizada como sinal de requisição de leitura a uma memória
externa de dados e programas convencional.

4.2 - Memória de Programas


Na Memória de Programas estão alocadas as posições alvos de interrupções. Em cada
uma dessas posições, deve iniciar a rotina que serve à respectiva interrupção. O
espaçamento entre essas posições fixas é de 8bytes. Na maioria das aplicações de
controle, essas rotinas cabem inteiramente nesse intervalo, de outra forma, um jump
nessas posições se faz necessário.
Os primeiros 4Kbytes da Memória de Programas podem ser endereçados interna ou
externamente. Se o pino EA (External Acces) estiver em nível alto, esses bytes são
acessados on-chip. Levando o pino EA a nível baixo, o acesso a tais bytes é feito na
memória externa.
A configuração do hardware para execução de programas externos é mostrado na Figura
1. As 16 linhas de E/S ( Portas 0 e 2) são dedicadas para desempenhar função de bus
durante buscas na Memória de Programas. A Porta 0 emite o byte menos significativo do
Contador de Programas (PCL). Nesse momento o sinal ALE funciona como clock para o
Latch armazenando o PCL. As linhas da Porta 0 entram em estado de alta impedância.
Enquanto isso, a Porta 2 emite o byte mais significativo do Contador de Programas
(PCH). O Latch e a Porta 2 formam portanto o endereço necessário ao acesso da ROM
externa. O sinal PSEN, em nível baixo, habilita a ROM à leitura. A Porta 0 entra no modo
entrada e a instrução da ROM do correspondente endereço é enviado à essa porta.
Figura 1 – Execução a partir de memória externa.

4.3- Memória de Dados


A figura 2 mostra a configuração do hardware para o acesso de 2Kbytes de RAM
externa. Neste caso a CPU está executando a partir da ROM interna. O endereço pode
ter largura 1 ou 2bytes. Quando utilizando 1byte, uma ou mais outras linhas de E/S
podem ser utilizadas, como mostrado na figura. Quando utilizando 2bytes de largura, o
byte mais significativo é enviado pela Porta2.

Figura 2 – Acesso à memória de dados externa

O mapeamento da memória interna é mostrada Figura 3. Ela é dividida em três blocos


que são referidos como Lower 128, Upper 128 e SFR. Os registradores, mapeados em
memória, ocupam os primeiros 32bytes do bloco Lower, agrupados em bancos de 8 (R0
a R7). Dois bits na Palavra de Status de Programa (PSW-Program Status Word)
seleciona um dos bancos. Isto permite maior eficiência no espaço do código, uma vez
que, instruções que referem a registradores são menores que as instruções de
endereçamento direto.
Figura 3 - Memória de dados interna
Os 16bytes acima do banco de registradores, formam o espaço de bits endereçáveis. O
conjunto de instruções do SAB-51 inclui uma grande quantidade de instruções de um
único bit, e os 128 bits dessa área podem ser acessados por essas instruções. O bloco
Lower ocupa o intervalo de endereços de 00H até 7FH e seu mapeamento é visto na
Figura 4.

Figura 4 – Região Lower 128

Todos os bytes do bloco Lower podem ser acessados direta ou indiretamente (veja
seção 5.2). O bloco Upper 128, não disponível no 8051 mas sim, no 8053B, no 80515 e
no 80C517, é acessado unicamente por endereçamento indireto.
O bloco SFR (Special Function Register), mostrado na Figura 5, inclui latches, timers,
controle de periféricos, etc. e ocupa o espaço de endereçamento 80H a FFH. Tais
registradores podem ser acessados exclusivamente por acesso direto.
Figura 5 – Região SFR ( Special Function Registers )

5- O Conjunto de Instruções
Todos os membros da família 8051 executam o mesmo conjunto de instruções classificadas
como: aritméticas, lógicas, transferência de controle, transferência de dados e booleanas.
Dispõem de uma variedade de rápidos modos de endereçamento à RAM interna, para facilitar
operações com bytes em pequenas estruturas de dados. Suporte à variáveis de um bit também
é disponível, permitindo manipulação direta em sistemas de controle e lógica que requerem
processamento booleano.
5.1- Program Status Word (PSW)
Este byte, localizado no espaço SFR, contém alguns bits de status que refletem o estado
da CPU. Mostrado na figura 6, contém flags Carry, Auxiliay Carry, Overflow, Paridade,
dois bits (RS0 e RS1) de seleção de banco de registradores e dois bits de status
definidos pelo usuário.

Figura 6 – Registrador PSW ( Program Status Word )

5.2- Modos de Endereçamento


Para acessar um dado, as instruções do microcontrolador 8051 contam com seis tipos de
endereçamentos: Direto, Indireto, por Registradores, por Registrador Específico,
Imediato e Indexado.

 Endereçamento Direto: nesse modo, o endereço do operando é especificado por


um campo de 8bits na instrução. Somente RAM de dados interna e a região SFR
pode ser diretamente endereçadas.

 Endereçamento Indireto: a instrução especifica um registrador que contém o


endereço do operando. Ambas externa e interna RAM’s podem ser indiretamente
acessadas. Se tal endereço possui 8bits, seu valor é armazenado em R0 ou R1,
do respectivo banco selecionado, ou no Stack Pointer. Por outro lado, se tal
endereço possui 16bits, seu valor é armazenado no registrador DPTR.

 Endereçamento por Registradores: instruções que suportam um espaço de três


bits em seu opcode podem acessar registradores de R0 a R7 dos bancos de
registradores. Tais instruções são eficientes por eliminarem um byte de endereço.
Quando uma instrução desse tipo é executada, um dos quatro bancos de
registradores é selecionado pelos bits RS0 e RS1 de PSW em tempo de
execução.

 Endereçamento por Registrador Específico: algumas instruções são específicas a


certos registradores. Por exemplo, algumas instruções sempre operam no
Acumulador e, para elas, não é necessário um ponteiro. O próprio opcode é capaz
de realizar tal tarefa.

 Endereçamento Imediato: quando uma constante segue o opcode.

 Endereçamento Indexado: somente a Memória de Programas, cuja única


operação é leitura, pode ser acessada por esse modo. É usado para fazer leituras
em tabelas na Memória de Programas. Um registrador de 16bits (DPTR ou PC)
aponta para o início da tabela enquanto o Acumulador é ajustado para a n-ésima
posição da mesma. O endereço de uma entrada para a tabela é formado pela
soma entre o Acumulador e o registrador de 16bits. Uma outra aplicação desse
tipo de endereçamento é na formação do endereço destino de jumps pela soma
do índice e do valor do Acumulador.

5.3- Instruções Aritméticas


O conjunto de instruções 8051 pode acessar suas variáveis pelos diferentes modos de
endereçamento. Por exemplo, a instrução ADD A, <byte> pode ser escrita como:
ADD A, 7FH (direto)
ADD A,@R0 (indireto)
ADD A,R7 (registrador)
ADD A,#127 (imediato)
Tabela 1 – Instruções Aritméticas

Instruções aritméticas tomam 1 s para serem executadas exceto INC DPTR, que toma
2 s e instruções de multiplicação e divisão, que tomam 4 s, considerando uma
freqüência de clock de 12MHz.
Note que qualquer byte alocado em uma posição da Memória de Dados interna pode ser
incrementado ou decrementado sem precisar de ser carregado no Acumulador.
A instrução MUL AB multiplica o conteúdo do Acumulador pelo conteúdo do registrador .
O produto em 16bits é colocado nos registradores A e B concatenados. A instrução DIV
divide o conteúdo do acumulador pelo conteúdo do registrador B. O quociente é
colocado no Acumulador e o resto no registrador B.
A instrução DA A, ajusta o resultado de uma operação BCD. Note que essa instrução
não converterá um número binário em BCD mas sim, ajustará o resultado de uma
operação ADD ou ADDC envolvendo valores BCD.

5.4- Instruções Lógicas


Essas instruções realizam operações booleanas ( AND, OR, Exclusive OR e NOT) bit a
bit entre dois bytes. Elas podem endereçar seus operandos por diversos modos como
por exemplo, a instrução ANL A, <byte>:
ANL A,7FH (direto)
ANL A,@R1 (indireto)
ANL A,R6 (por registrador)
ANL A,#53H (imediato)

Tabela 2 – Instruções Lógicas

Todas instruções desse tipo que utilizam o Acumulador como registrador específico
tomam 1 s para serem executadas, enquanto as demais tomam 2 s. Os modos de
endereçamento disponíveis tornam desnecessário carregar qualquer operando que
estiver na Memória de Dados interna para o Acumulador. Não utilizar o Acumulador,
economiza o tempo em empilhar seu conteúdo quando do atendimento a uma
interrupção.
Instruções de rotação deslocam de um bit para direita ou esquerda o conteúdo do
Acumulador. Se for para esquerda, o bit LSB recebe o bit MSB, enquanto, se for para
direita, o bit MSB recebe o bit LSB.
A instrução SWAP permuta os quatro bits menos significativos com os quatro bits mais
significativos do Acumulador.

5.5- Instruções de Transferência de Dados


Essas instruções são divididas em três subgrupos conforme a localização do dado: na
RAM interna, na RAM externa ou na Memória de Programas (Lookup Tables).

 RAM interna

Sob um clock de 12MHz, uma operação desse tipo é realizada em 1 s ou 2 s.


Esse conjunto de instruções mostrado na tabela 3, conta com a facilidade, por
exemplo, de MOV <dest>,<src> que transfere dados entre duas posições de RAM
interna ou região SFR dispensando qualquer carregamento do Acumulador
(lembre que a região Upper 128 da RAM de dados pode ser acessada somente
por endereçamento indireto e a região SFR somente por endereçamento direto).
PUSH e POP utilizam endereçamento direto para identificar o byte a ser salvo ou
restaurado, mas usa endereçamento indireto para acessar a pilha através do
registrador SP. Isso significa que a pilha (que cresce no mesmo sentido dos
endereços e localizada na região Lower 128) pode avançar sobre a região Upper
128 mas não na região SFR. Em dispositivos que não contam com a região Upper
128 ( 8051A, 80C51 e 80512 e versões ROMless) se a pilha tenta avançar sobre
ela, bytes de PUSH são perdidos e de POP são indeterminados.
Movimentação com 16bits é útil para inicializar DPTR para acesso a Lookup
Tables na Memória de Programas ou acessar Memória de Dados externa.

Tabela 3 – Instruções de Transferência de Dados em Memória Interna

 RAM externa
A Tabela 4 mostra a lista de instruções de Transferências de Dados para acesso à
memória externa. Somente endereçamento indireto pode ser utilizado. Pode-se
escolher o uso de endereços de 8bits, @Ri, onde Ri pode ser o registrador R0 ou
o registrador R1, ou endereços de 16bits, @DPTR. A desvantagem em se usar
endereços de 16bits, quando poucos Kbytes de Memória de Dados externa estão
envolvidos, é o sacrifício de todos os 8bits da Porta2 (veja Figura 2). Note que o
Acumulador é sempre o fonte ou o destino da transferência.
Os sinais RD e WR só são gerados quando da execução de uma instrução do tipo
MOVX, assim, se uma RAM externa não é disponível, tais sinais podem ser
utilizados como linhas de E/S extras.

Tabela 4 – Instruções de movimentação em memória de dados externa

 Lookup Tables
A tabela 5 mostra as duas instruções disponíveis para ler Lookup Tables da
Memória de Programas. Uma vez que reside nessa memória, tal tabela só poderá
ser lida. Se essa tabela se encontra na Memória de Programas externa, o sinal de
leitura é PSEN.
A primeira instrução MOVC pode acomodar uma tabela de 256 entradas (0-255).
O número da entrada é armazenado no Acumulador e o registrador DPTR é
ajustado com o valor inicial da tabela.
A segunda instrução utiliza o PC como a base da tabela que é acessada através
de subrotina. O Acumulador é carregado com o valor da entrada da tabela e a
subrotina é chamada:
MOV A, ENTRADA
CALL LOOKUP_TABLE
Subrotina:
LOOKUP_TABLE: MOVC A, @A + PC
RET
A tabela em si segue imediatamente a instrução RET. Ela comporta 255 entradas
(1-255), pois, a entrada 0 endereça a instrução RET.

Tabela 5 – Instruções para leitura de Lookup Table em memória de programa


5.6- Instruções Booleanas
Os dispositivos da família 8051 contam com um completo conjunto de operações
booleanas ( tabela 6) sob bits únicos. A o espaço Lower 128 da RAM interna suporta 128
bits endereçáveis e o espaço SFR pode suportar outros 128 bits endereçáveis. Todas as
linhas das portas são bit-endereçáveis e cada uma dessas linhas pode ser tratada como
uma porta de um único bit. As instruções que acessam esses bits não são apenas
branches condicionais mas uma completa lista de move, set, clear, complement, OR e
AND. Esse tipo de operações sobre bits não é facilmente obtido em outras arquiteturas
sem uma razoável quantidade de código.
Todos esses bits são endereçados diretamente. Bit-Endereços entre 00H e 7FH
acessam o espaço Lower 128 enquanto entre 80H e FFH acessam o espaço SFR. Note
como é fácil um flag interno ser movido para um pino de uma porta:
MOV C, FLAG
MOV P1.0, C
Onde FLAG é o nome de qualquer Bit-Endereçável em Lower 128 ou SFR. Nessa
seqüência, bit de FLAG é movido para o bit menos significativo da Porta1. O Carry bit de
PSW é utilizado como acumulador para operações Booleanas.
As operações de jump desse conjunto testam um único bit, que possa ser diretamente
endereçável, como condição. Uma vez que todos os bits de PSW são endereçados
diretamente, pois estão no espaço SFR, pode-se utilizá-los como alguma condição de
jump.
Para jumps relativos, o endereço contido no código é somado ao PC em complemento
de dois se o jump é tomado. Portanto, a distância de jump pode variar na faixa de -128 a
+127 bytes a partir do endereço do byte de desvio .

Tabela 6 – Instruções Booleanas

5.7- Instruções de Jumps


O conjunto de instruções de jumps pode ser dividido em dois subgrupos: jumps
condicionais e jumps incondicionais.

 Jumps incondicionais
O conjunto de jumps incondicionais( tabela 7) possuem seis instruções em seu
repertório. JMP é apenas um mnemônico genérico utilizado pelo programador que
não precisa saber como ela é realmente interpretada pelo assembler. Na
realidade, JMP corresponde a três instruções: SJMP, LJMP e AJMP. A instrução
SJMP calcula o endereço destino como descrito acima que pode varrer uma
largura de -128 a +127 bytes na Memória de Programas. A instrução LJMP
codifica o endereço destino como uma constante de 16bits que pode ser qualquer
localidade dos 64Kbytes da Memória de Programas. A instrução AJMP codifica o
endereço destino como uma constante de 11bits. A instrução consiste em 2 bytes:
3bits do endereço localizam-se no opcode enquanto os outros 8bits localizam-se
no próximo byte. Os 11bits assim formados simplesmente substituem os 11bits
menos significativos de PC.
Em todos os casos, o programador especifica o endereço destino de duas
maneiras: ou como um label ou como uma constante de 16bits. O assembler se
encarrega de colocar o endereço destino para o correto formato de instrução.
A instrução JMP @A + DPTR implementa a comando CASE. O endereço destino
é computado em tempo de execução como a soma do conteúdo do Acumulador e
o registrador DPTR. Tipicamente, DPTR é carregado com o endereço de uma
tabela de jumps e, ao Acumulador, é dado o valor de um índice dessa tabela.
Semelhantemente à instrução JMP, a instrução CALL, na realidade, são duas :
LCALL e ACALL que diferem na forma como que o endereço da subrotina é dado
à CPU. LCALL utiliza o endereço destino em 16bits que pode ser qualquer
localidade dos 64Kbytes da Memória de Programas. ACALL utiliza formatos em
11bits o que significa que o endereço destino deve estar no mesmo bloco de
2Kbytes seguintes a instrução. A transparência para o programador em CALL é
semelhante à de JMP.
As instruções RET e RETI são utilizadas em finais de subrotinas. A diferença
entre elas é que RETI informa ao sistema de controle de interrupções que a
interrupção em progresso terminou.

Tabela 7 - Instruções de Jumps Incondicionais

 Jump condicionais
O conjunto de jumps condicionais só permite endereçamento de destino relativo o
que limita a distância de salto entre -128 e +127 bytes de distância da instrução
jump. Importante notar que o programador especifica o endereço como um label
ou uma constante de 16bits.
Não há flag zero, portanto, JZ e JNZ testam o dado do Acumulador para tal
condição.
A instrução DJNZ (Decrementa e Jump se Não Zero) é utilizada para controle de
loops assim como CJNE (Compara e Jump se Não Igual). Uma aplicação para
esta instrução está em comparações "maior que, menor que". Pelo valor do Carry
bit distingue-se as duas situações. Se o primeiro é menor que o segundo, Carry bit

é setado. Se o primeiro é maior ou igual ao segundo, Carry bit é zerado.


Tabela 8 – Instruções de Jumps Condicionais

6- Ciclo de Máquina
Um ciclo de máquina consiste de uma seqüência de 6 estados (S1 a S6). Cada estado toma 2
períodos de clock e, portanto, um ciclo de máquina toma 12 períodos de clock ou 1 s sob uma
freqüência de 12MHz.
A Figura 7 mostra a seqüência de busca/execução para alguns tipos de instruções.
Normalmente dois ciclos de busca são executados em cada ciclo de máquina mesmo que a
instrução sendo executada não o requer, caso em que o byte buscado é ignorado e o PC não é
incrementado.
Figura 7 – Sequência de Estados
Instruções de um ciclo começam em S1, em S4 é gerado uma segunda busca e, no fim de S6,
a instrução está completa. O ciclo busca/execução é o mesmo se a Memória de Programas é
externa ou interna. A Figura 7 mostra os sinais e as temporizações envolvidas quando a
Memória de Programas é externa. Nesse caso, o sinal PSEN é ativo duas vezes por ciclo de
máquina. Se um acesso à Memória de Dados externa ocorre, como mostrado na Figura 2, dois
PSENs são pulados porque o bus de endereços e o bus de dados estão sendo utilizados para
acesso à Memória de Dados. Note que um ciclo de Memória de Dados externa toma duas
vezes mais tempo que um ciclo de Memória de Programas. A Figura 8 mostra a dinâmica dos
endereços sendo enviados às Portas 0 e 2 e dos sinais ALE e PSEN. O sinal ALE é ativado
indiferentemente se a CPU está executando a partir da Memória de Programas externa ou
interna, podendo ser utilizado como uma saída de clock

Figura 8 – Ciclo de Execução em Memória de Programas Externo

7- Estruturas de Interrupção
Os microcontroladores 8051A, 80C51 e suas versões ROMless dispõem de 5 fontes de
interrupção: 2 interrupções externas, 2 interrupções de temporizadores e uma interrupção por
porta serial. O 8052B e o 80C52 possuem essas cinco interrupções e mais uma associada ao
terceiro temporizador. Outras interrupções são disponíveis em membros mais avançados da
família.

7.1-Interrupt Enable (IE)


Cada uma das fontes de interrupção pode ser habilitada ou desabilitada setando ou
limpando um bit do registrador IE localizado na região SFR. Este registrador também
contém um bit global que pode desabilitar todos as interrupções de uma só vez. A Figura
9 mostra o registrador IE para o 80528 e 80C52.

Figura 9 – Interrup Enable

7.2- Prioridade de Interrupções


Cada fonte de interrupção pode ser programada para um de dois níveis de interrupção
( os microcontroladores 80515, 80C515, e 80C517 têm quatro níveis de interrupção)
setando ou limpando um bit do registrador IP (Interrupt Priority) localizado no espaço
SFR e mostrado na Figura 10.
Figura 10 – Interrupt Priority
Se requisições de interrupção de mesma prioridade são recebidas simultaneamente,
uma seqüência de pooling é ativada para determinar qual interrupção será atendida.
Todos os flags de interrupção são carregados no sistema de controle de interrupção
durante o Estado 5 de todo ciclo de máquina. A análise desses flags é feita no ciclo
seguinte. Se um flag para uma interrupção habilitada é encontrado setado, o sistema de
interrupção gera um LCALL para a correta localização na Memória de Programas a
menos que uma situação de bloqueio de verifique (ex. interrupção de igual ou maior
prioridade sendo atendida). Com LCALL sendo executado, o conteúdo de PC é salvo na
pilha e este registrador recebe o valor do endereço inicial da rotina de interrupção.
Somente PC é automaticamente salvo na pilha. Isso permite ao programador decidir
quanto tempo deve ser gasto salvando outros registradores. Como resultado, tem-se
uma melhoria no tempo de resposta a uma interrupção.
8- Temporizadores
O microcontrolador 8051 conta com 2 temporizadores/contadores de 16bits para uso geral. A
configuração dos temporizadores/contadores 0 e 1 é feita no registrador TMOD localizado na
região SFR no endereço 89H. Se o bit C/T desse registrador é setado, o
temporizador/registrador atua como contador e, se zerado, atua como temporizador.
Quando na função temporizador, o registrador de tempo, localizado na região SFR é
incrementado a cada ciclo de máquina. Logo, podemos pensá-lo como um contador de ciclos
de máquina. Desde que um ciclo de máquina toma 12 ciclos de clock, a resolução de contagem
é 1/12 da freqüência de clock.
Quando na função contador, o registrador é incrementado a cada transição 1 para 0 do
correspondente sinal externo T0 ou T1 (pino 4 ou pino 5 respectivamente da porta 3). É
necessário um ciclo de máquina para detectar a transição e outro para incrementar o
registrador de contagem. Portanto, a resolução de contagem é 1/24 da freqüência do sinal de
entrada. É fortemente recomendado que o sinal seja aplicado no mínimo durante um ciclo de
máquina completo.
Cada temporizador/contador consiste em 2 registradores de 8bits que podem ser configurados
em um dos 4 possíveis modos.
 Modo 0: o registrador é configurado como um registrador de 13bits. Os bits TF0 (8DH) e
TF1 (8FH) são utilizados como flags de overflow associadas às interrupções INT0 e INT1
respectivamente aos temporizadores/contadores 0 e 1.
 Modo 1: semelhante ao modo 0 com a diferença de que o registrador atua em 16bits.
 Modo 2: o registrador é configurado em 8bits com recarregamento automático, isto é,
quando numa situação de overflow de TLO (8bits menos significativos), tal registrador é
recarregado com o conteúdo de TLH (8bits mais significativos) cujo conteúdo permanece
constante.
 Modo 3: temporizador/contador 1 é desligado enquanto o temporizador/contador 0 é
utilizado como dois registradores de 8bits. A interrupção associada a TL0 é INT0
enquanto a interrupção associada a TH0 é INT1.

9- Interface Serial
O 8051 possui uma porta serial full-duplex, o significa que ela pode enviar e transmitir dados
simultaneamente. Essa interface pode operar em 4 modos:
 Modo 0: (modo síncrono) 8 bits do dado serial entram e saem por RxD0. TxD0 tem como
saída o sinal de clock deslocado em fase. A velocidade de transmissão é de 1/12 clock.
 Modo 1: (modo assíncrono) 10 bits são transmitidos (TxD0) ou recebidos (RxD0): 8bits
de dados, 1 stop bit e 1 start bit. A velodidade de transmissão é variável.
 Modo 2: (modo assíncrono) 11 bits são transmitidos (TxD0) ou recebidos (RxD0): 1 start
bit, 8bits de dados, 1bit programável pelo usuário (por exemplo: bit de paridade) e um
stop bit. A velocidade de transmissão pode ser porgramável para 1/32 ou 1/64 clock
 Modo 3: (modo síncrono) exatamente como no Modo 2, porém, a velocidade de
transmissão é variável.
Em cada um dos modos, a transmissão é iniciada quando da execução de uma instrução cujo
registrador destino é o registrador S0BUF (endereço 99H, região SFR). A recepção é iniciada
no modo 0 pela condição RI0 = 0 (endereço 98H) e REN0 = 1 (endereço 9CH), ambos
localizados no registrador S0CON (endereço 98H, região SFR). Em outros modos, a recepção é
iniciada quando REN0 = 1.
10- Principais Vantagens do Microcontrolador 8051
Popular: prontamente disponível e amplo suporte. Gama completa de produtos de
suporte estão disponíveis de graça e comercialmente.
Rápido e eficaz: a arquitetura se correlaciona de perto com o problema sendo
solucionado (sistemas de controle). Instruções especializadas significam que menos
bytes precisam ser buscados e menos jumps condicionais são processados.
Baixo custo: alto nível de integração do sistema em um único componente. Poucos
componentes são necessários para se criar um sistema que funcione.
Ampla gama de produtos: uma única família de microcontroladores cobre as opções
que outros fornecedores só conseguem cobrir com um número razoável de diferentes e
incompatíveis famílias. Desse modo, o 8051 proporciona economia real em termos de
custo de ferramentas, treinamento e suporte para software.
Compatibilidade: opcodes e código binário são os mesmos para todas as variações do
8051, diferente de outras famílias de microcontroladores.
Multi-Sourced: mais de 12 fabricantes, centenas de variedades.
Aperfeiçoamentos constantes: melhorias na manufatura aumentam a velocidade e
potência anualmente. Há ainda versões de 16 bits vindo de diversos fabricantes.

11- Atuais Tendências


Recentemente a PHILIPS Semiconductors lançou a versão 16bits do 8051: o 80C51XA
(eXtended Architecture). O conjunto de códigos mais denso não perde a compatibilidade com
códigos escritos para o 8051. O XA foi uma resposta às três maiores tendências no
desenvolvimento de sistemas microcontrolados: a necessidade de se ter maior processamento
por Dólar, o aumento do uso de linguagens de alto nível e o crescente desenvolvimento de
sofisticados sistemas operacionais multi-tarefas e de tempo real.
Entre outras características, o XA conta com baixo consumo ( 3V com capacidade de gerência
de energia), endereçamento e conjunto de instruções expandidos. Com um preço de U$ 7.00 e
uma razão performance por dólar superior a qualquer outro microcontrolador de 16bits, o XA
resolve problemas de projeto por um inigualável preço/performance.
Inspirada no sucesso do microcontrolador 8051, a indústria usou a mesma estratégia lançando
a completa família 80C51XA.

Você também pode gostar