Forum: Mikrocontroller und Digitale Elektronik Eingänge mit Pull-Ups und Ausgänge auf einem Port


von Thomas H. (thoern)


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

von Ulrich F. (Gast)


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!

von Axel S. (a-za-z0-9)


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.

von Thomas H. (thoern)


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

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
Noch kein Account? Hier anmelden.