Bueno lo primero decirte que el PIC funciona secuencialmente, es decir que solo puede estar leyendo un codigo a la vez. Cuando salta una interrupción el pic almacena el puntero donde estaba leyendo el programa principal y ejecuta la solicitud de interrupción. Todo lo demás lo ignora y solo ejecuta el codigo de la interrupción. Si salta otra interrupción pueden occurir 2 cosas:
1- si la interrupción es de menor prioridad la ignora (creo que depende de los pics)
2- si lla interrupción es de mayor prioridad almacena de nuevo el puntero y empieza a leer el nuevo codigo de interrupción.
Luego el PIC ira resolviendo las interrupciones que han ido sucediendo. Si no recuerdo mal suelen ser maximo x punteros de almacenamiento. Es decir que si salta una interrupción sobre otra podra succeder un máximo de x veces, dependiendo de nuevo del PIC.
Espero haberme explicado con claridad, si tienes alguna duda vuelve a preguntar...
En este caso seria la misma interrupcion intRB por lo que la prioridad no puedo usarla. En mi caso me vendria muy bien que se abortase el tratamiento de una interrupcion cuando llegase otra igual...
Ejemplo ficticio:
Empezamos con todas las entradas del portB a 0.
#int_RB
RB_isr()
{
if (PORTB.4==1 && PORTB.5==0) while(true); // Si llega un pulso en el pin 4 entra en un bucle infinito (a la espera de otra condicion)
else if (PORT.4==1 && PORTB.5==1) printf(lcd.putc,"\fSe acabo el ciclo infinito"); // El pin 5 se pone tambien a 1, se activa de nuevo la interrupcion y se trata.
}
¿En este caso que pasaria? ¿Saldria del ciclo infinito o simplemente mostraria el mensaje en el lcd y seguiria bloqueado?
Gracias por contestar.