Hola, que tal, tengo una duda para plantear, tengo el siguiente programilla, es sencillo pero no logro saber como guardar en la ROM un dato que al encender, o resetear quede el ultimo dato guardado.
Se trata de un simple programa con un display 7 segmentos catodo comun,
Al iniciar comienza con el segmento central ( - ).
Lo unico que hace es cambiar del 1 al 6 y volver de nuevo( con el boton 1.)
Osea si marca uno, y pulso el boton 2 va a encender un led por ( 1 seg),
Si pulso el boton 1 hasta llegar al numero 2 y pulso el boton 2 ( va a encender por 2 seg, y asi ....
Lo que quisiera como dije antes seria que al apagarse o reiniciarse quedara el numero ultimo guardado, se que es algo sencillo ( no para mi ) como guardando una variable y mover el dato a la memoria, pero no se como crear la rutina, desde ya muchas gracias !!!
Se trata de un simple programa con un display 7 segmentos catodo comun,
Al iniciar comienza con el segmento central ( - ).
Lo unico que hace es cambiar del 1 al 6 y volver de nuevo( con el boton 1.)
Osea si marca uno, y pulso el boton 2 va a encender un led por ( 1 seg),
Si pulso el boton 1 hasta llegar al numero 2 y pulso el boton 2 ( va a encender por 2 seg, y asi ....
Código:
list p=16F84A
#include P16F84A.inc
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;**** Definicion de variables ****
Contador equ 0x0C ; Registro para almacenar conteo
Pulsador equ 7 ; Definimos Pulsador como el bit 7, en este caso sera para PORTB
;**** Inicio del Micro ****
Reset org 0x00 ; Aqui comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
;**** Programa principal ****
;**** Configuración de puertos ****
Inicio bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
movlw b'00001' ;RA0 como entrada
movwf TRISA
movlw b'10000000' ; RB7 como entrada y los demas como salida.-
movwf TRISB
bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
movlw b'1000000' ; Comienza con (-)
movwf PORTB
clrf Contador
; **** TESTEOS DE PULSADORES ****
;**** Testeo de Pulsador ****
Testeo btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto Testeo ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto Testeo ; Falsa Alarma, seguimos testeando.-
movlw b'0000110' ; (1)
movwf PORTB
goto UNO
UNO btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto UNOB ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto UNOB ; Falsa Alarma, seguimos testeando.-
movlw b'1011011' ; (2)
movwf PORTB
goto DOS
UNOB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto UNO ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto UNO ; Falsa Alarma, seguimos testeando.-
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call seg1 ; ( 1 SEG )
bcf PORTA,1 ; ( APAGA )
goto UNO
DOS btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto DOSB ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto DOSB ; Falsa Alarma, seguimos testeando.-
movlw b'1001111' ; (3)
movwf PORTB
goto TRES
DOSB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto DOS ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto DOS ; Falsa Alarma, seguimos testeando.-
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call seg2 ; ( 2 SEG )
bcf PORTA,1 ; ( APAGA )
goto DOS
TRES btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto TRESB ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto TRESB ; Falsa Alarma, seguimos testeando.-
movlw b'1100110' ; (4)
movwf PORTB
goto CUATRO
TRESB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto TRES ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto TRES ; Falsa Alarma, seguimos testeando.-
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call seg3 ; ( 3 SEG )
bcf PORTA,1 ; ( APAGA )
goto TRES
CUATRO btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto CUATROB ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto CUATROB ; Falsa Alarma, seguimos testeando.-
movlw b'1101101' ; (5)
movwf PORTB
goto CINCO
CUATROB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto CUATRO ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto CUATRO ; Falsa Alarma, seguimos testeando.-
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call seg2 ; ( 2 SEG )
call seg2 ; ( 2 SEG )
bcf PORTA,1 ; ( APAGA )
goto CUATRO
CINCO btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto CINCOB ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto CINCOB ; Falsa Alarma, seguimos testeando.-
movlw b'1111101' ; (6)
movwf PORTB
goto SEIS
CINCOB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto CINCO ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto CINCO ; Falsa Alarma, seguimos testeando.-
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call seg3 ; ( 3 SEG )
call seg2 ; ( 2 SEG )
bcf PORTA,1 ; ( APAGA )
goto CINCO
SEIS btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
goto SEISB ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTB,Pulsador ; Testeamos nuevamente.-
goto SEISB ; Falsa Alarma, seguimos testeando.-
movlw b'0000110' ; (6)
movwf PORTB
goto UNO
SEISB btfss PORTA,0 ; Testeamos si esta a 1 logico.-
goto SEIS ; No, seguimos testeando.-
;call Demora_20ms ; Eliminamos Efecto rebote
call Retardo_100ms ; TIEMPO
btfss PORTA,0 ; Testeamos nuevamente.-
goto SEIS ; Falsa Alarma, seguimos testeando.-
bsf PORTA,1 ; pone un 1 en RA0 (enciende el LED)
call seg3 ; ( 3 SEG )
call seg3 ; ( 3 SEG )
bcf PORTA,1 ; ( APAGA )
goto SEIS
INCLUDE <TIEMPOS.INC>
INCLUDE <RETARDOS.INC>
end
Lo que quisiera como dije antes seria que al apagarse o reiniciarse quedara el numero ultimo guardado, se que es algo sencillo ( no para mi ) como guardando una variable y mover el dato a la memoria, pero no se como crear la rutina, desde ya muchas gracias !!!
Última edición por un moderador: