TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: carlyvalente en 03 de Enero de 2005, 03:01:00
-
Tengo un pedacito de code que no logro interpretar:
unsigned char datacount
for (datacount=8; datacount>0;datacount--)
{
DIO= sdata & 0x80;
sdata=sdata<<1;
while (!DCLK);
while (DCLK);
}
Weno, obviando las definiciones previas de variables etc etc , lo que me intriga es la penúltima linea (!while)
La variable DCLK es de un bit de entrada(0 o 1).
Entonces.. que hace (!DCLK)? espera a que sea 1 para saltar o para que sea 0?
Saluditos
-
Hola carlyvalente,
La resolución es muy sencilla. Ya que como comentas la variable DCLK es de tipo bit. Entonces tu programa hace lo siguiente:
while(!DCLK); Esperas en esa instrucción mientras la variable sea 0.
while(DCLK); Esperas en esa instrucción mientras la variable sea 1.
Un saludo Pedro.
-
Según parece, tu código lee 8 bits y los mete en el byte sdata, pero va leyendo los bits al ritmo que le marque un clock externo, que viene indicado por la entrada DCLK.
Por lo tanto, esos dos "whiles" se esperan al siguiente pulso de reloj para leer el próximo bit.
-
Si si, exactamente es una UART sincrona esclava simulada por software. chas gracias a ambos

-
No es estrictamente necesario,pero creo que es una buena costumbre que puede librarnos de algún rompedero de cabeza ponerle a cada bucle sus llaves {}
while(1)
{
bla bla bla...
{
Así se hace el código más legible y ordenado
Saludos
-
Modulay, el code es asi de correcto.
Es decir que el while no hace nada "dentro de si mismo" (solo espera a por una entrada externa de datos) y salta a la proxima instrucción .Es por eso que el ejemplo que tu pusiste no concuerda con el mio ya que no ejecuta nada "entre corchetes" como lo hace el tuyo.
Al menos (con mi primitivo C) es lo que creo...
-
Si no pones nada dentro de los corchetes no hay nada que ejecutar
while(...) {}
-
Ya ves que nivel llevo de C

Me refería a las llaves. No lleva llaves porque solo ejecuta la condicion interna de los corchetes del while, eso.