Problemas en la lectura de memoria EEPROM

Hola.
Estoy haciendo mi PFC sobre un PIC16f876 y programando sobre Proton ( si alguien no lo conoce, debería ser como Pic Basic)
Basicamente el programa debe tomar unas medidas (35 para ser exactos), y almacenarlas (5 de ellas son de un solo Byte, las 30 restantes son de 2 bytes) en una eeprom externa, comunicada pro protocolo I2C.
El Pic debe hacer eso durante 24 horas o hasta que se conecte a un PC y, por puerto serie se le pida que envíe los datos al PC.
Bueno, el problema viene al leer los datos guardados en la eeprom.
El programa lee correctamente las primeras 2 series de datos, pero las siguientes series empiezan a tener errores.

Adjunto el código de las funciones de lectura/escritura de la eeprom.
A ver si alguien es capaz de ver algún error. En alguna de las dos rutinas.
He comprobado gracias a un display LCD que los datos que envío a la eeprom son distintos de los que lee de la eeprom (cuando los lee mal), pero que los datos del Pic
llegan bien al ordenador(incluyendo los errores que se han tomado al leer de la memoria).
H es una variable que se va incrementando a medida que se toman datos.


Código:
ENVIAR:
    Cls    
    ADR = H * 75    'POR SER 75 BYTES A ENVIAR A LA EEPROM
    Print At 1,1,"Enviar"
    Print At 2,1,"H=",Dec H ," ","ADR=", Dec ADR 
    DelayMS 500
    BusOut $A0,ADR,[MEDIDA[0],MEDIDA[1],MEDIDA[2],MEDIDA[3],MEDIDA[4]]
    DelayMS 200
    Print At 2,1,"H=",Dec H ," ","ADR=", Dec ADR 
    ADR = ADR + 10
    BusOut $A0,ADR,[MEDIDA[5],MEDIDA[6],MEDIDA[7],MEDIDA[8],MEDIDA[9]]
    DelayMS 200
    Print At 2,1,"H=",Dec H ," ","ADR=", Dec ADR 
    ADR = ADR + 10
    BusOut $A0,ADR,[MEDIDA[10],MEDIDA[11],MEDIDA[12],MEDIDA[13],MEDIDA[14]]
    DelayMS 200
    Print At 2,1,"H=",Dec H ," ","ADR=", Dec ADR 
    ADR = ADR + 10
    BusOut $A0,ADR,[MEDIDA[15],MEDIDA[16],MEDIDA[17],MEDIDA[18],MEDIDA[19]]
    DelayMS 200
    Print At 2,1,"H=",Dec H ," ","ADR=", Dec ADR 
    ADR = ADR + 10
    BusOut $A0,ADR,[MEDIDA[20],MEDIDA[21],MEDIDA[22],MEDIDA[23],MEDIDA[24]]
    DelayMS 200
    Print At 2,1,"H=",Dec H ," ","ADR=", Dec ADR 
    ADR = ADR + 10
    BusOut $A0,ADR,[MEDIDA[25],MEDIDA[26],MEDIDA[27],MEDIDA[28],MEDIDA[29]]
    DelayMS 200
    Print At 2,1,"H=",Dec H ," ","ADR=", Dec ADR 
    ADR = ADR + 10
    BusOut $A0,ADR,[MEDIDA[30],MEDIDA[31],CANAL2,CANAL3,CANAL4]
    DelayMS 200
    Print At 2,1,"H=",Dec H ," ","ADR=", Dec ADR 
    ADR = ADR + 10
    BusOut $A0,ADR,[seg,mint,hor,dat,mes]
    DelayMS 200

Return



LEER:
    ADR = H * 75
    Print At 1,1,"ADRL","=", Dec ADR 
    DelayMS 500
    BusIn $A1,ADR,[TESTL[0],TESTL[1],TESTL[2],TESTL[3],TESTL[4]]
    DelayMS 200
    ADR = ADR + 10
    Print At 2,1,"ADRL2","=", Dec ADR
    BusIn $A1,ADR,[TESTL[5],TESTL[6],TESTL[7],TESTL[8],TESTL[9]]
    DelayMS 200
    ADR = ADR + 10
    Print At 2,1,"ADRL2","=", Dec ADR  
    BusIn $A1,ADR,[TESTL[10],TESTL[11],TESTL[12],TESTL[13],TESTL[14]]
    DelayMS 200
    ADR = ADR + 10
    Print At 2,1,"ADRL3","=", Dec ADR 
    BusIn $A1,ADR,[TESTL[15],TESTL[16],TESTL[17],TESTL[18],TESTL[19]]
    DelayMS 200
    ADR = ADR + 10
    Print At 2,1,"ADRL3","=", Dec ADR 
    BusIn $A1,ADR,[TESTL[20],TESTL[21],TESTL[22],TESTL[23],TESTL[24]]
    DelayMS 200
    ADR = ADR + 10
    Print At 2,1,"ADRL4","=", Dec ADR     
    BusIn $A1,ADR,[TESTL[25],TESTL[26],TESTL[27],TESTL[28],TESTL[29]]
    DelayMS 200
    ADR = ADR + 10
    Print At 2,1,"ADRL4","=", Dec ADR     
    BusIn $A1,ADR,[TESTL[30],TESTL[31],TESTL[32],TESTL[33],TESTL[34]]
    DelayMS 200
    ADR = ADR + 10
    Print At 2,1,"ADRL5","=", Dec ADR     
    BusIn $A1,ADR,[LSEG,LMINT,LHOR,LDAT,LMES]
    DelayMS 200    
Return


Espero haberme explicado bien.
Muchas gracias.
 
Última edición por un moderador:
Atrás
Arriba