
















































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Mini-curso Microcontrolador 8051
Tipologia: Notas de estudo
1 / 88
Esta página não é visível na pré-visualização
Não perca as partes importantes!

















































































Microcontrolador 8051 – Hardware C
urso Completo – Hardware – Software - Interfaceamento
Na Década de 70 começaram a ser utilizados microprocessadores em microcomputadores para uma maior eficiência no processamento de dados. O microprocessador Intel foi um dos precursores e, a partir daí, houve uma preocupação em melhorar cada vez mais o sistema de processamento de dados através desses componentes. Baseado na arquitetura de um microprocessador e seus periféricos, foi criado um componente que (fisicamente em uma unidade) comportasse todo um sistema que equivalesse a um microprocessador e seus periféricos; assim surgiu o microcontrolador.
A unidade central de processamento controla todas as funções realizadas pelo sistema. A CPU de qualquer sistema de computador contém os seguintes grupos de unidades
Funcionais:
Os registradores e contadores são unidades funcionais usadas para armazenamento temporário de bits dentro da CPU.
A unidade lógica e aritmética é a unidade funcional da CPU que executa operações lógicas e aritméticas entre palavras binárias, gerando uma outra palavra na saída.
A unidade de controle e sincronização coordena e controla todas as unidades funcionais em uma seqüência lógica e sincronizada.
O processador ou unidade central de processamento (CPU) é a parte do sistema que faz o processamento das informações para que as instruções sejam executadas; as instruções devem estar armazenadas na memória de programa em seqüência, formando assim o programa.
A CPU possui um registrador chamado de CONTADOR DE PROGRAMA (PC) que contém o endereço da próxima instrução que deve ser executada. Toda vez que uma
instrução é retirada da memória pela unidade central de processamento, automaticamente o contador de programa é incrementado para que, após o processamento desta instrução, quando a CPU for buscar a próxima instrução, basta usar o endereço 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 execução da instrução contida na posição de memória de endereço “0000”. Cada instrução possui duas fases distintas: o ciclo de busca e o ciclo de execução. Durante o ciclo de uma instrução a CPU faz com que o conteúdo do contador de programa seja colocado no barramento de endereços, endereçando, desta maneira, a posição de memória que contém a instrução que deve ser executada.
As unidades de entrada/saída são os meios pelos quais o usuário se comunica com o sistema. Essas unidades possuem interfaces que permitem a conexão com dispositivos chamados de periféricos, tais como teclado, LCDs, etc.
A 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.
Na arquitetura Von-Neumann, os barramentos de dados e endereços são compartilhados entre memórias de programas e memórias de dados na comunicação com a CPU. Nesse tipo de arquitetura, quando a CPU está acessando a memória de programa não pode acessar a memória de dados, porque usa os mesmos barramentos para as duas memórias.
CISC: Computador com Set de Instrução mais Complexo, quanto maior a complexidade da instrução que deve ser executada, mais espaço ela ocupa no chip. Desse modo, chegará um momento que passaremos e ter um set de instruções tão grande que começará a afetar o desempenho, dificultando a possibilidade de implementar outras funções importantes. Ter um complexo (grande) set de instruções “CISC” nem sempre é interessante para um bom desempenho do processador.
Numa análise feita pelo laboratório da IBM sobre como estavam sendo usados os diversos tipos de instruções, concluíram que num microprocessador que usava um set de instruções de, por exemplo, 200 instruções, a maior parte do processamento era feita apenas com umas 10 instruções.
Uma grande parte das instruções era pouco usada, às vezes até uma única vez em um longo programa, de modo que elas poderiam ser implementadas pelas instruções básicas mais usadas.
-Estáticas: memórias estáticas são aquelas nas quais as informações permanecem armazenadas enquanto não houver escrita ou não faltar energia.
-Dinâmicas: memórias dinâmicas são memórias que perdem informações armazenadas mesmo com alimentação. Na RAM dinâmica (ou DRAM) isso acontece porque cada célula tem um transistor MOSFET e um capacitor que armazena um dado (1 bit).
Veremos a seguir, alguns tipos de memórias existentes no mercado e que são muito utilizadas:
Essas memórias são de acesso aleatório, que podem ser acessadas a qualquer momento e em qualquer endereço. Elas podem ser estáticas ou dinâmicas e também podem ser gravadas pelo sistema com a tensão de 5v. São memórias consideradas voláteis.
Essas memórias são utilizadas somente para a leitura.
Essas memórias são utilizadas no sistema somente para leitura; geralmente usadas como memórias de programa, só podem ser gravadas com gravadores específicos e só uma vez. São a memórias não Voláteis.
Essas memórias são utilizadas no sistema somente para leitura, também empregadas como memórias de programa e só podem ser gravadas com gravadores específicos. Podem ser apagadas por raios ultravioleta e regravadas por muitas vezes. São chamadas memórias não voláteis.
Essas memórias podem ser usadas no sistema tanto para leitura como para escrita. Podem ser gravadas com programadores ou pelo sistema; são apagadas eletricamente e regravadas por muitas vezes; são consideradas memórias não voláteis.
Uma linha de memórias programáveis apenas para leitura, de 3v e 5v, apenas dentro do sistema. Fabricadas com avançada tecnologia CMOS, não voláteis, suas características incluem:
-Operação de leitura e programação em apenas 3v e 5v;
-Proteção de dados de software e hardware;
-Operação de programação por setor
-1000 ciclos de programa;
-Retenção de dados de 10 anos;
-Baixa dissipação de potência;
-Tempo de ciclo de programa rápido;
-Detecção de fim de programa.
A memória FLASH é um dispositivo de armazenamento confiável, não volátil, de boa relação custo/benefício e que possui características de leitura da EPROM, EEPROM e SRAM, porém quando se aplica 12v sobre o dispositivo, este pode ser gravado com base em bytes. No caso da memória FLASH – 5v estes dispositivos foram projetados para serem programados dentro do sistema com fornecimento padrão de 5V. Em programadores de EPROM convencionais não há necessidade de 12vpp, nem para programação, nem para apagamento. É composta de uma arquitetura de apagamento de setor (qualquer combinação pode ser apagada simultaneamente) e 100.000 ciclos de apagamento/programação.
A memória FLASHFILE, simetricamente bloqueada, da intel, oferece uma solução não volátil com leitura e programação de mais alta densidade para armazenamento em massa. O armazenamento de aplicação de software e a operação com código de sistema em RFAs (Residential Flash Arrays) proporcionam execução instantânea , rápida e local (in Place). RFAs são protegidas também 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 através da redução do número de acessos ao disk-drive. 100.000 ciclos de apagamento/ programação.
Estes dispositivos são 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 relação às memórias paralelas.
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 informação de 8 bits. O seu conjunto de instruções é formado por 111 instruções, onde se incluem as de transferência de dados, aritmética, lógica, desvio de fluxo de programa e booleanas. Estas são instruções de manipulação de variáveis de um bit do 8051 (lógica de bit único).
Figura 2.2 - Diagrama de blocos detalhado do 8051.
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 aplicações onde a facilidade de programação seja mais importante que a eficiência ou velocidade.
Toda a família MCS-51 possui espaços de endereçamento separados para programas e dados, isto é, uma memória de programa e uma memória de dados com endereços independentes (configuração Harvard). Essa separação permite que a memória de dados seja acessada por endereços de 8 bits, que podem ser mais rapidamente manipulados pela CPU, também de 8 bits. Entretanto, endereços de 16 bits também podem ser utilizados para a memória de dados, podendo ser gerados através do registrador DPTR ( Data Pointer Register ).
O preço a pagar pela facilidade de manipulação dos endereços, dada pela separação lógica das memórias, é o de um aumento de complexidade no conjunto de instruções; historicamente, esta separação presente na maioria dos dispositivos INTEL foi a responsável pela criação da arquitetura CISC, que vem há tempos sendo superada pela maior elegância de soluções apresentada pela arquitetura RISC, que já está sendo utilizada até pela própria INTEL nos seus dispositivos mais recentes.
A memória 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 através do pino 31 (EA - External Access ), ficando a memória externa com todo o espaço de endereçamento. A memória de programa pode ser apenas lida, não escrita. Existem até 64K de memória de programa acessáveis, sendo que os primeiros 4K são disponíveis internamente no 8051, e selecionáveis através do sinal EA.
Os primeiros 4 Kbytes da memória de programas podem ser endereçados interna ou externamente. Se o pino EA estiver em nível alto, esses bytes são acessados no chip. Levando o pino EA a nível baixo, o acesso a tais bytes é feito na memória externa, como mostrado na figura 3.
A Figura 3.2 mostra a configuração de hardware para a execução de programas externos; nesta configuração, duas das 4 portas de E/S disponíveis (Portas 0 e 2) são utilizadas com função de barramento de endereço/dados, ou seja, essas 16 linhas de E/S são dedicadas para desempenhar função de bus durante buscas na memória de programas. Isto se deve ao fato de que os endereços da memória de programa são 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 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 dispositivo emite o sinal PSEN ( Program Store Enable ) para ler a memória de programa externa. Este sinal, em nível baixo, habilita a ROM à leitura. A porta 0 entra no modo entrada e a instrução da ROM do endereço correspondente é enviada a essa porta.
o ciclo de busca gera os sinais de controle necessários para acessar a memória de programa externa.
Certas posições na memória de programa estão reservadas para situações específicas. Uma destas situações é a condição de “reset”, que força o fluxo de execução para o endereço 0000H. Normalmente, usa-se as três primeiras posições para efetuar o desvio para a rotina de inicialização.
A seguir, estão alocadas as posições alvos de interrupções, ou seja, os endereços de 0003H a 0023H são reservados para cinco rotinas de tratamento de interrupção. Em cada uma dessas posições, deve-se armazenar a sub-rotina que atende à respectiva interrupção quando requisitada por um dispositivo. O espaçamento entre essas posições fixas é de 8 bytes. Na maioria das aplicações de controle, essas rotinas cabem inteiramente nesse intervalo, de outra forma faz-se necessário um jump nessas posições. A figura 3.3 mostra um mapa da parte inferior da memória de programa dos dispositivos MCS-51, com a localização dos vetores de interrupção. Após o reset, a CPU inicia a execução da posição 0000H.
Figura 3.3 – Mapa da parte inferior da memória de programa.
A memória de dados ocupa, como já foi dito, um espaço de endereçamento separado da memória de programa, e até 64K bytes de RAM externa podem ser acessados neste espaço. Os 64 Kbytes de memória de dados externa são acessados pelo dispositivo através dos sinais RD/WR. Os sinais PSEN e RD podem ser injetados na entrada de uma 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.
A memória de dados, como mostra a figura 3.4, é composta por uma área interna formada por 128 bytes, mais os registros de função especial, e por até 64Kb de memória externa.
Figura 3.4: Composição da memória de dados do 8051
De outra forma, pode-se visualizar a memória do 8051 como sendo parte interna e parte externa. A memória interna é constituída pelos 4 Kb de ROM, pelos 128 bytes de RAM e pelos registros da CPU. Já a memória externa é formada por até 60 Kb (ou até 64 Kb, caso o pino EA seja aterrado) de memória de programa, e por até 64 Kb de memória de dados. Caso o espaço de memória interna seja suficiente para determinada aplicação, o sistema pode trabalhar sem a memória externa.
Os 64 Kb de memória externa de dados são acessados automaticamente quando a instrução MOVX (Move eXternal) for executada. Já os 128 bytes da RAM interna podem ser acessados por diferentes instruções, através de endereçamento direto ou indireto. Esta RAM interna pode ser subdividida em três segmentos que são:
Tabela 3.1 - Mapeamento dos bancos de registros BANCO RS1 RS0 REGISTRADORES POSIÇÃO DE MEMÓRIA 3 1 1 R7,R6,.. .,R0 1FH,1EH,.. .,18H 2 1 0 R7,R6,.. .,R0 17H,16H,.. .,10H 1 0 1 R7,R6,.. .,R0 0FH,0EH,.. .,08H 0 0 0 R7,R6,.. .,R0 07H,06H,.. .,00H
Figura 3.6 – Mapa da memória de dados interna.
Os 16 bytes acima do banco de registradores formam o espaço de bits endereçáveis. O conjunto de instruções do 8051 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 128-Inferior ocupa o intervalo de endereços de 00H até 7FH, e seu mapeamento é visto na Figura 3.7.
Figura 3.7 – Mapeamento do bloco 128-Inferior.
Os bancos são selecionáveis pelas instruções através de dois bits do registrador PSW. Os próximos 16 bytes acima dos bancos de registradores formam um espaço de
memória endereçável-por-bit. Todos os bytes no 128-inferior podem ser acessados por endereçamento direto ou indireto; já o 128-Superior só pode ser acessado por endereçamento indireto, e ficam disponíveis como pilha nos dispositivos com 256 bytes de RAM. Mas o bloco 128-Superior não está implementado no 8051.
Figura 3.8 – Estrutura simplificada do espaço SFR.
A Figura 3.8 mostra a estrutura simplificada do espaço SFR; este inclui buffers (latches) de E/S, temporizadores, controles de periféricos, etc. Tais registradores só podem ser acessados por endereçamento direto, sendo que 16 endereços são simultaneamente endereçados-por-bit e endereçados-por-byte. O bloco SFR ocupa o espaço de endereçamento 80H a FFH. Tais registradores podem ser acessados exclusivamente por acesso direto.
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 modos de endereçamento à RAM interna. Suporte a variáveis de um bit também é disponível, permitindo manipulação direta em sistemas de controle e lógica que requerem processamento booleano.
Os registros mapeados em memória incluem os latches das portas de E/S, temporizadores/contadores, canal serial, registros ligados à unidade de lógica e aritmética (ULA), registros apontadores, registros usados no sistema de interrupção, além de outros registros de função especial. É importante ressaltar que, com exceção do contador de programa, todos os outros registros são mapeados em memória interna de dados.
O 8051 possui 20 SFRs de 8 bits cada, mapeados em memória interna, e um contador de programa (PC) de 16 bits. Na tabela 3.2 estão relacionados os 20 SFRs com
O bit de Carry, além de sua função tradicional em operações aritméticas, também tem função de “acumulador” em algumas operações booleanas.
Figura 3.9 – Flags do registrador PSW.
Para acessar um dado ou operando, as instruções dos microcontroladores MCS-51 contam com seis modos de endereçamento: