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.

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