Buen dia amigos traigo un problema con una programacion en ccs y un pic16f877a el programa consiste en grabar datos de temperatura simulados en el Proteus en memorias de la eeprom sin enbargo al parecer mi programa no logra hacer que estos valores se escriban o se graben en las memorias de la eeprom lo se porque al querer visualizar los datos en el Hyperterminal solo salen 255 o FF me gustaria si alguien puede identificar que estoy haciendo mal les agradeceria su ayuda

aqui aporto la programacion.
#include <16f877a.h>
#device adc=10
#include <stdlib.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use i2c(Master,sda=PIN_C4,scl=PIN_C3)
#use rs232(baud=9600, xmit=pin_c6,rcv=pin_c7,bits=8,parity=N)
#include <lcd.c>
#define EEPROM_ADDRESS long int
#define EEPROM_SDA PIN_C4
#define EEPROM_SCL PIN_C3
float temp=0,dato;
int16 posicion=0;
int edit=0,f,reset=0,contador=0,segundos=1;
char opt,r,seg,sel=1;
float temp2=0;
void serial_print(){
printf("\f");
puts(" |=============================================|\n");
puts(" |----------REGISTRO DE TEMPERATURA------------|\n");
puts(" |-----a.Lectura de los registros de temp------|\n");
puts(" |--------b.Cambiar tiempo de muestreo---------|\n");
puts(" |-------c.Reiniciar registro de datos---------|\n");
puts(" |=============================================|\n\n");
}
void write_ext_eeprom(long int address,BYTE data){
short int status;
i2c_start();
i2c_write(0xA0);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0);
while(status==1)
{
i2c_start();
status=i2c_write(0xa0);
}
}
BYTE leer_eeprom(long int address){
BYTE data;
i2c_start();
i2c_write(0xA0);
i2c_write(address);
i2c_start();
i2c_write(0xa1);
data=i2c_read(0);
i2c_stop();
return(data);
}
#int_rda
void serial(){
opt=getc();
switch (opt){
case 'a':
printf("\f");
puts(" |==============DATOS REGISTRADOS==============|\n");
for(f=0;f<posicion;f++){
dato=leer_eeprom(f);
printf("\r %d. %.1f*C\n",f+1,dato);
}
delay_ms(5000);
serial_print();
break;
case 'b':
printf("\f");
puts(" |=============================================|\n");
puts(" |--------Seleccion de tiempo de muestreo------|\n");
puts(" |-------(Ingrese la cantidad en segundos)-----|\n");
puts(" |--------Valores válidos de 1seg a 5 seg------|\n");
puts(" |=============================================|\n");
while(sel==1){
seg=getc();
segundos=seg-48;
if(segundos>0 && segundos<=5){
printf("Se han seleccionado %d segundos.",segundos);
sel=0;
}else{
printf("Seleccion erronea.");
sel=1;
}
}
serial_print();
break;
case 'c':
printf("\f");
puts(" |=============================================|\n");
puts(" |-¿Seguro que desea reiniciar los registros?--|\n");
puts(" |----------(Presione 1 para continuar)--------|\n");
puts(" |-----(Cualquier otra tecla para cancelar)----|\n");
puts(" |=============================================|\n");
r=getc();
reset=atoi(r);
if(r=='1'){
posicion=0;
puts(" |--------------Reinicio exitoso---------------|\n");
}else{
puts(" |------------Operacion cancelada--------------|\n");
}
puts(" |=============================================|\n");
delay_ms(5000);
serial_print();
break;
}
}
#INT_TIMER1
void lec1(){
if(edit==0){
if (contador==segundos){
write_ext_eeprom(posicion,temp2);
posicion++;
contador=-1;
}
contador++;
}
set_timer1(90000);
}
void main() {
setup_adc(ADC_CLOCK_INTERNAL); // FUENTE DEL RELOJ RC
setup_adc_ports(AN0); //Canal 0 analogico
set_adc_channel(0); //Habilitación canal 0
lcd_init();
setup_timer_1 (T1_INTERNAL|T1_DIV_BY_8);
set_timer1(70000);
enable_interrupts(INT_TIMER1);
enable_interrupts(int_rda);
enable_interrupts(global);
serial_print();
while(TRUE) {
temp=read_adc();
temp=(temp/1024.0)*5000.0;
temp2=temp/10;
lcd_gotoxy(1,1);
printf(lcd_putc, " Temp: %.1f*C ", temp);
lcd_gotoxy(1,2);
printf(lcd_putc, "Registros: %ld ", posicion);
printf("\rTemperatura: %2.1f Registros: %3ld Tiempo de muestreo:%d ",temp2 ,posicion,segundos);
}
}