Hallo Leute, meine UND-Verknüpfung funktioniert nicht so wie ich will. Folgenden Code habe ich von einem Kolegen bekommen, das funktioniert auch wie eine UND-Verknüpfung, die Schreibweise ist aber etwas seltsam. while(1) { while((PINC & (1<<PINC0)) || (PINC & (1<<PINC1))); { do { PORTA=0b00000000; warte_ms(100); PORTA=0b11111111; warte_ms(100); } while((PINC & (1<<PINC6)) || (PINC & (1<<PINC7))); PORTA=0b11111111; } } } Könnte mir bitte das einer erklären? Ich würde es so machen: while((!(PINC & (1<<PINC0))) && (!(PINC & (1<<PINC1)))); { tu was } Leider funktioniert es in der Schaltung nicht. Woran liegt es? Die Suche hat leider keine Antwort gegeben.
1 | while((PINC & (1<<PINC0)) || (PINC & (1<<PINC1))); |
siehe http://www.imb-jena.de/~gmueller/kurse/c_c++/c_operlo.html, da ist eine art wahrheitstabelle, die den "||" ausdruck erklärt.
>Ich würde es so machen: >while((!(PINC & (1<<PINC0))) && (!(PINC & (1<<PINC1)))); >Leider funktioniert es in der Schaltung nicht. Sind inzwischen alle verblödet? Meine Güte rechne dir doch einfach mal die Zwischenwerte aus: PINC & (1<<PINC0) = erg1 !(PINC & (1<<PINC0)) = erg2 PINC & (1<<PINC1) = erg3 !(PINC & (1<<PINC1)) = erg4 erg2 && erg4 = ?
Da kriecht mir doch noch so ein alter Spruch ins Gehirn:
Negierung der Eingänge und negierung des Ausganges
>= Umkehrung der Logik.
while( ! (!(PINC & (1<<PINC0))) && (!(PINC & (1<<PINC1))));
{
}
Und wenn du das Semikolon am Ende der Zeile
weglässt könnte das evtl. sogar gehen.
Oder gehören die Klammern nicht zum while() ?
Beim do würde ich das so machen:
do
{
} while((PINC & (1<<PINC6)) || (PINC & (1<<PINC7)));
Das erhöht die Übersichtlichkeit ungemein.
Mist ;) Klammern vergessen: while( ! ((!(PINC & (1<<PINC0))) && (!(PINC & (1<<PINC1)))))
Danke erstmal für die Antworten. Ich habe es jetzt, es lag tatsächlich an dem Semikolon. Mit logischer überlegung hat es dann auch mit der do while Schleife geklappt.
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.