Hola Amigos:
Estoy confundido.
Estoy trabajando con un 16F877a, a 20MHz, y nunca he grabado datos en la eeprom, asi que estoy practicando. En el 16F84a nunca tuve problemas, pero ahora si.
Tengo declaradas unas variables, desde la direccion 46H hasta la 55H.
Hice una rutina, de la cual, utilizo otras 2 variables, una, que es la direccion de la eeprom, y la otra el dato a grabar.
Entonces hago lo siguiente:
MOVLW 0X46
MOVWF TMP1 ;GUARDA DIRECCION DE LA VARIABLE
MOVLW 0X0
MOVWF TMP2 ;GUARDA LA DIRECCION DE LA MEMORIA EEPROM
Lo que hago, es usar el FSR para dar apuntar a la direccion de la variable (empezando por la 0x46), para luego utilizar el INDF para volcarla al dato a grabar en la primera direccion de la eeprom (valor de TMP2).
Entonces, hago el procedimiento de grabacion que aparece en el datasheet, salvo por un pequeño detalle.
Utilizando el simulador del MPLAB, solo graba el primer dato que tengo en la primera variable (46H), que es un cero, y cuando se incrementan TMP1 y TMP2 con sus respectivos INCF TM1,1 , en la ventana de Watch, el valor no cambia, sigue estando en 46 y 0 respectivamente. Lo raro, que en W aparece un 8, cuando traspaso el TMP2 a la direccion de EEADR, por lo tanto, supuestamente que el incremento debiese ser 0x01, internamente es 0x8, entonces, graba un dato aleatoreo que no es valor de la variable a la que se esta apuntando, y de la direccion 0x0 de la eeprom, salta y graba un cero a la 0x08....
Tengo la impresion, que como tengo las variables en el banco cero, cuando se requiere cambiar los bancos para trabajar con EEADR y EEDATA, y ya no es el banco cero, las variables y sus valores se "pierden".
¿Esto es asi?. Yo pensaba que estas declaraciones se mantendrian sin importar el banco.
¿Como lo puedo solucionar¿.
Muchas gracias y ojala me ayuden.