Pouvez vous m'éclairer sur ce code ?

Bonjour,

Pouvez vous m’éclairer sur ce bout de code, car je ne comprend pas ces deux lignes :

  frequencyH=frequencyB>>8;
  frequencyL=frequencyB&0XFF;

Je vous met le code général pour le contexte, et je n’ai pas de problème avec, mais j’aimerai comprendre ce que font ces deux lignes :

frequency=87.5; //starting frequency
   frequencyB=4*(frequency*1000000+225000)/32768; //calculating PLL word
   frequencyH=frequencyB>>8;
  frequencyL=frequencyB&0XFF;
  delay(100);
  Wire.beginTransmission(0x60);   //writing TEA5767
  Wire.send(frequencyH);
  Wire.send(frequencyL);
  Wire.send(0xB0);
  Wire.send(0x10);
  Wire.send(0x00);
  Wire.endTransmission();

Pour la première : Décalage de bits ex : a = b00101000

b = a>>3 résultat : b = 00000101

b = a>>5 résultat : b = 00000001

Pour la seconde : Opération ET bit à bit ex : a = b00001010 b = b00001100 a & b = b00001000

En fait ces deux lignes coupent une valeur sur 16 bits en 2 valeurs de 8 bits, afin de les transmettre octet par octet avec Wire.send(...);

frequencyB est la valeur 16 bits à transmettre. frequencyH (H pour high, bits de poids fort), frequencyL (L pour low, bits de poids faible).

frequencyH=frequencyB>>8;

récupère les 8 bits d'en haut dans un octet.

frequencyL=frequencyB&0xFF;

ne garde que les 8 bits du bas dans un octet.

  Wire.send(frequencyH);
  Wire.send(frequencyL);

envoie les deux octets.

cf. http://arduino.cc/en/Reference/WireSend

Merci beaucoup pour vos réponses.

Je me doutais que ces deux lignes coupaient la valeur calculée de la fréquence en deux octets (en lisant la doc du circuit) mais je ne comprenait pas le mécanisme.