Se me cuelga 16f877 cuando intento entra en una interrupcion

hola a todos: (todo esta simulado con proteus.)

estoy con un proyecto fin de carrera y tengo un pequeño problema. intento enviar datos a un gsm y a la vez se estan leyendo valores de varios acelerometros ( en total 8).
no puedo utilizar la entrada a/d porque en los acelerometros se produce un pico de tension ddurante un periodo muy corto por lo que puede que al ir ejecutandose el programa no podamos leer el valor. La solucion que encontre es utilizar la subrutinas del puerto rb0 y rb (4:7). utilizo esto por que los 8 acelerometros estan agrupados en dos grupos. tan solo quiero saber cuando se activan. por l oque en un grupo van todos unidosa la paga rb0 mediante un diodo cada uno y el otro grupo a una patilla del rb(4:7). todo perfecto. la subrutina rb0 cuando hay un pico de tension entra en la subrutina y a 1 la variable que sea.
#INT_EXT
ext_isr()
{ movimiento=1;
}


el problema es que quiero hacer lo mismo con el otro grupo de acelerometros pero utilizadno la interrupcion de cambio de estado del puerto b
#INT_RB
linterrupcion()
{ aviso=1;
}
pero siemrpe que activamos un acelerometro se cuelga denro de la subrutina. he puesto en la subrutina un led a parpadear y cuando entra se enciende el led y se queda encendido no se apaga

#INT_RB
lunarota()
{ output_high(PIN_E0);
delay_ms(500);
output_low(PIN_E0);
aviso=1;
}

¿que puede pasar?

por cierto. si pongo esto :
#INT_RB
linterrupcion()
{ disable_interrupts(int_rb);
aviso=1;
}

entra en la subrutina hace lo que tiene que hacer y sale, pero al volver a activar la subrutina entra en ella continuamente sin que nadie le avise.
(tengo enviando datos en el programa principal por uart por software pero no creo que sea por eso. cuando entra en la subrutina esto deja de enviar porque se colgo el pic entero.)
 
Atrás
Arriba