Forum: Mikrocontroller und Digitale Elektronik if( PINB&(1<<SDO) ) {}?


von B-man (Gast)


Lesenswert?

Hey ho,

ich hab mal ein kleines Verständnisproblem zu folgender Anweisung:

if( PINB&(1<<SDO) ) {};

Ich habe es mal eine Runde lang durch den Debugger gejagdt und 
festgestellt, wenn SDO(EINGANG) eine 1 ist dann geht er in den If-Block 
und wenn SDO eine 0 ist, dann wird der Block übersprungen.

Ich verstehe nicht was die Undverknüpfung mit PINB ist? Wird dort mit 
PINB0 UND verknüpft? Das kann eigentlich nicht, da ich PINB0 einmal auf 
High und einmal auf Low gesetzt habe und feststellen musste, dass die 
Funktion die selbe bleibt.

Was ist die Undverknüpfung mit PINB??? PINB müsste ja irgendwie für eine 
1 stehen und nur wenn SDO auch eine 1 ist ist die IF-Bedingung true. 
Versteh das irgendwie noch nit ganz.

Wäre sehr sehr dankbar für eine ausführliche Erklärung. Danke;-)

von Michael H. (Gast)


Lesenswert?

Die ausführliche Erklärung dieses Ausdrucks findest Du im 
avr-gcc-Tutorial. Ist recht einfach wenn man's mal verstanden hat.

von MWS (Gast)


Lesenswert?

SDO ist nur die Pinnummer eben des SDO Pins, die 1 wird um diese Nummer 
links geschoben und das Ergebnis per UND mit PinB verknüpft. Ist dieser 
Pin gesetzt, dann ist das Ergebnis größer als 0, und damit WAHR, dann 
wird der Block ausgeführt.

von B-man (Gast)


Lesenswert?

Michael H. schrieb:
> Die ausführliche Erklärung dieses Ausdrucks findest Du im
> avr-gcc-Tutorial. Ist recht einfach wenn man's mal verstanden hat.

Das habe ich natürlich fleißig getan, aber dort steht irgendwie nicht 
wirklich was PINA oder PINB genau darstellt?
Die Funktion ist mir schon kla...
Das steht ja z.B. im avr-gcc-Tutorial:
/* Fuehre Aktion aus, wenn Bit Nr. 1 (das "zweite" Bit) in PINC gesetzt 
(1) ist */
if ( PINC & (1<<PINC1) ) {
  /* Aktion */
}

Aber was bedeutet in PINC gesetzt ist ? Wie sieht von PINC der Binär 
oder der Hex-wert aus? PINC geht von 1-7 =) hööö .... Seh ich es einfach 
nit?.... hmmm ... ich versteh einfach nicht ganz was dort passiert.. 
Also das er  die Aktion ausführt wenn Bit Nr.(x) in PINC gesetzt ist 
versteh ich, aber ich verstehe immer nochnit was das PINC ist? Also was 
und womit wird dort verglichen, geprüft, verundet oder wie auch immer ?

von B-man (Gast)


Lesenswert?

MWS schrieb:
> Ergebnis per UND mit PinB verknüpft

PinB was ist PinB? Der geht von 1-7 =)
Das PinB ohne Nummer verwirrt mich sehr=) Könnte man die If-Bedingung 
leichter schreiben?

von MWS (Gast)


Lesenswert?

He, he, beschäftige Dich auch mal mit MC Hardware, die PinX sind die 
Eingangsregister, die wiedergeben welche Signale gerade an den 
entsprechenden Beinchen anliegen :D

von B-man (Gast)


Lesenswert?

MWS schrieb:
> He, he, beschäftige Dich auch mal mit MC Hardware, die PinX sind die
> Eingangsregister, die wiedergeben welche Signale gerade an den
> entsprechenden Beinchen anliegen :D

Erstmal vielen vielen Dank =)

Kleines BSP. ob ich es vetsanden habe:

ich benutze  PinB0-7 als Input und überall liegt ein High an auch am 
SDO(PINB 6).

also würde die If-Bedingung im Prinzip (11111111&01000000) so 
ausschauen. Und somit kommt der Wert 1 also true raus=) Richtig?

Falls ja, sage ich vielmals Danke...Danke !!!;-)

von MWS (Gast)


Lesenswert?

Fast ganz genauso ist das ;-)

Nur das hier: (11111111&01000000) ergibt natürlich 01000000 und nicht 1.
Da allerdings alles ungleich 0 auch TRUE/WAHR ist, so wäre dieser 
Vergleich auch WAHR.

Ist der SDO Pin auf 0, würde nach dem UND eine 0 rauskommen und die ist 
mit FALSE definiert.

von B-man (Gast)


Lesenswert?

Ich sage vielmals Danke =) vielleicht sollte ich das nächste mal genauer 
ins Datenblatt schauen, da stand drin das das gesamte register PINB 
heisst.

nochmals danke danke für die schnelle Antwort.

von Karl H. (kbuchegg)


Lesenswert?

B-man schrieb:
> Ich sage vielmals Danke =) vielleicht sollte ich das nächste mal genauer
> ins Datenblatt schauen, da stand drin das das gesamte register PINB
> heisst.

Oder das Tutorial von Anfang an durcharbeiten.
In einem der ersten Abschnitte wird des Langen und Breiten darauf 
eingegangen.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports

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.