Mapa de Memória
Last updated
Last updated
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.
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.
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.
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.
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.