überprüfen, ob mind 1 von 6 bit am port gesetzt ist

OP #4009828
Lesenswert?
• ▲
▼
Hi Leute,

irgendwie bin ich zu blöd um das im Titel genannte Problem zu lösen.
Wie kann ich mit einer kurzen Bitoperation/-vergleich überprüfen, ob 
mindestens ein Bit auf high ist?

Meine Idee war folgende:
1
if ((PORTB<<2) > 3) { process(); };
hierbei schiebe ich ja die Bits um 2 nach links, sodass Bit Nr6 und 7 
"verschwinden". Dann wäre jede mögliche Kombination größer 3.
Aber das funktioniert nicht.
Habe ich das Bitshifting nicht ganz verstanden? Werden die 
herausgeschobenen Bits auf der anderen Seite wieder eingeschoben?

Mein anderer Lösungsweg ist dieser:
1
if ((PORTB & 1<<PORTB0)|(PORTB & 1<<PORTB1)|(PORTB & 1<<PORTB2)|(PORTB & 1<<PORTB3)|(PORTB & 1<<PORTB4)|(PORTB & 1<<PORTB5)){
2
    process();
3
};
Allerdigns ist das etwas zu lang.
Das geht bestimmt eleganter.
Außerdem sollte die Operation nicht zu viele Takte in Anspruch nehmen.

Grüße
Der Anfänger
Moderator #4009838
Lesenswert?
• ▲
▼
Kaan Ayhan schrieb:
> Meine Idee war folgende:
>
>  if ((PORTB<<2) > 3) { process(); };
>
> hierbei schiebe ich ja die Bits um 2 nach links, sodass Bit Nr6 und 7
> "verschwinden".

Die Bits 6 und 7 verschwinden dadurch nicht, da die Schiebeoperation als
int (d.h. mit 16 Bit Breite) ausgeführt wird. Richtig wäre
1
if ((uint8_t)(PORTB<<2) > 3) { process(); };

Statt >3 würde auch schon >0 bzw. !=0 reichen oder einfach
1
if ((uint8_t)(PORTB<<2)) { process(); };

Der übliche Weg, einzelne oder mehrere Bits abzufragen, ist aber die
bitweise Und-Verknüpfing, wie von MaWin gezeigt.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.