#include <P16F877A.INC>
; Definir los registros
COUNT equ 0x20
STATUS equ 0x03
; Definir bits de STATUS
RP0 equ 5
TO equ 4
; Configuración
org 0x00
goto Start
org 0x04
goto ISR
Start:
; Configurar registros
banksel COUNT
clrf COUNT
banksel STATUS
bsf STATUS, RP0 ; Seleccionar banco 1
bcf STATUS, TO ; Limpiar bandera de desborde
banksel COUNT
movlw b'00100000' ; Configurar T0CS y prescaler en 1:32
movwf OPTION_REG
; Configurar puertos
banksel PORTB
clrf PORTB
banksel TRISB
clrf TRISB
; Configurar interrupciones
banksel INTCON
bsf INTCON, GIE ; Habilitar interrupciones globales
bsf INTCON, T0IE ; Habilitar interrupción del timer0
Loop:
goto Loop ; Bucle infinito
ISR:
banksel COUNT
incf COUNT, F ; Incrementar contador
movlw d'61' ; Cargar 61 para comparar
subwf COUNT, W ; Comparar con COUNT
btfss STATUS, Z ; Salto si no es igual a 61
call ResetCount ; Reiniciar contador
retfie ; Retornar de la interrupción
ResetCount:
banksel COUNT
clrf COUNT ; Reiniciar contador
return
end