Buenas noches, soy nuevo en el foro, y vengo con una duda. actualmente estoy haciendo un trabajo para la facultad donde me piden por un DISPLAY de 7 segmentos contar automáticamente, en hexadecimal,de 0 hasta 15 (F), y después decrementar también automáticamente y con el pulsador RB0 se debe poder pausar o reanudar el proceso del contador.
Mi problema es que cuando agregue un tmr0 en el código (ya que lo necesito para pasar de numero en numero en 1 segundo por display), me dejo de funcionar la parte de Interrupción del código, donde se realizaba la pausa y reanudación.
¿Cual seria el error y como podría solucionarlo?
muchas gracias.
#include <p16f628a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _LVP_OFF & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF& _BODEN_ON
Contador equ 0x20
AuxStatus equ 0x21
AuxW equ 0x22
Contador3 equ 0x24
CONT EQU 0x27
CONT2 EQU 0x28
CONT3 EQU 0x29
CONT_TMR0 EQU 0x30
org 0
goto Configuracion
org 0x04
Interrupcion:
btfsc PORTB,0
goto Interrupcion
goto Pausa
reanudar
bcf INTCON,GIE ;INHABILITO INTERRUPCIONES GLOBALES
bcf INTCON,INTF ;BAJO EL FLAG DE INTERRUPCION DE RB0
bsf INTCON,GIE ;HABILITO INTERRUPCIONES GLOBALES
movwf AuxW ;GUARDO EL CONTENIDO DE W
movfw STATUS
movwf AuxStatus ;GUARDO EL CONTENIDO DEL STATUS
movwf STATUS
movfw AuxW
retfie
Pausa
btfss PORTB,0
goto PAUSA
goto reanudar
Configuracion:
bsf INTCON,GIE ;HABILITO INTERRUPCIONES GLOBALES
bsf INTCON,INTE ;HABILITO INTERRUPCIONES POR RB0
bsf STATUS,RP0 ;CAMBIO A BANCO 1
movlw .250
movwf CONT_TMR0 ;Agrego 250 a contador de tmr0
clrf TRISB ;SETEA TODOS LOS BITS DEL TRISB EN 0
bsf TRISB,0 ;RB0 COMO ENTRADA
MOVLW B'00000011'
MOVWF OPTION_REG
bcf STATUS,RP0 ;CAMBIO A BANCO 0
movlw B'01111110' ;EL DISPLAY INICIA EN 0
movwf PORTB
call Timer0_1seg ;Mantengo el display en 0 por 1segundo
clrf Contador ;INICIALIZO EL CONTADOR EN 0
Inicio:
movlw d'15
movwf Contador3
incf Contador,1
movfw Contador ;SE PASA EL VALOR DE CONTADOR A W
call Display
movwf PORTB
call Timer0_1seg
decfsz Contador3,f
goto $-.6 ;HASTA CALL PRESION
movlw d'15
movwf Contador3
decf Contador,1
movfw Contador
call Display
movwf PORTB
call Timer0_1seg
decfsz Contador3,f
goto $-.6 ;HASTA CALL PRESION
goto Inicio
Display:
addwf PCL,1
retlw B'01111110' ;NUMERO 0
retlw B'00001100' ;NUMERO 1
retlw B'10110110' ;NUMERO 2
retlw B'10011110' ;NUMERO 3
retlw B'11001100' ;NUMERO 4
retlw B'11011010' ;NUMERO 5
retlw B'11111010' ;NUMERO 6
retlw B'00001110' ;NUMERO 7
retlw B'11111110' ;NUMERO 8
retlw B'11011110' ;NUMERO 9
retlw B'11101110' ;LETRA A
retlw B'11111000' ;LETRA B
retlw B'01110010' ;LETRA C
retlw B'10111100' ;LETRA D
retlw B'11110010' ;LETRA E
retlw B'11100010' ;LETRA F
Timer0_1seg
MOVLW .12 ;Carga el Timer0 con el valor que queremos
MOVWF TMR0
BCF INTCON,T0IF ;Reseteamos el Flag de desbordamiento del TMR0
Timer0_Desbordamiento
BTFSS INTCON,T0IF ;¿Se ha desbordado el TMR0?
GOTO Timer0_Desbordamiento ;Aún no, Repite.
decfsz CONT_TMR0,1 ;Repite 10 veces lo mismo para llegar a 1 segundo.
GOTO Timer0_1seg
RETURN
end