Eingänge mit Pull-Ups und Ausgänge auf einem Port

OP #4150153
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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!
#4150385
Lesenswert?
• ▲
▼
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.
OP #4150618
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.