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 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 4 – bit 1393 8 – bit 2077 16 – bit 192
1991 1597 2615 303
1992 1993 1994 1995 1996 1596 1698 1761 1826 1849 2862 3703 4689 5634 6553 340 484 810 1170 1628 Fonte: WSTS & ICE – 1994
1997 1881 7529 2191
1998 1856 8423 2969
WorldWide Microcontroller Shipments (in Millions) 1990 1991 1992 1993 1994 1995 1996 1997 1998 4-bit 778 906 979 1036 1063 1110 1100 1096 1064 8-bit 588 753 843 1073 1490 1803 2123 2374 2556 16- 22 38 45 59 106 157 227 313 419 bit Fonte: WSTS & ICE – 1994
1999 1816 9219 3678
1999 1025 2681 501
2000 1757 9715 4405
2000 970 2700 585
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, 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, : 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.