[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) = +125C
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%dC ",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