Autor Tema: Duda en una instrucción  (Leído 1348 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Duda en una instrucción
« 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
Código: [Seleccionar]
data=data*9;
y pertenece a este programa
Código: [Seleccionar]
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
Código: [Seleccionar]
data-=4;y
Código: [Seleccionar]
data+=4;creo que estas sentencias lo que hacen es decrementar data e igualar a 4 pero no estoy nada seguro

Saludos
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Duda en una instrucción
« Respuesta #1 en: 15 de Agosto de 2012, 19:10:02 »
 :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.


Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Duda en una instrucción
« Respuesta #2 en: 15 de Agosto de 2012, 19:14:35 »
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.
« Última modificación: 15 de Agosto de 2012, 19:17:30 por KALLITOS »
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda en una instrucción
« Respuesta #3 en: 15 de Agosto de 2012, 20:02:51 »
Leer un tutorial cualquier de C no vendría mal  :mrgreen:
No contesto mensajes privados, las consultas en el foro

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Duda en una instrucción
« Respuesta #4 en: 16 de Agosto de 2012, 18:27:26 »
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
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...


 

anything