Hallo, wenn ich an einem Port Pull-Up-Eingänge und gleichzeitig Ausgänge habe, was passiert dann bei Bitmanipulationen mit den Pull-Ups? Beispiel: ... DDRB = 0b00111110; PORTB |= 1<<PB0 | 1<<PB6; // activate internal pull-ups for PB0 nad PB6 PORTB |= ((1 << PINB1); ... Hier werden doch die Pull-Ups wieder deaktiviert, oder? Durch die letzte Zuweisung wird ja auf PB0 und PB6 wieder eine 0 gegeben, was zur Deaktivierung der Pull-Ups führen würde, nicht wahr? Man kann die letzte Zeile ja auch so schreiben PORTB |= 0b00000010; Oder wäre das nur bei einer direkten Zuweisung wie PORTB = 0b00000010; ein Problem? Irgendwie stehe ich gerade auf dem Schlauch... Danke schon mal vorweg. thoern
Gast
#4150165
T. Thoern schrieb: > Durch die letzte > Zuweisung wird ja auf PB0 und PB6 wieder eine 0 gegeben, Nein! T. Thoern schrieb: > PORTB |= ((1 << PINB1); Du meinst sicher: PORTB |= ((1 << PB1); T. Thoern schrieb: > Irgendwie stehe ich gerade auf dem Schlauch... Ja! Und damit du da runter kommst, macht du dich kundig was |= wohl bedeuten mag.... T. Thoern schrieb: > Man kann die letzte Zeile ja auch so schreiben > PORTB |= 0b00000010; Ja! T. Thoern schrieb: > Oder wäre das nur bei einer direkten Zuweisung wie > PORTB = 0b00000010; Ja!
T. Thoern schrieb: > ... > DDRB = 0b00111110; > PORTB |= 1<<PB0 | 1<<PB6; // activate internal pull-ups for PB0 nad PB6 > > PORTB |= ((1 << PINB1); > ... > > Hier werden doch die Pull-Ups wieder deaktiviert, oder? Durch die letzte > Zuweisung wird ja auf PB0 und PB6 wieder eine 0 gegeben Nein. Du möchtest dich dringend über die Funktion des |= Operators informieren. Z.B. im Artikel Bitmanipulation.
Danke Euch! Bin wieder runter vom Schlauch :-) Wenn in einem Byte mehrere Bits auf Eins gesetzt werden sollen, wird dies durch eine ODER-Verknüpfung erreicht. Alle Bits, welche in der Bitmaske '1' sind, werden auf '1' gesetzt. Alle Bits, die in der Maske auf '0' gesetzt sind, bleiben unverändert. Gruß, thoern