bonjour Gerard,
c'est la valeur qu'il faut rajouter pour obtenir 0xFF
exemple pour un byte =0x63 complement à 2 = 0x9C
0x63 + 0x9C=0xFF
usage de la fonction XOR
msb = msb ^ 0xFF;
msb=0x63;
msb=msb xor 0xFF; - > 0x9C
si on refait
msb=msb xor 0xFF ; -> 0x63
on s'en sert beaucoup pour inverser la video sur un LCD grafique
par contre la lecture temperature de la RTC est un peu capilotractée ....
je l'utilise dans mon appli Chaudiere .. juste pour info

même si c'est en C !
nota : l'argument passé dans la fonction, depend sur quoi on affiche le resultat
0 => pour affichage caractere degré sur terminal
1 => pour usage caractere special LCD
Code : Tout sélectionner
void Ds3231_Temp_CP(char mode) ;
void Ds3231_Temp_CP(char mode)
{
unsigned char msb, lsb, tmp1;
msb=Lecture_Affichage_Registre_DS3231(0x11,0);
lsb=Lecture_Affichage_Registre_DS3231(0x12,0);
tmp1 = ' ';
if (msb & 0x80)
{ tmp1 = '-';
msb = msb ^ 0xFF;
if (!lsb)
++msb; else
lsb=lsb | 0x01 ; }
else
{
if (msb > 99)
{
msb -= 100;
tmp1 = '1';
}
}
DS_Temp[0]=tmp1;
for ( tmp1 = '0' ; msb > 9 ; ++tmp1, msb -= 10 );
DS_Temp[1]=tmp1;
DS_Temp[2]=msb+'0';
DS_Temp[3]= '.';
msb = '0';
tmp1 = '0';
if (lsb)
{
if (( lsb & 64)==0)
msb = '5'; else
{
msb = '2';
tmp1 = '5';
if (lsb & 0x01) lsb=lsb & 0x7F;
if (lsb & 0x80)
msb = '7';
}
} DS_Temp[4]= msb;
DS_Temp[5]= tmp1;
if (mode==0) DS_Temp[6]=176; else DS_Temp[6]= 0; DS_Temp[7]= 'C';
DS_Temp[8]=0;
} usage dans le main
CPrint(" Temperature DS3231 => ");
Ds3231_Temp_CP(0);
Print(DS_Temp);
CRLF1();
resulta sur terminal
Re-Lecture et affichage des 8 registres RTC DS3231
Mardi 28/05/24 18H07M52S
Temperature DS3231 => 25.7°C