Nunca hice retardos por el TMR0, solo los hacía mediante loops de contadores contando los ciclos de maquina etc...
Verán, lo que hice fue el programa beta que cuento hasta 15 y decremento, automaticamente, con un retardo de 1 segundo, tambien llegue a hacer una pausa.
Lo que me faltaría saber es el loop para continuar y reanudar, lo intente hacer btfss y btfsc pero no le encuentro la vuelta. tambien hacer un retardo unicamente con el TMR0.
Hasta ahora, si presiono RB0 se para el programa pero no lo puedo reanudar, les paso el .asm.
Código:
#include <p16f628a.inc>
Contador equ 0x20
AuxStatus equ 0x21
AuxW equ 0x22
Contador3 equ 0x24
CONT EQU 0x27
CONT2 EQU 0x28
CONT3 EQU 0x29
org 0
goto Configuracion
org 0x04
Interrupcion:
btfsc PORTB,0
goto $
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
Configuracion:
bsf INTCON,GIE ;HABILITO INTERRUPCIONES GLOBALES
bsf INTCON,INTE ;HABILITO INTERRUPCIONES POR RB0
bsf STATUS,RP0 ;CAMBIO A BANCO 1
clrf TRISB ;SETEA TODOS LOS BITS DEL TRISB EN 0
bsf TRISB,0 ;RB0 COMO ENTRADA
bcf STATUS,RP0 ;CAMBIO A BANCO 0
movlw B'10000000' ;EL DISPLAY INICIA EN 0
movwf PORTB
clrf Contador ;INICIALIZO EL CONTADOR EN 0
Inicio:
movlw d'15
movwf Contador3
incf Contador,1 ;SI FUE PULSADO, SE INCREMENTA EL CONTADOR EN 1
movfw Contador ;SE PASA EL VALOR DE CONTADOR A W
call Display
movwf PORTB
call delay_1s
decfsz Contador3,f
goto $-.6 ;HASTA CALL PRESION
movlw d'15
movwf Contador3
decf Contador,1
movfw Contador
call Display
movwf PORTB
call delay_1s
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
clrf Contador ;REINICIA EL CONTADOR
retlw B'01111110' ;NUMERO 0
return
DELAY_1MS
MOVLW .250
MOVWF CONT
LOOP
NOP
DECFSZ CONT,F
GOTO LOOP
RETURN
DELAY_10MS
MOVLW .10
MOVWF CONT2
LOOP2
CALL DELAY_1MS
DECFSZ CONT2,F
GOTO LOOP2
RETURN
DELAY_1S
MOVLW .100
MOVWF CONT3
LOOP3
CALL DELAY_10ms
DECFSZ CONT3,F
GOTO LOOP3
RETURN
end