Kuehlkoerper mit Befestigungsbolzen


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


Arduino - Bit- und Byte-Operationen

Die Arduino-Programmierung stellt uns ausreichend Funktionen zur Verfügung, um Binäroperationen durchführen zu können. Eine dezimale Zahl in binärer Form darzustellen, einzelne Bits auszulesen, zu setzen oder zurückzusetzen sowie diverse Bytes-Operationen durchzuführen kann problemlos erfolgen. Hier eine Übersicht mit Beispielen.

Bitweise AND

Mit dem Operator AND (&) werden zwei Binärzahlen Bit für Bit verglichen. Sind die Bits auf jeweils gleicher Stelle identisch, wird das Ergebnis auf 1 gesetzt. Sonst erhält man als Ergebnis 0.


  // ----------------------------------------------------------
  // Bitweise And-Operator


  byte Zahl1 = B01011011;
  byte Zahl2 = B01001111;
  byte a;

  void setup() {
    Serial.begin(9600);
  }

  void loop() {
    a = Zahl1 & Zahl2;
    Serial.println (a);
    delay(1000);
  }

  // Ausgabe = 75
  // ----------------------------------------------------------

Der Operator & vergleicht Stelle für Stelle die Bits der beiden Zahlen. Sind beide Bits gleich 1, ist auch das Ergebnis des Vergleiches 1. In allen anderen Fällen liefert der Vergleich 0. In diesem Fall bekommen wir als Ergebnis:
B01011011 - Zahl1
B01001111 - Zahl2
B01001011 - a = Zahl1 & Zahl2.
Die Bits-Reihenfolge 01001011 (a) entspricht der Zahl 75.

Bitweise OR

Bei dem OR-Vergleich (|) bekommen wir pro Bit-Stelle eine 1 dann, wenn mindestens einer der Bits den Wert 1 hat.

Bitweise XOR

Bei dem XOR-Vergleich (^) bekommen wir pro Bit-Stelle eine 1 dann, wenn die Bits einer Stelle verschieden sind.

Bitweise NOT

Der Operator NOT (~) kehrt die Bits auf allen Stellen um. Bei einer Zahl B01001011 (75) ergibt sich als Ergebnis die Zahl B10110100 (180).
byte A = B01001011
byte B = ~A

Bitverschiebung nach links und rechts

Die Bitverschiebung erfolgt mit den Operatoren << (nach links) und >> (nach rechts).
Bei der Linksverschiebung werden alle Bits um die gewünschte Stellenanzahl nach links verschoben. Die so entstandenen Leerplätze werden dann mit Nullen gefüllt. Das gleiche Prinzip gilt auch bei Verschiebung der Bits nach rechts.
byte A = B01011011
byte B = A <<3
Ergebnis: B = 11011000

bitRead

Mit bitRead lesen wir den Wert eines Bits an der angegebenen Position aus.
bitRead(A, Position)

Programm mit bitRead (Küchenuhr mit Arduino)

bitWrite

Mit bitWrite schreiben wir an der angegebenen Position 0 oder 1.
bitWrite(A, Position, Wert)

bitSet

Mit bitSet schreiben wir an der angegebenen Position einer Zahl 1.
bitSet(A, Position)

bitClear

Mit bitClear schreiben wir an der angegebenen Position einer Zahl 0.
bitClear(A, Position)


  // ----------------------------------------------------------
  // Bitoperationen


  byte a = B00000000;

  // Man kann die Zahl a auch dezimal eingeben: a = 0.
  void setup() {
    Serial.begin(9600);
  }

  void loop() {
    bitWrite (a, 2, 1);
    // Ergebnis = 00000100
    bitWrite (a, 3, 1);
    // Ergebnis = 00001100
    bitWrite (a, 4, 1);
    // Ergebnis = 00011100
    bitSet (a,6);
    // Ergebnis = 01011100
    bitSet (a,7);
    // Ergebnis = 11011100
    bitClear (a,3);
    // Ergebnis = 11010100
    Serial.print ("Die Zahl 00000000 wurde durch Bitoperationen in ");
    for (int i=7; i>-1; i--) {
      Serial.print (bitRead(a,i));
    }
    Serial.print (" = ");
    Serial.print (a);
    Serial.println (" umgewandelt. ");
    delay(1000);
  }

  // Ausgabe = 212
  // ----------------------------------------------------------

bit

Mit bit(n) wird der Wert des n-Bits ausgegebenen.

lowByte & highByte

Mit lowByte(x) kann man das niederwertige Byte aus einem Integerwert x extrahieren, mit highByte(x) das höherwertige Byte.

word

Mit word(hiByte, loByte) kann man aus einzelnen Bytes einen Integerwert bilden.


  // ----------------------------------------------------------
  // Bytes tauschen


  int a = 10000;

  // 10000 = 0010 0111 0001 0000
  int b;
  byte HiByte, LoByte;

  void setup() {
    Serial.begin(9600);
  }

  void loop() {
    HiByte = highByte(a);
    LoByte = lowByte(a);
    b = word(LoByte, HiByte);
    Serial.println (b);
    delay(1000);
  }

  // Ausgabe = 4.135
  // ----------------------------------------------------------


Arduino_Programmierung




Google-Suche auf MEINE-SCHALTUNG.de :


Transportband 800mm

Home Impressum Datenschutz