Organização de Computadores II
Ciência da Computação
Universidade Federal de Minas Gerais

MicroControlador 8051


Componentes da Equipe

Clique aqui para ver as manchetes do DCC.


Benício Gontijo -
gontijo@dcc.ufmg.br
Giovanni Laporte -
giovanni@dcc.ufmg.br
Joji Tamekuni -
joji@dcc.ufmg.br
Marcelo Daride -
daride@dcc.ufmg.br
Vinícius Sacramento -
vinicius@dcc.ufmg.br

Data da Apresentação: 07 de maio de 1998

Prof.
Claudionor José Nunes Coelho

Lecom


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

12- Referências Bibliográficas

 


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
  • Mitsubish
  • Siemens
  • NEC
  • Hitach
  • Philips
  • Intel
  • Microchip
  • Matsushitta
  • Toshiba
  • National Semiconductor
  • Zilog
  • Texas Instruments
  • 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

     

    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:

     

     

    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
     
    Figura 2 – Acesso à memória de dados externa
     
    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.
    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.
     
    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 1m s para serem executadas exceto INC DPTR, que toma 2m s e instruções de multiplicação e divisão, que tomam 4m 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 1m s para serem executadas, enquanto as demais tomam 2m 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).
    Sob um clock de 12MHz, uma operação desse tipo é realizada em 1m s ou 2m 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
     
    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
     
    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.
    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
     
    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 1m 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.

     

    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:

    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.

     

    12- Referências Bibliográficas

     

    http://www-us2.semiconductors.philips.com/microcontrol/products/80c51

    8 BIT Microcontroller Handbook, Siemens, 1994

    http://www.dcc.ufmg.br/~fred

    .