Autor Tema: problema con bucle while  (Leído 1455 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pablogv

  • PIC10
  • *
  • Mensajes: 10
problema con bucle while
« en: 04 de Julio de 2007, 08:26:07 »
Hola,
os he adjuntado el programa entero por si veis que el error esta en otra parte, pero la funcion que me falla es la siguiente:

void env()
{
   long int dnd=0x0000;
   int xm,ym;
   char dat[]={'E','n','v','i','a','n','d','o',' ','d','a','t','o','s',' ','a',' ','P','C','\0'};
   printf(" Memoria\n");
   glcd_text57(5,25,dat,1,ON);
   printf("%lu",dir);
   while((RB3!=0)||(dnd<dir))
   {
      xm=lee_eeprom(dnd);
      dnd++;
      ym=lee_eeprom(dnd);
      dnd++;
      printf("%lu",dnd);
      printf(" x:%i",x);                  //Envia las aceleraciones al PC
      printf("/ y: %i\n\r",y);
   }
   printf(" Fin de Grabacion\n");
   printf(" Pulse seleccion\n");
   while(RB3!=0);
}

dir es un variable global de tipo "long int" que guarda la posicion del ultimo dato grabado en la eeprom, en teoria deberia parar de enviar los datos cuando dnd sea mayor que dir y no lo hace, si que para si le doy al pulsador conectado a rb3.
Por ejemplo en una prueba dir era igual a 1022 y el pic seguia enviando datos hasta que lo pare, con rb3,cuando estaba por 3000 y pico.
Gracias de antemano.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: problema con bucle while
« Respuesta #1 en: 04 de Julio de 2007, 09:28:07 »
¿Qué compilador y versión usas?.

De todas formas estas empleando un "Logical OR operator" y con que se cumpla una de las dos condiciones se ejecuta el bucle ¿no deberias cambiarlo a un "Logical AND operator" (&&)?


Un saludo
« Última modificación: 04 de Julio de 2007, 09:31:32 por jfh900 »
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado pablogv

  • PIC10
  • *
  • Mensajes: 10
Re: problema con bucle while
« Respuesta #2 en: 04 de Julio de 2007, 09:35:06 »
uso el ccs no se que version sera pero en el manual de referencia pone julio de 2005

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: problema con bucle while
« Respuesta #3 en: 04 de Julio de 2007, 20:22:44 »
Veo que haces el while de esta manera:
Código: C
  1. while((RB3!=0)||(dnd<dir))

Este bucle ejecuta mientras RB3 sea 1 o mientras dnd sea menor que dir.  Imagino que cuando presionas el pulsador en RB3 dnd ya es mayor que dir y por eso sale del bucle, para que salga cuando alguna de las dos condiciones se cumpla debes cambiar la OR por una AND. El while debe quedar asi:

Código: C
  1. while((RB3!=0)&&(dnd<dir))

De esta manera cuando dnd sea mayor a dir el programa sale del bucle pues para ejecutar ambas condiciones deben ser ciertas, igualmente pasa cuando pulsas.

saludos.
Pereira - Colombia


 

anything