Forum: Compiler & IDEs Und Verknüpfung funktioniert nicht


von Tscheburaschka (Gast)


Lesenswert?

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.

von gast (Gast)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

>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 = ?

von holger (Gast)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

Mist ;) Klammern vergessen:

while( ! ((!(PINC & (1<<PINC0))) && (!(PINC & (1<<PINC1)))))

von Tscheburaschka (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.