Hola oriolba0007! primero te sugiero un cambio en tu procedimiento
quedaria mas o menos asi:
While (M!=1) // siempre es bueno llevar una tabulacion...
{
if (RB0==1)
{
inici[Ci]=RC3; // la puse aca, ya que se repetia varias veces
if(Ci=3) M=1; // y las variables no cambiaban
else if(Ci=2) Ci=3;
else if(Ci=1) Ci=2;
else if(Ci=0) Ci=1;
}
}
Pero esto no es tan importante, el tema es que si queres que algo se cumpla una sola vez, cuando sucede la interrupcion, deberias declarar el procedimiento inmediatamente despues de la linea #int_ext por ej:
#int_ext
void una_sola_vez (void)
{
inici[Ci]=RC3;
if(Ci=3) M=1;
else if(Ci=2) Ci=3;
else if(Ci=1) Ci=2;
else if(Ci=0) Ci=1;
}
bueno... no se me ocurre nada mas... cualquier cosa aca estamos.
Saludos!!