mikrocontroller.net

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


Autor: B-man (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;-)

Autor: Michael H. (Gast)
Datum:

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

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: B-man (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: B-man (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: B-man (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !!!;-)

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: B-man (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.