while((bit_is_clear(EINSe,AnschW))||(cstop==0)); Das Programm sollte bei diesem Befehl stehen bleiben und wenn eine der beiden Bedingungen oder Beide nicht zutreffen weiterlaufen. "cstop" ist int Variable "EINSe,AnschW" ist andere Bezeichnung für PORTD (PIND,PIND1) WINAVR + Atmega128 Programm wurde getestet und simuliert. Wenn der oben genannte Befehl nicht möglich ist, was geht dann??
> while((bit_is_clear(EINSe,AnschW))||(cstop==0)); > > Das Programm sollte bei diesem Befehl stehen bleiben und wenn > eine der beiden Bedingungen oder Beide nicht zutreffen > weiterlaufen. Mit anderen Worten: Das Programm soll 'schleifen', solange wie Bedingung A UND Bedingung B zutreffen. UND nicht ODER So wie Du es jetzt hast, reicht eine der beiden Bedingungen, damit die Schleife aufrecht erhalten bleibt. Erst wenn beide Bedingungen nicht zutreffen, wird die Schleife verlassen. Bei logischem UND bzw. ODER muss man aufpassen. Im umgangs- sprachlichen Sprachgebrauch verwenden wir die beiden Worte sehr oft logisch falsch.
Ich dachte immer das & ein Und ist und das | ein Oder. Bin ich da jetzt falsch informiert?
Nicht wirklich. Das ist eine bekannte Falle in der jeder irgendwann mal sitzt. Oft auch mehrmals hintereinander :-) De-Morgan nicht vergessen: !( A && B ) <==> !A || !B !( A || B ) <==> !A && !B
> Bin ich da jetzt falsch informiert?
Es gibt in C 2 verschiedene Verknuepfungen:
Die mit nur einem Zeichen, also & und | sind die Bit-Verknuepfungen.
Die mit 2 Zeichen, also && und || sind die logischen Verknuepfungen.
Bit-Verknuepfung: zwei int werden Bit fuer Bit miteinander
verknuepft.
0b1011 & 0b1101 -> 0b1001
( in dezimaler Schreibweise: 11 & 13 -> 9 )
Logische Verknuepfung: beide Partner werden als logische
Werte true oder false aufgefasst:
0 wird zu false, alles andere ist true
Dann werden diese Wahrheitswerte miteinander
logisch verknuepft:
11 && 13
11 ist nicht 0, also logisch true
13 ist nicht 0, also logisch true
true UND true ergibt true
oder binaer
0b1011 && 0b1101 -> 0b0001
Sollte aber auch in jedem besseren C-Lehrbuch zu finden sein.
Ehrlich: Besorgt Euch Literatur! Das ist wesentlich besser
als diese 'Try and Error'-Methoden, Halbwahrheiten und Halbwissen,
das da jeden Tag auftaucht.
Das Programm stimmt jetzt, aber: Es bleibt stehen und läuft nur weiter wenn ich den PIN(ANSCHw) high setze, wenn es schon bei der Schleife steht(Passt) oder "vor" der Schleife die Variable cstop ändere es sollte aber auch weiterlaufen wenn ich die Variable ändere während das Programm bei der Schleife stehen bleibt. "cstop globale int Variable Schleife im int main (void) ändern der Variable mit Interrupt" Fehler beim Simulieren, Testen konnte ich noch nicht. Und wenn ich "while((cstop==0)&&(bit_is_clear(EINSe,AnschW)));"schreibe hängt sich das Programm auf und nach einer Weile kommt der Dissambler
Eventuell "cstop" ein zweites mal im int main() deklariert? poste mal noch den Rest. Eventuell ist irgendwo anderst was falsch (Speicherüberschreitung oder so was...) mfg Andreas
"cstop" wird bestimmt über einen Interrupt geändert und Du hast "cstop" nicht "volatile" deklariert...
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.