; **** Encabezado ****
list p=16F84A ; Microcontrolador utilizado.-
#include P16F84A.inc ; Definicion de registros SFR.-
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
;**** Definicion de Variables ****
CBLOCK 0x0C ; En esta posicion se declaran los registros de usuario (GPR)
STATUS_Temp ; Registro para guardar temporalmete STATUS
W_Temp ; Registro para guardar temporalmete W
Overflow ; Conteo de overflow del TIMER0
ENDC
;**** Inicio del Microcontrolador ****
Reset
org 0x00
goto Inicio ; Salto a inicio del programa.-
;**** Vector de Interrupcion ****
org 0x04
goto Inicio_ISR ; Atiendo Interrupcion.-
;**** Programa principal ****
org 0x05
Inicio
;---- Configuraciones ----
bsf STATUS,RP0 ; Banco 1.-
movlw 0xF8
movwf TRISB ;eeeeesss
movlw 0xEF
movwf OPTION_REG ; Pull-Up deshabiltado, , Timer0|Ext_l_h, 1:1
bcf STATUS,RP0 ; Banco 0.-
bsf INTCON,GIE ; Habilitacion general de interrupciones
Bucle
clrf TMR0
clrf Overflow
bcf INTCON,T0IF ; Limpiamos bandera
bsf INTCON,T0IE ; Habilitamos interrupcion por Timer0
; demora de 1 seg.
bcf INTCON,T0IE ; Deshabilitamos interrupcion por Timer0
; Pulsos = Overflow . 256 + Timer0
; Se calcula Velocidad
; Se pasa Velocidad a BCD
; Se actualiza displays
goto Bucle
;**** Rutina de servicio de Interrupcion ****
Inicio_ISR
;---- Guardado de registro W y STATUS ----
movwf W_Temp ; Copiamos W a un registro Temporario
swapf STATUS,W ; Invertimos nibles de STATUS
movwf STATUS_Temp ; Guardamos STATUS en un registro temporal
;---- Interrupciones ----
btfsc INTCON,T0IF ; Interrupcion por TMR0?
goto ISR_TMR0 ; Si, se trata interrupcion
;.............................
Fin_ISR
;---- Restauramos los valores de W y STATUS ----
swapf STATUS_Temp,W
movwf STATUS
swapf W_Temp,f
swapf W_Temp,W
retfie
;.......................
ISR_TMR0
; Tratamiento de Interrupcion
incf,1 Overflow
bcf INTCON,T0IF ; Limpiamos bandera
goto Fin_ISR
;.......................
end