Bonjour,

Je cherche à formater 2 nombres binaire afin d'obtenir un résultat en ascii.

Mon but d'obtenir la lecture d'une température issue d'un capteur ( électronique embarquée )

Je dispose donc de 2 variables constituant ma température :
L'une est le MSB ( dizaine et unités ) et l'autre le LSB ( dixièmes après la virgule) du résultat.

Je rencontre des difficultés à formater ces 2 variables car quelques subtilités sont imposées :

Le Bit 7 de MSB représente en fait le signe du résultat final :
si il est à 0, le résultat sera positif, si il est à 1 il sera négatif.

Ensuite pour la variable contenant LSB, qui contient les dixièmes de degrés, chiffres après la virgule, seuls les 2 bits de poids fort (bit7 et 6)
sont à lire les autres sont toujours à 0.
Une fois les bit6 et 7 lus il est dit qu'il faut diviser ce résultat par 4 pour obtenir la fraction des dixièmes de degrés, cela donnera donc 3 possibilités : 0 - 0.25 - 0.75

Par exemple, si MSB contient 00011001 et LSB 01xxxxxxxx alors la température sera de + 25.25°c

bit 7 de MSB à 0 => +
0011001 = 25

et 01 de LSB = 1
1 / 4 = 0.25

J'ai écris ceci, mais ça ne fonctionne pas correctement, pourriez vous m'indiquer ou je fais erreur svp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
// Variables contenant la temperature
unsigned char RTC_TEMP_MSB;
unsigned char RTC_TEMP_LSB;
 
...
 
void lecture_temperature(void)	
{
 	unsigned char unites_dizaines[2];
	unsigned char dixiemes[2];
	unsigned char tmp;
	unsigned char ascii_rtc_temp[6+1];					// Le resultat composé ainsi : xx.xx + \0
 
	if (RTC_TEMP_MSB & (0 << 7)) ascii_rtc_temp[0]='+';	// Si le bit 7 de RTC_TEMP_MSB = 0 alors met le sign '+' dans ascii_rtc_temp sinon met le signe '-'
	else ascii_rtc_temp[0]='-';
 
	tmp = (RTC_TEMP_MSB & (0b01111111));				// On veut lire que des bits 0 à 6 ( on ne lit pas le bit 7 car il correspond au signe du resultat )
 
	// Comment faire pour extraire de tmp, les 2 digits dizaines et unités
	// et les mettre dans chaine de caractère qui composera le resultat ?
 
	ascii_rtc_temp[3]=',';								// Affiche le caractère virgule dans la chaine composant le resultat
 
	tmp = (RTC_TEMP_LSB & (0b11000000));				// Lecture des bits 6 et 7 de RTC_TEMP_LSB
	tmp /= 4;											// Le resultat obtenu est une fraction de 0.25 qu'il faut multiplier pour obtenir les dixièmes de degrés
 
	// Comment faire pour extraire de tmp, les 2 digits dizaines et unités
	// et les mettre dans chaine de caractère qui composera le resultat ?;
 
	ascii_rtc_temp[6]='\0';								// Termine la chaine				
}