alle bits einens char prüfen

Gast #2452355
Lesenswert?
• ▲
▼
Hallo, ich möchte eine Variable seriell also bitweise auf einen Pin 
ausgeben.
Das Problem ist das es so nicht läuft wie ich mir das gedacht habe.

in etwa so:
unsigned char var=0x50;
unsigned char maske=0x01


If(var & maske){ //soll prüfen ob ein bestimmtes bit gesetzt ist
   tu irgendwas
}else blabla;

maske+=maske;//zur erhöhung der maske um das nächste bit zu prüfen
             // z.B 0x01=>0x02=>0x04=> ...



Das ganze dann noch in einer for-schleife verpackt von 0 bis 7 
natürlich;

Das Problem ist das die Bedingung wohl nie erfüllt ist und er immer nur
auf else springt?Selbst wenn ich 0xff eingebe, passiert nichts.

Brauch das ganze für ein schieberegister.
Gast #2452425
Lesenswert?
• ▲
▼
Tg schrieb:
> Die Bit-Prüfung muss so aussehen:
>
> If((var & maske) == maske)
> {
>     // Bit ist 1
> }
> else
> {
>     // Bit ist 0
> }

oder so:
1
if (!(var & maske))
2
{
3
    // Bit ist 0
4
}
5
else
6
{
7
    // Bit ist 1
8
}

Wenn das Bit nicht gesetzt ist, wird der Ausdruck in der Klammer 0, was 
für C bedeutet, dass es falsch ist.
Gast #2452453
Lesenswert?
• ▲
▼
>kann man machen, aber so gehts auch:
>if (var & maske )

Genau. Das sind alles Varianten die (mit Ausnahme der Negation) alle das 
selbe tun. Nur lösen sie das Problem nicht.

Der Codeausschnitt, (wenn man das mal so nennen möchte) ist korrekt und 
sollte wie erwartet funktionieren, falls alles andere darum herum auch 
korrekt ist.

Das ist eben die Frage: Wie sieht das drumherum aus?

Und woran erkennst Du konkret, das etwas nicht so läuft wie gewünscht?
>...das die Bedingung wohl nie erfüllt ist...
Was heisst hier "wohl"? "Ja" oder "Nein" oder "Weiss nicht". Mehr 
Möglichkeiten gibt es nicht.
Gast #2452804
Lesenswert?
• ▲
▼
4017 schrieb im Beitrag #2452355:
> in etwa so:

Und wie ist es tatsächlich? Bitte nicht irgendeinen für das Posting 
frisch eingetippten Code, sondern den, bei dem du das beschriebene 
Verhalten beobachtet hast.

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.