Hola.
No especificás a qué modelo de PIC te estás refiriendo.
Si vamos al más básico, el 16F84A, depende la interrupción. Si usás la INTF(RB0) obviamente vas a saberlo debido a que posee una interrupción específica. Si usás la interrupción por cambio en el puertob(RB4~RB7) entonces podés averiguar también cuál fué el/los pin/es que cambió/aron de estado recurriendo a guardar el ultimo estado conocido de los pines en un registro auxiliar antes de reactivar la interrupción.
Ej:
movf PORB,W
movwf AUXPB ;guardar ultimo estado conocido del PuertoB antes de reactivar interrupciones...
bsf INTCON,GIE ;activar interr
org 0x0004
....
movf PORTB,W ;leo PB
btfsc INTCON,RBIF
call CambioPB
....
....
....
retfie
CambioPB
xorwf AUXB,W ;comparo con valor guardado
.... ;aqui chekearias que pines se modificaron(la XOR devuelve los bits modificados = 1)
movf PORB,W
movwf AUXPB ;guardar ultimo estado conocido del PuertoB antes de reactivar interrupciones...
return
Aunque debo destacar que no es 100% eficaz. Puede que algunas veces no funcione correctamente. Depende de la velocidad con la que ocurren los cambios en los pines.
El error ocurre debido a que pasa un cierto tiempo entre que ocurre la interrupcion y se lee el puertoB. Durante este tiempo los pines pueden volver a cambiar, y sin embargo no ha forma de capturarlo.
Lo mismo ocurre cuando guardas el ultimo estado del puertob. Entre que lo guardas y reactivas las interr, vuelve a pasar un cierto tiempo, durante el cual pueden ocurrir cambios en el puertob que no serán contemplados.
Suerte!