[Tecnica] Visualizzare un numero in complemento a due
Michele "O-Zone" Pinassi
o-zone a zerozone.it
Gio 22 Gen 2009 18:07:26 GMT
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
Attualmente mi sono sempre accontentato di visualizzare la parte intera (e
neanche sono sicuto che funzioni bene....) con questo pezzo di codice:
...
char sig, buf[2];
DS1631_readTemp(buf);
// Check sign bit
if((buf[0] > 0x80)) {
sign = '-';
} else {
sign = '+';
}
buf[0] = buf[0] & 0x7F; /* Reset sign bit */
sprintf(tmpBuf,"t:%c%d°C ",sign, buf[0]);
...
adesso vorrei riuscire a visualizzare anche i decimali :-) ma non riesco
assolutamente a capire come funziona questa storia del complemento a due.
Se qualche anima pia può aiutarmi... :-)
Michele
--
O-Zone ! No (C) since 1996
On the road with VFR VTec 2002 "Vuffy", on the net with Slackware !
Home @ http://www.zerozone.it and photos @
http://myphotos.zerozone.it/user/o-zone
Maggiori informazioni sulla lista
Tecnica