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.

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.

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.

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.

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

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.

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).

    • Além disso, é importante destacar o conteúdo dos registradores após a condição de Reset.

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ões da memória de dados externa.

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.

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.

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.

Last updated