#include "p16f876a.inc"
; CONFIG
; __config 0xFFB9
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_ON & _CPD_OFF & _WRT_OFF & _CP_OFF
ERRORLEVEL -302 ; Al compilar no notifica los posibles errores de paginación
ERRORLEVEL -207
;-------------------------------------------------------------------------------
#define SWITCH PORTA,0
#define LED PORTA,1
;-------------------------------------------------------------------------------
; DECLARACION DE VARIABLES
save_status EQU 0x20 ; variable usada en la interrupcion
save_w EQU 0x21 ; variable usada en la interrupcion
;-------------------------------------------------------------------------------
; DECLARACION DE MACROS
BANK0 macro
BCF STATUS,RP0
BCF STATUS,RP1
endm
BANK1 macro
BSF STATUS,RP0
BCF STATUS,RP1
endm
;-------------------------------------------------------------------------------
RES_VECT CODE 0x0000 ; processor reset vector
GOTO START ; go to beginning of program
ORG 0x004 ; vector de interrupcion
GOTO INTERRUPT
;-------------------------------------------------------------------------------
INTERRUPT
MOVWF save_w
SWAPF STATUS,W
MOVWF save_status
COMP_SWITCH
BTFSS SWITCH ; comprobamos el estado del switch
GOTO LED_OFF ; el switch esta sin pulsar
LED_ON
BSF LED ; ahora si, encendemos el led
GOTO COMP_SWITCH ; comprobamos el switch
LED_OFF
BCF LED ; el led permanece apagado
GOTO COMP_SWITCH ; comprobamos el switch
SWAPF save_status,W
MOVWF STATUS
SWAPF save_w, F
SWAPF save_w, W
RETFIE
;-------------------------------------------------------------------------------
; *** PROGRAMA PRINCIPAL ***
;-------------------------------------------------------------------------------
MAIN_PROG CODE ; let linker place main program
START:
BANK0 ; banco 0
CLRF PORTA
BANK1 ; banco 1
MOVLW 0x06 ; configuramos todos los pines
MOVWF ADCON1 ; como entradas digitales
MOVLW B'00000001' ; configuramos todo el PORTA
MOVWF TRISA ; como output excepto RA0 que sera input
BSF INTCON,GIE ; activamos...
BSF INTCON,PEIE ; interrupciones
BANK0 ; banco 0
MAIN
NOP ; aqui el micro ejecuta cualquier otra cosa
GOTO MAIN
END