Moin hab eine frage zu den I/O Register; ldi r16, 0b00000001 out DDRB, r16 Als erstes wird die Konstante (logische 1) ins Register r16 geladen bzw. dort abgespeichert; Mit out wird dieses Register r16 wieder ausgegeben an den Port DDRB; da es sich um eine logische 1 handelt, ist sind alle Port B.0 - B.7 als Ausgänge konfiguriert, oder? Bei diesem Bsp steht aber dabei, dass Port B.0 ein Ausgang und Port B.1 bis Port B.7 Eingänge sind. hmmm... heißt das, dass DDRB ohne Nummer das Pin B.0 anspricht??? und alle Ports automatisch immer zuerst als Eingänge konfiguriert sind?? Wie kann ich z.B. nur Port B.1 oder B.5 ansprechen?? Geht dass dann über DDRB1 DDRB3?? David
David wrote: > Moin > > hab eine frage zu den I/O Register; > > ldi r16, 0b00000001 > out DDRB, r16 > > > Als erstes wird die Konstante (logische 1) ins Register r16 geladen bzw. > dort abgespeichert; > > Mit out wird dieses Register r16 wieder ausgegeben an den Port DDRB; da > es sich um eine logische 1 handelt, ist sind alle Port B.0 - B.7 als > Ausgänge konfiguriert, oder? Nein. Das geht bitweise Deine Maske war: 0b00000001 jede 0 steht für einen Eingangspin, jede 1 für einen Ausgangspin: 0b00000001 Bit 76543210 Also ist Bit 0 auf Ausgang, alle andern (Bit 1 bis Bit 7) sind auf Eingang 0b00100100 Bit 76543210 Bit 2 und Bit 5 sind auf Ausgang, Bit 0, 1, 3, 4, 6, und 7 sind auf Eingang > bis Port B.7 Eingänge sind. hmmm... heißt das, dass DDRB ohne Nummer das > Pin B.0 anspricht??? Nein. Die Festlegung mittels DDRx gilt für alle Bits des betreffenden Ports. Jedes Bit in der Maske, die an DDRx zugewiesen wird, schaltet das zugehörige Port-Bit in den jeweiligen Modus. > und alle Ports automatisch immer zuerst als > Eingänge konfiguriert sind?? das stimmt allerdings. Die DDRx Bits sind per default auf 0. > > Wie kann ich z.B. nur Port B.1 oder B.5 ansprechen?? Geht dass dann über > DDRB1 DDRB3?? Die Frage sollte sich jetzt erübrigt haben.
Ich weiss nicht wo du das Beispiel her hast. Wenn wir über eine gemeinsame Diskussiongrundlage reden sollen, schlage ich http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen vor... Also den Port DDRB kannst du nicht direkt mit einer Konstante (0b00000001) belegen, daher der Umweg über das Register (hier) r16. Zuerst Register mit Konstante laden (ldi), dann Register in Port schreiben (out). Der Wert der Konstante schaltet einzelne Pins am Port auf Ausgang (1) oder Eingang (0). Hier Bit0 auf 1 gesetzt, d.h. Pin0 an Port B ist Ausgang. Bit1-Bit7 auf 0 gesetzt, d.h. Pin1-Pin7 an Port B sind Eingang. Zugriff auf einzelne Bits findest du bei http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Zugriff_auf_einzelne_Bits
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.