El microcontrolador sólo dispone de un vector de interrupción en la dirección 004h. Esto quiere decir que, sea cual sea la fuente de la interrupción, el contador de programa se carga con la dirección 004h.
Si vas a trabajar en ensamblador, dentro de la subrutina de atención a la interrupción, el programa deberá identificar la causa de la interrupción. Para ello, debe testear el estado de los flags de interrupción de cada una de las fuentes habilitadas, para deducir cual fue la que causó la interrupción y así decidir que acción tomar. En el siguiente fragmento de programa se muestra una forma de hacerlo:
Codigo:
..... .....
ORG 0 ; Dirección de comienzo del programa
goto Inicio
ORG 4 ; Vector de interrupción.
goto SevicioInterrupcion.
…..
Inicio
… (Aquí iría el resto del programa principal).
….
; Pasa a detectar la causa de la interrupción y ejecutar la subrutina correspondiente.
ServicioInterrupcion
btfsc INTCON,INTF ; ¿Interrupción por activación línea RB0/INT?
call Interrupcion_INT ; Ejecuta la subrutina de atención a interrupción INT.
btfsc INTCON,RBIF ; ¿Interrupción por cambio en el Puerto B?
call Interrupcion_RBI ; Ejecuta la subrutina de atención a interrupción RBI.
btfsc INTCON,T0IF ; ¿Interrupción por desbordamiento TMR0?
call Interrupcion_T0I ; Ejecuta la subrutina de atención a interrupción T0I.
..... .....
… y así con el resto de las interrupciones.
Espero te sirva, suerte.
Adrian.