Und Verknüpfung funktioniert nicht

Gast #1299962
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.
Gast #1299976
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 = ?
Gast #1299995
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.

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