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;-)
Die ausführliche Erklärung dieses Ausdrucks findest Du im avr-gcc-Tutorial. Ist recht einfach wenn man's mal verstanden hat.
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.
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 ?
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?
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
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 !!!;-)
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.