Mapa de Memória

Como característica da arquitetura Harvard, instruções e dados são armazenados em espaços distintos. No 8051, a memória de programa pode ser acessada somente em modo de leitura. Além disso, o barramento de endereços permite acesso a memórias externas para dados e programa.

Memória de Programa

A memória de programa pode apenas ser lida. Internamente esses dispositivos possuem 4K bytes (padrão) de memória, contudo essa capacidade pode ser expandida para 64K bytes utilizando uma memória externa.

Memória de Programa do Intel 8051 [1].

O pino EA determina se a memória de programa externa será utilizada. De modo geral:

  • Quando EA é zero, todas as operações são realizadas na memória externa;

  • Quando EA é um, os primeiros 4K de endereços são acessados internamente.

Além disso, para realizar o acesso à memória externa o sinal PSEN (Program Strobe Enable) é gerado pela CPU.

Memória de Dados

A memória de dados também pode ser expandida. Neste caso, os sinais RD e WR são gerados pela CPU conforme a operação executada. Para memória de dados, a instrução utilizada determinará se o acesso será interno ou externo. Conforme a ilustrado na Figura abaixo, internamente a memória de dados é dividida em regiões específicas e de propósito geral. Essas definições serão apresentadas na sequência.

Memória de Dados no Intel 8051 [1].

Seções da Memória de Dados

A memória de dados é dividida em duas seções: Low-RAM e High-RAM.

A seção Low-RAM, ilustrada na Figura abaixo, corresponde ao espaço de endereçamento de 0x00 à 0x7F, isto é, os primeiros 128 bytes. Essa região é composta por quatro bancos de registradores, espaço de propósito geral e de bytes endereçáveis bit a bit.

Low-RAM. Adaptado de [1].

Os bancos de registradores são nomeados como RB0, RB1, RB2 e RB3. Cada banco de registrador possui 8 registradores, portanto ocupam 32 bytes, e o espaço de endereçamento vai de 0 até 1FH (31). A região de bytes endereçáveis bit a bit, ilustrada na Figura 4, ocupa os endereços 20H à 2FH. Portanto, existem 16 bytes endereçáveis bit a bit, ou 128 bits endereçáveis.

Seções da memória de Low-RAM. Adaptado de [1].

O endereço dos bits é mostrado na Figura abaixo.

Mapa de endereços da região de bits endereçáveis.

O Espaço de propósito geral corresponde ao espaço de endereçamento que vai de 0x30 a 0x7F. Os outros 128 bytes da memória de dados (High-RAM) são divididos em duas categorias. No entanto, isso não deve ser entendido como uma divisão do espaço de endereçamento, pois existem duas formas de acesso a essa região da memória. Quando o acesso realizado é direto (discutiremos isso em outro artigo) a região acessada será a de registradores de funções específicas. Já se o acesso é indireto, a região é considerada de propósito geral. Cabe ressaltar que essa região não está presente em alguns dispositivos.

  • Propósito geral:

    • Espaço de endereçamento: 0x80 a 0xFF;

    • Não está presente em alguns microcontroladores;

    • Modo de endereçamento: indireto.

  • Registradores de funções especiais:

    • Espaço de endereçamento: 0x80 a 0xFF;

    • Modo de endereçamento: direto.

High-RAM do Intel 8051. Adaptado de [1].

Os registradores de funções especiais são listados abaixo conforme os módulos correspondentes:

  • Temporizadores/Contadores: TH1, TL1, TH0, TL1, TCON e TMOD;

  • Portas I/O: P0, P1, P2 e P3;

  • Stack Pointer: SP;

  • Power Save: PCON;

  • UART: SCON e SBUF;

  • Interrupções: IE e IP;

  • Uso geral: ACC e B;

  • Ponteiro DPTR: DPH e DPL;

  • Status: PSW.

De modo geral, os registradores especiais localizados nos endereços finalizados em 0H ou 8H são endereçáveis bit-a-bit (0x80 à 0xF7).

Endereço dos registradores de funções especiais [1].
    • Além disso, é importante destacar o conteúdo dos registradores após a condição de Reset.

Conteúdo dos registradores após o Reset do Intel 8051 [1].

Interface com Memória Externa

Durante o processo de execução, a CPU emite sinais para realizar as operações de leitura e escrita das memórias. Quando a memória externa (RAM e/ou ROM) é utilizada, um circuito latch deve ser adicionado para compartilhar o PORT 0 do microcontrolador. Isso se faz necessário pois a mesma porta que é utilizada para determinar o endereço acessado também serve para as operações do barramento de dados. Além disso, o pino EA é utilizado para indicar se a memória de programa será interna ou externa. Já os sinais PSEN, RD e WR são utilizados para as operações nas memórias externas e, nos dois casos, o sinal ALE (Address Latch Enable) é utilizado para habilitar o latch.

  • Conexões da memória de programa externa.

Conexão do 8051 com a memória de programa externa [1].
  • Conexões da memória de dados externa.

Conexão do 8051 com a memória de dados externa [1].

Os diagramas ilustrados abaixo exibem o estado dos sinais de controle para os casos onde a memória externa é utilizada. Considerando a memória de programa externa, a CPU determina o endereço de 16 bits que será acessado. Esse endereço tem seu byte menos significativo colocado no PORT 0, e o mais significativo no PORT 2. Nesse momento a CPU ativa o sinal ALE, fazendo com que o circuito latch armazene esses 8 bits. Assim, a CPU desativa o ALE e memória continuará com o endereço selecionado. Por fim, o sinal PSEN é habilitado e, nesse momento, o conteúdo (instrução) do endereço selecionado é colocado no barramento de dados, isto é, no mesmo PORT 0.

Sinais de controle durante o acesso da memória de programa.

O mesmo vale para memória de dados. A única diferença é que no processo de leitura o conteúdo do barramento de dados não é uma instrução. Cabe ressaltar que para a memória de dados o sinal RD especifica a operação de leitura.

Sinais de controle durante o acesso de leitura da memória de dados externa.

Na operação de escrita, após a especificação do endereço a CPU determina o dado que será gravado na memória. Essa operação é realizada quando o sinal WR é ativado.

Sinais de controle durante o acesso de escrita da memória de dados externa.