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!
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
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.