los pic18 tienen dos vectores de interrupción.
Uno es el de alta prioridad y el otro el de baja.
Como en todos los casos, tú puedes tener todas las fuentes de interrupción del pic habilitadas si quieres. Cualquiera que salte irá al vector de baja prioridad por defecto. . Aquí tendrás que chequear las banderas, ver cuál es la que ha saltado y ejecutar el código que le corresponde.
Convencionalmente mientras se está atendiendo una interrupción no se puede producir otra por que tendrías recursividad en el handler de interrupción. Pero..............
Los pic18 al tener un segundo vector, tú puedes decirle que si un determinado periférico (o varios) provocan una interrupción mientras se estaba atendiendo otra, pues que sale a un segundo handler.
Es decir, que una rutina de interrupción de baja prioridad puede ser interrumpida por otra de alta prioridad. Cuando termine la prioritaria se continúa atendiendo la rutina de baja prioridad.
Para que esto sea posible hay que definir mediante unas macros cuáles van a ser los periféricos que irán a alta prioridad y cuáles van a los de baja prioridad y además hay que habilitar el registro RCONbits.IPEN=1 para habilitar los dos vectores y poder usar prioridades. levels). También:
INTCONbits.GIEH=1
INTCONbits.GIEL=1
Saludos.