Microcontrolador 8051
Inicialmente fabricado pela INTEL, atualmente fabricado por várias empresas; Possui uma grande variedade de dispositivos, com diversas características, porém compatíveis em software; São a base para diversos dispositivos, como tocadores MP3, interfaces USB, Ethernet, etc. Possui uma arquitetura simples, sendo de fácil aprendizado;
Figura 1. Diagrama em blocos do microcontrolador 89S52. Fonte ATMEL2008.
Figura 2. Diagrama em blocos do microcontrolador 8051 genárico. Fonte VIEIRA2002.
Figura 3. Pinagem do microcontrolador 89S52. Fonte ATMEL2008.
Descrição dos pinos: Pino Nome E/S Função 32 a 39 P0.0 a P0.7 E/S O Port 0 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis em dreno aberto. Terminais que estejam no estado lógico 1 podem ser utilizados como entradas de alta impedância. O Port 0 também atua como barramento de dados e gera de maneira multiplexada a parte menos significativa dos endereços durante acessos às memórias externas de programa ou dados. 1 a 8 P1.0 a P1.7 E/S O Port 1 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis e resistores de pull-up internos. Terminais que estejam no estado lógico 1 podem ser utilizados como entradas. No 89S52, alguns pinos deste port possuem funções alternativas.
Descrição dos pinos: Pino Nome E/S Função 21 a 28 P2.0 a P2.7 E/S O Port 2 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis e resistores de pull-up internos. Terminais que estejam no estado lógico 1 podem ser utilizados como entradas. O Port 2 também gera a parte mais significativa dos endereços durante acessos às memórias externas de programa ou dados. 10 a 17 P3.0 a P3.7 E/S O Port 3 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis e resistores de pull-up internos. Terminais que estejam no estado lógico 1 podem ser utilizados como entradas. O Port 3 também funções alternativas em todos os pinos.
Descrição dos pinos: Pino Nome E/S Função 40 VCC Potencial de alimentação (+5v) 20 VSS Potencial de referência (terra). 9 RST E Quando aplicado nível lógico 1 a este terminal durante 2 ciclos de máquina (com o oscilador operando) ocorre o reset do microcontrolador. Um resistor interno conectado a VSS permite o power-onreset com apenas um capacitor externo conectado a VCC. 19 XTAL1 Entrada do amplificador inversor do oscilador e entrada do gerador de clock interno. 18 XTAL2 Saída do amplificador inversor do oscilador.
Descrição dos pinos: Pino Nome E/S Função 29 PSEN S PROGRAM STORE ENABLE: Habilita o acesso à memória de programa externa durante a busca de instruções. Permanece em nível lógico 1 durante o acesso da memória de programa interna. 30 ALE S ADDRESS LATCH ENABLE: Fornece o sinal para armazenamento da parte menos significativa do endereço durante acessos às memórias externas de programa ou dados. 31 EA E EXTERNAL ACCESS: Quando em nível lógico 1, as instruções da memória de programa interna são executadas. Quando em nível lógico 0, todas as instruções são buscadas na memória de programa externa. No caso do 8031 este terminal deve sempre estar em nível lógico 0.
Funções alternativas do Port 3: Pino Nome Função P3.0 RXD/ data P3.1 TXD/ clock Receptor da interface serial assíncrona ou entrada e saída de dados da interface serial síncrona. Transmissor da interface serial assíncrona ou saída de clock da interface serial síncrona. P3.2 INT0 Entrada de interrupção externa 0 ou sinal de controle para o contador 0. P3.3 INT1 Entrada de interrupção externa 1 ou sinal de controle para o contador 1. P3.4 T0 Entrada externa para o contador 0. P3.5 T1 Entrada externa para o contador 1. P3.6 WR Sinal de escrita na memória externa de dados. P3.7 RD Sinal de leitura na memória externa de dados.
Funções alternativas do Port 1: Pino Nome Função P1.0 T2 Entrada externa para o contador 2. P1.1 T2EX Sinal de trigger para captura/recarga do contador 2, controle de direção. P1.5 MISO Interface SPI (usada para programação) P1.6 MOSI Interface SPI (usada para programação) P1.7 SCK Interface SPI (usada para programação)
Organização da Memória: O 8051 possui 128 bytes de memória RAM interna, mais 128 bytes de registradores mapeados em memória (RAM); Possui 0, 4, 8, kbytes de memória ROM interna. Esta memória pode ser ROM, EPROM, FLASH; Pode endereçar até 64 kbytes de memória de programa externa (normalmente algum tipo de ROM); Pode endereçar até 64 kbytes de memória de dados externa (normalmente algum tipo de RAM);
Memória de Programa: Após o reset, o 8051 busca a primeira instrução no endereço 0000h; Este endereço poderá ser da memória de programa interna ou da memória de programa externa; Se EA for igual a 1, o 8051 busca a instrução na memória interna; Se EA for igual a 0, o 8051 busca a instrução na memória externa;
Mapa de Memória (exemplo para dispositivo com 4 kbytes de memória ROM interna): FFFFh EA = 1 EA =0 FFFFh ROM EXTERNA PSEN = 0 ROM EXTERNA PSEN = 0 1000h 0FFFh 0000h ROM INTERNA PSEN = 1 0000h
Memória de Dados: O 8051 possui 256 bytes de memória interna: Os primeiros 128 bytes (endereços de 0 a 127)são memória de uso geral, sendo usados inclusive para a pilha; Os 128 bytes superiores (endereços de 128 a 255) são os registradores internos do 8051; O 8051 pode acessar até 64 kbytes de memória de dados externa, mas esta memória não pode ser usada como pilha;
Memória de Dados: Os 128 bytes de uso geral são divididos em três regiões: Os endereços de 0 a 31 (1Fh) formam 4 bancos de oito registradores; Os endereços de 32 (20h) a 47 (2Fh) formam uma área de bits que podem ser acessados individualmente, através de instruções específicas; Os endereços de 48 (30h) a 127 (7Fh) formam a memória de dados propriamente dita. Esta região deverá incluir a pilha de dados;
Bancos de Registradores: O banco de registradores ativo é selecionado pelos bits RS1 e RS0 do registrador PSW; Estes registradores podem ser usados para dados (variáveis), ponteiros (indicam um endereço de memória) ou índice; Possem instruções específicas, reduzindo o tamanho do código: Ex: mov @R0, A; copia o conteúdo do registrador ;no endereço de memória interna indicado ; pelo registrador R0
Bancos de Registradores: R7 R6 R5 R4 R3 R2 Banco 3 Banco 2 Banco 1 RS1=1 RS0=1 RS1=1 RS0=0 RS1=0 RS0=1 Memória RAM Intrerna R1 R0 Banco 0 RS1=0 RS0=0
Bancos de Registradores - Banco 0 (RS1=0 e RS0=0): Estão localizados fisicamente nos endereços de 0h a 7h; 07h 06h 05h 04h 03h 02h 01h 00h R7 R6 R5 R4 R3 R2 R1 R0 Banco 3 Banco 2 Banco 1 Banco 0
Bancos de Registradores - Banco 1 (RS1=0 e RS0=1): Estão localizados fisicamente nos endereços de 8h a Fh; 0Fh 0Eh 0Dh 0Ch 0Bh 0Ah 09h 08h R7 R6 R5 R4 R3 R2 R1 R0 Banco 3 Banco 2 Banco 1 Banco 0
Bancos de Registradores - Banco 2 (RS1=1 e RS0=0): Estão localizados fisicamente nos endereços de 10h a 17h; 17h 16h 15h 14h 13h 12h 11h 10h R7 R6 R5 R4 R3 R2 R1 R0 Banco 3 Banco 2 Banco 1 Banco 0
Bancos de Registradores - Banco 3 (RS1=1 e RS0=1): Estão localizados fisicamente nos endereços de 18h a 1Fh; 1Fh 1Eh 1Dh 1Ch 1Bh 1Ah 19h 18h R7 R6 R5 R4 R3 R2 R1 R0 Banco 3 Banco 2 Banco 1 Banco 0
Registradores de Função Especial: São responsáveis pelo controle e execução das instruções de programa; Também são responsáveis pela configuração dos periféricos internos do 8051; Estão situados na parte alta da memória RAM interna, nos endereços de 128 (80h) a 255 (FFh);
Registradores de Função Especial: Program Counter (PC): Registrador de 16 bits, possui o endereço da memória de programa que possui a próxima instrução a ser executada pelo 8051; Program Status Word (PSW): Registrador de 8 bits, contém os flags indicando alguma ocorrência na última instrução aritmética executada e os bits de seleção do banco de registradores ativo; Stack Pointer (SP): Registrador de 8 bits, contém o endereço do topo da pilha;
Registradores de Função Especial: Stack Pointer (SP): Registrador de 8 bits, contém o endereço do topo da pilha; Acumulador (A ou ACC): Registrador de 8 bits, é o registrador usado nas operações lógicas e aritméticas; Registrador B (B): Registrador de 8 bits, usado nas operações de multiplicação e divisão. Pode ser usado como um registrador de uso geral; Data Pointer (DPTR): Registrador de 16 bits formado pela junção de dois registradores de 8 bits, DPH e DPL. Este registrador é usado para acessar a memória externa;
Registradores de Função Especial: Ports (P0, P1, P2 e P3): Registradores de 8 bits que contém o valor presente nos pinos de entrada e saída do 8051 quando estes pinos estão sendo usados como pinos de entrada e saída; Interrupt Enable(IE): Registrador de 8 bits, usado para habilitar ou desabilitar as interrupções do 8051; Interrupt Priority (IP): Registrador de 8 bits que determina o nível de prioridade (alto ou baixo) das interrupções do 8051;
Registradores de Função Especial: Power Control (PCON): Registradores de 8 bits, controla os modos de economia de energia do 8051; Timer Control (TCON): Registrador de 8 bits, usado para configurar e controlar os temporizadores/ contadores TC0 e TC1; Timer Mode (TMODE): Registrador de 8 bits, define o modo de operação dos temporizadores/ contadores TC0 e TC1; Timers (TH0, TL0, TH1 e TL1): Registradores de 8 bits que contém o valor da contagem dos temporizadores/ contadores 0 e 1;
Registradores de Função Especial: Serial Control (SCON): Registradores de 8 bits, controla o modo de operação da interface serial; Serial Buffer (SBUF): Registrador duplo de 8 bits, contém o valor sendo transmitido e recebido pela interface serial. São dois registradores acessados pelo mesmo endereço;
Acesso a memória externa: O 8051 pode acessar até 64k bytes de memória ROM e até 64k bytes de memória RAM externa; Para isso utiliza os ports 0, 2 e 3; Neste caso, estes ports não podem ser usados como interface de entrada e saída; Pode-se implementar interfaces de entrada e saída mapeadas em memória; O port 0 atua como barramento de dados e barramento de endereços (parte baixa) multiplexado.
Acesso a memória externa: Figura 4. Pinagem do microcontrolador 89S52. (Fonte própria).
Ciclo de Leitura da Memória de Programa Externa: ALE PSEN PORT 0 A0:A7 Instrução A0:A7 Instrução PORT 2 A8:A15 A8:A15 Armazena A0:A7 no latch Armazena A0:A7 no latch
Ciclo de Leitura da Memória de Dados Externa: ALE PSEN RD PORT 0 A0:A7 (DPL) DADO A0:A7 (PCL) PORT 2 A8:A15 (DPH) A8:A15 (DPH) Armazena A0:A7 no latch Lê o Dado Da memória
Ciclo de Leitura da Memória de Dados Externa: ALE PSEN WR PORT 0 A0:A7 (DPL) DADO A0:A7 (PCL) PORT 2 A8:A15 (DPH) A8:A15 (DPH) Armazena A0:A7 no latch Escreve o Dado na memória
CLOCK O 8051 possui um gerador de clock interno; Basta ligar um cristal nos pinos XTAL1 e XTAL2 e dois capacitores entre estes terminais e o GND; Pode-se usar uma fonte de clock externa. Neste caso, o pino XTAL1 é ligado ao GND e o pino XTAL2 ao gerador de clock; A frequência de clock é dividida internamente por 12, assim, um ciclo de máquina equivale a 12 ciclos de clock;
RESET O reset é ativado quando o pino de reset (pino 9) fica em nível alto por mais de dois ciclos de máquina (24 ciclos de clock); O reset zera os registradores A, B, PSW, DPTR, PC e os registradores dos temporizadores/contadores; O registrador SP (stack pointer) é carregado com o valor 07h; Os ports são inicializados com o valor FFh, para ficarem configurados como entrada; O registrador SCON é zerado e o registrador SBUF possui valor indeterminado;
RESET Os registradores são carregados com o valor XXX00000b; A memória RAM interna não é alterada; Um resistor interno ligado a GND permite que se faça um sistema POR (reset ao ligar) com apenas um capacitor de 10uF ligado entre o pino 9 (pino de reset) e o Vcc;