of 119 /119

Click here to load reader

Microcontrolador 8051

Embed Size (px)

DESCRIPTION

Microcontrolador 8051

Text of Microcontrolador 8051

Microcontrolador 8051 HardwareCurso Completo Hardware Software - Interfaceamento1INTRODUONa Dcada de 70 comearam a ser utilizados microprocessadores em microcomputadores para uma maior eficincia no processamento de dados. O microprocessador Intel foi um dos precursores e, a partir da, houve uma preocupao em melhorar cada vez mais o sistema de processamento de dados atravs desses componentes. Baseado na arquitetura de um microprocessador e seus perifricos, foi criado um componente que (fisicamente em uma unidade) comportasse todo um sistema que equivalesse a um microprocessador e seus perifricos; assim surgiu o microcontrolador.1.1Unidade Central de Processamento (CPU)A unidade central de processamento controla todas as funes realizadas pelo sistema. A CPU de qualquer sistema de computador contm os seguintes grupos de unidadesFuncionais: Registradores e contadoresOs registradores e contadores so unidades funcionais usadas para armazenamento temporrio de bits dentro da CPU. Unidade lgica e aritmticaA unidade lgica e aritmtica a unidade funcional da CPU que executa operaes lgicas e aritmticas entre palavras binrias, gerando uma outra palavra na sada. Unidade de controle e sincronizaoA unidade de controle e sincronizao coordena e controla todas as unidades funcionais em uma seqncia lgica e sincronizada.1.2ProcessamentoO processador ou unidade central de processamento (CPU) a parte do sistema que faz o processamento das informaes para que as instrues sejam executadas; as instrues devem estar armazenadas na memria de programa em seqncia, formando assim o programa.A CPU possui um registrador chamado de CONTADOR DE PROGRAMA (PC) que contm o endereo da prxima instruo que deve ser executada. Toda vez que uma instruo retirada da memria pela unidade central de processamento, automaticamente o contador de programa incrementado para que, aps o processamento desta instruo, quando a CPU for buscar a prxima instruo, basta usar o endereo contido no contador de programa.Toda vez que a CPU ligada ou resetada, automaticamente o seu contador de programa zerado, desta forma, a primeira tarefa que a CPU ir realizar a execuo da instruo contida na posio de memria de endereo 0000. Cada instruo possui duas fases distintas: o ciclo de busca e o ciclo de execuo. Durante o ciclo de uma instruo a CPU faz com que o contedo do contador de programa seja colocado no barramento de endereos, endereando, desta maneira, a posio de memria que contm a instruo que deve ser executada.1.3Unidades de Entrada e Sada (I/O)As unidades de entrada/sada so os meios pelos quais o usurio se comunica com o sistema. Essas unidades possuem interfaces que permitem a conexo com dispositivos chamados de perifricos, tais como teclado, LCDs, etc.1.4ArquiteturaA performance do microcontrolador depende da sua arquitetura interna, ou seja, do modo em que o microcontrolador foi projetado tanto para o hardware como para software. No hardware apresentaremos a arquitetura Von-Neumann, na qual se refere o software CISC. Arquitetura Von-NeumannNa arquitetura Von-Neumann, os barramentos de dados e endereos so compartilhados entre memrias de programas e memrias de dados na comunicao com a CPU. Nesse tipo de arquitetura, quando a CPU est acessando a memria de programa no pode acessar a memria de dados, porque usa os mesmos barramentos para as duas memrias. CISC (Complex Instruction Set Computer)CISC: Computador com Set de Instruo mais Complexo, quanto maior a complexidade da instruo que deve ser executada, mais espao ela ocupa no chip. Desse modo, chegar um momento que passaremos e ter um set de instrues to grande que comear a afetar o desempenho, dificultando a possibilidade de implementar outras funes importantes. Ter um complexo (grande) set de instrues CISC nem sempre interessante para um bom desempenho do processador.Numa anlise feita pelo laboratrio da IBM sobre como estavam sendo usados os diversos tipos de instrues, concluram que num microprocessador que usava um set de instrues de, por exemplo, 200 instrues, a maior parte do processamento era feita apenas com umas 10 instrues.Uma grande parte das instrues era pouco usada, s vezes at uma nica vez em um longo programa, de modo que elas poderiam ser implementadas pelas instrues bsicas mais usadas.Da o aparecimento da nova arquitetura com o set de instrues reduzido RISC(caracterstico dos microcontroladores da famlia PIC).1.5MemriasMemrias so os dispositivos que armazenam informaes e so usadas em todos os sistemas microcontrolados. Existem vrios tipos de memrias que podem ser classificadas por vrios itens diferentes.1.5.1AcessoAs memrias armazenam informaes em lugares que se denominam localidade de memria. Cada localidade de memria guarda um conjunto de bits e tem um endereo. No acesso desses endereos podemos analisar:-O tempo de acesso: o tempo que a memria necessita para que sejam escritos ou lidos os dados em suas localidades-Acesso seqencial: nas memrias que tem acesso seqencial, para acessar um endereo de uma certa localidade, precisa-se passar por endereos intermedirios (as memrias mais comuns desse tipo so as que utilizam fita magntica);-Acesso aleatrio: as memrias que utilizam esse tipo de acesso so as memrias que permitem que seja acessado qualquer dado em qualquer endereo sem a necessidade de ter que passar por outros endereos intermedirios.1.5.2Volatilidade-Memrias volteis: so aquelas que perdem as informaes quando cortada sua alimentao. So memrias que geralmente usam como elemento de memria o Flip-Flop.-Memrias no volteis: so memrias que mesmo desligando-se sua alimentao, no perdem as informaes armazenadas. Dentre essas se destacam as magnticas e as eletrnicas ROM, PROM, EPROM, EEPROM, e outras.1.5.3Memrias de escrita/leitura ou somente leitura-Escrita/Leitura: so memrias que podem ser acessadas pela CPU tanto para leitura quanto para escrita; elas so usadas para armazenar dados que sero utilizados durante a execuo do programa (memrias RAM, EEPROM)-Somente Leitura: so a memrias que armazenam o programa, ou seja, so as memrias que s sero lidas pela CPU e que j vm gravadas para o sistema (memrias ROM, PROM, etc).1.5.4Tipos de armazenamento-Estticas: memrias estticas so aquelas nas quais as informaes permanecem armazenadas enquanto no houver escrita ou no faltar energia.-Dinmicas: memrias dinmicas so memrias que perdem informaes armazenadas mesmo com alimentao. Na RAM dinmica (ou DRAM) isso acontece porque cada clula tem um transistor MOSFET e um capacitor que armazena um dado (1 bit).1.5.5Tipos de MemriasVeremos a seguir, alguns tipos de memrias existentes no mercado e que so muito utilizadas: Memrias RAM (Random Access Memory)Essas memrias so de acesso aleatrio, que podem ser acessadas a qualquer momento e em qualquer endereo. Elas podem ser estticas ou dinmicas e tambm podem ser gravadas pelo sistema com a tenso de 5v. So memrias consideradas volteis. Memrias ROM (Read Only Memory)Essas memrias so utilizadas somente para a leitura. Memrias PROM (programable Read Only Memory)Essas memrias so utilizadas no sistema somente para leitura; geralmente usadas como memrias de programa, s podem ser gravadas com gravadores especficos e s uma vez. So a memrias no Volteis. Memrias EPROM( Erasable Programmable Read Only Memory)Essas memrias so utilizadas no sistema somente para leitura, tambm empregadas como memrias de programa e s podem ser gravadas com gravadores especficos. Podem ser apagadas por raios ultravioleta e regravadas por muitas vezes. So chamadas memrias no volteis. Memrias EEPROM ou E2PROM (Electrically Erasable Programmable Read Only Memory)Essas memrias podem ser usadas no sistema tanto para leitura como para escrita. Podem ser gravadas com programadores ou pelo sistema; so apagadas eletricamente e regravadas por muitas vezes; so consideradas memrias no volteis. Memrias PEROM (programable Read Only Memory)Uma linha de memrias programveis apenas para leitura, de 3v e 5v, apenas dentro do sistema. Fabricadas com avanada tecnologia CMOS, no volteis, suas caractersticas incluem:-Operao de leitura e programao em apenas 3v e 5v;-Proteo de dados de software e hardware;-Operao de programao por setor-1000 ciclos de programa;-Reteno de dados de 10 anos;-Baixa dissipao de potncia;-Tempo de ciclo de programa rpido;-Deteco de fim de programa. Memrias FLASHA memria FLASH um dispositivo de armazenamento confivel, no voltil, de boa relao custo/benefcio e que possui caractersticas de leitura da EPROM, EEPROM e SRAM, porm quando se aplica 12v sobre o dispositivo, este pode ser gravado com base em bytes. No caso da memria FLASH 5v estes dispositivos foram projetados para serem programados dentro do sistema com fornecimento padro de 5V. Em programadores de EPROM convencionais no h necessidade de 12vpp, nem para programao, nem para apagamento. composta de uma arquitetura de apagamento de setor (qualquer combinao pode ser apagada simultaneamente) e 100.000 ciclos de apagamento/programao. Memria FLASHFILEA memria FLASHFILE, simetricamente bloqueada, da intel, oferece uma soluo no voltil com leitura e programao de mais alta densidade para armazenamento em massa. O armazenamento de aplicao de software e a operao com cdigo de sistema em RFAs (Residential Flash Arrays) proporcionam execuo instantnea , rpida e local (in Place). RFAs so protegidas tambm contra envelhecimento do software, j que este pode ser atualizado no sistema. O software RFA prolonga a vida da bateria e aumenta a confiabilidade do sistema atravs da reduo do nmero de acessos ao disk-drive. 100.000 ciclos de apagamento/programao. Memrias SeriaisEstes dispositivos so de tamanho reduzido podendo ser ligados a um barramento serial I2C (Inter-Integrated Circuit Bus) ou SPI (Serial Peripheral Interface) junto com outros dispositivos seriais, com muitas vantagens em relao s memrias paralelas.

2ESTRUTURA BSICA DA FAMLIA 80512.1A Famlia MCS-51A famlia Intel MCS-51 dez vezes mais rpida que sua antecessora, a famlia MCS- 48. A MCS-51 contm vrios componentes similares, cada um indicado para um tipo de sistema especfico. Os diferentes membros da famlia MCS-51 esto listados na tabela 2.1. O 8051 o componente base dessa famlia, tendo dois similares prximos, o 8751 e o 8031, e uma verso com mais memria, o 8052. Toda a verso contm a mesma CPU e instrues. O 8051 possui 4KB de ROM, a qual gravada no processo de fabricao do chip. J no 8751, a ROM substituda por uma EPROM, que pode ser programada e apagada. O 8031 indicado para sistemas expandidos e usa memria de programa externa. Por ltimo, pode-se destacar o 8052, que possui o dobro de memria ROM e RAM do 8051.Tabela 2.1: Membros da famlia 8051MEMBROTECNOLOGIAMEM. PROGRAMAMEM. DE DADOS (RAM)

8051HMOS4K ROM128 bytes

8031HMOSNo tem128 bytes

8751HHMOS I4K EPROM128 bytes

80C51CHMOS4K ROM128 bytes

80C31CHMOSNo tem128 bytes

8052HMOS8K ROM256 bytes

8032HMOSNo tem256 bytes

AT89C2051CMOS2K FLASH128 bytes

AT89C51CMOS4K-FLASH128 bytes

AT89C52CMOS8K-FLASH256 bytes

Nesta apostila, no se pretende estabelecer os critrios usados na escolha deste ou daquele componente da famlia MCS-51. Pretende-se apenas estudar a arquitetura interna do chip 8051 e seus aspectos de programao, que so comuns a todos os membros da famlia MCS-51. Os microcontroladores MCS-51 so tambm fornecidos por outros fabricantes, alm da Intel, e todos so totalmente compatveis entre si.2.2Recursos Gerais do 8051A figura 2.1 mostra o diagrama de blocos do ncleo do 8051, enquanto a figura 2.2 mostra o diagrama de blocos detalhado do 8051. O microcontrolador 8051 possui: CPU de 8 bits otimizada para aplicaes de controle; 32 linhas de E/S bidirecionais e individualmente endereveis; 4 Kbytes de memria de programa interna; 128 bytes de RAM interna, destinada a dados; 64 Kbytes endereveis de memria externa, de programa ou dados; 2 temporizadores/contadores de 16 bits cada um; Porta serial (UART) full-duplex, para comunicao com outro processador; 5 estruturas (fontes) de solicitao de interrupo, com 2 nveis de prioridade; Oscilador de clock interno; Freqncia de clock entre 1,2 MHz e 12 MHz.

Figura 2.1 Diagrama de blocos do 8051.O 8051 um microcontrolador de 8 bits, pois tanto a ROM, RAM, ULA e via de dados manipulam informao de 8 bits. O seu conjunto de instrues formado por 111 instrues, onde se incluem as de transferncia de dados, aritmtica, lgica, desvio de fluxo de programa e booleanas. Estas so instrues de manipulao de variveis de um bit do 8051 (lgica de bit nico).

Figura 2.2 - Diagrama de blocos detalhado do 8051.2.3Principais Vantagens do Microcontrolador 8051 Popular: prontamente disponvel e amplo suporte. Gama completa de produtos de suporte esto disponveis de graa e comercialmente, proporcionando economia real em termos de ferramentas de treinamento e suporte para software. Rpido e eficaz: a arquitetura se correlaciona de perto com o problema sendo solucionado (sistemas de controle). Instrues especializadas significam que menos bytes precisam ser buscados e menos jumps condicionais so processados. Baixo custo: alto nvel de integrao do sistema em um nico componente. Poucos componentes a mais so necessrios para se criar um sistema que funcione. Compatibilidade: opcodes e cdigo binrio so os mesmos para todas as variaes do 8051, diferente de outras famlias de microcontroladores. Multi Sourced: mais de 12 fabricantes, centenas de variedades. Aperfeioamentos constantes: melhorias na manufatura aumentam a velocidade e reduzem o consumo de potncia. H ainda verses de 16 bits, de diversos fabricantes.2.4Linguagens de Programao para o 8051As linguagens mais utilizadas na programao da famlia MCS-51 so C, BASIC e Assembly. Especificamente para microcontroladores desta famlia, no tem surgido muito texto de apoio sobre linguagens de programao. Todos os livros sobre linguagem C que aparecem no mercado vm repletos de exemplos clssicos de processamento de dados, os quais so, na sua grande maioria, imprprios para microcontroladores.2.4.1Linguagem CC uma linguagem que surgiu com o sistema operacional Unix. Ela estruturada, produz um cdigo compacto e permite atingir alguns detalhes de controle da mquina sem recorrer ao Assembly. H seis fabricantes que oferecem compiladores C para microcontroladores da famlia MCS-51. Destes compiladores, o Archimedes e o Franklin esto no topo da lista. Aps estes, vm os da BTO/Tasking e Avocet. Isto para mencionar apenas os quatro mais conhecidos.2.4.2Linguagem AssemblyA linguagem Assembly do 8051 semelhante a outras linguagens Assembly de microprocessadores. O conjunto de instrues dispe de um maior nmero de operaes para manipular bits que os microprocessadores usuais, mas o fato de ter diferentes regies de memria torna as coisas mais complicadas. As instrues de movimentao de dados, lgicas e desvio de execuo so geralmente similares as da maioria dos outros microprocessadores. Desta forma, para quem j trabalhou com linguagem Assembly de microprocessador, o processo o mesmo, com suas vantagens e desvantagens.2.4.3Linguagem BasicBasic atende bem ao seu propsito: ser uma linguagem de introduo programao. Ela muito fcil de se usar. O uso de uma nova varivel faz com que esta varivel persista pelo resto do programa. Erros podem ser detectados ao final de cada linha, ao invs de mostr-los somente quando o programa termina de ser traduzido.Porm, existem duas razes pelas quais o Basic no conveniente em sistemas dedicados. Em primeiro lugar, como ele interpretado, ele naturalmente lento. Cada linha deve ser convertida para o cdigo de mquina toda vez que for executada. O processo de interpretao faz com que seja perdido muito tempo de processamento, que deveria ser usada para a aplicao propriamente dita. Existem verses do Basic compilado (QuickBasic, por exemplo), que evitam esse problema. Entretanto, no h nenhuma verso do Basic compilado para o 8051.Em segundo lugar, pode-se destacar a inconveniente simplificao no uso de variveis.Todas as variveis so, usualmente, implementadas como ponto-flutuante. Isto resulta na necessidade de se executar rotinas complexas, mesmo para valores tipo inteiro. Isto torna os programas lentos e grandes. Pode-se dizer que o Basic, no contexto de sistemas dedicados, deve ser indicado para aplicaes onde a facilidade de programao seja mais importante que a eficincia ou velocidade.

3ORGANIZAO DE MEMRIA EM DISPOSITIVOS MCS 513.1Separao Lgica de Memria de Programa e de DadosToda a famlia MCS-51 possui espaos de endereamento separados para programas e dados, isto , uma memria de programa e uma memria de dados com endereos independentes (configurao Harvard). Essa separao permite que a memria de dados seja acessada por endereos de 8 bits, que podem ser mais rapidamente manipulados pela CPU, tambm de 8 bits. Entretanto, endereos de 16 bits tambm podem ser utilizados para a memria de dados, podendo ser gerados atravs do registrador DPTR (Data Pointer Register).O preo a pagar pela facilidade de manipulao dos endereos, dada pela separao lgica das memrias, o de um aumento de complexidade no conjunto de instrues; historicamente, esta separao presente na maioria dos dispositivos INTEL foi a responsvel pela criao da arquitetura CISC, que vem h tempos sendo superada pela maior elegncia de solues apresentada pela arquitetura RISC, que j est sendo utilizada at pela prpria INTEL nos seus dispositivos mais recentes.3.2Memria de ProgramaA memria de programa composta por duas reas distintas: 4KB de ROM interna e at mais 60KB externos. Entretanto, pode-se inibir os 4KB de ROM internos atravs do pino 31 (EA - External Access), ficando a memria externa com todo o espao de endereamento. A memria de programa pode ser apenas lida, no escrita. Existem at 64K de memria de programa acessveis, sendo que os primeiros 4K so disponveis internamente no 8051, e selecionveis atravs do sinal EA .Os primeiros 4 Kbytes da memria de programas podem ser endereados interna ou externamente. Se o pino EA estiver em nvel alto, esses bytes so acessados no chip. Levando o pino EA a nvel baixo, o acesso a tais bytes feito na memria externa, como mostrado na figura 3.A Figura 3.2 mostra a configurao de hardware para a execuo de programas externos; nesta configurao, duas das 4 portas de E/S disponveis (Portas 0 e 2) so utilizadas com funo de barramento de endereo/dados, ou seja, essas 16 linhas de E/S so dedicadas para desempenhar funo de bus durante buscas na memria de programas. Isto se deve ao fato de que os endereos da memria de programa so sempre de 16 bits, mesmo que o tamanho real desta seja menor que 64K bytes.A porta 0 emite o byte menos significativo do contador de programas (PCL). Nesse momento o sinal ALE (Address Latch Enable) funciona como clock para o latch, armazenando o PCL. As linhas da Porta 0 entram em estado de alta impedncia. Enquanto isso, a porta 2 emite o byte mais significativo do contador de programas (PCH). O latch e a porta 2 formam portanto o endereo necessrio ao acesso da ROM externa. O dispositivo emite o sinal PSEN (Program Store Enable) para ler a memria de programa externa. Este sinal, em nvel baixo, habilita a ROM leitura. A porta 0 entra no modo entrada e a instruo da ROM do endereo correspondente enviada a essa porta.

Figura 3.1 Estrutura de memria da famlia MCS-51.

Figura 3.2 Configurao de hardware para o uso de memria de programa externa.Evidentemente o ciclo de busca do 8051 projetado de forma que os primeiros 4096 endereos de memria de programa sejam acessados internamente. Da em diante, o ciclo de busca gera os sinais de controle necessrios para acessar a memria de programa externa.Certas posies na memria de programa esto reservadas para situaes especficas. Uma destas situaes a condio de reset, que fora o fluxo de execuo para o endereo 0000H. Normalmente, usa-se as trs primeiras posies para efetuar o desvio para a rotina de inicializao.A seguir, esto alocadas as posies alvos de interrupes, ou seja, os endereos de 0003H a 0023H so reservados para cinco rotinas de tratamento de interrupo. Em cada uma dessas posies, deve-se armazenar a sub-rotina que atende respectiva interrupo quando requisitada por um dispositivo. O espaamento entre essas posies fixas de 8 bytes. Na maioria das aplicaes de controle, essas rotinas cabem inteiramente nesse intervalo, de outra forma faz-se necessrio um jump nessas posies. A figura 3.3 mostra um mapa da parte inferior da memria de programa dos dispositivos MCS-51, com a localizao dos vetores de interrupo. Aps o reset, a CPU inicia a execuo da posio 0000H.

Figura 3.3 Mapa da parte inferior da memria de programa.3.3Memria de DadosA memria de dados ocupa, como j foi dito, um espao de endereamento separado da memria de programa, e at 64K bytes de RAM externa podem ser acessados neste espao. Os 64 Kbytes de memria de dados externa so acessados pelo dispositivo atravs dos sinais RD/WR. Os sinais PSEN e RD podem ser injetados na entrada de uma porta AND e a sada dessa porta utilizada como sinal de requisio de leitura a uma memria externa de dados e programas convencional.A memria de dados, como mostra a figura 3.4, composta por uma rea interna formada por 128 bytes, mais os registros de funo especial, e por at 64Kb de memria externa.

Figura 3.4: Composio da memria de dados do 8051De outra forma, pode-se visualizar a memria do 8051 como sendo parte interna e parte externa. A memria interna constituda pelos 4 Kb de ROM, pelos 128 bytes de RAM e pelos registros da CPU. J a memria externa formada por at 60 Kb (ou at 64 Kb, caso o pino EA seja aterrado) de memria de programa, e por at 64 Kb de memria de dados. Caso o espao de memria interna seja suficiente para determinada aplicao, o sistema pode trabalhar sem a memria externa.Os 64 Kb de memria externa de dados so acessados automaticamente quando a instruo MOVX (Move eXternal) for executada. J os 128 bytes da RAM interna podem ser acessados por diferentes instrues, atravs de endereamento direto ou indireto. Esta RAM interna pode ser subdividida em trs segmentos que so:1. Banco de Registros: so quatro bancos de registros, numerados de 0 a 3, ocupando as posies de 0 at 1FH (32 bytes no total). Cada banco contm oito registros de um byte cada, numerados de 0 a 7. Por default o banco corrente o 0, entretanto pode-se selecion-lo por software, atravs de dois flags, RS0 e RS1, que fazem parte do registrador PSW, conforme a tabela 3.1.Tabela 3.1 - Mapeamento dos bancos de registrosBANCORS1RS0REGISTRADORESPOSIO DE MEMRIA

311R7,R6, . . .,R01FH,1EH, . . .,18H

210R7,R6, . . .,R017H,16H, . . .,10H

101R7,R6, . . .,R00FH,0EH, . . .,08H

000R7,R6, . . .,R007H,06H, . . .,00H

2. rea de bits Endereveis: este segmento composto por 16 bytes, ocupando as posies de 20H a 2FH. Pode-se acessar os dados contidos neste segmento de duas formas: individualmente cada um dos 128 bits do segmento; ou em grupos de 8 bits, ou seja, byte a byte. A CPU dispe de instrues especficas para o manuseio de bits, onde se designa diretamente o endereo do bit desejado.3. rea de Propsito Geral: os bytes localizados nos endereos de 30H at 7FH formam uma rea de propsito geral, porm parte deste segmento usado para acomodar a pilha do sistema.A figura 3.5 mostra a configurao de hardware para o acesso a at 2K de RAM externa. Neste caso a CPU est executando a partir da ROM interna. Note o modo de endereamento paginado a que esta configurao se prope, com o que apenas 11 linhas de E/S so utilizadas como barramento. O endereo pode ter largura de 1 ou 2 bytes. Quando utilizando 1 byte, uma ou mais outras linhas de E/S podem ser utilizadas, como mostrado na figura 3.5. Quando utilizando 2 bytes de largura, o byte mais significativo enviado pela porta 2.

Figura 3.5 Configurao de hardware para o uso de memria de dados externa.O mapeamento da memria de dados interna mostrado na figura 3.6. Ela dividida em trs blocos, referidos como 128-Inferior (Lower 128), 128-Superior (Upper 128) e espao SFR (Special Function Register). Os registradores mapeados em memria ocupam os primeiros 32 bytes do bloco Inferior, agrupados em quatro bancos de 8 registradores (R0 a R7). Dois bits na Palavra de Status de Programa (PSW, Program Status Word) selecionam um dos bancos. Isto permite maior eficincia no espao do cdigo, uma vez que instrues que se referem a registradores so menores do que instrues de endereamento direto.

Figura 3.6 Mapa da memria de dados interna.Os 16 bytes acima do banco de registradores formam o espao de bits endereveis. O conjunto de instrues do 8051 inclui uma grande quantidade de instrues de um nico bit, e os 128 bits dessa rea podem ser acessados por essas instrues. O bloco 128-Inferior ocupa o intervalo de endereos de 00H at 7FH, e seu mapeamento visto na Figura 3.7.

Figura 3.7 Mapeamento do bloco 128-Inferior.Os bancos so selecionveis pelas instrues atravs de dois bits do registrador PSW. Os prximos 16 bytes acima dos bancos de registradores formam um espao de memria enderevel-por-bit. Todos os bytes no 128-inferior podem ser acessados por endereamento direto ou indireto; j o 128-Superior s pode ser acessado por endereamento indireto, e ficam disponveis como pilha nos dispositivos com 256 bytes de RAM. Mas o bloco 128-Superior no est implementado no 8051.

Figura 3.8 Estrutura simplificada do espao SFR.A Figura 3.8 mostra a estrutura simplificada do espao SFR; este inclui buffers (latches) de E/S, temporizadores, controles de perifricos, etc. Tais registradores s podem ser acessados por endereamento direto, sendo que 16 endereos so simultaneamente endereados-por-bit e endereados-por-byte. O bloco SFR ocupa o espao de endereamento 80H a FFH. Tais registradores podem ser acessados exclusivamente por acesso direto.Todos os membros da famlia 8051 executam o mesmo conjunto de instrues classificadas como: aritmticas, lgicas, transferncia de controle, transferncia de dados e booleanas. Dispem de uma variedade de modos de endereamento RAM interna. Suporte a variveis de um bit tambm disponvel, permitindo manipulao direta em sistemas de controle e lgica que requerem processamento booleano.3.4Descrio dos Registros de Funo EspecialOs registros mapeados em memria incluem os latches das portas de E/S, temporizadores/contadores, canal serial, registros ligados unidade de lgica e aritmtica (ULA), registros apontadores, registros usados no sistema de interrupo, alm de outros registros de funo especial. importante ressaltar que, com exceo do contador de programa, todos os outros registros so mapeados em memria interna de dados.O 8051 possui 20 SFRs de 8 bits cada, mapeados em memria interna, e um contador de programa (PC) de 16 bits. Na tabela 3.2 esto relacionados os 20 SFRs com seus mnemnicos, nomes e endereos. Nesta tabela tambm esto destacados os registros que podem ser endereados bit a bit.Tabela 3.2: Registros de funo especialMNEMNICONOMEENDEREO

*ACCAccumulator0E0H

*BRegister B0F0H

*PSWProgram Status Word0D0H

SPStack Pointer81H

DPTRData PointerRegister

DPLData Pointer Low82H

DPHData Pointer High83H

*P0Port 080H

*P1Port 190H

*P2Port 20A0H

*P3Port 30B0H

*IPInterrupt Priority0B8H

*IEInterrupt Enable0A8H

TMODTimer Mode89H

*TCONTimer/Counter Control88H

TH0Timer/Counter 0 high8CH

TL0Timer/Counter 0 low8AH

TH1Timer/Counter 1 high8DH

TL1Timer/Counter 1 low8BH

*SCONSerial Control98H

SBUFSerial Buffer99H

PCONPower Control87H

Ser feita agora uma descrio funcional dos registros do 8051. Contador de Programa (PC): os 16 bits deste registro controlam a seqncia na qual as instrues armazenadas na memria de programa sero executadas. Este registro manipulado pelas instrues de transferncia de fluxo (desvio), ou seqencialmente incrementado, seguindo o fluxo normal de execuo. Registro A ou ACC: o tradicional acumulador, fortemente ligado ULA. Registro B: um acumulador auxiliar, usado principalmente nas instrues de multiplicao e diviso. Registro de flags (sinalizadores da CPU): os flags do 8051 fazem parte do registrador Program Status Word (PSW). Este byte, localizado no espao SFR, contm alguns bits de status que refletem o estado de manipulao da informao e controle de operaes da CPU. Mostrado na figura 3.9, o PSW contm os flags Carry (CY), Auxiliary Carry (AC) para operaes BCD, Overflow (OV), Paridade (P), dois bits de seleo de banco de registradores (RS0 e RS1) e dois bits de status definidos pelo usurio.O bit de paridade reflete o nmero de 1s no acumulador; se P = 1, este nmero mpar e, se P = 0, o contedo par. Ou seja, o nmero de 1s no acumulador mais P sempre par.O bit de Carry, alm de sua funo tradicional em operaes aritmticas, tambm tem funo de acumulador em algumas operaes booleanas.

Figura 3.9 Flags do registrador PSW. Apontador de Pilha (SP): como o prprio nome sugere, o registro que aponta para o topo da pilha. manipulado pelas instrues de chamada e retorno de sub-rotinas, alm de instrues especficas para insero ou retirada de dados da pilha. Por conter apenas 8 bits, este registro enderea apenas a memria RAM interna. Desta forma, a pilha do sistema fica limitada a esta rea. Apontador de Dados (DPTR): usado basicamente para enderear contedos dentro de uma memria externa (de dados ou programa), atravs da instruo MOVX. Pode ser dividido em dois registros de 8 bits (DPL e DPH). Portas - P0, P1, P2 e P3: so 4 registros usados para realizar as operaes de E/S, compondo 32 linhas de interface com o mundo exterior. Controle de Prioridade de Interrupo (IP): contm os bits de controle que indicam a prioridade das interrupes. Controle de Habilitao de Interrupo (IE): este registro controla as mscaras de habilitao global de interrupes e de cada interrupo em particular. Registros TCON e TMOD: so registros usados para programar os temporizadores/contadores (T/C). Registros TH1, TL1, TH0 e TL0: so os registros de dados dos T/Cs. Estes 4 registros podem ser lidos ou escritos, facilitando o acesso aos T/C. Registro de Controle da Serial (SCON): serve para selecionar o modo de operao da interface serial. Buffers de dados da porta serial (SBUF): so dois registros mapeados no mesmo endereo, entretanto um de leitura (recepo de dados) e o outro de escrita (transmisso de dados).3.5Modos de EndereamentoPara acessar um dado ou operando, as instrues dos microcontroladores MCS-51 contam com seis modos de endereamento: Endereamento Direto Endereamento Indireto Instrues de Registradores Instrues de Registradores Especficos Endereamento Imediato Endereamento Indexado Endereamento Direto: nesse modo, o endereo do operando especificado por um campo de 8 bits na instruo. Somente a RAM de dados interna e a regio SFR podem ser diretamente endereadas. Endereamento Indireto: a instruo especifica um registrador que contm o endereo do operando. Ambas as RAM's, externa e interna, podem ser indiretamente acessadas. Se tal endereo possui 8 bits, seu valor armazenado em R0 ou R1 do respectivo banco selecionado, ou no Stack Pointer. Por outro lado, se tal endereo possui 16 bits, seu valor armazenado no registrador DPTR. Endereamento Direto por Registradores: realizado por instrues de registradores, que so instrues que carregam uma especificao de 3 bits em seu opcode, com referncia ao registrador a ser utilizado, podendo acessar registradores de R0 a R7 dos bancos de registradores. Instrues deste tipo so mais eficientes em termos de cdigo, uma vez que eliminam um byte de endereo. Quando uma instruo desse tipo executada, um dos quatro bancos de registradores selecionado pelos bits de seleo de banco, RS0 e RS1, do PSW. Endereamento Inerente ou por Registrador Especfico: algumas instrues so especficas a certos registradores. O prprio opcode capaz de realizar tal tarefa. As instrues de Registradores especficos nada mais so do que aquelas que operam sempre num registrador em especial , como no acumulador, DPTR, etc. Ou seja, no necessrio um byte de endereamento especfico para apontar qual o registrador. Endereamento Imediato: quando uma constante (o prprio dado) segue o opcode. Endereamento Indexado: somente a memria de programa, cuja nica operao leitura, pode ser acessada por esse modo, usado para fazer leituras de tabelas nessa memria. Um registrador de 16 bits (DPTR ou PC) aponta para o incio da tabela, enquanto o acumulador ajustado para a n-sima posio da mesma. O endereo de uma entrada para a tabela formado pela soma entre o acumulador e o registrador de 16 bits. Uma outra aplicao desse tipo de endereamento na formao do endereo destino de jumps pela soma do ndice e do valor do acumulador.Por exemplo, a instruo ADD A, pode ser escrita como:

ADD A, 7FH (direto)ADD A, @RO (indireto)ADD A, R7 (registrador)ADD A, #127 (imediato)

4HARDWARE DO 80514.1Anlise externaO aspecto externo do 8051 o da figura 4.1. Os pinos com nomes da forma P0.0, P0.1, etc. correspondem s quatro portas de E/S (P0 a P3). Note a dupla utilidade das portas P0 e P2, que ficam comprometidas com o uso de memria externa, assim como os pinos P3.6 e P3.7. O sinal ALE (Address Latch Enable) permite fazer a demultiplexao de dados e endereos na porta P0, da maneira que foi mostrado anteriormente.Atravs do sinal PSEN (program storage enable), o controlador informa o mundo externo se a operao em andamento uma leitura de instruo (acesso memria de programa) ou um acesso memria de dados. Este sinal permite que o processador tenha duas regies distintas de memria externa, uma para armazenar cdigo e outra para dados. Ambas ocupam os endereos de 0 a FFFFH (64 kB), num total de 128 kB.

Figura 4.1 Pinagem do 8051O pino EA um sinal de entrada, atravs do qual o usurio escolhe se ser utilizada a memria ROM interna ou se todo o programa ser armazenado externamente.

Descrio dos Pinos do 8051:Vcc (40) - Alimentao de +5V.Vss (20) - Terra.P0 (32-39) - Porta 0 (AD0...AD7). Alm de porta paralela, est multiplexada com o byte menos significativo (LSB) dos endereos e dos dados. Admite 8 cargas LS TTL.P2 (21-28) - Porta 2 (A8...A15). Alm de porta paralela, est multiplexada com o byte mais significativo (MSB) dos endereos. Admite 4 cargas LS TTL.P1 (1-8) - Porta 1. Admite 4 cargas LS TTL.P3 (10-17) - Porta 3. Compartilhada com uma srie de recursos Admite 4 cargas LS TTL.Os pinos da porta P3 tambm so utilizados para realizar certas funes especiais: P3.0 - RxD/data - recepo serial assncrona ou E/S de dados sncronos; P3.1 - TxD/clock - transmisso porta serial assncrona ou sada de clock p/ dados sncronos; P3.2 - INT0 - entrada da interrupo 0 ou bit de controle para o temporizador/contador 0; P3.3 - INT1 - entrada da interrupo 1 ou bit de controle para temporizador/contador ; P3.4 - T0 - entrada de clock externo para o temporizador/contador 0; P3.5 - T1 - entrada de clock externo para o temporizador/contador 1; P3.6 - WR - sinal de escrita na memria de dados externa; P3.7 - RD - sinal de leitura na memria de dados externa.RST (9) - Reset. Com o oscilador funcionando, deve ser mantido um nvel alto durante 24 perodos.ALE/PROG (30) - Address Latch Enable. Pulso para acionar o latch que captura o LSB do endereo (com sua borda ascendente). Ele emitido razo de 1/6 da freqncia do oscilador e pode ser usado para acionar entradas externas. Um ALE omitido durante o acesso Memria de Dados Externa. Tambm usada na gravao da ROM interna.*PSEN (29) - Program Store Enable. Pulso de leitura para a Memria de Programa Externa. Quando o programa est sendo executado na memria de programa externa ele aparece como 1/6 da freqncia de clock. Quando h acesso memria de dados externa, 2 PSEN so perdidos.*EA/VPP (31) - External Access Enable. Informa CPU se o programa est na Memria de Programa Externa ou na ROM Interna. Tambm usado para gravao da ROM Interna.*EA = 1 (Vcc) (0000H - 0FFFH) ROM Interna (1000H - FFFFH) Memria de Programa Externa*EA = 0 (Vss) (0000H - FFFFH) Memria de Programa ExternaXTAL1 (19) - Entrada do amplificador inversor do oscilador interno. Deve ser conectado terra se for usado um clock externo (HMOS) ou ao clock externo (CHMOS).XTAL2 (20) - Sada do amplificador inversor do oscilador interno. Se for usado clock externo, serve como entrada para o mesmo (HMOS) ou no conectado (CHMOS).4.2Oscilador do 8051Todos os microcontroladores da familia MCS-51 possuem um oscilador interno que pode ser utilizado, se desejado, como um gerador de clock para a CPU. Para se usar o oscilador interno, basta conectar um cristal ou um ressonador cermico entre os pinos XTAL1 e XTAL2 do microcontrolador, e capacitores ao terra como mostra a figura 4.2.

Figura 4.2: Utilizao do 8051 com cristal.Exemplos de como se utilizar o clock com oscilador externo so mostrados abaixo:Figura 4.3: utilizao do 8051 com oscilador externo.4.3Ciclos de MquinaUm ciclo de mquina consiste de uma seqncia de 6 estados (S1 a S6). Cada estado toma 2 perodos de clock e, portanto, um ciclo de mquina toma 12 perodos de clock ou 1 s sob uma freqncia de 12MHz.A figura 4.4 mostra a seqncia de busca/execuo para alguns tipos de instrues. Normalmente dois ciclos de busca so executados em cada ciclo de mquina, mesmo que a instruo sendo executada no o requeira, caso em que o byte buscado ignorado e o PC no incrementado.

Figura 4.4 Ciclo de Mquina.Instrues de um ciclo comeam em S1, em S4 gerada uma segunda busca e, no fim de S6, a instruo est completa. O ciclo busca/execuo o mesmo com memria de programa externa ou interna. A Figura 4.5 mostra os sinais e as temporizaes envolvidas quando a memria de programas externa. Nesse caso, o sinal PSEN ativo duas vezes por ciclo de mquina. Se um acesso memria de dados externa ocorre, como mostrado na Figura 4.4, dois PSEN so pulados porque o bus de endereos e o bus de dados esto sendo utilizados para acesso memria de dados. Note que um ciclo de memria de dados externa toma duas vezes mais tempo que um ciclo de memria de programas. A figura 4.5 mostra a dinmica dos endereos 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 memria de programas externa ou interna, podendo ser utilizado como uma sada de clock.

Figura 4.5 Ciclo de barramento para acesso memria externa.A instruo MOVX gasta 2 ciclos mquinas a ser executadas, no sendo necessria nenhuma busca do cdigo de programa feita durante o 2 ciclo mquina, pois esta instruo ocupa 1 byte na memria de programa.4.4Hardware para memria externaUm exemplo de utilizao de memria externa mostrado na figura 4.6. No caso, esto sendo utilizadas externamente tanto memria de programa como memria de dados, mas possvel a utilizao de apenas uma delas (somente a ROM).

Figura 4.6 - Expandindo RAM e ROMComo pode ser visto na figura 4.6, alm das memrias faz-se necessrio a utilizao de um outro CI (no caso o 74373) para a multiplexao de dados e endereos. Ocorre da seguinte forma: no primeiro ciclo de mquina, o 8051 coloca nos pinos AD0 a AD7 o byte menos significativo do endereo externo e leva o pino ALE (Address Latch Enable Habilitador da Trava de Endereos) a nvel alto, de modo que o 74373 (oito Latches tipo D) coloque em suas sadas essa informao, e logo em seguida passa este pino para nvel baixo, para que esse byte fique retido no 74373. Aps isso, os pinos AD0 a AD7 estaro livres para o transporte dos dados.O 8051 pode, no modo expandido (memria externa), utilizar toda a memria de programa externa (com nvel lgico 0 aplicado ao pino 31 - External Address NOT) ou ainda utilizar os primeiros 4 KB internos e o restante externo (com 1 em EA).O CI 8031 a verso sem ROM interna do 8051. O mesmo muito utilizado em fase de desenvolvimento ou quando se quer produzir em pequenas quantidades. Como o 8031 tem a mesma pinagem que o 8051, o mesmo possui o pino EA, que dever sempre ser utilizado em nvel lgico baixo.Retornando a figura 4.6, nela estamos utilizando 8kB de RAM externa, alm dos 256 bytes de RAM interna. Alm disso, temos um total de 8kB de memria ROM que, no caso do 8051, pode estar sendo utilizado apenas no CI externo ou com os 4096 bytes menos significativos em memria interna e os 4096 bytes mais significativos na memria externa.Ainda em relao figura 4.6, para fazer uma leitura na ROM externa, o pino PSEN ser levado a nvel baixo, para fazer uma leitura na RAM externa, o pino RD ser levado a nvel baixo e, para fazer uma escrita na RAM externa, o pino WR ser levado a nvel baixo.4.5ResetA entrada de Reset o pino RST que possui um Schmitt Triger na entrada. O Reset realizado quando este pino se mantm em nvel alto pelo menos por 2 ciclos de mquina (24 clocks) enquanto o oscilador estiver funcionando. A RAM Interna no afetada pelo reset. Depois do RESET, a CPU inicializada com os seguintes dados:

ESTADO DOS REGISTROS APS O RESETSP = 7SBUF = ?P0,P1,P2,P3 = FFHOUTROS SFR = 0

Figura 4.7 Circuito de Reset para o 8051.Um reset automtico pode ser obtido quando Vcc ligado ao pino RST passando por um capacitor de 10F e ligados ao Vss passando por um resistor de 8.2K, provocando um ascenso de Vcc no superior a 1ms e o start-up do oscilador no superior a 10 ms, sendo mostrado na figura 4.7 o circuito adequado para gerar um power on reset.Quando a alimentao ligada o pino RST fica no estado alto por um tempo que depende do valor do capacitor e da taxa de carga que aplicada ao mesmo. Para garantir um bom reset deve-se garantir um tempo alto do pino RST maior que dois ciclos de mquina, o que s ocorre aps o start-up do oscilador (normalmente poucos ms).Note que o valor dos pinos fica em estado aleatrio antes do oscilador comear a funcionar e durante o perodo que a rotina interna de reset est em progresso.5CONJUNTO DE INSTRUESTodos os componentes da famlia de microcontroladores Intel MCS-51 executam o mesmo conjunto de instrues, com o auxlio de seu Macro Assembler ASM-51. O conjunto de instrues da famlia MCS-51 direcionado para aplicaes de controle de 8 bits. Ele permite manipulao de dados de 1 ou 2 bytes, alm de fornecer suporte para variveis de um bit em sistemas lgicos que necessitem de processamento booleano.O 8051 possui 111 instrues distintas; dessas, 49 possuem cdigo de operao de um byte apenas, 45 de dois bytes e 17 de trs bytes. Logo abaixo, ser feito um levantamento dessas instrues agrupadas nas categorias: transferncia de dados, aritmticas, lgicas e transferncia de controle.Para a exposio das instrues, utilizar-se-o as seguintes abreviaturas:

Rn direto, dir @Ri #data, #dt #data16, #dt16 adr16 adr11 rel bit A Acc. qualquer registro R0, R1, ...,R7 endereo da RAM interna (8 bits) @R0 ou @R1, usado para endereamento indireto constante de 8 bits (byte) constante de 16 bits endereo de 16 bits (enderea 64 KB) endereo de 11 bits (enderea 2 KB) deslocamento relativo (complemento a 2: -128 a +127) endereo de um bit da RAM interna acumulador (registro) endereo do acumulador5.1Modos de EndereamentoDe acordo com o "Data Sheet" do MCS-51, existem 6 modos de endereamento com a seguinte nomenclatura :

ImediatoDiretoIndiretoRegistradorRegistrador EspecficoIndexadoImediato:O valor da constante colocado no opcode.MOV A, #100Carrega 100 no acumulador (Acc=100). O byte 100 um dado imediato. Deve-se notar a presena do sinal # que indica operao imediata.

Direto:O operando especifica um endereo de 8 bits da RAM interna.MOV A, 20Transfere para o acumulador o contedo do endereo 20 da RAM Interna. Todo endereamento direto usa a RAM Interna.Indireto: Aqui se especifica um registro onde est o endereo do operando. S pode ser usado para endereamento indireto: R0, R1 ou DPTR.MOV A, @R0Coloca no acumulador o contedo do endereo que est em R0Registro: No cdigo de operao da instruo existe um campo de 3 bits (pois so 8 registradores, de R0 a R7) onde especificado o registro a ser utilizado. Essa forma eficiente e evita utilizar um byte adicional para indicar o registro.MOV A,R0Coloca no acumulador o contedo de R0. uma instruo de um s byte.Registro Especifico: Algumas operaes so especificas para certos registros. Por exemplo, algumas instrues sempre operam com Acc ou DPTR e no necessitam de espao no opcode para especificar isto.MOVX A,@DPTREsta uma instruo para leitura da Memria de Dados Externa. Coloca no acumulador o contedo do endereo da RAM Externa que est no DPTR. Como sempre so usados Acc e DPTR, no necessrio especific-los, o que faz com que a instruo empregue apenas 1 byte.Indexado: O endereo do operando formado pela soma de um endereo base com um registro de indexao. Somente a Memria de Programa pode ser endereada deste modo.MOVC A,@A+DPTRA -ndice,DPTR -endereo base.A soma do DPTR com o acumulador forma um endereo da Memria de Programa e o contedo deste endereo transferido para o acumulador. Essa instruo tima para "look up table".5.2Instrues AritmticasAs quatro operaes bsicas (soma, subtrao, multiplicao e diviso) podem ser executadas pelo 8051, com operandos de 8 bits. Entretanto, atravs dos flags pode-se realizar as duas primeiras operaes com nmeros com mais de 8 bits, sinalizados ou no.INC e DEC incrementam e decrementam, respectivamente, o contedo do operando.ADD e ADDC efetuam a soma do acumulador com um segundo operando, colocando o resultado no primeiro. A instruo ADDC leva em conta o vai-um nesta operao.SUBB realiza a subtrao do acumulador com um segundo operando e com o carry, colocando o resultado no acumulador.DA ajusta o resultado da ltima operao aritmtica para o formato BCD; no converte um nmero binrio em BCD, mas sim ajusta o resultado de uma operao ADD ou ADDC envolvendo valores BCD.MUL e DIV executam as operaes de multiplicao e diviso, respectivamente. Os operandos so os registros A e B. O resultado conduzido aos mesmos registros, conforme a tabela 5.1.Tabela 5.1 Instrues aritmticas do 8051.MnemonicOperationAddressing ModesExecution Time (s)

DirIndRegImm

ADD A,A = A + XXXX1

ADDC A,A = A + + CXXXX1

SUBB A,A = A + - CXXXX1

INC AA = A + 1Accumulator only1

INC = + 1XXX1

INC DPTRDPTR= DPTR + 1Data Pointer only2

DEC AA = A 1Accumulator only1

DEC = - 1XXX1

MUL ABB:A= B x AACC and B only4

DIV ABA= Int [A/B]B= Mod [A/B]ACC and B only4

DA ADecimal AdjustAccumulator only4

5.3Instrues Lgicas e BooleanasO 8051 realiza as operaes lgicas bsicas, tanto com operandos de 1 bit como com operandos de 1 byte. As instrues lgicas podem ser divididas em:

1. Instrues com um nico operando

1. CLR: usado para introduzir o valor zero (0) no registro A, ou no flag CY, ou em qualquer bit diretamente enderevel2. SETB: introduz o valor 1 no CY ou em qualquer bit enderevel.3. CPL: realiza o complemento de um. Os operandos so os mesmos da instruo CLR.4. RL, RLC, RR, RRC, SWAP: realizam as operaes de rotao e deslocamento de bits, usando o acumulador como operando.

2. Instrues com dois operandos

1. ANL: realiza a operao lgica AND com operandos de 1 ou 8 bits, e retorna o resultado para o primeiro operando2. ORL: idem anterior, sendo que se realiza a operao lgica OR3. XRL: executa o XOR entre dois operandos de 8 bits e retorna o resultado para o primeiro operando.As instrues lgicas realizam operaes booleanas (AND, OR, Exclusive OR e NOT) bit a bit entre dois bytes. Elas tambm podem enderear seus operandos por diversos modos como por exemplo, a instruo ANL A, :

ANL A, 7FH (direto)ANL A, @RI (indireto)ANL A, R6 (por registrador)ANL A, #53H (imediato)

Tabela 5.2 Instrues Lgicas do 8051.

Todas as instrues desse tipo que utilizam o acumulador como registrador especfico tomam 1 s para serem executadas, enquanto as demais tomam 2 s. Os modos de endereamento disponveis tornam desnecessrio carregar qualquer operando que estiver na memria de dados interna para o acumulador. No utilizar o acumulador economiza o tempo em empilhar seu contedo quando do atendimento a uma interrupo.5.4Instrues de Transferncia de DadosEssas instrues so divididas em trs subgrupos, conforme a localizao do dado: na RAM interna, na RAM externa ou na memria de programa (Lookup Tables).5.4.1RAM InternaSob um clock de 12MHz, uma operao desse tipo realizada em 1 s ou 2 s. Esse conjunto de instrues mostrado na tabela 3, conta com a facilidade, por exemplo, de MOV , que transfere dados entre duas posies de RAM interna ou na regio SFR, dispensando qualquer carregamento do Acumulador. PUSH e POP utilizam endereamento direto para identificar o byte a ser salvo ou restaurado, mas usam endereamento indireto para acessar a pilha atravs do registrador SP. Em dispositivos que no contam com a regio Upper 128, se a pilha tenta avanar sobre ela, bytes de PUSH so perdidos e de POP so indeterminados.Movimentao de 16 bits til para inicializar o DPTR, para acesso a Lookup Tables na memria de programa ou acesso memria de dados externa.As instrues de transferncia de dados em RAM interna podem ser subdivididas em duas categorias:Transferncia de propsito geralMOV: realiza a transferncia de 1, 8 ou 16 bits do operando fonte para o operando destino.PUSH: incrementa o registro SP, e ento, transfere o operando fonte para o topo da pilha.POP: transfere o contedo do topo da pilha para o operando destino, e decrementa o SP.Transferncia especfica com o acumuladorXCH: permuta o byte do operando fonte com o do acumulador.XCHD: permuta os 4 bits baixos do operando fonte com os 4 bits baixos do acumulador.MOVX: executa a transferncia de um byte entre a memria externa de dados e o registro A. O endereo externo pode ser especificado pelos registros DPTR ou R0 e R1.MOVC: realiza a transferncia de um byte da memria de programa para o registro A. Neste caso, usa-se o endereamento indexado, onde o prprio acumulador o ndice e os registros DPTR ou PC so usados como base do endereo.Tabela 5.3 - Instrues de transferncia de dados em RAM interna.

5.4.2RAM ExternaA tabela 5.4 mostra a lista de instrues de transferncia de dados para acesso memria externa, onde somente endereamento indireto pode ser utilizado. Pode-se escolher o uso de endereos de 8 bits, @Ri, onde Ri pode ser o registrador R0 ou o registrador R1, ou endereos de 16 bits, @DPTR. A desvantagem em se usar endereos de 16 bits, quando poucos Kbytes de memria de dados externa esto envolvidos, o sacrifcio de todos os 8 bits da Porta 2 (veja Figura 2). O acumulador sempre a fonte ou o destino da transferncia.Os sinais RD e WR s so gerados quando da execuo de uma instruo do tipo MOVX, assim, se uma RAM externa no disponvel, tais sinais podem ser utilizados como linhas de E/S extras.Tabela 5.4 - Instrues de transferncia de dados em RAM externa.

5.4.3Memria de ProgramaA tabela 5.5 mostra as duas nicas instrues disponveis para ler Lookup Tables (Tabelas de Pesquisa), localizadas na memria de programa. Uma vez que residem na memria de programa, tais tabelas podem apenas ser lidas, nunca atualizadas por tais instrues. Se essas tabelas se encontrarem na memria de programas externa, o sinal de leitura PSEN .Tabela 5.5 - Instrues para leitura de Lookup Table em memria de programa

MOVC o mnemnico para Move Constant. A primeira instruo MOVC podeacomodar uma tabela de 256 entradas (0 a 255). O nmero da entrada armazenado no acumulador e o registrador DPTR carregado com o endereo inicial da tabela.A segunda instruo utiliza o PC como a base da tabela, que acessada atravs de subrotina. O acumulador carregado com o valor da entrada da tabela e a subrotina chamada:MOV A, #ENTRADACALL LOOKUP_TABLESub-rotina:LOOKUP_TABLE: MOVC A, @A+PCA tabela em si segue imediatamente aps a instruo RET. Ela comporta 255 entradas (1 a 255), pois a entrada 0 enderea a instruo RET.5.5Instrues BooleanasOs dispositivos da famlia 8051 contam com um conjunto completo de operaes booleanas (tabela 9) sob bits nicos. O espao Lower 128 da RAM interna suporta 128 bits endereveis e o espao SFR pode suportar outros 128 bits endereveis. Todas as linhas das portas so bits-endereveis e cada uma dessas linhas pode ser tratada como uma porta de um nico bit. As instrues que acessam esses bits no so apenas desvios condicionais mas uma completa lista de mov, set, clear, complement, OR e AND. Esse tipo de operaes sobre bits no facilmente obtido em outras arquiteturas sem uma razovel quantidade de cdigo.Todos esses bits so endereados diretamente. Os bits de endereo entre 00H e 7FH acessam o espao Lower 128 enquanto entre 80H e FFH acessam o espao SFR. Note como fcil um flag interno ser movido para um pino de uma porta:MOV C, FLAGMOV P1.0, Conde FLAG o nome de qualquer bit enderevel em Lower 128 ou SFR. Nessa seqncia, bit de FLAG movido para o bit menos significativo da Porta l. O bit Carry do PSW utilizado como acumulador para operaes booleanas.As operaes de jump desse conjunto testam um nico bit, que possa ser diretamente enderevel, como condio. Uma vez que todos os bits de PSW so endereados diretamente, pois esto no espao SFR, pode se utiliz-los como alguma condio de jump.Para jumps relativos, o endereo contido no cdigo somado ao PC em complemento de dois se o jump executado. Portanto, distncia de salto pode variar na faixa de 128 a +127 bytes a partir do endereo do byte de desvio.Tabela 5.6 Instrues booleanas.

5.6Instrues de Transferncia de Controle (Desvio)O conjunto de instrues de salto ou desvio pode ser dividido em dois subgrupos: jumps condicionais e jumps incondicionais.5.6.1Desvios IncondicionaisO conjunto de instrues de salto incondicional (tabela 5.7) possui seis instrues em seu repertrio. JMP apenas um mnemnico genrico utilizado pelo programador que no precisa saber como ele realmente interpretado pelo assembler. Na realidade, JMP corresponde a trs instrues: SJMP, LJMP e AJMP, cada uma indicada a situaes de endereo de desvio diferente.Tabela 5.7 Instrues de desvio incondicional.

A instruo SJMP calcula o endereo destino como descrito acima, que pode varrer uma largura de 128 a +127 bytes na memria de programa. A instruo LJMP codifica o endereo destino como uma constante de 16 bits que pode ser qualquer posio nos 64 Kbytes da memria de programas. A instruo AJMP codifica o endereo destino como uma constante de 11 bits; a instruo consiste em 2 bytes: 3 bits do endereo localizam-se no opcode enquanto os outros 8 bits localizam-se no prximo byte. Os 11 bits assim formados simplesmente substituem os 11 bits menos significativos do PC.Em todos os casos, o programador especifica o endereo destino de duas maneiras ou como um label ou como um constante de 16 bits. O assembler se encarrega de colocar o endereo destino para o correto formato de instruo.A instruo JMP @A + DPTR implementa o comando CASE. O endereo destino computado em tempo de execuo como a soma do contedo do Acumulador e o registrador DPTR. Tipicamente, DPTR carregado com o endereo de uma tabela de jumps e, ao acumulador, dado o valor de um ndice dessa tabela.Semelhante instruo JMP, a instruo CALL, na realidade, duas: LCALL e ACALL, usadas para ativar uma sub-rotina, que diferem na forma como o endereo da subrotina dado CPU. LCALL utiliza o endereo destino em 16 bits (instruo de 3 bytes) que pode ser qualquer localidade dos 64 Kbytes da memria de programas. ACALL utiliza formatos de endereos em 11 bits (instruo de 2 bytes), o que significa que o endereo destino deve estar no mesmo bloco de 2 Kbytes seguintes instruo. A transparncia para o programador de CALL semelhante de JMP.As instrues RET e RETI so as clssicas instrues de retorno de sub-rotinas. A diferena entre elas que RETI informa ao sistema de controle de interrupes que a interrupo em progresso terminou, sendo especfica para sub-rotinas de tratamento de interrupo.5.6.2Desvios CondicionaisO conjunto de jumps condicionais s permite endereamento de destino relativo, o que limita a distncia de salto entre 128 e + 127 bytes de distncia em relao instruo jump. importante notar que o programador especifica o endereo como um label ou uma constante de 16 bits.No h flag de zero, portanto JZ e JNZ testam o dado do acumulador para tal condio. JC, JNC, JB, JNB, e JBC so outras instrues de salto condicional, que testam flags ou bits endereveis antes de efetuar o desvio de execuoAs instrues DJNZ (Decrementa e Salta se No Zero) e CJNE (Compara e Salta se No Igual) so utilizadas para controle de laos. Uma aplicao de CJNE est em comparaes "maior que, menor que". Pelo valor do bit de Carry distingue-se entre as duas situaes. Se o primeiro menor que o segundo, o bit de carry setado. Se o primeiro maior ou igual ao segundo, o bit de carry zerado. As duas instrues so usadas para realizar comparao entre operandos de 8 bits e repeties iterativas de um bloco de instrues.Tabela 5.8 - Instrues de desvio condicional.

5.7Look-Up TablesQuando da programao de sistemas utilizando microprocessadores surge muitas vezes a necessidade de se utilizar as look-up tables. Um exemplo converter um numero numa base num outro noutra base, por exemplo converter um digito no seu correspondente ASCII

030h535h

131h636h

232h737h

333h838h

434h939h

Um modo simples de converter um numero decimal no seu correspondente ASCII, somar 30h ao numero, pois neste caso existe uma correspondncia direta entre o numero convertido e o numero a converter. No entanto podemos utilizar uma tabela com os valores j convertidos em que o valor a converter ser o deslocamento na tabela, aqui temos de ter um ponteiro de referncia para o inicio da tabela. No 8051 este ponteiro de referncia pode ser o PC ou o DPTR.

;*****************************************************************************;* Nome: converte_ASCII *;* Descrio: Faz a converso de um numero de 0-9 para equivalente ASCII *;* Entradas: Em A numero a converter *;* Sadas: Em A o seu equivalente em ASCII *;* Registos utilizados: a,dptr *;*****************************************************************************converte_ASCIIlcall tabeladb 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h ;valores para a tabelatabela:pop dph ;coloca o dptr a apontar para o inicio da tabelapop dplmovc a,@a+dptr ;vai tabela buscar o seu correspondente em ASCIIret

Listagem 1- Rotina utilizando look-up table.

6TEMPORIZADORES E CONTADORES6.1IntroduoO 8051 tem dois registros contadores de 16 bits, denominados TIMER0 e TIMER1, dedicados s funes de contagem e temporizao (counter/timer-contador/temporizador). H uma importante distino entre os conceitos de contador e temporizador.Quando opera como temporizador, o registro incrementado a cada ciclo de mquina (usa como base o cristal da CPU). O sinal de contagem aparece com 1/12 da freqncia do clock.Quando opera como contador, o registro incrementado de acordo com o sinal que se coloca nas entradas T1 e T0, ou seja, o contador opera a cada transio de 1 para 0 (borda de descida _) na entrada T0 ou T1.Deve-se ter um cuidado quando em operaes em modo contador: j se sabe que as entradas so amostradas durante S5P2 de cada ciclo de mquina. Quando em um ciclo de mquina a entrada detectada em 1 e depois em 0, no prximo ciclo o contador incrementado. O incremento acontece em S3P1 do ciclo seguinte ao que foi detectada a transio. Para garantir que o nvel correto tenha sido amostrado, necessrio que o sinal de entrada (o sinal que vai acionar os contadores) permanea pelo menos um ciclo de mquina em nvel alto e pelo menos outro ciclo de mquina em nvel baixo, quer dizer, a mxima freqncia que responder o contador de 1/24 da freqncia de clock. O sinal de entrada pode ter qualquer "duty cycle", desde que se respeite a restrio antes mencionada.6.2Registros EnvolvidosDois registros SFR so utilizados para controlar as funes e operaes do temporizador/contador: em TMOD especifica-se o modo de operao e em TCON controla-se a operao. A figura 6.1 ilustra o registro TMOD e a figura 6.2 ilustra o registro TCON.

Figura 6.1. Descrio do registro TMOD.GATE: especifica como ser feito o controle:se GATE = 1 - conta somente se TR1=1 e INT1=high, (idem para TR0 e INT0)se GATE = 0 - conta somente se TR1=1 (controle somente por software)(GATE especifica se INT1 ser usado para controlar o funcionamento do contador/temporizador pode ser usado para medir a largura de pulsos externos ligados a INT0 ou INT1)C/T: seleciona modo contador ou temporizador:se C /T = 1 - modo contador (conta usando a entrada T1)se C /T = 0 - modo temporizador (conta a cada ciclo de mquina)

M0M1seleciona o modo de operao

00THi temporizador/contador de 8 bits e TLi um pre-scaler de 5 bits,

01THi e TLi formam um temporizador/contador de 16 bits,

10contador/temporizador de 8 bits com auto-recarga (TLi conta e THi valor para recarga),

11-TL0 contador/temporizador de 8 bits (usando TR0, *INT0 e TF0) -TH0 contador/temporizador de 8 bits (usando TR1, *INT1 e TF1) -TH1 e TL1 parado (mas pode operar em outros modos)

Figura 6.2. Descrio do registro TCON.TF1:flag de transbordamento (overflow) do contador/temporizador 1. Ativado por hardware quando h transbordamento no timer 1. apagado por hardware quando o processamento desviado para a rotina de interrupo.TR1:bit de partida/parada (run/stop) do contador/temporizador 1.TF0:flag de transbordamento (overflow) do contador/temporizador 0. Ativado por hardware quando h transbordamento no timer 0. apagado por hardware quando o processamento desviado para a rotina de interrupo.TR0:bit de partida/parada (run/stop) do contador/temporizador 0.IE1:flag da interrupo externa 1. Ativada por hardware quando detectada uma interrupo. Apagado por hardware (somente se for modo borda) quando a interrupo processada, ou seja, quando se desvia para a rotina de interrupo.IT1:indica se a interrupo externa 1 opera por borda ou por nvel:1 -borda de descida (),0 -nvel baixo.E0:flag da interrupo externa 0. Ativada por hardware quando detectada uma interrupo. Apagado por hardware (somente se for modo borda) quando a interrupo processada, ou seja, quando se desvia para a rotina de interrupo.IT0:indica se a interrupo externa 0 opera por borda ou por nvel:1 -borda de descida (),0 -nvel baixo.6.3Modos de operaoOs dois contadores/temporizadores (timer1 e timer0) podem trabalhar em 4 modos de operao que so selecionados empregando os bits M1 e M0 do registro TMOD. Os modos 0, 1 e 2 so iguais para os 2 contadores/temporizadores mas o modo 3 diferente.6.3.1Modo 0Este modo idntico para os dois contadores/temporizadores. Neste modo tem-se um contador de 8 bits com um divisor (pre-scaler) de 5 bits. Resulta ento em um contador/temporizador de 13 bits, compatvel com o que havia no MCS-48. Os 13 bits so formados pelos 8 bits do registro THi e pelos 5 bits menos significativos do registro TLi. Os outros 3 bits do TLi so indeterminados. O transbordamento (overflow) gerador quando a contagem faz a transio de 1FFFH para 0000; neste instante ativa-se o bit de overflow (TF1 ou TF0).O controle da contagem simples: se GATE = 0, TR1 controla o contador/temporizador (controle por software) se GATE = 1, TR1 e INT1 controlam o contador/temporizador(permite tambm um controle externo por hardware)A figura 6.3 apresenta um diagrama em blocos do contador/temporizador 1 operando em modo 0. A mesma figura vlida para o contador/temporizador 0.

Figura 6.3. Diagrama em blocos para o TIMER 1 em MODO 0.6.3.2Modo 1Este modo de operao o mais simples e por isto muito utilizado. idntico ao modo 0, mas os contadores so de 16 bits. A figura 6.4. ilustra o diagrama em blocos para este modo, que idntico para os dois timers.

Figura 6.4. Diagrama em blocos para o TIMER 1 em MODO 1.6.3.3Modo 2Neste modo tem-se um contador/temporizador de 8 bits (TLi) com registro de recarga (THi) para quando ocorre o transbordamento. Neste modo os dois contadores/temporizadores operam de forma idntica. O transbordamento (overflow) no somente ativa TFi como tambm recarrega TLi com o valor guardado em THi (este permanece inalterado). O valor de recarga deve ser fornecido por software.

Figura 6.5. Diagrama em blocos para o TIMER 1 em MODO 2.6.3.4Modo 3Este o nico modo onde os contadores/temporizadores tm um comportamento diferente. Neste modo, o contador/temporizador 1 simplesmente suspende a contagem ( como se estivesse com TR1=0), enquanto o contador/temporizador 0 se divide em dois contadores de 8 bits: TH0 contador/temporizador de 8 bits usando C/*T, GATE, TR0, *INT0 e TF0, TL0 contador/temporizador de 8 bits usando TR1 e TF1 (ou seja, provoca a interrupo do timer 1). como se existissem 2 contadores/temporizadores de 8 bits (TH0 e TL0) e outro de 16 bits (timer 1). O timer 1, entretanto, pode ser usado para operar em qualquer outro modo (0, 1 ou 2) e usa-se o modo 3 para det-lo. No h problemas porque os modos so independentes. Tambm se pode usar o timer 1 (em modo 2) para gerar o "baud rate" da porta serial.

Figura 6.6. Diagrama em blocos para o TIMER 0 em MODO 3.EXEMPLO - LED_10HZAcender os leds vermelho, amarelo e verde a uma freqncia de 10 Hz. Para solucionar esse exerccio necessrio gerar um retardo equivalente ao perodo de 10 Hz. A figura 8.7 ilustra o clculo do valor do contador para gerar esse retardo.

Figura 6.7 clculo do valor do contador.Se F=10 Hz e CLOCK=3,575611 Hz, ento N=29797. Como este um contador que conta para cima, temos que subtrair este valor de 65536. Com isto, N=65536-29797=35739 ou 8B9BH. Na realidade, a freqncia gerada no ser exatamente 10 Hz mas de um valor muito prximo:F = 3,575611 / 12*29797 = 9,99 HzSer utilizado o timer 0 no modo 1; a cada interrupo a rotina acende um novo led e recarrega o timer.

Figura 6.8. Valor a ser programado em TMOD.

Figura 6.9. Valor a ser programado em IE.

;LED_10HZ.ASM;DEFSEG PROG, CLASS=CODE, START=0SEG PROG;DEZ_HZ EQU 35739;ORG RESETAJMP INIC;ORG TIMER0AJMP TIM0;ORG 50HINIC MOV TL0,#LOW DEZ_HZMOV TH0,#HIGH DEZ_HZMOV TMOD,#1 ;TIMER 0 EM MODO 1MOV IE,#82HMOV P1,#0 ;APAGAR TODOS OS LEDSMOV A,#01001001BCLR CSETB TR0SJMP $;ORG 100HTIM0 MOV TL0,#LOW DEZ_HZ ;REINICALIZARMOV TH0,#HIGH DEZ_HZ ;O CONTADORRLC AMOV P1,ARETIENDNotar que na rotina de interrupo est a recarga dos temporizadores que feita feita com a instruo "MOV direto,#data" mas que consome 2 ciclos de mquina, ou seja, que h um retardo que se acumula. Para evitar ou corrigir isso, pode-se adicionar ao contador o retardo da instruo; mais preciso usar "MOV TL0,# LOW (DEZ_HZ+2).Quando existem vrias interrupes, no se sabe com certeza quando uma interrupo do temporizador pode ser aceita; isso implica um erro maior que se acumula. H uma soluo simples porque depois do transbordamento o temporizador segue contando e esta contagem exatamente o tempo que atrasou o servio da interrupo; basta usar esse valor na recarga. As instrues a seguir ilustram a idia.

MOV A, #LOW (DEZ_HZ+2)ADD A, TL0 ;1 cicloMOV TL0, A ;1 cicloMOV TH0, #HIGH (DEZ_HZ+2)

7INTERRUPES7.1IntroduoO 8051 apresenta 5 tipos de interrupes: 2 externas 2 timers 1 serialAlguns outros membros da famlia MCS-51 podem apresentar outras interrupes; por exemplo, o 8052 tem uma interrupo adicional dedicada ao timer 2.7.2Registros EnvolvidosOs registros dedicados s interrupes permitem um controle total sobre as mesmas. Cada interrupo pode ser habilitada ou desabilitada individualmente. Tambm possvel desabilitar todas as interrupes de uma s vez. O registro IE (Interrupt Enable) controla a habilitao das interrupes e ilustrado na figura 7.1.

Figura 7.1. Registro IE - habilitao de interrupes.Cada interrupo pode ter dois nveis de prioridade: prioridade alta ou prioridade baixa. Uma interrupo de alta prioridade pode interromper uma de baixa prioridade mas no acontece o contrrio. Uma interrupo no pode interromper uma outra de mesma prioridade. Se forem recebidas interrupes de diferentes prioridades, a de alta prioridade atendida primeiro. Se forem recebidas duas interrupes de igual prioridade, determina-se por uma seqncia interna de polling (consulta) qual ser atendida primeiro. Assim, dentro de um mesmo nvel de prioridade, existe uma seqncia de atendimento (a seqncia do polling). O contedo do registro IP define as prioridades e ilustrado na figura 7.2.

Figura 7.2. Registro IP - prioridade das interrupes.As duas interrupes externas (INT0 e INT1) podem ser acionadas por nvel ou por borda de descida (). Isto definido atravs de dois bits do registro TCON. Este registro tambm tem outra finalidade pois cada interrupo indica sua ativao usando um bit do registro TCON.

Figura 7.3. Registro TCON - diversas funes para interrupes e timers.TF1:flag de transbordamento (overflow) do contador/temporizador 1. Ativado por hardware quando h transbordamento no contador do timer 1 (timer/counter 1). apagado por hardware quando o processador desviado para a rotina de atendimento da interrupo.TR1:bit de partida/parada (run/stop) do contador/temporizador 1.TF0:flag de transbordamento (overflow) do contador/temporizador 0. Ativado por hardware quando h transbordamento no contador do timer 0 (timer/counter 0). apagado por hardware quando o processador desviado para a rotina de atendimento da interrupo.TR0: bit de partida/parada (run/stop) do contador/temporizador 0.IE1: flag da interrupo externa 1. ativado (colocado em um) por hardware quando se detecta uma interrupo externa 1. apagado (colocado em zero) por hardware (s no modo borda) quando o processador desviado para a rotina de atendimento da interrupo.IT1:indica se a interrupo externa 1 opera por borda ou por nvel:1 -borda de descida (),0 -nvel baixo.IE0:flag da interrupo externa 0. ativado (colocado um) por hardware quando se detecta uma interrupo externa 0. apagado (colocado em zero) por hardware (s em modo borda) quando o processador desviado para a rotina de atendimento da interrupo.IT0:indica se a interrupo externa 0 opera por borda ou por nvel:1 _borda de descida (),0 _nvel baixo.O flag de interrupo da porta serial est em outro registro (SCON).

Figura 7.4. Esquema das interrupes na famlia MCS-51.

Todos os bits que geram interrupo podem ser ativados por software com os mesmos resultados como se tivessem sido ativados por hardware. Isto quer dizer que uma interrupo pode ser ativada por software e tambm que as interrupes pendentes podem ser canceladas. Cada interrupo vetorizada em um endereo pr-definido:RESET 00HExterna 0 IE0 03HTimer 0 TF0 0BHExterna 1 IE1 13HTimer 1 TF1 1BHSerial RI+TI 23H (+ indica OU)No endereo de vetorizao das interrupes h pouco espao, o suficiente para colocar umas poucas instrues. Portanto normal colocar nestes endereos um desvio (jump) para um outro local, onde est a rotina que atende interrupo.7.3Manejo de InterrupesOs flags das interrupes so amostrados na segunda fase do quinto estado (S5P2) de cada ciclo de mquina. As amostras so submetidas a polling (consulta) durante o prximo ciclo de mquina. A figura 7.5 ilustra a seqncia para atendimento de uma interrupo.Se um dos flags (de interrupo) est ativo durante S5P2, o prximo ciclo de polling vai detectar e identificar a interrupo a ser atendida e ser gerada uma instruo LCALL sempre que no seja bloqueada por: uma interrupo de prioridade igual ou mais alta que a que est sendo atendida, no tenha finalizado a instruo que se est processando no ciclo de polling corrente, a instruo em progresso um RETI ou uma escrita em IP ou IE.

Figura 7.5. Seqncia para atendimento a uma interrupo.Na figura 7.5 ilustrada a resposta mais rpida a uma interrupo. Neste caso CM2 o final de uma instruo e no um RETI nem uma escrita em IP ou IE. Quando CM2 uma instruo RETI ou uma escrita em IP ou IE, uma instruo a mais ser executada antes que a interrupo seja vetorizada.A seqncia de polling se repete a cada ciclo de mquina e os valores processados so aqueles que estaro presentes no instante S5P2 do ciclo de mquina anterior. Deve-se observar que se um flag de interrupo foi ativado mas no pde ser atendido (por uma das condies de bloqueio) e apagado antes da condio de bloqueio ser removida, a interrupo no ser atendida. Quer dizer, o fato de um flag de interrupo estar ativo e no ser atendido, no ser gravado.O processador reconhece um pedido de interrupo atravs da execuo de um LCALL gerado por hardware. Normalmente o flag que gerou o pedido zerado por hardware, exceto para: TI, RI da porta serial, IE0, IE1 quando ativado por nvelA instruo RETI usada para finalizar uma rotina de atendimento a interrupes. Uma instruo RET funciona mas o sistema de controle de interrupes no sabe que a rotina terminou, ou seja, sero bloqueadas todas as demais interrupes de prioridade igual ou inferior.7.4Interrupes ExternasAs duas interrupes externas (0 e 1) podem ser programadas para funcionar por nvel (ITX=0) ou por borda de descida () (ITX=1). Os pinos das interrupes so amostrados em cada ciclo de mquina (1 ciclo de mquina=12 perodos de clock); assim, uma interrupo externa deve permanecer constante por pelo menos 12 perodos de clock, caso contrrio ela pode ser ignorada.Quando a interrupo opera por borda de descida (), o pino deve permanecer em alto por pelo menos 12 perodos de clock e depois em baixo por pelo menos 12 perodos de clock; isto garante a ativao do flag de interrupo. Os flags de interrupes externas (IEX0 ou IEX1) sero automaticamente zerados pela CPU quando uma rotina de servio chamada.Quando a interrupo opera por nvel, o pino deve permanecer ativado (em baixo) at que a interrupo seja atendida; depois disso, o pedido deve ser removido antes que a rotina de servio de interrupo termine caso contrrio uma nova interrupo ser gerada.O tempo de latncia de uma interrupo depende, entre outras coisas, das condies de bloqueio j vistas. No caso destas condies de bloqueio existirem, leva-se entre 5 a 9 ciclos de mquina.

Figura 7.6. Latncia para as interrupes.Como os flags de interrupo serial e dos temporizadores/contadores so ativados em S5P2, o que foi estudado vlido para qualquer interrupo.Caso seja necessrio, pode-se usar um esquema como o da figura 7.7 para expandir as interrupes externas:

Figura 7.7 Expanso de interrupes externas.7.5Passo A PassoA estrutura de interrupo do MCS-51 permite, de forma muito simples, uma implementao para a execuo de programas passo a passo (single step). Como j foi visto, uma interrupo no ser atendida quando uma interrupo de igual prioridade esteja sendo atendida e, quando esta interrupo termina com um RETI, obrigatoriamente uma instruo ser executada antes que se aceite a nova interrupo.Uma interrupo no ser re-atendida antes de terminar sua rotina. Essa rotina deve terminar com RETI e, depois dessa instruo, uma outra dever ser executada antes de ser atendida a interrupo. Imagine um sistema onde a interrupo 1 est programada para trabalhar por nvel e que a entrada INT1 esteja conectada a terra, ou seja, a interrupo est sempre sendo invocada. Se forem adicionadas a esse sistema uma rotina principal e uma rotina de servio para a interrupo 1, cria-se o ambiente para executar passo a passo o programa principal. Cada vez que voltar da rotina de interrupo (com um RETI), ser executada uma nica instruo do programa principal e, em seguida, desviar novamente para a rotina de interrupo. Pode-se usar uma chave para marcar o instante de retorno da rotina de interrupo. O exerccio 7.6 ilustra a utilizao do recurso de passo a passo.A figura 7.8 mostra uma implementao possvel para a execuo passo a passo sem bouncing na chave.

Figura 7.8 Implementao do Passo a passo.7.6Exemplo PASSO_EXE.ASMEscrever um programa que faa acender os leds em seqncia (vermelho, amarelo e verde). Executar esse programa com um controle passo a passo usando a interrupo 1. A soluo muito simples. No programa principal estar somente uma seqncia de instrues que acende os leds segundo a ordem especificada (sem retardo). A interrupo externa 1 estar programada para operar por nvel. A rotina de interrupo aguarda que a chave SW3 seja acionada (v a zero); quando isto ocorre, retorna-se da rotina de interrupo. Ao regressar, a entrada INT1 estar em zero (pela chave SW3) e uma nova interrupo gerada. Ou seja, a cada acionamento da chave SW3, executada uma instruo do programa principal. A primeira interrupo, para que o programa entre em controle passo a passo, provocada por software ao ativar o bit IE1.

;PASSO_EXE.ASM;; PROGRAMA PARA ILUSTRAR A EXECUCAO PASSO A PASSO; SERA USADA A CHAVE SW3 PARA EXECUTAR PASSO A PASSO O LOOP PRINCIPAL; CADA VEZ QUE SE ACIONA SW3, UMA INSTRUCAO EXECUTADA;RTD EQU 100SW3 EQU P3.3;DEFSEG PROG, CLASS=CODE, START=0 SEG PROG;ORG RESETAJMP INIC;ORG EXTI1AJMP EXT150;ORG 50HINIC MOV A,#01001001B ;CODIGO PARA ACENDERCLR C ;LEDS EM SEQUENCIAMOV P1,ASETB EX1 ;HABILITAR INT 1SETB EA ;HABILITAR GERALSETB IE1 ;PROVOCAR INT 1NOP ;AQUI O PROG INTERROMPEPRINCIPALRLC A ;RODAR CODIGOMOV P1,A ;ACENDER LEDSSJMP PRINCIPAL ;RETORNAR;ORG 100HEXT1 ACALL RBT_0_1 ;TRANSICAO DE 0 A 1ACALL RBT_1_0 ;TRANSICAO DE 1 A 0RETI;;ELIMINAR BOUNCING NAS TRANSICOES DE 0 PARA 1 RBT_0_1MOV R7,#RTDLB1 JNB SW3,RBT_0_1DJNZ R7,LB1RET;;ELIMINAR BOUNCING NAS TRANSICOES DE 1 PARA 0 RBT_1_0MOV R7,#RTDLB2 JB SW3,RBT_1_0DJNZ R7,LB2RETEND

8PORTA PARALELAA famlia MCS-51 oferece 4 portas paralelas, denominadas P0, P1, P2 e P3 e para cada porta existe um SFR. De acordo com a configurao do hardware, uma ou mais portas estaro totalmente ou parcialmente disponveis.8.1Registros EnvolvidosOs 4 registros, P0, P1, P2 e P3 so na realidade os latches das portas e no os pinos da CPU. Algumas instrues operam com o contedo destes latches e outras com os valores dos pinos. As portas paralelas so utilizadas pela CPU para efetuar vrias tarefas:P0 byte inferior de endereos e dados ==> BUSP2 byte superior de endereosP3 0 RXD - entrada serial1 TXD - sada serial2 *INT0 - interrupo externa 03 *INT1 - interrupo externa 14 T0 - entrada externa para o contador 05 T1 - entrada externa para o contador 16 *WR - strobe para escrita na memria de dados externa7 *RD - strobe para leitura da memria de dados externaDurante uma operao de escrita ou leitura de memria de dados, por exemplo, os dados das portas P0 e P2 so removidos e por eles se emitem os endereos e dados. Terminadas as operaes, o contedo do latch reaparece nos pinos da CPU. Existem detalhes sobre a utilizao de cada porta como entrada ou sada mas, de uma formageral, pode-se dizer que:Sada: Basta escrever 0 ou 1 na porta que o nvel lgico aparece nos pinos corretos.Entrada: todos as portas (exceto P0) possuem um pull-up interno; quando se escreve 1 em um bit da porta, diz-se que este bit est programado como entrada pois dispositivos externos podem colocar (forar) este 1 em 0. Assim, para ter uma porta como entrada, escreve-se 1 e depois com a leitura ser lido 1 ou 0 de acordo com o nvel que externamente est aplicado no pino. Devido a isto, as portas so chamadas quasi-bidirecionais.8.2Descrio Do FuncionamentoCada porta paralela constituda por trs partes: um registro latch (SFR ==> P0,P1,P2,P3) um driver de sada um buffer de entradaOs drivers de sada de P0 e P2 e o buffer de entrada de P0 so usados para acessar a memria externa de programa ou de dados.8.2.1Porta P1A figura 8.1 ilustra o esquema eltrico da porta 1.

Figura 8.1 - Esquema para um bit da porta P1.O latch de um bit da porta P1 (um bit do SFR P1) representado por um flip-flop D, no qual se escreve um valor do bus interno atravs de um pulso Write to Latch gerado pela CPU. A sada do latch colocada no bus interno atravs de um sinal Read Latch gerado pela CPU. O nvel do pino da porta colocado no bus interno atravs do sinal Read Pin, tambm gerado pela CPU.Algumas instrues que lem o estado da porta operam com Read Latch enquanto outras operam com Read Pin. Isto ser visto com mais detalhes.Quando escreve na porta: 0*Q=1 _FET ON sada=0 1*Q=0 _FET OFF sada=1 (pull-up)Para ser usado como entrada, o latch da porta deve estar em 1; isso desconecta o driver FET da sada. Assim, o pino da porta vai para um nvel alto, levado pelo pull-up. Esse pino poder serlevado para o nvel baixo por qualquer elemento externo. Devido ao pull-up interno, essa porta denominada "quasi-bidirecional". Quando est configurado para entrada, este vai para 1 e, se externamente levado para baixo, ento fornece corrente. Se a porta estivesse em alta impedncia quando configurado como entrada, ento seria classificado como "bidirecional verdadeiro".

Figura 8.2 - Pino do microcontrolador sendo levado a 0 por uma sada TTL.8.2.2Porta P3Na figura 8.3 est o esquema eltrico da porta P3. Pela porta P3 tm-se diversas funes alternativas: *RD, *WR, T0, T1, TXD, RXD, *INT0, *INT1.

Figura 8.3 - Esquema para um bit da porta P3.Quando AOF=1, tem-se na sada a porta P3. Assim, se AOF=1 e for escrito:0 - Q=0 - G=1 - FET ON - sada=01 - Q=1 - G=0 - FET OFF - sada=1 (pull-up)Quando o latch de P3 contm 1, a sada pode ser controlada pelo sinal "Alternate Output Function - AOF". J foram estudadas as funes alternativas geradas atravs de P3. Se o latch de P3 est em 0, o pino da porta estar em zero e as diversas funes alternativas no estaro disponveis. P3 tambm uma porta quasi-bidirecional.8.2.3Porta P2O esquema da figura 8.4 ilustra a porta P2. Por esta porta tambm sai o byte mais significativo dos endereos.

Figura 8.4 - Esquema para um bit da porta P2.O funcionamento muito semelhante aos casos anteriores.Se o CONTROL = 0 e for escrito:0 - Q=0 - M=0 - G=1 - FET ON - sada=01 - Q=1 - M=1 - G=0 - FET OFFsada=1 (pull-up)Se o CONTROL=1, ADDRESS controla o nvel no pino. Assim, com CONTROL=1:ADDR=0 _M=0 _G=1 _FET ON _sada=0ADDR=1 _M=1 _G=0 _FET OFF _sada=1 (pull-up)De acordo com o nvel lgico do sinal de CONTROL, permite-se a sada ao latch de P2 ou ao byte alto de endereo.8.2.4Porta P0A figura 8.5 ilustra o esquema eltrico da porta P0. Esta porta a mais complexa pois atende a trs funes: bus de dados da CPU byte menos significativo dos endereos porta paralela (bidirecional verdadeira)

Figura 8.5 - Esquema para um bit da porta P0.A porta P0 difere das demais por ser utilizada para transportar dados durante as operaes com a memria e portanto necessita ser bidirecional verdadeira. Se ela est sendo utilizada como porta paralela, ento CONTROL = 0. Com isso G1=0 e F1 est sempre cortado (no existe pull-up).Se CONTROL=0 e for escrito:0 - *Q=1 - G2=1 - F2 ON - sada=01 - *Q=0 - G2=0 - F2 OFF - a sada flutua (no h pull-up).Note que, quando se escreve 1, a porta pode ser utilizada como uma entrada de alta impedncia. Para transform-la em uma porta quase-bidirecional basta colocar externamente resistores de pull-up.Quando a porta utilizada para enviar endereos ou dados, CONTROL =1 e a sada depende de ADDRESS/DATA (ADR/DT):ADR/DT=0 - G1=0 - F1 OFF e G2=1 - F2 ON - sada=0ADR/DT=1 - G1=1 - F1 ON e G2=0 - F2 OFF - sada=1(nunca se ter F1 ON e F2 ON - curto-circuito).Para que a porta possa ser usada na leitura de memria necessria alta impedncia;nesse caso CONTROL=0 e se fora uma escrita (com 1) no latch de P0.Se CONTROL=0 - G1=0 - F1 OFFSe Q=1 - *Q=0 - G2=0 - F2 OFFSe F1 e F2 esto em OFF _alta impedncia.A leitura da memria feita com o sinal READ PIN.8.3Escrita Nas PortasNa execuo de qualquer instruo que altere o latch de uma porta, o novo valor chega ao latch durante S6P2, que o final do ciclo de instruo. Entretanto, os latches so na realidade enviados at os buffers de sada durante a fase P2 de qualquer perodo de clock (durante P1 se mantm o mesmo valor). Assim, o novo valor aparecer no pino durante P1 do prximo ciclo (que S1P1).Se for necessria uma mudana de 0 para 1 nas portas P1, P2 e P3, o PULL-UP dever entregar bastante corrente para que essa transio seja rpida. Nas transies de 0 para 1, durante S1P1 e S1P2, entra em atividade um PULL-UP adicional que pode fornecer 100 vezes mais corrente que o PULL-UP normal. Note que os PULL-UP so FETs e no transistores bipolares.O PULL-UP normal um FET (depletion-mode) com a porta (G) conectada fonte (S). Quando est conectado terra, circula por ele uma corrente de 0,25 mA.

Figura 8.6 - O FET (depletion mode) usado como PULL-UP para as portas paralelas. (HMOS).Na figura 8.7. est o PULL-UP adicional que acelera as transies de 0 para 1. Note que quando A=B=0, a sada S vai para 1 e com isto o transistor entra no circuito fornecendo at 30 mA.

Figura 8.7 - Controle para o FET (enhanced mode). (HMOS).Na figura 8.8 est o esquema completo da sada da porta paralela.

Figura 8.8 - Acionamento do FET (enhanced mode) nas transies de 0 _1. (HMOS).Note que se *Q vai de 1 0, durante dois perodos de clock a sada (S) da porta NOR ser 1, permitindo que o enhancement mode FET entre em paralelo com o FET (pull-up) normal, dando maior capacidade de corrente. Este esquema utilizado em HMOS. Nas famlias CHMOS o esquema varia um pouco mas a idia a mesma.Os buffers de sada das portas P1, P2 e P3 podem acionar at 4 cargas LS TTL. Eles podem ser acionados (trabalhando como entrada) por circuitos TTL e NMOS. Como possuem pull-up interno, essas portas tambm podem ser acionadas por TTL de coletor aberto mas as transies de 0 1 no sero rpidas porque o pull-up tem baixa capacidade de corrente. A porta P0 pode acionar at 8 LS TTL (modo BUS). Quando opera como porta paralela, necessrio pull-up externo para acionar outras entradas. Algumas instrues de leitura utilizam o dado armazenado no latch, enquanto outras usam o estado do pino. As instrues que usam o dado do latch so aquelas que lem o valor, (possivelmente) o alteram e o escrevem de novo (read-modify-write). Quando o destino do operando uma porta ou um bit da porta, utilizado o dado do latch e no o valor do pino. A seguir est uma lista destas instrues que operam com o dado do latch:Instruo ExemploANL ANL P1,AORL ORL P2,AXRL XRL P3,AJBC JBC P1.1,LB (pula se bit=1 e zera o bit)CPL CPL P3.0INC INC P2DEC DEC P2DJNZ DJNZ P3,labelMOV PX.Y,C MOV P1.0,CCLR PX.Y CLR P1.2SETB PX.Y SETB P1.3Pode parecer que as 3 ltimas instrues no so do tipo "read-modify-write". Na realidade, lido todo o byte da porta, o bit considerado alterado e o novo byte devolvido para a porta.Uma razo para usar o dado do latch e no o valor do pino evitar um equvoco na interpretao do nvel de tenso do pino, como por exemplo, quando um bit de uma porta est sendo usado para acionar a base de um transistor.

Figura 8.9 - Bit 0 da porta 1 sendo usado para acender um led atravs de um transistor.Quando P1.0=1 LED acesoQuando P1.0=0 LED apagadoSem dvida quando P1.0=1 a tenso no pino vai estar em 0,7 V, o que um 0 lgico em nvel TTL. Espera-se que a instruo CPL P1.0 inverta o estado do led. Supondo que o led esteja aceso (P1.0=1), se a CPU usa o valor do pino, ela vai obter 0 e isto far P1.0=1, quer dizer, no vai mudar o estado do led. O melhor usar o dado do latch, que est em 1.8.4Exemplo - PISCA1 E PISCA2Acender os 3 leds em seqncia. No esquecer de colocar um retardo. O led se acende quando se pe nvel alto em um bit da porta.;PISCA1.ASM;RTD EQU 60000 ;65536>RTD>256VERMELHO EQU P1.0AMARELO EQU P1.1VERDE EQU P1.2;DEFSEG PROG, CLASS=CODE, START=0SEG PROGORG RESETINIC MOV P1,#0 ;APAGA OS LEDSAQUI SETB VERMELHOLCALL RETARDCLR VERMELHOSETB AMARELOLCALL RETARDCLR AMARELOSETB VERDE LCALL RETARDCLR VERDESJMP AQUI;;ROTINA PARA GERAR UM RETARDORETARDMOV R7,# HIGH RTDL1 MOV R6,# LOW RTDL2 DJNZ R6,L2DJNZ R7,L1RETENDUma outra soluo, muito mais simples, pode ser utilizada. Como no so usados os demais pinos da porta P1, pode-se escrever qualquer coisa neles. Usa-se ento o Acc e o CY para obter um total de 9 bits e, atravs de rotaes, consegue-se gerar os cdigos para acender os leds em seqncia. A figura 8.10 ilustra a idia.

Figura 8.10 - Uso do Acc e CY para acender leds em seqncia.

Se Acc e CY so inicializados com estes valores, basta uma rotao com CY (RLC A) para mudar o led que deve ficar aceso. A cada rotao escreve-se o contedo de Acc em P1.;PISCA2.ASM;RTD EQU 60000 ;65536>RTD>256VERMELHO EQU P1.0AMARELO EQU P1.1VERDE EQU P1.2;DEFSEG PROG, CLASS=CODE, START=0SEG PROGORG RESETINIC MOV A,#01001001B ; 01 001 001CLR CAQUI MOV P1,AACALL RETARDRLC ASJMP AQUI;;ROTINA PARA GERAR UM RETARDORETARD MOV R7,# HIGH RTDL1 MOV R6,# LOW RTDL2 DJNZ R6,L2DJNZ R7,L1RETEND

8.5Exemplo - CHAVE1, CHAVE2 E CHAVE3Usando os trs leds como um contador de trs bits, construir um programa que conte os acionamentos da chave SW2 (a contagem ser observada nos trs leds). Note que a chave no necessita de pull-up porque usa o pull-up interno da porta. A figura 8.11 ilustra as conexes.

Figura 8.11 - Conexes de leds e chave no circuito de prticas.

No primeiro programa ser usada uma soluo simples, que tem o problema de bouncing.;CHAVE1.ASM;SW2 EQU P1.3;DEFSEG PROG, CLASS=CODE, START=0SEG PROGORG RESETINIC CLR A ; ZERAR CONTADORMOV P1,A ;APAGAR LEDSSETB SW2 ;PROGRAMAR P1.3 COMO ENTRADAAQUI1 JB SW2,AQUI1 ;AGUARDAR ACIONAMENTOINC AMOV P1,A ;DAR SADA AO CONTADORSETB SW2 ;GARANTIR P1.3 COMO ENTRADAAQUI2 JNB SW2,AQUI2 ;AGUARDAR LIBERAR CHAVESJMP AQUI1ENDNo segundo programa apresentada uma soluo para eliminar o bouncing utilizando retardos. Ao detectar uma transio na chave, o programa aguarda um tempo para que se extinga o bouncing. O tempo que se deve aguardar determinado de forma emprica.;CHAVE2.ASM;; NESTE PROGRAMA SE PRETENDE ELIMINAR O BOUNCING COM RETARDOS; O VALOR DO RETARDO PARTICULAR PARA CADA CIRCUITO; (DEPENDE DO TAMANHO DOS CABOS, QUALIDADE DA CHAVE, ETC); RECOMENDA-SE: DETERMINAR EMPIRICAMENTE O MELHOR RETARDO PARA CADA; CIRCUITO;RTD EQU 500 ;RTD>256SW2 EQU P1.3;DEFSEG PROG, CLASS=CODE, START=0SEG PROGORG RESETINIC CLR A ;ZERAR CONTADORMOV P1,A ;APAGAR LEDSSETB SW2 ;PROGRAMAR P1.3 COMO ENTRADAAQUI1 JB SW2,AQUI1 ;AGUARDAR ACIONAMENTOINC AMOV P1,A ;DAR SADA AO CONTADORSETB SW2 ;GARANTIR P1.3 COMO ENTRADAACALL RTD ;ELIMINAR BOUNCINGAQUI2 JNB SW2,AQUI2 ;AGUARDAR LIBERAR CHAVEACALL RTD ;ELIMINAR BOUNCINGSJMP AQUI1;;ROTINA PARA GERAR UM RETARDORETARD MOV R7,# HIGH RTDL1 MOV R6,# LOW RTDL2 DJNZ R6,L2DJNZ R7,L1RETENDA soluo de aguardar um tempo depois de dete