TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Thulsa Doom en 15 de Agosto de 2012, 18:28:24
-
Buenas noches a todos, pues estudiando un driver para hacer un proyecto he visto una instrucción que no se muy bien lo que hace, la instrucción es esta
data=data*9;
y pertenece a este programa
i2c_start();
i2c_write(0x90 | (address<<1));
i2c_write(0xaa);
i2c_start();
i2c_write(0x91 | (address<<1));
datah=i2c_read();
datal=i2c_read(0);
i2c_stop();
data=datah;
data=data*9;
if(bit_test(datal,7))
{
if(data < 0)
data -= 4;
else
data += 4;
}
data = (data / 5) + 32;
sé que el programa lo que hace es leer un valor por el protocolo i2c, guarda el primer byte, el byte más alto en la variable datah.
seguidamente guarda el valor de datah en data y ya el siguiente paso me pierdo.
Otra instrucción que no comprendo muy bien es la de
data-=4;y
data+=4;creo que estas sentencias lo que hacen es decrementar data e igualar a 4 pero no estoy nada seguro
Saludos
-
:shock:
data=data POR nueve osea data=data multiplicado por 9 (*=multiplicacion)
lo otro de data-=4 es una abreviacion pero es lo equivalente a poner data=data-4 (data menos 4), con el + ocurre lo mismo.
-
Hola thulsa te ayudo:
data = data*9;
lo que hace es multiplicar el valor de la variable data por 9 y lo guarda en la misma variable, ejemplo:
data = 3;
data = data * 9;
aqui la variable data vale 27.
data -= 4;
Es lo mismo que lo anterior pero mas "profesional"
Al valor de data le resta 4 y lo guarda en data, ejemplo
data = 12;
data -= 4;
data vale 8
Lo mismo pasa con
x += 1;
x -= 1;
x *= 1;
x /= 2;
++x; ó x++; aumenta en 1 la variable es lo mismo que x += 1; o x = x+1;
--x; ó x--; disminuye en 1 la variable es lo mismo que x -= 1; o x = x-1;
otra cosa a tener en cuenta es en las condidionantes por ejemplo
x = 10;
if(++x == 11) esta condicion es verdadera por que primero incrementa la variable y luego hace la comparación
if(x++ == 11) esta condicion es falsa por que primero hace la comparación y luego incrementa la variable
espero te sirva.
Otra cosa a tener en cuenta en tu driver es que hacen la comparación:
if(data < 0) esto sera verdadero siempre y cuando data sea tipo signed, si no lo es, nunca entrara en esa parte del codigo.
saludos.
-
Leer un tutorial cualquier de C no vendría mal :mrgreen:
-
Pues gracias por la explicación, el compañero suky tiene razón con el comentario, he estudiado sobre eso pero no lo vi, pensé que hacía otra cosa, (se me saturo la mente lo siento :oops:), el problema que tenía es que se supone que ese programa me da una medida en ºf de un termopar y al pasarlo a ºc me daba un valor aproximado pero no justo por el tema ese del error relativo y demás y por eso no llegaba a verlo pero al final ,me di cuenta.
lo que he hecho es reescribir el programa y ajustarlo para que el valor me lo de en ºc directamente