Buenas tardes. Llevo varios días diseñando un programa para hacer que 4 displays muestren mi fecha de cumpleaños en los siguientes formatos: Día/mes mes/año
El funcionamiento en protoboard debe ser que muestre un formato u otro cambiándolo con un push button. El problema es que cuando presiono el push, va cambiando entre un formato y otro bastante rápido, de tal forma que se queda en el formato en que se deja de presionar el push.
¿Cómo puedo solucionarlo?
Estoy usando un PIC16F8A en lenguaje ensamblador.
Dejo mi código aquí:
;Etiquetas Directivas Variables Comentarios
#include P16F84A.INC
LIST P=16F84A
RADIX HEX
__config _XT_OSC & _WDT_OFF & _PWRTE_ON
;area de declarar registros
num1 EQU 0x0C ;2
num2 EQU 0x0D ;1
num3 EQU 0x0E ;0
num4 EQU 0x0F ;7
cblock 0x12
endc
;cabecera de datos
org 0
;Cuerpo del programa
INICIO bsf STATUS, 0x05
movlw 0x10
movwf TRISA
clrf TRISB
bcf STATUS, 0X05
clrf num1
clrf num2
clrf num3
clrf num4
;numeros de la fecha
movlw 0x3F
movwf num1
movlw 0xFD
movwf num2
movlw 0x06
movwf num3
START
;Display1
movf num3,0
movwf PORTB
bsf PORTA,0
call DELAY1ms
bcf PORTA,0
;Display2
movf num3,0
movwf PORTB
bsf PORTA,1
call DELAY1ms
bcf PORTA,1
;Display3
movf num2,0
movwf PORTB
bsf PORTA,2
call DELAY1ms
bcf PORTA,2
;Display4
movf num1,0
movwf PORTB
bsf PORTA,3
call DELAY1ms
bcf PORTA,3
btfss PORTA,4
goto START
goto START2
START2
;DESPUES DEL BOTON
;Display1
movf num1,0
movwf PORTB
bsf TRISA,0
call DELAY1ms
bcf TRISA,0
;Display2
movf num1,0
movwf PORTB
bsf TRISA,1
call DELAY1ms
bcf TRISA,1
;Display3
movf num3,0
movwf PORTB
bsf TRISA,2
call DELAY1ms
bcf TRISA,2
;Display4
movf num3,0
movwf PORTB
bsf TRISA,3
call DELAY1ms
bcf TRISA,3
btfss PORTA,4
goto START2
goto START
;Adicionales
boton btfss PORTA,4
goto boton
goto antirebote
antirebote btfss PORTA,4
goto antirebote
goto DELAYBOTTON
DELAYBOTTON
bsf PORTA,4
call DELAYms
bcf PORTA,4
goto boton
;TIME DELAY
cblock
DELAY
DELAY2
DELAY3
endc
DELAYms
movlw 0XC8
movwf DELAY2
DELAY_Bms
movlw 0XFA
movwf DELAY
DELAY_Cms
nop
decfsz DELAY,F
goto DELAY_Cms
decfsz DELAY2,F
goto DELAY_Bms
return
cblock
DELAY1
DELAY2.1
endc
DELAY1ms
movlw 0X06
movwf DELAY2.1
DELAY_B
movlw 0XF9
movwf DELAY1
DELAY_C
nop
decfsz DELAY1,F
goto DELAY_C
decfsz DELAY2.1,F
goto DELAY_B
return
end