Autor Tema: Diferencia ente while(valor) y while(valor);  (Leído 2717 veces)

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

Desconectado Trev

  • PIC16
  • ***
  • Mensajes: 115
Diferencia ente while(valor) y while(valor);
« en: 26 de Septiembre de 2009, 08:16:25 »
Hola no estoy seguro si pesque bien la diferencia pero me parece que el while(); hace que se ejecuten las intrucciones que lo preceden al menos una vez como un do-while para despues evaluar la condición y repetirlas o no y ahi va mi duda:¿que pasa en este codigo?:

Código: [Seleccionar]
byte buffer[3];
for(i=1; i<=24; ++i){
while (!input(PIN_A2));
shift_left(buffer,3,input(PIN_A3));//Va a mover a la izquierda lo que devuelva input(PIN_A3) y lo almacena en buffer.
while (input(PIN_A2)) ;
}
O sea que pasa si el pin a2 esta a 0 y while(input(PIN_A2)); no se cumple?se incrementa i o no?.Gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Diferencia ente while(valor) y while(valor);
« Respuesta #1 en: 26 de Septiembre de 2009, 08:37:39 »
El primer while es un bucle que se ejecuta mientras el pin A2 sea 0. Luego se ejecuta el shift y después el otro while, que permanece girando hasta que el pin A2 sea 1.

Es una forma simple de cargar un dato que entra por el pin A3 sobre un buffer al ritmo de una señal de clock que le entre por el pin A2.

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: Diferencia ente while(valor) y while(valor);
« Respuesta #2 en: 26 de Septiembre de 2009, 08:44:45 »
Hola no estoy seguro si pesque bien la diferencia pero me parece que el while(); hace que se ejecuten las intrucciones que lo preceden al menos una vez como un do-while para despues evaluar la condición y repetirlas o no y ahi va mi duda:¿que pasa en este codigo?:

Código: [Seleccionar]
byte buffer[3];
for(i=1; i<=24; ++i){
while (!input(PIN_A2));
shift_left(buffer,3,input(PIN_A3));//Va a mover a la izquierda lo que devuelva input(PIN_A3) y lo almacena en buffer.
while (input(PIN_A2)) ;
}
O sea que pasa si el pin a2 esta a 0 y while(input(PIN_A2)); no se cumple?se incrementa i o no?.Gracias.

bueno al parecer el PIN_A2 es una especie de pulsador, y este wile se utiliza mucho para algo que se llama el antirebote, quiere decir que la variable i hace el conteo cada vez que se presiona un pulsador o se manda una señal de 5 voltios al PIN_a2-

Me explico aun mejor:

el bucle for es un incrementador de i desde 0 a 24, luego que pasa la sentencia, "while(!PIN_a2); (traduccion) mientras el PIN_A2 sea 0 quede esperando hasta que se haga 1 logico". Una vez PIN_A2 sea 1 logico, hace shift_left(buffer,3,input(PIN_A3));

Y por ultimo while (input(PIN_A2)) ; (traduccion) mientras siga en 1 logico el PIN_a2 no siga el bucle for.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Diferencia ente while(valor) y while(valor);
« Respuesta #3 en: 26 de Septiembre de 2009, 09:37:49 »
Hay que ver el contexto, es muy posible que sea parte del código de recepción de datos por SPI por ejemplo, donde se espera el bit de SCLK para recibir el próximo dato.
En tu caso recibiría un dato de 24 bits.

Es el código para comunicar con un conversor A/D externo, por si acaso?? :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Trev

  • PIC16
  • ***
  • Mensajes: 115
Re: Diferencia ente while(valor) y while(valor);
« Respuesta #4 en: 26 de Septiembre de 2009, 11:24:06 »
Bueno grax por responder  :) Nocturno y fidodido18 difieren en cuanto a si se ejecuta o no el shift antes de que input(PIN_A2)
sea 1,si espera a que se haga 1 es como un do-while según lo que pesque es como yo creia que funcionaba o sea como un do-while cada vez que se pone un while; va a funcionar como de esa manera entonces como no hay nada delante del primer
while(!input(PIN_A2)); no hace nada hasta tanto el pin_a2 que lo imagino como un pulsador con resistencia pull-dow se suelte(entences este while es falso),una vez liberado se ejecuta el shift y luego comprueba si se oprime con el while(input(PIN_A2));
pero no me cierra por que de esa forma en i=1 llenaria todo el buffer con al menos 23 ceros porque ejecutaria el shift mientras
siga pulsada,o sea me confunden la llaves yo lo entiendo asi y no se si sintacticamente es correcto:

Código: [Seleccionar]

byte buffer[3];
for(i=1; i<=24; ++i){
{

}
while (!input(PIN_A2));
shift_left(buffer,3,input(PIN_A3));//Va a mover a la izquierda lo que devuelva input(PIN_A3) y lo almacena en buffer.
{

}
while (input(PIN_A2)) ;
entonces si hasta que no se libere el pusador y se haga falsa la condición no se incrementa i.Grax.

Desconectado Trev

  • PIC16
  • ***
  • Mensajes: 115
Re: Diferencia ente while(valor) y while(valor);
« Respuesta #5 en: 26 de Septiembre de 2009, 11:32:41 »
Perdón me olvide la llave de cierre del for queda asi:

Código: [Seleccionar]

byte buffer[3];
for(i=1; i<=24; ++i){
{

}
while (!input(PIN_A2));
shift_left(buffer,3,input(PIN_A3));//Va a mover a la izquierda lo que devuelva input(PIN_A3) y lo almacena en buffer.
{

}
while (input(PIN_A2)) ;
}
y si puede servir para comunicar dispositivos al ritmo de un clock conectado a pin_a3 como dice MGLSOFT  y tambien para checar el historial de un pulsador je

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Diferencia ente while(valor) y while(valor);
« Respuesta #6 en: 26 de Septiembre de 2009, 14:23:33 »
Hola.

Tienes una de { que mejor dicho jeje:


Código: [Seleccionar]

byte buffer[3];
for(i=1; i<=24; ++i)
{
 while (!input(PIN_A2));
 shift_left(buffer,3,input(PIN_A3));//Va a mover a la izquierda lo que devuelva input(PIN_A3) y lo almacena en buffer.
 while (input(PIN_A2)) ;
}

Si pones los ; seguido del while es similar esto:
Código: C#
  1. while(!input(PIN_A2))
  2. {
  3.  
  4. }

Es decir:  no hace nada -espera pacientemente- hasta que el PIN_A2 sea 1.

Saludos
El papel lo aguanta todo