//LIBRERIA PARA LA EEPROM 24LC256.c
#ifndef EEPROM_SDA
#define EEPROM_SDA PIN_B1
#define EEPROM_SCL PIN_B0
#endif
#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL)
#define EEPROM_ADDRESS long int
#define EEPROM_SIZE 32768
void init_ext_eeprom(){
output_float(EEPROM_SCL);
output_float(EEPROM_SDA);
}
void write_ext_eeprom(long int address, BYTE data){
short int status;
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0);
while(status==1) {
i2c_start();
status=i2c_write(0xa0);
}
}
BYTE read_ext_eeprom(long int address) {
BYTE data;
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_write(address);
i2c_start();
i2c_write(0xa1);
data=i2c_read(0);
i2c_stop();
return(data);
}
muchachos, esa es la libreria de ccs para escribir en la eeprom de 24lc256.
hasta el momento me habia escrito todo los datos q le mandaba correctamente, pero
ahora q he tenido la necesidad de escribir datos en localidades altas de la memoria,
me esta colocando problemas.
si le mando esto (dir puede estar entre 0 y 250 mas o menos):
long dir;
WRITE_EXT_EEPROM( dir, 'a' );
no pone problema para nada, es decir, lo guarda bien.
...,pero si le mando a q escriba un dato despues de dir mayor a 250:
long dir; //dir=mas de 250
WRITE_EXT_EEPROM( dir, 'a' );
entonces no lo escribe... y a veces se bloquea.
¿q esta pasando?