Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

21/11/2015 #1


¿Cómo puedo eliminar el Warning 216 de las interrupciones?
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.

Código 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);

21/11/2015 #2
Moderador

Avatar de D@rkbytes

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
21/11/2015 #3


Ok , lo probare y te diré como me va
22/11/2015 #4

Avatar de Scooter

Lo mejor es no usar nunca retardos. Siempre hay cosas que hacer.
22/11/2015 #5


Eso de usar las directivas me sirvió muchas gracias a todos por sus consejos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.