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.
Mit "in etwa so" kann man nichts anfangen. Wenn du konkrete Hinweise auf das Problem erwartest, dann zeige auch den konkreten Code.
maske schrieb: >>maske+=maske; > maske=1; > ... > maske<<=1; Eine Zahl auf sich selbst addieren ist das selbe wie sie mit zwei zu multiplizieren ist das selbe wie sie um eine Stelle nach links zu schieben. Also liegts daran nicht, der Fehler ist nicht im gezeigten Fragment (wo nicht mal eine Schleife enthalten ist).
Andreas B. schrieb: > Eine Zahl auf sich selbst addieren ist das selbe wie sie mit zwei zu > multiplizieren ist das selbe wie sie um eine Stelle nach links zu > schieben. Wo du Recht hast... Zu schnell!
Die Bit-Prüfung muss so aussehen: If((var & maske) == maske) { // Bit ist 1 } else { // Bit ist 0 }
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.
Tg schrieb: > Die Bit-Prüfung muss so aussehen: > > If((var & maske) == maske) > { > // Bit ist 1 > } > else > { > // Bit ist 0 > } kann man machen, aber so gehts auch: if (var & maske )
>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.
4017 schrieb: > 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.