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

OP #5056245
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!
Gast #5056257
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
#5056272
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren