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(9600);
 
  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 angezeigt 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. Jan 2021 @ 17:36