Você está na página 1de 1

Centro Tecnolgico de Mecatrnica / Centro Tecnolgico Automotivo Disciplina PROGRAMAO Instrutor DANIEL CORTELETTI

EEPROM
Quando utilizamos variveis (seja para um clculo, uma contagem ou somatrios...) estes dados so preservados somente enquanto o microcontrolador permanecer ligado. Uma queda de alimentao de energia, ou o simples desligamento do sistema causa a perda das informaes mantidas em memria RAM, fazendo com que o programa reinicie com valores diferentes de quando o mesmo foi desligado. Uma das solues para manter estes dados preservados uma rea de memria chamada de EEPROM, presente na maioria dos microcontroladores. No PIC16F877A, esta rea de memria permite armazenar at 256 bytes, mantendo a informao mesmo que o microcontrolador seja desligado e assim mantido por vrios anos (sem exagero). Em linguagem C, utilizamos as funes write_eeprom e read_eeprom para gravar e ler (respectivamente) nesta rea de memria, sendo que os dados gravados e lidos so bytes. No caso de se desejar gravar uma informao de maior tamanho alocado (long, float, int32 ...) precisaremos decompor esta informao em bytes e armazenar em posies especficas de eeprom, e na leitura precisaremos remontar a informao. Vamos um exemplo de uso do armazenamento da informao de um contador simples de 8 bits. A cada contagem, a varivel incrementada e o valor armazenado na eeprom. main( ) { int conta; conta = read_eeprom(100); // l valor armazenado no endereo 100. Pode ser qualquer endereo 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 posio 100 while(input(PIN_D0)); aguarda pino desativar } } } Obs: Caso tenha que se gravar um valor de 16 bits, a sada decompor o nmero em 2 valores de 8 bits, e gravar cada um em uma posio. main( ) { long conta; conta = read_eeprom(10) + (long) read_eeprom(11)*256; // l valor do endereo 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 diviso de conta por 256 na posio 10 write_eeprom(11,conta / 256); // grava quociente da div. Inteira de conta por 256 na posio 11 while(input(PIN_D0)); aguarda pino desativar } } } Impresso em 7/10/2009 2:45 Pgina 1

Você também pode gostar