¿Cómo puedo eliminar el Warning 216 de las interrupciones?

#1
Hola amigos del foro.
Soy nuevo en esto y la verdad he tenido problemas con quitarle el Warning 216 a mi programa.
No sé qué hacer, no llevo mucho programando y la verdad me cuesta mucho pero me gusta esto de programar.

Si es que me pudieran ayudar les estaría agradecido.
Esperando sus respuestas, acá les dejo mi programa.
Ojo, que el programa en Proteus me funciona 100%, el problema es que al momento de compilar y grabar mi PIC, no funciona muy bien

saludos.

PHP:
void main(){
 
 int16 i=0;             //selecciono numero entero de o bits (secuencia leds)


set_tris_c(0b00000000);
output_low(pin_c1);   //motor
output_low(pin_c0);   // motor servo
set_tris_d(0b00000000);            //seteo mis salidas luces
output_d(0);                      
set_tris_b(0b11110001); 


ext_int_edge(L_TO_H);
enable_interrupts(int_ext);       // habilito interrupcion rb0
enable_interrupts(int_rb);
enable_interrupts(global);       //habilito interrupcion global 
output_low(pin_b3);
   
   
   
while(true){
                  
 for(i=1;i<=128;i=i*2)                //seteo mi comando for para empezar a realizar mi ciclo
 {                                  //inicio ciclo for
 output_d(i);
 delay_ms(100);

 }
 output_d(0);                                 // termino mi ciclo for
                        //apago el port d luego de terminado el ciclo 
 for(i=128;i>=1;i=i/2) 
 {
 output_d(i);
 delay_ms(100);

}
 output_d(0);                                 
}                                    //fin del while
}                                  //fin del main

#int_ext

void ext_isr(void){

int a;
for(a=0;a<60;a++)                //seteo mi comando for para empezar a realizar mi ciclo
 {                                  //inicio ciclo for
 output_high(pin_c0);
 delay_us(1850);                   // posicion de mi servo 0°
 output_low(pin_c0);
 delay_ms(10);
 }
for(a=0;a<60;a++)                //seteo mi comando for para empezar a realizar mi ciclo
 {                                  //inicio ciclo for
 output_high(pin_c0);
 delay_us(1000);                    // posicion de mi servo 90°
 output_low(pin_c0);
 delay_ms(10);
 }
 delay_ms(20);                               //inicio ciclo for
}

#INT_rb                  // rutina interrupcion en rb4

void rb_isr(void)

{
output_high(pin_c1);
delay_ms(2000);
output_low(pin_c1);
delay_ms(1);
output_low(pin_b3);
delay_ms(1);
}
 
Última edición por un moderador:
#2
La mejor forma de evitar el "Warning 216", es no usando retardos (Delays) dentro de los servicios de interrupción.

La forma sencilla pero nada recomendable, es usando la directiva "#ignore_warnings"
Por ejemplo:
#ignore_warnings 216
 
Arriba