H P S P I N E l e t r ô n i c a D i g i t a l e P r o g r a m a ç ã o d e M i c r o c o n t r o l a d o r e s P I C |
HOME PROJETOS PROGRAMAÇÃO |
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.
Os tipos de operações que podem ser realizadas na EEPROM interna dos microcontroladores PIC são:
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.
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
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
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.
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 |
![]() |