[Tecnica] Visualizzare un numero in complemento a due

Szymon Tomasz Stefanek pragma a siena.linux.it
Gio 22 Gen 2009 20:06:43 GMT


On Thursday 22 January 2009, Marco Slack wrote:
> Il giorno 22 gennaio 2009 19.07, Michele O-Zone Pinassi
>
> <o-zone a zerozone.it>ha scritto:
> > Ciao a tutti,
> > domanda per i cervelloni (io non riesco a venirne fuori !). Ho un DS1631
> > collegato, via I2C, al PIC 18F4455. Il DS1631 mi restituisce la
> > temperatura in 12-bit complemento a due. Praticamente io ho un array di
> > due byte in cui il most significant byte mi rappresenta la parte intera,
> > con il MSB ad 1 se negativo o 0 se positivo, mentre il least significant
> > byte contiene la parte
> > decimale. Un esempio (dal datasheet del DS1631):
> >
> > 0111 1101 0000 0000 (7d00h) = +125°C
> > 0001 1001 0001 0000 (1910h) = +25.0625 °C
> > 0000 0000 1000 0000 (0080h) = +0.5 °C
> > 0000 0000 0000 0000 (0000h) = 0 °C
> > 1111 1111 1000 0000 (FF80h) = -0.5 °C
> > 1110 0110 1111 0000 (E6F0h) = -25.0625 °C
> > 1100 1001 0000 0000 (C900h) = -55 °C

Questo è un signed short (in qualche byte order) che rappresenta 256-esime 
parti di grado (con una precisione di soli 12 bit pero').

void display(unsigned char b1,unsigned char b2)
{                                           
  unsigned char b[2];                       
  b[0] = b2;                                
  b[1] = b1;                                

  short * p = (short *)b;

  printf("FLOAT: %f\n",(double)*p / 256.0);
}                                          

Se ti segna dei valori strani, scambia b1 con b2 (byte order sbagliato).


Szymon Tomasz Stefanek



Maggiori informazioni sulla lista Tecnica