Acessado a EEPROM Interna dos Microcontroladores PIC


Quase todos os microcontroladores PIC pussuem memórias EEPROM interna que permitem armazenar e recuperar dados durante a execução de um programa. O acesso de leitura ou gravação desses dados devem seguir um procedimento específico que é descrito no data sheet de cada microcontrolador. Sendo assim, nosso intuito é somente fornecer umas "receitas" que facilitem o processo.



Operações na EEPROM

Os tipos de operações que podem ser realizadas na EEPROM interna dos microcontroladores PIC são:

  1. Gravação durante a compilação do programa.
  2. Gravação durante a execução do programa.
  3. Leitura durante a execução do programa.


Gravação durante a compilação do programa

A EEPROM interna do microcontrolador pode ser gravada com dados originários do código fonte do programa.
Para gerar dados no código fonte do programa, usamos a diretiva 'DE' seguida da string desejada e isso deve ser feito a partir do endereço '0x2100' usando-se a diretiva 'ORG' como no exemplo abaixo.

O único cuidado necessário é não exceder o tamanho máximo da memória EEPROM do microcontrolador utilizado.
Para isso, sempre consulte o data sheet do dispositivo.

; ----------------------------------------------------------------------- ; ESTE PROGRAMA APENAS GRAVA A EEPROM INTERNA DO MICROCONTROLADOR ; ----------------------------------------------------------------------- list p=16F628A #include <p16F628A.inc> errorlevel -302 __CONFIG _CP_OFF & _LVP_OFF & _BOREN_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT UDATA 0x20 ORG 0x2100 DE "GRAVACAO DE DADOS NA EEPROM" ; dados string ASCII DE "DO MICROCONTROLADOR PIC16F628A" ; dados string ASCII DE 0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; dados no formato binário DE 0x0D,0x0A,0x0D,0x0A,0x0D,0x0A,0x0D ; dados no formato binário END

Observamos que '0x2100' não é um endereço real mas apenas uma referência para que esse bloco de dados seja tratado adequadamente pelo dispositivo de gravação (programador) do microcontrolador. Os endereços reais da EEPROM iniciam em 0 (zero) e terminam no máximo permitido para cada tipo de microcontrolador. Consulte o data sheet.

Após a compilação e gravação do programa no microcontrolador, esses dados já estarão gravados na memória EEPROM prontos para serem lidos pelo programa.



Gravação durante a execução do programa

A sequência de instruções abaixo mostra como gravar o caracter 'X' no endereço '32' da EEPROM de um PIC16F628A.

Primeiramente, carregamos o registrador 'EEADR' (2,3) com o endereço da EEPROM. Carregamos o caracter 'X' no registrador de dados 'EEDATA' (4,5). Agora, a gravação da EEPROM será habilitada ligando-se o bit 'WREN' do registrador 'EECON1' (6). A gravação da EEPROM exige que todas as interrupções estejam desabilitadas (7,8,9) e, em seguida, emite-se a sequência 0x55 e 0xAA no registrador 'EECON2' (10,11,12,13). Para iniciar a gravação, liga-se o bit 'WR' do registrador 'EECON1' (14). Ao termino da sequência, pode-se reabilitar as interrupcões (16).

1 - bsf STATUS, RP0 ; banco 1 2 - movlw .32 ; endereco a ser gravado 3 - movwf EEADR ; carrega o registrador de endereco da EEPROM 4 - movlw "X" ; dado a ser gravado 5 - movwf EEDATA ; carrega o dado no registrador de controle 6 - bsf EECON1, WREN ; habilita a gravacao da EEPROM 7 - bcf INTCON, GIE ; desabilita todas as interrupcoes 8 - btfsc INTCON, GIE ; o bit de interrupcoes foi desligado??? 9 - goto $-2 ; NAO --> espera o bit desligar 10 - movlw 0x55 ; W=0x55 11 - movwf EECON2 ; carrega 0x55 no registrador de controle 12 - movlw 0xAA ; W=0xAA 13 - movlw EECON2 ; carrega 0xAA no registrador de controle 14 - bsf EECON1, WR ; inicia a gravacao 15 - bcf STATUS, RP0 ; banco 0 16 - bsf INTCON, GIE ; reabilita as interrupcoes



Leitura durante a execução do programa

A sequência de instruções abaixo mostra como ler a EEPROM de um PIC16F628A onde, primeiramente, deve-se especificar o endereço desejado no registrador 'EEADR' (2 e 3). Em seguida, ligar o bit 'RD' (4) do registrador 'EECON1'. O dado será lido e ficará disponível no registrador 'EEDATA' (5) de onde poderá ser copiado e usado no programa. O registrador 'EEDATA' retem o dado até que uma próxima leitura ou gravação seja feita.

1 - bsf STATUS, RP0 ; banco 1 2 - movlw 0x00 ; endereco a ser lido 3 - movwf EEADR ; carrega o registrador de endereco da EEPROM 4 - bsf EECON1, RD ; habilita a leitura 5 - movf EEDATA, w ; carrega o registrador W com dado 6 - bcf STATUS, RP0 ; banco 0



NOTA

Vale observar que, dependendo do microcontrolador, os registradores de controle da EEPROM como 'EEADR', 'EEDATA', 'EECON1' e 'EECON2' podem residir em bancos de memória diferentes.



Capacidade de EEPROM de alguns microcontroladores

 Dispositivo   EEPROM (bytes) 
 PIC16F627A   128 
 PIC16F628A   128 
 PIC16F648A   256 
 PIC16F873A   128 
 PIC16F874A   128 
 PIC16F876A   256 
 PIC16F877A   256 
 PIC18F2550   256 
 PIC18F4550   256 
 PIC18F4520   256 

Índice Alfabético dos Projetos




H P S P I N

Desde 04 de Março de 2010

Atualização: 15 de Oct de 2025