Microprocessadores e Microcontroladores Parte 3 Expansão de Memória José Wilson Lima Nerys www.eee.ufg.br/ jwilson 2013
Um microcontrolador padrão da família 8051 possui normalmente uma memória de programa (memória Flash) de 8 Kbytes e uma memória de dados (memória RAM) de 256 bytes. No entanto, não possui memória EEPROM (dados não são perdidos com desligamento) para armazenamento de dados. Há exceções, por exemplo, o modelo AT89S8252, que possui memória EEPROM interna de 2 Kbytes. Assim, quando há necessidade de armazenamento de dados, por exemplo, dados de temperatura e umidade de uma estufa ao longo da semana, pode ser necessário usar uma memória EEPROM externa. Essa memória é acessada através das portas P2 e P0, onde a porta P0 transporta os dados e a parte baixa do endereço e a porta P2 transporta a parte alta do endereço.
Exemplo de expansão: Memória EEPROM de 8 Kbytes ocupando os endereços de 0000H a 1FFFH. ALE Pino 30 WR\ P3.6 (16) RD\ P3.7 (17) AT89S52 P0.0 D0/A0 P0.1 D1/A1 P0.2 D2/A2 P0.3 D3/A3 P0.4 D4/A4 P0.5 D5/A5 P0.6 D6/A6 P0.7 D7/A7 P2.0 A8 A9 P2.1 A10 P2.2 A11 P2.3 A12 P2.4 P2.5 P2.6 P2.7 74LS573 LE A0 A1 A2 A3 A4 A5 A6 A7 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 AT28C64 CE\ D0 D1 D2 D3 D4 D5 D6 D7 WE\
A memória AT28C64 possui 8192 posições de memória. Os endereços internos da memória vão de 0000H a 1FFFH. Memória EEPROM AT28C64 = 8K x 8 bits 13 linhas de endereço: A 0... A 12 2 13 = 8192 (2000H) = 8 Kbytes 8 linhas de dados: I/O 0... I/O 7 WE\ Write Enable Output Enable CE\ Chip Enable (Habilita Escrita) (Habilita Saída) (Habilita Pastilha)
A interface entre o microcontrolador e a memória é o Latch. Ele é necessário porque a porta P0, em um primeiro momento, transporta a parte baixa do endereço, que deve ser enviado aos pinos A0 a A7 da memória; em um segundo momento transporta os dados, que devem ser enviados ao pinos I /O 0 a I /O 7 da memória. Latch 74LS573
Embora o endereço interno da memória seja de 0000H a 1FFFH, o endereço inicial de acesso pode ser escolhido com portas lógicas, usando as linhas de endereço disponíveis (no caso, e ). A porta lógica escolhida define em que região (do intervalo de 64 Kbytes disponíveis) a pastilha de memória estará ativa. A saída da porta lógica é conectada ao pino (output enable) do latch 74LS573 e ao pino CE\ (chip enable) da EEPROM. End. Inicial: 0000H End. Final: 1FFFH End. Inicial: 8000H End. Final: 9FFFH End. Inicial: 2000H End. Final: 3FFFH End. Inicial: A000H End. Final: BFFFH End. Inicial: 4000H End. Final: 5FFFH End. Inicial: C000H End. Final: DFFFH End. Inicial: 6000H End. Final: 7FFFH End. Inicial: E000H End. Final: FFFFH
A tabela a seguir mostra o endereço completo em binário e hexadecimal para as 8 regiões definidas com as portas NAND. As linhas A0 a A12 são usadas no endereçamento interno da memória e as 3 linhas restantes, a são usadas para habilitar o Latch e a EEPROM nas regiões desejadas de memória. A12 A11 A10 A9 A8 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 0 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 A7 A6 A5 A4 A3 A2 A1 A0 End Região 0 0 0 0 0 0 0 0 0000 H 0 1 1 1 1 1 1 1 1 1FFF H 0 0 0 0 0 0 0 0 2000 H 1 1 1 1 1 1 1 1 1 3FFF H 0 0 0 0 0 0 0 0 4000 H 2 1 1 1 1 1 1 1 1 5FFF H 0 0 0 0 0 0 0 0 6000 H 3 1 1 1 1 1 1 1 1 7FFF H 0 0 0 0 0 0 0 0 8000 H 4 1 1 1 1 1 1 1 1 9FFF H 0 0 0 0 0 0 0 0 A000 H 5 1 1 1 1 1 1 1 1 BFFF H 0 0 0 0 0 0 0 0 C000 H 6 1 1 1 1 1 1 1 1 DFFF H 0 0 0 0 0 0 0 0 E000 H 7 1 1 1 1 1 1 1 1 FFFF H
É interessante ressaltar que o uso de portas NAND (ou de decodificadores) é fundamental quando se deseja usar duas ou mais pastilhas de memória ou quando se deseja usar pastilhas de memória e outros periféricos (como será visto na seção de mapeamento de memória). No entanto, desejando-se usar apenas uma pastilha de memória, a porta NAND é dispensável. Os pinos e CE\ podem ser conectados diretamente ao Terra. Nesse caso a EEPROM ficará todo o tempo habilitada e o Latch, além de ficar o tempo todo habilitado, apresenta sombras de memória.
Sombras de memória significa, por exemplo, que os endereços 1000H (0001 0000 0000 0000) e 3000H (0011 0000 0000 0000) acessam a mesma região de memória, uma vez que os pinos, e estão flutuando e, portanto, são irrelevantes no endereçamento. Como já enfatisado, as portas NAND podem ser usadas para o endereçamento de mais pastilhas de memória. Assim, se houver necessidade de espaço de memória superior a 8 Kbytes, pode-se usar uma pastilha com uma capacidade maior que 8 Kbytes ou duas pastilhas de 8 Kbytes.
Duas pastilhas de memória EEPROM de 8 Kbytes cada uma. Endereços da Pastilha 1: 0000H a 1FFFH (Região 0) Endereços da Pastilha 2: 2000H a 3FFFH (Região 1) ALE Pino 30 WR\ P3.6 (16) RD\ P3.7 (17) AT89S52 P0.0 D0/A0 P0.1 D1/A1 P0.2 D2/A2 P0.3 D3/A3 P0.4 D4/A4 P0.5 D5/A5 P0.6 D6/A6 P0.7 D7/A7 P2.0 A8 A9 P2.1 A10 P2.2 A11 P2.3 A12 P2.4 P2.5 P2.6 P2.7 LE A0 A1 A2 A3 A4 A5 A6 A7 LE A8 74LS573 74LS573 A9 A10 A11 A12 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 AT28C64 0000H a 1FFFH CE\ D0 D1 D2 D3 D4 D5 D6 D7 WE\ A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 LE A0 A1 A2 A3 A4 A5 A6 A7 LE A8 74LS573 74LS573 A9 A10 A11 A12 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 AT28C64 2000H a 3FFFH CE\ D0 D1 D2 D3 D4 D5 D6 D7 WE\
O acesso à memória EEPROM externa é feito através do comando MOVX. Por exemplo, desejando-se armazenar no endereço 1500H da memória externa o valor 35H, presente no acumulador, deve-se usar as instruções: MOV DPTR,#1500H carrega o valor 1500H em DPTR. MOV A,#35H carrega valor 35H no acumulador MOVX @DPTR,A transfere o conteúdo de A para o endereço 1500H da memória externa. O procedimento para copiar um conteúdo da memória externa para o acumulador é semelhante: MOV DPTR,#3000H carrega o valor 3000H em DPTR. MOVX A,@DPTR transfere para o acumulador o conteúdo do endereço 3000H da memória externa.
Exemplo: um texto é transferido da memória interna para a memória EEPROM externa, a partir do endereço 0000H. Rótulo Mnemônico Rótulo Mnemônico $mod51 cjne a,#0ffh,envia org 00h pop dpl ljmp inicio pop dph org 30h sjmp v1 inicio: mov sp,#2fh envia: pop dpl mov dptr,#0000h pop dph v1: mov r7,#00h movx @dptr,a v2: push dph inc dptr push dpl inc r7 mov dptr,#msg msg: sjmp v2 mov a,r7 db Microcontrolador,0ffh movc a,@a+dptr end
MAPEAMENTO DE MEMÓRIA
Na seção de Expansão de Memória as Portas P0 e P2 são usadas para aumentar a capacidade de memória do sistema construído. Para isso foi usada uma porta NAND. As outras portas NAND mostradas podem ser usadas tanto para acessar outras pastilhas de memória quanto para acessar outros periféricos. Pode-se, por exemplo, desejar acessar, além da memória, um display LCD, um conjunto de 8 LEDs, um motor de passo e um teclado. Nesse caso, cada um desses componentes pode ser alocado em qualquer uma das regiões definidas pelas portas NAND.
A divisão da região total de memória (64 K) pode ser distribuída, então, como mostrado na tabela a seguir. Região Endereço Dispositivo 0 0000H - 1FFFH Memória EEPROM 1 1 2000H - 3FFFH Memória EEPROM 2 2 4000H - 5FFFH Display LCD 3 6000H - 7FFFH Conjunto de 8 LEDs 4 8000H - 9FFFH Motor de Passo 5 A000H - BFFFH Reservado 6 C000H - DFFFH Reservado 7 E000H - FFFFH Teclado
Os dispositivos podem ser, então, habilitados através das seguintes portas NAND: End. Inicial: 0000H End. Final: 1FFFH Memória EEPROM 1 End. Inicial: 2000H End. Final: 3FFFH Memória EEPROM 2 End. Inicial: 4000H End. Final: 5FFFH Display LCD End. Inicial: 6000H End. Final: 7FFFH Conjunto de 8 LEDs End. Inicial: 8000H End. Final: 9FFFH Motor de Passo End. Inicial: E000H End. Final: FFFFH Teclado
Na verdade, o uso de portas NAND não seria o mais adequado quando se tem vários dispositivos para serem acessados. Nesse caso, o mais adequado é o uso de um decodificador. Por exemplo, o 74LS138, mostrado a seguir.
Tabela-Verdade e Diagrama Lógico do decodificador 74LS138
Portanto, usando o decodificador 74LS138 para o endereçamento dos dispositivos escolhidos, as conexões ficam como mostrado a seguir. Os sinais de controle RD\ e WR\ são usados para habilitação através do pino E3. Quando os dois sinais estão em nível lógico alto (operação interna do microcontrolador) nenhum periférico é habilitado. Quando um dos dois sinais está ativo (nível baixo) o decodificador é habilitado. RD\ WR\ A2 A1 A0 E3 E2\ E1\ 74LS138 O0\ O1\ O2\ O3\ O4\ O5\ O6\ O7\ Memória 1 Memória 2 LCD LEDs Motor de Passo Teclado
DISPLAY LCD
Comandos mais comuns para o Display LCD DESCRIÇÃO MODO RS R/W Código (Hexa) Display Liga (sem cursor) 0 0 0C Desliga 0 0 0A/08 Limpa Display com Home cursor 0 0 01 Controle docursor Liga 0 0 0E Desliga 0 0 0C Deslocapara Esquerda 0 0 10 Deslocapara Direita 0 0 14 Cursor Home 0 0 02 Cursor Piscante 0 0 0D Cursorcom Alternância 0 0 0F Sentido de deslocamento do cursor aoentrarcom caractere Deslocamento da mensagem ao entrarcom caractere Deslocamento da mensagem sem entrada decaractere Para a esquerda 0 0 04 Para a direita 0 0 06 Para a esquerda 0 0 07 Para a direita 0 0 05 Para a esquerda 0 0 18 Para a direita 0 0 1C Endereço daprimeira posição Primeira linha 0 0 80 Segunda linha 0 0 C0
Pinagem do Display LCD Pino Função Descrição 1 Vss (Alimentação) Terra ou GND 2 VDD (Alimentação) Vcc ou +5V 3 VEE Tensão para ajuste de contraste 4 RS 1 - Dado; 0 - Instrução 5 RW 1 - Leitura; 0 - Escrita 6 E (Chip Enable) 1 - Habilita; 0 - Desabilita 7 a 14 D0 a D7 Bits de Dados/Instruções 15 A (qdo existir) Anodo LED backlight 16 K (qdo existir) Catodo LED backlight 1 2 3 4 5 6 9 10 11 12 13 14 7 8 VSS VDD VEE RS RW E D0 D1 D2 D3 D4 D5 D6 D7
Endereços para escrita/leitura com o LCD alocado na região 2 (endereços de 4000H a 5FFFH): A12...... A3 A2 A1 A0 0 1 0 0...... 0 0 RW RS Com os pinos RW e RS conectados, respectivamente, aos pinos A1 e A0, os endereços de comando são: Endereço A1 (RW) A0 (RS) Descrição 4000H 0 0 Escrita de Instrução no LCD 4001H 0 1 Escrita de Dados no LCD 4002H 1 0 Leitura de Instrução do LCD 4003H 1 1 Leitura de Dados do LCD
No uso do Display LCD são necessários alguns procedimentos: 1. Inicialização escolhe-se o tipo de LCD, p.e., 2 linhas x 16 colunas ou 4 linhas x 20 colunas; define-se a transferência de dados com 8 ou 4 bits; e define-se o modo de entrada dos dados e como são mostrados. 2. Subrotina para escrita/leitura de instrução 3. Subrotina para escrita/leitura de dados. Um exemplo de instrução é o endereço de escrita no LCD. A tabela a seguir mostra os endereços (decimais) para o display de 2 linhas x 16 colunas. Colunas 1 2 3 4... 12 13 14 15 16 Linha 1 128 129 130 131... 139 140 141 142 143 Linha 2 192 193 194 195... 203 204 205 206 207