Forum: Mikrocontroller und Digitale Elektronik Verstaendnisfrage Eingaenge


von blubb b. (tofoo)


Lesenswert?

Hallo,

eine kleine Verstaendnisfrage:

Aus dem Tutorial:
1
#include <avr/io.h>
2
...
3
/* Fuehre Aktion aus, wenn Bit Nr. 1 (das "zweite" Bit) in PINC gesetzt (1) ist */
4
if ( PINC & (1<<PINC1) ) {
5
  /* Aktion */
6
}

Diese if-Abfrage verstehe ich nicht ganz:
Hier wird wasn an Port C anliegt verundet mit Linksshift von Port C PIN 
1.
Das gibt fuer mich keinen richtigen Sinn.

Kann mir jemand erklaeren was hier wirklich passiert?

Gruss,
tofoo
von Karl H. (kbuchegg)


Lesenswert?

blubb blabb schrieb:
> Hallo,
>
> eine kleine Verstaendnisfrage:
>
> Aus dem Tutorial:
>
1
> #include <avr/io.h>
2
> ...
3
> /* Fuehre Aktion aus, wenn Bit Nr. 1 (das "zweite" Bit) in PINC gesetzt
4
> (1) ist */
5
> if ( PINC & (1<<PINC1) ) {
6
>   /* Aktion */
7
> }
8
>
>
> Diese if-Abfrage verstehe ich nicht ganz:
> Hier wird wasn an Port C anliegt verundet mit Linksshift von Port C.

Nicht mit Port C. Mit PINC1. Und wenn man sich auf die Suche macht, dann 
findet sich in den Tiefen dessen, was über io.h includiert wird


#define PINC1   1

d.h. die Anweisung expandiert zu


    if ( PINC & ( 1 << 1 ) ) {
       ...
    }


und eine 1, binär 0b00000001, die man um 1 Stelle nach links schiebt, 
ergibt eine Maske, 0b00000010, die genau an der Bitposition 1 eine 1 
aufweist. Perfekt um das von PINC gelesene zu maskieren, so dass nur der 
Zustand von Pin 1 am Eingansport PINC übrig bleibt.
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.