Cordial Saludo..
hace tiempo pregunte esas cuestiones en el foro y el error que obtenia al leer y al escribir era el tiempo de acceso a la memoria..
Es demasiado lento para los tiempos de acceso a la memoria
Yo utilizo c2c, y estas son mis funciones para leer y escribir datos desde la EEPROM
void Escribir_EEPROM(char add, char dato)
{
{
char temp_INTCON;
temp_INTCON=INTCON;
INTCON=0;
temp_INTCON=INTCON;
INTCON=0;
while (EECON1 & b1==1){} //Esperar a que se complete un cillo de escritura
EEADR=add;
EEDATA=dato;
clear_bit(EECON1,7);
set_bit(EECON1,2);
//clear_bit(INTCON,7);
EECON2=85;
EECON2=170;
set_bit(EECON1,1);
set_bit(INTCON,7);
clear_bit(EECON1,2);
delay_ms(16);
INTCON=temp_INTCON;
}
EEADR=add;
EEDATA=dato;
clear_bit(EECON1,7);
set_bit(EECON1,2);
//clear_bit(INTCON,7);
EECON2=85;
EECON2=170;
set_bit(EECON1,1);
set_bit(INTCON,7);
clear_bit(EECON1,2);
delay_ms(16);
INTCON=temp_INTCON;
}
void Leer_EEPROM(char add)
{
{
set_bit(STATUS,RP1);
clear_bit(STATUS,RP0);
EEADR = add;
set_bit(STATUS,RP0);
clear_bit(EECON1,7);
set_bit(EECON1,0); //RD Después de ponerlo, en la siguiente instrucción, el dato estará disponible
nop();
nop();
clear_bit(STATUS,RP0);
nop();
dato_EEPROM=EEDATA;
delay_ms(16);
}
clear_bit(STATUS,RP0);
EEADR = add;
set_bit(STATUS,RP0);
clear_bit(EECON1,7);
set_bit(EECON1,0); //RD Después de ponerlo, en la siguiente instrucción, el dato estará disponible
nop();
nop();
clear_bit(STATUS,RP0);
nop();
dato_EEPROM=EEDATA;
delay_ms(16);
}
En tus rutinas no vi el NOP....
Espero te sirva esta información..
Adios