Problema con prioridad de interrupciones

Tengo el siguiente código:

Código:
#include <p18f4620.h>
#include <delays.h>
#include <portb.h>
 
#pragma config OSC=INTIO67
 
#define true 1
 
volatile char bandera=0;
char a=0;
 
void int_extISR(void);
void int_extISRBajo(void);

 
// Creamos una nueva seccion de codigo a partir de la direccion 0x08.-
#pragma code Interrupcion = 0X0008
void VectorInterrupcion(void){
 _asm goto int_extISR _endasm
}
#pragma code // Cerramos seccion.-
 
// Rutina de Interrupcion.-
#pragma interrupt int_extISR
void int_extISR(void){

 if(INTCONbits.INT0IF==1){
   bandera=1;       // Indicamos que se ha producido la interrupción.-
   INTCONbits.INT0IF=0;  // Borramos bandera.-
 }

if(INTCON3bits.INT1IF==1){
   bandera=1;       // Indicamos que se ha producido la interrupción.-
   INTCON3bits.INT1IF=0;  // Borramos bandera.-
}

 if (INTCONbits.RBIF==1)
 {
		INTCONbits.RBIF=0;
}


}

#pragma code Interrupcion2 = 0X0018
void VectorInterrupcionBajo(void){
 _asm goto int_extISRBajo _endasm
}
#pragma code // Cerramos seccion.-
 
// Rutina de Interrupcion.-
#pragma interruptlow int_extISRBajo
void int_extISRBajo(void){
 
if (INTCONbits.RBIF==1)
 {
		INTCONbits.RBIF=0;
}
 if(INTCON3bits.INT1IF==1){
   bandera=1;       // Indicamos que se ha producido la interrupción.-
   INTCON3bits.INT1IF=0;  // Borramos bandera.-
}

if(INTCON3bits.INT2IF==1){
   bandera=1;       // Indicamos que se ha producido la interrupción.-
   INTCON3bits.INT2IF=0;  // Borramos bandera.-
}
}
 
void main(void){
TRISC=0x00;
ADCON1=0x7f;
OSCCON=0b1110010; //Oscilador interno a 8MHz
TRISA=255; //puerto a entradas
TRISB=0x7f; //solo RB7 salida
LATBbits.LATB7=1; //RB7 puesto a uno
OpenPORTB(PORTB_CHANGE_INT_ON | PORTB_PULLUPS_OFF| PORTB_INT_PRIO_LOW);
OpenRB0INT(PORTB_CHANGE_INT_ON | FALLING_EDGE_INT | PORTB_PULLUPS_OFF | PORTB_INT_PRIO_HIGH);
OpenRB1INT(PORTB_CHANGE_INT_ON | FALLING_EDGE_INT | PORTB_PULLUPS_OFF | PORTB_INT_PRIO_LOW);
OpenRB2INT(PORTB_CHANGE_INT_ON | FALLING_EDGE_INT | PORTB_PULLUPS_OFF | PORTB_INT_PRIO_HIGH);


RCONbits.IPEN=1;  // abilitamos Prioridades
INTCONbits.GIEH = 1; //enable interrupts


INTCON3bits.INT1IE=1;
INTCON3bits.INT1IP=1;

INTCON3bits.INT2IE=1;
INTCON3bits.INT2IP=0;

INTCONbits.INT0IE=1;

INTCONbits.RBIE=1;


INTCON2bits.RBIP=1;

INTCONbits.GIEL = 1; //enable low interrupts

INTCON2bits.RBPU=1;



PORTC=0x01;
PORTC=0x00;
PORTC=0x01;



while(true){
if(bandera==1){
bandera=0;
}
}
}

que presenta el problema de que no funciona como yo quiero, la idea es que lo que llegue por INT2 se ejecute con baja prioridad y lo de INT1 con alta, pero a la hora de ejecutar el programa en Pickit2 se ejcuta según diga el bit RBIP siempre que RIE esté a uno (lo que habilita en teoría cualquier pin del puerto B), quizás esto se superponga a la programación individual de los pines realizada:

INTCONbits.INT0IE=1;

INTCON3bits.INT1IE=1;
INTCON3bits.INT1IP=1;

INTCON3bits.INT2IE=1;
INTCON3bits.INT2IP=0;

Pero el problema es que si pongo RBIE a 0, con Pickit2 no se reconocen las interrupciones aunque sí que lo reconoce en MPLAB IDE aplicandole un estímulo desde un workbook, es como si no acabara de estar bien configurado cualquiera de los pines de interrupción.

¿Alguna idea de qué es lo que falta en el código?
 
a que te refieres cuando dices "ejecutar el programa en el pickit2", o, "con pickit2 no se reconocen las interruciones", estas haciendo un debug?

Un saludo
 
Atrás
Arriba