Verständnis DDRD |=(1<<0);

OP #5056245
Hallo zusammen,

ich habe eine Frage bezüglich des Quellcodes  "DDRD |=(1<<0);".

Es ist mir noch nicht ganz klar wofür die 1 steht im Quellcode ist.
Es wurde gesagt das die Eins für das niederwertigeste Bit steht, sodass 
sich das Bit nicht verändert.

Wofür brauche ich das, um einen Eingang einzuschalten? Ist mir nicht 
ganz schlüssig.

Grüße und danke!
Gast
Die 1 (dezimal) steht für 0x01 (hex) oder 0000 0001 (binär). Durch den 
Operator << werden die binären Stellen nach links verschoben. Am 
"rechten Ende" wird für jede verschobene stelle 0 eingefügt.
In deinem Fall wird also 0000 0001 um 0 stellen nach links verschoben. 
Bleibt also gleich. Man hat sich diese Schreibweise angewöhnt weil der 
code so übersichtlicher wird und man sofort sieht, welche stelle im 
Register beschrieben wird.
Die ODER Verknüpfung |= ist notwendig um eben nur die erste stelle des 
Registers auf 1 zu setzen und alle anderen Stellen unberührt zu lassen.

Genausogut könnte man DDRD |= 0x01 oder DDRD |= 1 schreiben
Die Anderen haben es zwar schon erklärt, ich will es aber nochmal anders 
formulieren:
1
y |= (1 << x)

ist ein bekanntes und weit verbreitetes Muster, das so viel bedeutet 
wie:
"Setze Bit x von y auf 1" (und lasse die restlichen Bits von y 
unverändert). In Deinem Fall also:
"Setze Bit 0 von DDRD auf 1" (und lasse die restlichen Bits von DDRD 
unverändert).

Analog dazu gibt es übrigens noch ein ganz ähnliches Muster, mit dem man 
einzelne Bits löscht bzw. auf 0 setzt:
1
y &= ~(1 << x)
bedeutet:
"Setze Bit x von y auf 0" (und lasse die restlichen Bits von y 
unverändert)

> Wofür brauche ich das, um einen Eingang einzuschalten?

Gar nicht: Mit dem von Dir genannten Befehl würdest Du vielmehr 
festlegen, dass der GPIO-Pin D0 eines AVR-Mikrocontrollers als Ausgang 
fungieren soll...

Mehr dazu z.B. hier:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Datenrichtung_bestimmen
und hier
https://www.mikrocontroller.net/articles/Bitmanipulation#Standard_C

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.