setup_timer_0(RTCC_INTERNAL | RTCC_8_BIT | RTCC_DIV_32);
#int_TIMER0
void reloj_isr(void)
{
++ints_timer0;
if(ints_timer0>=122)
{
ints_timer0=0;
flag_segundo=true;
++segundos;
}
}
Saludos
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Programa para el control de acceso;;
;;con temporización y chequeo de pto;;
;;simultáneos. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
list P=16F877A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
porta equ 0x05
portb equ 0x06
status equ 0x03
option_reg equ 0x01
addcon1 equ 0x9f
trisa equ 0x85
trisb equ 0x86
regi_n equ 0x20
tmr0 equ 0x01
intcon equ 0x0b
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h
goto inicio
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;; Inicio del programa ;;;;;;;;;
inicio
bsf status,5
movlw 0x20
movwf trisa ;Bit RA5 como entrada
clrf trisb ;Puerto B como salida
movlw 0x07
movwf addcon1 ;Entradas digitales
movwf option_reg ;Prescaler de 256 al TMR0
bcf status,5
bcf intcon,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Comienza espera del pulso de entrada ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start
btfsc intcon,2 ;Consulta si terminó temp.
goto recarga
btfss porta,5 ;Confirma pulso de acceso.
goto start
nop
pre_a movlw .50 ;Carga registro para la temp de 2,5seg
movwf regi_n
pre_b movlw .60 ;Precarga del TMR0
movwf tmr0
bsf portb,7
goto start
recarga bcf intcon,2
decfsz regi_n
goto pre_b
bcf portb,7
goto start
END