Si tienes que almacenar en la EEPROM la solucion que veo es por direccionamiento indirecto.
Ejemplo de suki:
; **** Encabezado ****
list p=16F84A
#include P16F84A.inc
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;**** Definicion de variables ****
Contador equ 0x0C ; Seleccionamos posición en la memoria RAM (GPR) para guardar
; registro utilizado para demora.-
Contador1 equ 0x0D ; Registro utilizado en demora.-
Contador2 equ 0x0E
Reset
org 0x00 ; Aquí comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
;**** Programa principal ****
;**** Configuracion de puertos ****
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
clrf TRISB ; PORTB como salida.-
bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
call Config_Tabla ; Cargamos registros con Codigo de 7 segmentos.-
movfw INDF ; Leemos codigo de 7 Segmentos para el CERO.-
movwf PORTB ; Mostramos el CERO.-
;**** Testeo de Pulsador ****
Bucle
call Demora_190ms ; Demora para visualizar Display
incf FSR,1 ; Incrementamos Puntero.-
movlw 0x1A ; Consulamos si se pide codigo para mostrar "10",
subwf FSR,0 ; si es asi reseteamos FSR, apunta a 0x10--> "0".-
btfss STATUS,Z ; Si Z=1 --> 0x1A - FSR = 0.-
goto Muestro_Display ; No, muestro display.-
movlw 0x10 ; Si reseteo puntero.-
movwf FSR ;
Muestro_Display
movfw INDF ; Leo Registro que apunta FSR.-
movwf PORTB ; Lo cargo en PORTB.-
goto Bucle ; Continuo conteo.-
;**** Demora ****
Demora_190ms
movlw 0xFF ;
movwf Contador1 ; Iniciamos contador1.-
Repeticion1
movlw 0xFF ;
movwf Contador2 ; Iniciamos contador2
Repeticion2
decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-
goto Repeticion2 ; Si no es 0 repetimos ciclo.-
decfsz Contador1,1 ; Decrementa Contador1.-
goto Repeticion1 ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-
;**** Cargamos tabla en memoria ****
Config_Tabla
movlw 0x10 ;
movwf FSR ; Direccionamos el registro 0x10 de la memoria RAM (GPR).-
movlw 0x3F ; Cargamos el codigo para mostrar el CERO.-
movwf INDF ; Lo guardamos donde apunta FSR --> 0x10.-
;....................
incf FSR,1 ; Incrementamos FSR, ahora apunta a 0x11.-
movlw 0x06 ; Cargamos codigo para UNO.-
movwf INDF ; Lo guardamos donde apunta FSR.-
;....................
incf FSR,1 ; Incrementamos FSR, ahora apunta a 0x12.-
movlw 0x5B ; Cargamos codigo para DOS.-
movwf INDF ; Lo guardamos donde apunta FSR.-
;....................
incf FSR,1 ; Incrementamos FSR, ahora apunta a 0x13.-
movlw 0x4F ; Cargamos codigo para TRES.-
movwf INDF ; Lo guardamos donde apunta FSR.-
;....................
incf FSR,1 ; Incrementamos FSR, ahora apunta a 0x14.-
movlw 0x66 ; Cargamos codigo para CUATRO.-
movwf INDF ; Lo guardamos donde apunta FSR.-
;....................
incf FSR,1 ; Incrementamos FSR, ahora apunta a 0x15.-
movlw 0x6D ; Cargamos codigo para CINCO.-
movwf INDF ; Lo guardamos donde apunta FSR.-
;....................
incf FSR,1 ; Incrementamos FSR, ahora apunta a 0x16.-
movlw 0x7D ; Cargamos codigo para SEIS.-
movwf INDF ; Lo guardamos donde apunta FSR.-
;....................
incf FSR,1 ; Incrementamos FSR, ahora apunta a 0x17.-
movlw 0x07 ; Cargamos codigo para SIETE.-
movwf INDF ; Lo guardamos donde apunta FSR.-
;....................
incf FSR,1 ; Incrementamos FSR, ahora apunta a 0x18.-
movlw 0xFF ; Cargamos codigo para OCHO.-
movwf INDF ; Lo guardamos donde apunta FSR.-
;....................
incf FSR,1 ; Incrementamos FSR, ahora apunta a 0x19.-
movlw 0x6F ; Cargamos codigo para NUEVE.-
movwf INDF ; Lo guardamos donde apunta FSR.-
;....................
movlw 0x10 ;
movwf FSR ; Direccionamos Registro del CERO.-
return ; Cargado los valores, retornamos.-
;..................................................................
end
lo simule en el MPLAB y los GPR son igual en la RAM que en la EEPROM de hecho aunque se escribe en RAM, se reflejan en la EEPROM.
Es un trabajo para la facultad?. Por que os mandan hacer cosas complicadas sin enseñaros lo basico? La segunda pregunta es para tu profesor
tapi8