PortB = 0xFF, was ist dann PinB?

Gast #5012306
Lesenswert?

O. A. schrieb:
> Würde ich jetzt nun einen beliebigen PINB abfragen, liegt dort dann eine
> "1" an?

Das kommt auf den Prozessortyp an und auf die Programmierung - z.B. ob 
die Pins als Ausgang oder Eingang programmiert sind, dazu hast du dich 
ja auch nicht geäussert.

Georg
#5012352
Lesenswert?

O. A. schrieb:
> wenn ich PORTB = 0xFF; setze z.b für Pullups, dann wäre ja der
> PortB=0b1111 1111
>
> Würde ich jetzt nun einen beliebigen PINB abfragen, liegt dort dann eine
> "1" an?

Kommt drauf an, was an der Hardware passiert.

PINB liefert immer die Zustände der Pins am Port B zurück. Auch dann, 
wenn ein Pin auf Ausgang konfiguriert ist. Wenn du bspw. eine 1 für so 
einen Pin nach PORTB schreibst, dann wird der Pin auf H gehen. Hast du 
nun aber in deiner Schaltung einen Kurzschluß dieses Pins nach GND, dann 
bleibt der auf L und wenn du jetzt PINB liest, bekommst du auch eine 0 
für diesen Pin. Sinngemäß bei einem Schluß eines Pins nach Vcc.

Im Normalfall wird PINB aber für alle Ausgangs-Pins den gleichen Wert 
liefern, den du vorher nach PORTB geschrieben hast.
Gast #5012565
Lesenswert?

Axel S. schrieb:
> wenn du jetzt PINB liest, bekommst du auch eine 0
> für diesen Pin

Ich weiss nicht, ob es sich hier um einen Arduino handelt, das scheinen 
hier alle Teilnehmer am Forum einfach vorauszusetzen. Was ich aber 
sicher weiss, ist dass deine Behauptung keineswegs auf alle Prozessoren 
zustrifft. Es gibt sogar welche, bei denen man sowohl das eben 
beschriebene Ausgaberegister lesen kann oder den tatsächlichen Zustand 
des Pins.

Die Unkenntnis dieser Zusammenhänge führt zu besonders hübschen 
Fehlerbildern, z.B. dass man mit einem Read-Modify-Write einen 
Eingangszustand versehentlich festschreibt.

Georg
Moderator Persönliche Seite #5012617
Lesenswert?

Georg schrieb:
> Es gibt sogar welche, bei denen man sowohl das eben beschriebene
> Ausgaberegister lesen kann oder den tatsächlichen Zustand des Pins

Das ist beim AVR durchaus so: liest du PORTB zurück, dann liest du
das Ausgaberegister, liest du PINB, dann den Eingangszustand.

Das ist keineswegs auf „Arduino“ beschränkt, aber die Namen der
Register deuten schon sehr stark auf einen AVR.
Gast #5012640
Lesenswert?

O. A. schrieb:

> Angenommen,
>
> PortB ist als Eingang konfiguriert.
>
> also
> DDRB=0;
> PORTB=0xFF;

Er ist damit für alle Pins als Eingang mit aktiviertem Pullup 
konfiguriert.

> Nun frage ich einen PINB o bis 7 ab, wenn kein Taster gedrückt wird,
> dann müsste mir die Abfrage immer "1" liefern richtig?

Sofern äußere Beschaltung das nicht verhindert, z.B. ein angeschlossener 
ISP-Programmer (bei vielen Megas sind die ISP-Anschlüsse an PortB) oder 
ein schlichter Zinnpopel nach GND...

Übrigens: PinX hängt dem realen Geschehen an den Pins immer 1..2 Takte 
hinterher. Das ist manchmal nützlich, manchmal aber auch schädlich (vor 
allem, wenn man beim Programmieren nicht an dieses Verhalten denkt).
Beitrag #5012833 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren