Bueno, solucionado. No había brujas pero me llama la atención en donde estaba el fallo:
Al parecer no deja actuar sobre el acumulador si estás en otro banco que no sea el banco 0. Cosa rara porque en otros micros he podido cargar el acumulador desde cualquier banco. No lo sé...
Lo he probado, funciona y graba del 00 al 08 con datos 00 a 08.
También funciona la lectura, tuve que cambiar la linea de carga de acumulador que estaba en banco 1 al banco 0.
El resto es cosa tuya
LIST P=16F628 ; Microcontrolador utilizado.-
#INCLUDE <P16F628.INC> ; Definicion de registros SFR.-
__CONFIG 0x3F61
;0x3F18
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ DEF. DE VARIABLES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
CBLOCK 0x20
DATO
direccion
FACTOR
FACTOR1
dato
CONT1
CONT2
REG
REG1
REG2
ENDC
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RESET \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
RESET
ORG 00H
GOTO INICIO ; Salto a inicio del programa.-
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ CONFIG. DE PUERTOS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ORG 05H
INICIO
MOVLW 0x07
MOVWF CMCON
BSF STATUS,RP0
MOVLW B'11111'
MOVWF PORTA
MOVLW B'00000000'
MOVWF PORTB
BCF STATUS,RP0
CLRF PORTA
CLRF PORTB
CLRF direccion
CLRF dato
CLRF CONT1
MOVLW .9
MOVWF FACTOR
CLRF CONT2
GOTO WRITE_EEPROM
INCR INCF dato,1
INCF direccion,1
WRITE_EEPROM
MOVF dato,W
XORWF FACTOR,0
BTFSC STATUS,Z
GOTO READ_EEPROM
MOVF dato,W ;aquí va el dato a escribir en EEPROM
BSF STATUS,RP0 ;cambiar a Banco 1
MOVWF EEDATA ;poner dato en en EEDATA
BCF STATUS,RP0 ;cambiar a Banco 0
MOVF direccion,W ;dirección de EEPROM
BSF STATUS,RP0 ;cambiar a Banco 1
MOVWF EEADR ;ponerla en EEADR
BSF EECON1,WREN ;habilitar grabación de EEPROM
MOVLW 0x55
MOVWF EECON2 ;comando
MOVLW 0xAA
MOVWF EECON2 ;comando
BSF EECON1,WR ;agregar el dato en la EEPROM
BTFSC EECON1,WR ;esperar a que termine (10 ms)
GOTO $-1
BCF STATUS,RP0 ;cambiar a Banco 0
GOTO INCR
DECRE
INCF CONT1,F
;INCF DIR,F
READ_EEPROM
MOVF CONT1,W ;dirección de EEPROM
BSF STATUS,RP0 ;cambiar a Banco 1
MOVWF EEADR ;ponerla en EEADR
BSF EECON1,RD ;operación de lectura
MOVF EEDATA,w ;leer dato desde EEPROM
BCF STATUS,RP0 ;cambiar a Banco 0
MOVWF DATO ;guardar el dato
CALL MULTIPLEXA
MOVF CONT2,W
XORWF FACTOR,0
BTFSS STATUS,Z
GOTO DECRE
GOTO FIN
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ TABLA DE DISPLAY \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
TABLA
ADDWF PCL,1
RETLW B'10000000'
RETLW B'11110010'
RETLW B'01001000'
RETLW B'01100000'
RETLW B'00110010'
RETLW B'00100100'
RETLW B'00000100'
RETLW B'11110000'
RETLW B'00000000'
RETLW B'00110000'
RETLW B'10000000'
MULTIPLEXA
MOVF DATO,W
CALL TABLA
MOVWF PORTB
CALL RET8MS
RETURN
RET8MS
MOVLW .26
MOVWF REG2
LAZO3 MOVLW .94
MOVWF REG1
LAZO2 MOVLW .109
MOVWF REG
DECFSZ REG,1
GOTO $-1
DECFSZ REG1,1
GOTO LAZO2
DECFSZ REG2,1
GOTO LAZO3
RETURN
FIN
END