A ver aca te dejo una fuente q uso para hacer mis interrupciones, a mi nunca me ha fallado, es totalmente efectiva, y si quieres lo puedes combinar con basic....
Codigo:
DEFINE OSC 20 " Para trabajr con un cristal de 20MHz
wsave VAR BYTE $20 system " Guarda el registro W
ssave VAR BYTE bank0 system " Guarda el registro STATUS
psave VAR BYTE bank0 system " Guarda el registro PCLATH
" Aca van las demas variables a usar
GOTO Inicio
"********************* Vector de Interrupcion******************
DEFINE INTHAND Int_Vector " Handler de Interrupcion
ASM
Int_Vector
MOVWF wsave ; Guardamos el registro W
MOVF STATUS,W
CLRF STATUS ; Guardamos el registro STATUS
MOVWF ssave
MOVF PCLATH,W ; Guardamos el registro PCLATH
MOVWF psave
CLRF PCLATH
ENDASM
;*****************Codigo de interrupcion**********************
"Aca va el codigo de la interrupcion
"Debemos desactivar las interrupciones
" Y activarlas antes de que termine el codigo de la interrupcion
ASM ;****** Fin de Interrupcion ***********
End_Int
CLRF STATUS
MOVF psave,W
MOVWF PCLATH ; Restauramos el registro PCLATH
MOVF ssave,W
MOVWF STATUS ; Restauramos el registro STATUS
SWAPF wsave,F
SWAPF wsave,W ; Restauramos el registro W
RETFIE
ENDASM
"************************Inicio del Programa*************************
Inicio:
"Aca va el cuerpo de nuestro programa
" No debemos olvidar configurar el INTCON para poder atender las interrupciones
" Ademas de configurar la fuente de interrupcion.
END
Espero que te sirva... Un abrazo, nos vemos