Wert aus verschiedenen Porteingängen erzeugen

Gast #2892490
Lesenswert?

Guten Morgen,

kann ich mit diesem Code eine Variable beschreiben, deren Werte von 
verschiedenen PORTs und PINs kommen?

Die Pins sind mit einem 8 Fach DIP-Schalter versehen. Das 7. Bit soll 
immer null sein. Auf Grund des Layouts ist es nicht möglich alle 
Schalter an einem Port zu legen.
1
uint8_t zahl = 0;
2

3
zahl |= ((PINB & (1<<PB7))<<6)|
4
        ((PIND & (1<<PD5))<<5)|
5
        ((PIND & (1<<PD6))<<4)|
6
        ((PIND & (1<<PD7))<<3)|
7
        ((PINB & (1<<PB0))<<2)|
8
        ((PINB & (1<<PB1))<<1)|
9
        ((PINB & (1<<PB2))<<0);

Danke
#2892508
Lesenswert?

oder ähnlicher zum Original:
1
 zahl |= ( ((PINB & (1<<PB7))!=0 ) << 6 )|
2
         ( ((PIND & (1<<PD5))!=0 ) << 5 )|
3
         ( ((PIND & (1<<PD6))!=0 ) << 4 )|
4
         ( ((PIND & (1<<PD7))!=0 ) << 3 )|
5
         ( ((PINB & (1<<PB0))!=0 ) << 2 )|
6
         ( ((PINB & (1<<PB1))!=0 ) << 1 )|
7
         ( ((PINB & (1<<PB2))!=0 ) << 0 );
#2892518
Lesenswert?

P.S.: Solange die Bits schon an der richtigen Stelle stehen, kann man 
das Schieben natürlich auch weglassen:
1
 zahl |= ( ((PINB & (1<<PB7))!=0 ) << 6 )|
2
         ( ((PIND & (1<<PD5))!=0 ) << 5 )|
3
         ( ((PIND & (1<<PD6))!=0 ) << 4 )|
4
         ( ((PIND & (1<<PD7))!=0 ) << 3 )|
5
         ( ((PINB & (1<<PB0))!=0 ) << 2 )|
6
         ( ((PINB & (1<<PB1))!=0 ) << 1 )|
7
         ( ((PINB & (1<<PB2))!=0 ) << 0 );

wird zu:
1
 zahl |= ( ((PINB & (1<<PB7))!=0 ) << 6 )|
2
         ( ((PIND & (1<<PD5))    )      )|
3
         ( ((PIND & (1<<PD6))!=0 ) << 4 )|
4
         ( ((PIND & (1<<PD7))!=0 ) << 3 )|
5
         ( ((PINB & (1<<PB0))!=0 ) << 2 )|
6
         ( ((PINB & (1<<PB1))    )      )|
7
         ( ((PINB & (1<<PB2))!=0 ) << 0 );

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