Вы находитесь на странице: 1из 1

Centro Tecnológico de Mecatrônica / Centro Tecnológico Automotivo Disciplina PROGRAMAÇÃO

Instrutor DANIEL CORTELETTI

Disciplina PROGRAMAÇÃO Instrutor DANIEL CORTELETTI EEPROM Quando utilizamos variáveis (seja para um cálculo,

EEPROM

Quando utilizamos variáveis (seja para um cálculo, uma contagem ou somatórios

) estes dados são

preservados somente enquanto o microcontrolador permanecer ligado. Uma queda de alimentação de energia, ou o

simples desligamento do sistema causa a perda das informações mantidas em memória RAM, fazendo com que o programa reinicie com valores diferentes de quando o mesmo foi desligado. Uma das soluções para manter estes dados preservados é uma área de memória chamada de EEPROM, presente na maioria dos microcontroladores. No PIC16F877A, esta área de memória permite armazenar até 256 bytes, mantendo a informação mesmo que o microcontrolador seja desligado e assim mantido por vários anos (sem exagero). Em linguagem C, utilizamos as funções write_eeprom e read_eeprom para gravar e ler (respectivamente)

nesta área de memória, sendo que os dados gravados e lidos são bytes. No caso de se desejar gravar uma informação

de maior tamanho alocado (long, float, int32

posições específicas de eeprom, e na leitura precisaremos remontar a informação.

) precisaremos decompor esta informação em bytes e armazenar em

Vamos à um exemplo de uso do armazenamento da informação de um contador simples de 8 bits. A cada contagem, a variável é incrementada e o valor é armazenado na eeprom.

main( )

{

int conta; conta = read_eeprom(100); // lê valor armazenado no endereço 100. Pode ser qualquer endereço entre 0 e 255.

while(1)

{

printf(lcd_putc,”\fContador: %u”, conta);

delay_ms(50);

if (input(PIN_D0))

{

conta ++; write_eeprom(100,conta); // grava conta na posição 100 while(input(PIN_D0)); aguarda pino desativar

}

}

}

Obs: Caso tenha que se gravar um valor de 16 bits, a saída é decompor o número em 2 valores de 8 bits, e gravar cada um em uma posição.

main( )

{

long conta; conta = read_eeprom(10) + (long) read_eeprom(11)*256; // lê valor do endereço 10 e 11, recompondo-o.

while(1)

}

{

printf(lcd_putc,”\fContador: %lu”, conta);

delay_ms(50);

if (input(PIN_D0))

}

{

conta ++; write_eeprom(10,conta % 256); // grava resto da divisão de conta por 256 na posição 10

write_eeprom(11,conta /

while(input(PIN_D0)); aguarda pino desativar

}

256); // grava quociente da div. Inteira de conta por 256 na posição 11