Hola.
La idea de disminuir el codigo en las interrupciones no es solo reemplazar todo el codigo por una funcion, ya que, igual, se esta evaluando todo el codigo de la funcion, me explico:
si tu tienes en el codigo de la interrupcion:
#INT_EXT
EXT_isr()
{
while(input(pin_B3)!=0 && input(pin_B4)!=0)
{
/////////////////////////////RUTINA QUE SELECCIONA LA GASOLINA POR BsF/////////////////////////////
printf(lcd_putc,"\f"); // Borro pantalla
printf(lcd_putc,"T. de gasolina"); // Imprimo en pantalla
lcd_gotoxy(1,2); // Posiciona el cursor en la linea 2
printf(lcd_putc,"91 octanos - RB3"); // Imprimo en pantalla
printf(lcd_putc,"95 octanos - RB4"); // Imprimo en pantalla
delay_ms(250); // Tiempo de espera para que de chance de presionar el botón.
}
/////////////////////////PULSADOR QUE SELECCIONA LA GASOLINA DE 91 OCTANOS/////////////////////////////
printf(lcd_putc,"\f"); // Borro pantalla
if(input(pin_B3)==0) // Si RC0 está en 0, entonces...
{
delay_ms(20); // Verifica sino es rebote
if(input(pin_B3)==0) // Verifico otra vez si RC0 está en 0
{
while(input(pin_C7)!=0 && input(pin_C6)!=0 && input(pin_C5)!=0 && input(pin_C4)!=0)
{
printf(lcd_putc,"Ingrese BsF "); // Imprimo en pantalla
delay_ms(1000); // Tiempo de espera para que de chance de presionar el botón.
printf(lcd_putc,"\f"); // Borro pantalla
}
teclado(); // Llamo a la función que me lee el teclado
var1=resul; // Guardo lo que recogi del teclado
printf(lcd_putc," BsF= %d",var1); // Imprimo en pantalla la variable recogida del teclado
output_c(0); // Limpio el puerto C
delay_ms(1000); // Tiempo de espera para que de chance de presionar el botón.
while(input(pin_C7)!=0 && input(pin_C6)!=0 && input(pin_C5)!=0 && input(pin_C4)!=0)
{
}
teclado(); // LLamo a la función que me lee el teclado
var2=resul; // Guardo lo que recogi del teclado
printf(lcd_putc,"%d \n\r",var2); // Imprimo en pantalla la variable recogida del teclado
delay_ms(2000); // Una demora para que se vean los datos de teclado
cantlitros(); // Llamo a la función que me calcula los litros que se han de pedir
printf(lcd_putc,"\f"); // Borro pantalla
w=0; // Inicializo la variable contador
bsf_91=0.87; // El litro de gasolina de 91 octanos está en 0.87 BsF
while(w!=resul2) // Repetir mientras el contador sea distinto de los litros y los BsF a pagar no pasen de 5BsF
{ // Si esto es cierto, entonces....
litros=(w/bsf_91);
//litros=(w/bsf_91)+litro; // Saco la cuenta de los litros por el valor del litro de gasolina
//litro= litros;
printf(lcd_putc,"Litros= %g",litros); // Imprimo en pantalla
lcd_gotoxy(1,2); // Posiciona el cursor en la línea 2
printf(lcd_putc,"BsF= %g",w); // Imprimo en pantalla
delay_ms(1000); // Una demora para que se visualice el contaje de los litros
printf(lcd_putc,"\f"); // Borro pantalla
w=w+1.00; // Incremento contador
}
}
}
/////////////////////////PULSADOR QUE SELECCIONA LA GASOLINA DE 95 OCTANOS/////////////////////////////
if(input(pin_B4)==0) // Si RC0 está en 0, entonces...
{
delay_ms(20); // Verifica sino es rebote
if(input(pin_B4)==0) // Verifico otra vez si RC0 está en 0
{
while(input(pin_C7)!=0 && input(pin_C6)!=0 && input(pin_C5)!=0 && input(pin_C4)!=0)
{
printf(lcd_putc,"Ingrese BsF "); // Imprimo en pantalla
delay_ms(1000); // Tiempo de espera para que de chance de presionar el botón.
printf(lcd_putc,"\f"); // Borro pantalla
}
teclado(); // Llamo a la función que me lee el teclado
var1=resul; // Guardo lo que recogi del teclado
printf(lcd_putc," BsF= %d",var1); // Imprimo en pantalla la variable recogida del teclado
output_c(0); // Limpio el puerto C
delay_ms(1000); // Una demora para pulsar bien el teclado
while(input(pin_C7)!=0 && input(pin_C6)!=0 && input(pin_C5)!=0 && input(pin_C4)!=0)
{
}
teclado(); // LLamo a la función que me lee el teclado
var2=resul; // Guardo lo que recogi del teclado
printf(lcd_putc,"%d \n\r",var2); // Imprimo en pantalla la variable recogida del teclado
delay_ms(2000); // Una demora para que se vean los datos de teclado
cantlitros(); // Llamo a la función que me calcula los litros que se han de pedir
printf(lcd_putc,"\f"); // Borro pantalla
w=0; // Inicializo la variable contador
bsf_95=0.95; // El litro de gasolina de 91 octanos está en 0.87 BsF
//printf(lcd_putc,"\f"); // Borro pantalla
while(w!=resul2) // Repetir mientras el contador sea distinto de los litros y los BsF a pagar no pasen de 5BsF
{ // Si esto es cierto, entonces....
litros=(w/bsf_95);
//litros=(w/bsf_95)+litro; // Saco la cuenta de los litros por el valor del litro de gasolina
//litro= litros;
printf(lcd_putc,"Litros= %g",litros); // Imprimo en pantalla
lcd_gotoxy(1,2); // Posiciona el cursor en la línea 2
printf(lcd_putc,"BsF= %g",w); // Imprimo en pantalla
delay_ms(1000); // Una demora para que se visualice el contaje de los litros
printf(lcd_putc,"\f"); // Borro pantalla
w=w+1.00; // Incremento contador
}
}
}
}
y solo cambias
EXT_isr()
{
funcion();
}
y defines funcion como todo lo que esta en la interrupcion, pues daria igual.
Saludos