Forum: Mikrocontroller und Digitale Elektronik Verständnis DDRD |=(1<<0);


von D. R. (misterdimi1992)


Lesenswert?

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!

von Walter S. (avatar)


Lesenswert?

nicht die 1, sondern die 0 steht für das niederwertigste Bit

von Athlon (Gast)


Lesenswert?

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

von Joachim S. (oyo)


Lesenswert?

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

: Bearbeitet durch User
von D. R. (misterdimi1992)


Lesenswert?

Vielen Dank für eure Antworten! Ja jetzt macht es Sinn!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.