; **** Encabezado ****
list p=16F628A ; Microcontrolador utilizado.-
#include P16F628A.inc ; Definicion de registros SFR.-
__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _DATA_CP_OFF
;**** Definicion de Variables ****
CBLOCK 0x20 ; En esta posicion se declaran los registros de usuario (GPR)
STATUS_Temp ; Registro para guardar temporalmete STATUS
W_Temp ; Registro para guardar temporalmete W
dato
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 0xE0
movwf TRISA ;eeesssss
movlw 0xDF
movwf OPTION_REG ; Pull-Up deshabiltado, , Timer0|interno, 1:1
bcf STATUS,RP0 ; Banco 0.-
movlw 0x7 ; Configuro Comparador Analogico
movwf CMCON ; V1in-=GND, V1in+=GND, C1out=Off| V2in-=GND, V2in+=GND, C2out=Off
bsf STATUS,RP0 ; Banco 1.-
bsf OPTION_REG,INTEDG ; Interrupcion RB0 por flanco ascendente
bcf STATUS,RP0 ; Banco 0.-
bcf INTCON,INTF ; Limpiamos bandera
bsf INTCON,INTE ; Habilitamos interrupcion RB0
bsf INTCON,GIE ; Habilitacion general de interrupciones
;AQUI CODIGO DE USUARIO
bucle
movf dato,0
movwf PORTA
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,INTF ; Interrupcion por RB0?
goto ISR_RB0 ; 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_RB0
; Tratamiento de Interrupcion
comf dato
bcf INTCON,INTF ; Borramos bandera
goto Fin_ISR
;.......................
end