No se guardan los datos en la memoria eeprom

Hola, estoy tratando de lograr escribir la memoria eeprom de un pic16f628a y, si bien es el código textual que figura en la hoja de datos, simplemente no guarda nada.
Además desde el programador llené todos los espacios con ceros y al inicio de mi programa trato de leer esos valores pero lee otros números..
Este es el segmento de mi programa que debería escribir en la eeprom:

Código:
Boton4
clrf    PortB
bsf     Status, Rp0
clrf    EEAdr                ;Dirección = 0
movfw    Digito1
movwf    EEData          ;Dato a escribir = Digito 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    EEAdr               ;Dirección = 1
movfw   Digito2
movwf   EEData              ;Dato a escribir = Digito 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    EEAdr              
movfw   Digito3
movwf   EEData              ;Dato a escribir = Digito 3

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     Control, Pulsador
goto    Inicio
Les agradecería cualquier aporte que me ayude a encontrar dónde puede estar el problema.. Desde el programador puedo leer y escribir la eeprom correctamente por lo que no es un fallo del pic..
Desde ya muchas gracias.
Saludos..
 
Mira esta librería del 16F84A. Con esta librería intentaré hacer lo mismo para el 16F88.

Si lo adaptas tal como está en esta librería para el 16F628A quiero que le publiques por aquí si no es molestia alguna.

Código:
;***************************** Librería "EEPROM.INC" **********************************
;
;    ====================================================================
;      Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS".
;      E. Palacios, F. Remiro y L. López.        www.pic16f84a.com
;       Editorial Ra-Ma.  www.ra-ma.es
;    ====================================================================
;
; Estas subrutinas permiten realizar las tareas básicas de escritura y lectura de la
; memoria EEPROM de datos del PIC.
;
; Subrutina "EEPROM_LeeDato" ------------------------------------------------------------
;
; El microcontrolador lee el dato que hay escrito en la posición de la EEPROM del PIC apuntada
; por el contenido del registro de trabajo W. El resultado se proporciona en el mismo W.
;
; Entrada: En (W) la dirección de la memoria EEPROM a leer.
; Salida :  En (W) el byte leído.

EEPROM_LeeDato
    bcf        STATUS,RP0            ; Asegura que trabaja con el Banco 0.
    movwf    EEADR                ; Dirección a leer.
    bsf        STATUS,RP0            ; Banco 1.
    bsf        EECON1,RD            ; Orden de lectura.
EEPROM_SigueLeyendo
    btfsc    EECON1,RD            ; El PIC indica que ha terminado la lectura
    goto    EEPROM_SigueLeyendo    ; poniendo en bajo este bit.
    bcf        STATUS,RP0            ; Banco 0.
    movf    EEDATA,W            ; El byte leído al registro W.
    return

; Subrutina "EEPROM_EscribeDato" --------------------------------------------------------
;
; Escribe el dato introducido en el registro de trabajo W en la posición de memoria EEPROM del
; PIC apuntada por el registro EEADR.
;
; Como altera el valor del registro INTCON al posicionar el flag GIE, éste se debe guardar al
; principio de la subrutina y restaurarlo al final.
;
; Entradas:    En el registro EEADR la dirección de la memoria EEPROM a escribir.
;        En el registro W el byte a escribir.
;
    CBLOCK
    EEPROM_GuardaINTCON
    ENDC

EEPROM_EscribeDato
    bcf        STATUS,RP0            ; Asegura que trabaja con el Banco 0.
    movwf    EEDATA                ; El byte a escribir.
    movf    INTCON,W            ; Reserva el valor anterior de INTCON
    movwf    EEPROM_GuardaINTCON
    bsf        STATUS,RP0            ; Acceso al Banco 1.
    bcf        INTCON,GIE            ; Deshabilita todas las interrupciones.
    bsf        EECON1,WREN            ; Habilita escritura.
;
; El fabricante especifica que hay que seguir esta secuencia para escritura en EEPROM:
;
    movlw    0x55
    movwf    EECON2
    movlw    0xAA
    movwf    EECON2
    bsf        EECON1,WR            ; Inicia la escritura.
EEPROM_TerminaEscribir
    btfsc    EECON1,WR            ; Comprueba que termina de escribir en la EEPROM.
    goto    EEPROM_TerminaEscribir
    bcf        EECON1,WREN            ; Desautoriza la escritura en EEPROM.
    bcf        EECON1,EEIF            ; Limpia este flag.
    bcf        STATUS,RP0            ; Acceso al Banco 0.
    movf    EEPROM_GuardaINTCON,W ; Restaura el valor anterior de INTCON.
    movwf    INTCON
    return

;    ====================================================================
;      Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS".
;      E. Palacios, F. Remiro y L. López.        www.pic16f84a.com
;       Editorial Ra-Ma.  www.ra-ma.es
;    ====================================================================
 
Atrás
Arriba