terça-feira, janeiro 19, 2021

Microcontrolador 8051: Arquitetura

O 8051 possui uma arquitetura bastante peculiar, diferente de outros microcontroladores de 8 bits como PIC e AVR.

Arquitetura do AT89S51 (fonte: datasheet)
As partes destacas são as que vou comentar


As instruções do assembly do 8051 referenciam diversos registradores (de 8 bits, exceto pelo PC):

  • PC - program counter, aponta para a próxima instrução a executar. Tem 16 bits, possibilitando até 64K de memória de programa.
  • SP - stack pointer, usado pelas instruções de chamada e retorno de subrotina. A pilha cresce na direção dos endereços maiores.
  • PSW - program status word, possui os flags (carry, carry auxiliar, overflow e paridade) e um bit para selecionar o conjunto de registradores de uso geral (ver abaixo)
  • ACC - acumulador, usado como operando em várias instruções
  • B - extensão do acumulador para as operações de multiplicação e divisão
  • R0 a R7 - registradores de uso geral. O 8051 possui quatro conjuntos destas registradores, dois bits no PSW selecionam qual é usado.

Entretanto, apenas o PC da lista acima é um registrador típico. Todos os demais podem ser acessados por instruções de acesso de memória:

  • SP: 0x81
  • PSW: 0xD0
  • ACC: 0xE0
  • B: 0xF0
  • R0 a R7: 0x00 a 0x07 (conjunto 0), 0x08 a 0x0F (conjunto 1), 0x10 a 0x17 (conjunto 2), 0x18 a 0x1F (conjunto 3)
O 8051 tem os seguintes modos de endereçamento:
  • Imediato: o operando está na instrução (na Flash)
  • Direto: a instrução contém um endereço de 8 bits. Os endereços 0x00 a 0x7F correspondem a posições da IRAM (Internal Ram). Os endereços 0x80 a 0xFF correspondem aos registradores especiais (SFR - Special Function Registers)
  • Indireto na IRAM: o endereço (de 8 bits) do operando está no registrador R0 ou R1. Esse acesso indireto acessa somente a IRam, se ela tiver 256 bytes é a forma de acessar os 128 bytes nos endereços mais altos.
  • Indireto na XRAM (eXternal Ram): a arquitetura permite mais 64K de RAM com endereçamento separado dos demais. O acesso à XRAM é sempre indireto, usando um ponteiro armazenado no registrador DPTR. O registrador DPTR é composto pelos SFRs de endereço 0x82 (low) e 0x83 (high). Somente a instrução MOVX acessa a XRAM.
  • Indireto na PMEM (Program Memory).  Também usa o DPTR, somente a instrução MOVC pode acessar a memória de programa.
As instruções do 8051 podem ocupar 1 a 3 bytes, sendo o primeiro o opcode e os seguintes um operando.

Três quartos das instruções são ditas "regulares", por seguirem a mesma regra de formação onde os 4 bits mais significativos determinam a operação e doze combinações dos 4 bits menos significativos indicam o operando:

As instruções com códigos X0 a X3 são ditas "irregulares":

Fonte: Wikipedia

Por último, os códigos D6 e D7 corresponde à instrução XCHD A,@Ri.

Existem vários aspectos curiosos com relação ao conjunto de instruções e seus operandos:

  • A maioria das instruções de desvio são relativas: o operando é um número de 8 bits com sinal (-128 a +127) que é somado ao PC para efetuar o desvio
  • AJMP e ACALL utilizam um endereço de 11 bits, onde os 3 bits mais significativos são codificados no opcode. Isto permite gerar um código compacto para os endereços nos primeiros 2K da memória de programa.
  • As instruções de manipulação de bit usam um endereço de 8 bits para endereçar um bit de uma posição da Ram de 0x20 a 0x2F (na Ram) ou de um dos registradores nos endereços  0x80, 0x88, 0x90, ..., 0xF8.
Maiores detalhes sobre as instruções podem ser vistos neste documento (PDF).

Nenhum comentário: