Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pablogv en 04 de Julio de 2007, 08:26:07
Título: problema con bucle while
Publicado por: pablogv 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.
Título: Re: problema con bucle while
Publicado por: jfh900 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
Título: Re: problema con bucle while
Publicado por: pablogv 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
Título: Re: problema con bucle while
Publicado por: dhmejia en 04 de Julio de 2007, 20:22:44
Veo que haces el while de esta manera:
Código: C
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
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.