Bit­ma­ni­pu­la­ti­on

Lese­zeit: 3 Minu­ten

Bei­spiel ➨ Schie­be­re­gis­ter

Im binä­ren Sys­tem wer­den ganz­zah­li­ge Wer­te durch eine Fol­ge von 0 und 1 dargestellt.

void setup()
{
  byte Zahl = 255;
  Serial.begin(115200);

  // auf serielle Verbindung warten
  while (!Serial) {;}

  Serial.print(Zahl, BIN);

  Serial.println("\tDezimal: " + String(Zahl, DEC));
  Serial.println("-------------------------------------");
  Serial.println("shift links:");
  Serial.println("-------------------------------------");

  // shift links
  for (int i = 7; i > 0; i--)
  {
    Zahl = Zahl << 1;
    Serial.print(Zahl, BIN);
    // Anzeige: Dezimal, Binär
    Serial.println("\tDezimal: " + String(Zahl, DEC));
  }
  Serial.println("-------------------------------------");

  // Neustart
  Zahl = 255;
  Serial.print(Zahl, BIN);
  Serial.println("\tDezimal: " + String(Zahl, DEC));
  Serial.println("shift rechts: zur Verdeutlichung Anzahl 0 erg\u00e4nzt");
  Serial.println("-------------------------------------");

  // shift rechts
  for (int i = 0; i < 7; i++)
  {
    Zahl = Zahl >> 1;
    Serial.print(Zahl, BIN);
    Serial.print("\t");

    // zur Verdeutlichung nicht angezeigte 0 ergänzen
    for (int j = 0; j <= i; j++)
    {
      Serial.print("0");
    }
    Serial.print(Zahl, BIN);
    // Anzeige: Dezimal, Binär
    Serial.println("\tDezimal: " + String(Zahl, DEC));
  }

  // ~ -> Bits umkehren
  Zahl = B11111100;
  Serial.println("-------------------------------------");
  Serial.println("Bits mit ~ umkehren");
  Serial.print(Zahl, BIN);
  Serial.println("\tDezimal: " + String(Zahl, DEC));
  Zahl = ~ Zahl;
  Serial.print(Zahl, BIN);
  Serial.println("\tDezimal: " + String(Zahl, DEC));
}

void loop()
{
  // bleibt leer, Programm läuft nur einmal
}

So sieht es aus:

Bei­spiel Lauf­licht mit 5 LEDs

So sieht es aus:

void setup()
{
  // LEDs 3 bis 7 als OUTPUT definieren
  DDRD = B11111000;
}

void loop()
{
  // Lauflicht hin Start mit LED Pin 7
  PORTD = B10000000;
  delay(200);
  for (int i = 0; i < 4; i++)
  {
    /* 
      1 Bit nach rechts schieben
      B01000000 -> Pin 6
      B00100000 -> Pin 5
      B00010000 -> Pin 4
      B00001000 -> Pin 3
     */
    PORTD = PORTD >> 1;
    delay(200);
  }

  // Lauflicht zurück Start mit LED Pin 3
  PORTD = B00001000;
  delay(200);
  for (int i = 0; i < 4; i++)
  {
    /* 
      1 Bit nach links schieben
      B00010000 -> Pin 4
      B00100000 -> Pin 5
      B01000000 -> Pin 6
      B10000000 -> Pin 7
    */    
    PORTD = PORTD << 1;
    delay(200);
  }
}

Letzte Aktualisierung: 7. Okt 2023 @ 12:49