TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Danikin en 17 de Noviembre de 2006, 21:21:36

Título: Ayuda con delay!!
Publicado por: Danikin en 17 de Noviembre de 2006, 21:21:36

 Holas a todos soy nuevo en esto de la programacion y necesito su ayuda

estoy programando en C con el CCS y al usar el contador me va todo bien pero si le doy una condicion y luego le pongo un delay el programa no me funciona

ejemplo  :

#INT_EXT
void IntRB0()
{
   i++;               //incremento contador
   if(i==18)

   output_high(PIN_a0);
   else
   output_low(PIN_a0);

   if(i>18)
   i=0;

  if(input(PIN_b1))
  output_high(PIN_a0);
  delay_ms(500);
  output_low(PIN_a0);
  delay_ms(500);
  while(true);

agradeceria su ayuda  :)
Título: Re: Ayuda con delay!!
Publicado por: BrunoF en 18 de Noviembre de 2006, 04:08:18
Código: C
  1. #INT_EXT
  2. void IntRB0()
  3. {
  4.   do{
  5.     i++;               //incremento contador
  6.     if(i==18) output_high(PIN_a0); else output_low(PIN_a0);
  7.     if(i>18) i=0;
  8.  
  9.     if(input(PIN_b1)){
  10.       output_high(PIN_a0);
  11.       delay_ms(500);
  12.       output_low(PIN_a0);
  13.       delay_ms(500);
  14.     }
  15.   }while(true);
  16. }

Fijate que tenes que abrir y cerrar llaves en ciertos casos. Si usas un while, antes tiene que haber un do!

Saludos.
Título: Re: Ayuda con delay!!
Publicado por: vszener en 18 de Noviembre de 2006, 07:30:08
Como te ha indicado el amigo BrunoF, tienes que poner los corchetes '{ }' respectivos en cada condición o bucle siempre que la condición o el bucle en cuestón tenga más de una línea de código.

La solución que te ha dado el amigo BrunoF es totalmente válida, aunque si no quieres usar un bucle do-while, y quieres usar un bucle while sólamente, sería así:
Código: C
  1. #INT_EXT void IntRB0(){  
  2. while(true){    
  3. i++;               //incremento contador  
  4. if(i==18)
  5.     output_high(PIN_a0);
  6. else
  7.     output_low(PIN_a0);  
  8.  
  9.  if(i>18)
  10.     i=0;    
  11.  
  12. if(input(PIN_b1)){      
  13.    output_high(PIN_a0);      
  14.    delay_ms(500);      
  15.    output_low(PIN_a0);    
  16.    delay_ms(500);    
  17. }  
  18. }
  19. }

Aunque digo yo una cosa, ¿para que quieres hacer un bucle infinito en la primera llamada de la interrupción externa? cuando se produzca la ejecución de dicha función de interrupción, ya no saldrá más de esa porción de código

PD: A no ser que tengas otras funciones de interrupción....  :shock:


Suerte!!! ;)
Título: Re: Ayuda con delay!!
Publicado por: Danikin en 20 de Noviembre de 2006, 21:49:21
mm es que en realidad no se mucho de esto, solo intente usar las interrupciones para un conteo
pero en realidad lo que necesito es que este conteo sea solo para otras condiciones de entradas y salidas



les agradesco mucho la ayuda  :-)  :)
Título: Re: Ayuda con delay!!
Publicado por: vszener en 21 de Noviembre de 2006, 12:59:27
Mirate el post de Indice de Hilos Destacados en el sub-Foro de C para Microcontroladores. (http://www.todopic.com.ar/foros/index.php?topic=14634.0)


Suerte!!! ;)