| (Opérateur bit à bit OU)

Description

L'opérateur OU en langage C++ est la barre verticale | . De la même façon que l'opérateur &, l'opérateur | agit indépendemment sur chaque bit unitaire des deux expressions entières de part et d'autre de l'opérateur, mais il agit d'une façon différente évidemment. L'opérateur "bit à bit" OU de 2 bits donne 1 si l'un des deux ou les deux bits d'entrée est 1, sinon il renvoie 0. En d'autres termes :

0 0 1 1 opérande1 0 1 0 1 opérande2 ---------- 0 1 1 1 (opérande1 | opérande2) - résultat renvoyé

Syntaxe

Voici un exemple d'opération OU bit à bit utilisé dans un bout de code C++ :

int a = 92; // in binary: 0000000001011100 int b = 101; // in binary: 0000000001100101 int c = a | b; // result: 0000000001111101, or 125 in decimal.

Exemple

Une utilisation courante des opérateurs bit à bit ET et OU est ce que les programmeurs appellent "Lire-Modifier-Ecrire" sur un port. Sur les microcontrôleurs (et donc sur une carte Arduino), un port est un nombre de 8 bits qui représente l'état des broches. Ecrire sur un port contrôle toutes les broches d'un coup.

Le PORTD est une constante prédéfinie du langage Arduino qui se réfère à l'état des broches du port D, les broches 0 à 7 d'une carte Arduino. Pour chaque bit qui est à 1, la broche est au niveau HAUT. (Les broches doivent biensûr être configurées en sortie à l'aide de l'instruction pinMode.)

Donc, si nous écrivons PORTD=B10001010, nous mettons les broches 1, 3 et 7 au niveau HAUT (le bit de poids faible correspond à la broche 0).

Un problème que nous allons rencontrer ici est que nous allons du coup changer l'état des broches 0 et 1 qui sont utilisées par la carte Arduino pour les communications série, et donc nous allons interférer avec les communications séries.

Notre algorithme pour notre programme sera :

Initialiser le port D et mettre à 0 seulement les bits correspondants aux broches que nous voulons contrôler (avec l'opérateur bit à bit ET).

Combiner la valeur du port D modifié avec la nouvelle valeur pour les broches sous contrôle (avec l'opérateur bit à bit OU).

int i; // variable de comptage int j; void setup() { DDRD = DDRD | B11111100; // initialise la direction des bits 2 à 7, laissant 0 et 1 inchangés (xx | 00 == xx) // identique à pinMode(pin, OUTPUT) pour les broches 2 à 7 Serial.begin(9600); // initialise connexion série } void loop() { for (i = 0; i < 64; i++) { PORTD = PORTD & B00000011; // met à 0 les broches 2 à 7, laissant les broches 0 et 1 inchangées (xx & 11 == xx) j = (i << 2); // décale la variable des broches 2 - 7 - pour avoir les broches 0 et 1 PORTD = PORTD | j; // combine la nouvelle information avec celle des broches de LED Serial.println(PORTD, BIN); // envoi série pour montrer le masquage delay(100); } }
Please note: These are affiliate links. If you buy the components through these links, We may get a commission at no extra cost to you. We appreciate it.