Hola.. estoy trabajando en un programa y quiero que guarde ciertos datos en la eeprom cuando se corta la alimentación pero como jamás usé la eeprom hice un código sencillo a modo de prueba, el cual cito a continuación:
btfss Porta, 0x3
goto Meli
clrf PortB
bsf Status, Rp0
clrf EEAdr ;Dirección = 0
movlw 0x1
movwf EEData ;Dato a escribir = 1
bsf EECon1, WrEn ;Habilita Escritura de la EEprom
bcf IntCon, GIE ;-
movlw 0x55 ; |
movwf EECon2 ; | Código mágico
movlw 0xAA ; |
bsf EECon1, Wr ;-
btfsc EECon1, Wr ;Espera a que termine el proceso
goto $-1 ;de escritura de la memoria.
incf EEData ;Dirección = 1
incf EEAdr ;Dato a escribir = 2
bcf IntCon, GIE ;-
movlw 0x55 ; |
movwf EECon2 ; | Código mágico
movlw 0xAA ; |
bsf EECon1, Wr ;-
btfsc EECon1, Wr ;Espera a que termine el proceso
goto $-1 ;de escritura de la memoria.
incf EEData
incf EEAdr
bcf IntCon, GIE ;-
movlw 0x55 ; |
movwf EECon2 ; | Código mágico
movlw 0xAA ; |
bsf EECon1, Wr ;-
btfsc EECon1, Wr ;Espera a que termine el proceso
goto $-1 ;de escritura de la memoria.
incf EEData
incf EEAdr
bcf IntCon, GIE ;-
movlw 0x55 ; |
movwf EECon2 ; | Código mágico
movlw 0xAA ; |
bsf EECon1, Wr ;-
btfsc EECon1, Wr ;Espera a que termine el proceso
goto $-1 ;de escritura de la memoria.
bcf EECon1, WrEn ;Deshabilita escritura de la EEprom
bcf Status, Rp0 ;Vuelve al banco 0
bsf IntCon, GIE ;Habilita interrupciones generales.
Meli
(resto del código..)
La idea es que antes de comenzar a grabar apague el puerto B (el cual va a unos displays 7 segmentos), grabe los datos 1, 2, 3 y 4 en las direcciones 0 a 3 y vuelva a encender el puerto B.. y de esa manera ver el parpadeo en los displays y darme una idea del tiempo que tarda en grabar los cuatro datos en la eeprom.
El tema es que no veo absolutamente ningún parpadeo y luego de ejecutar el código vuelvo a llevar el pic al programador y al leer la memoria eeprom están todas las posiciones a 'FF', por lo que evidentemente no se grabó nada.
El código no tiene nada de innovador, lo copié de la hoja de datos del pic.
Quisiera que alguien con más experiencia me dé alguna sugerencia de por qué puede no estar funcionando..
Desde ya les agradezco cualquier aporte..