Autor Tema: Ayuda con delay!!  (Leído 1680 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado Danikin

  • PIC10
  • *
  • Mensajes: 2
Ayuda con delay!!
« 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  :)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda con delay!!
« Respuesta #1 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.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Ayuda con delay!!
« Respuesta #2 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!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Danikin

  • PIC10
  • *
  • Mensajes: 2
Re: Ayuda con delay!!
« Respuesta #3 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  :-)  :)

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Ayuda con delay!!
« Respuesta #4 en: 21 de Noviembre de 2006, 12:59:27 »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte