Hallo, verstehe nicht ganz was da passiert bzw ich verstehe schon aber es macht nicht das was es soll. Ich will erreichen dass beim betätigen (auf Masse gezogen von 1 auf 0) von PIN0 und PIN1 es in die schleife gesprungen wird. Ich habe es getestet und es funktioniert wie eine oder Verknüpfung. Mache ich anstatt logisch und(&&) logisch oder(||) so funktioniert es wie gewünscht aber warum???? while((PINC & (1<<PINC0)) && (PINC & (1<<PINC1))); { } Die Suche habe ich auch schon bemüht aber nichts brauchbares gefunden.
Wertenbach wrote: > Hallo, > verstehe nicht ganz was da passiert bzw ich verstehe schon aber es macht > nicht > das was es soll. > > Ich will erreichen dass beim betätigen (auf Masse gezogen von 1 auf 0) > von PIN0 und PIN1 es in die schleife gesprungen wird. Ich habe es > getestet und es funktioniert wie eine oder Verknüpfung. > Mache ich anstatt logisch und(&&) logisch oder(||) so funktioniert es > wie gewünscht aber warum???? > > while((PINC & (1<<PINC0)) && (PINC & (1<<PINC1))); > { > > } > > Die Suche habe ich auch schon bemüht aber nichts brauchbares gefunden. Bei deinem Code springt man auch nur in die Schleife, wenn BEIDE High sind (also NICHT auf Masse gezogen sind). Wenn du willst, dass er erst rein springt, wenn BEIDE auf Low sind musst du negieren. Also:
1 | while(~(PINC & (1<<PINC0)) && ~(PINC & (1<<PINC1))) { |
2 | |
3 | }
|
BTW: Der Strichpunkt nach der Schleifenbedingung ist falsch.
Christian L. wrote:
1 | while(~(PINC & (1<<PINC0)) && ~(PINC & (1<<PINC1))) { |
Nein, das funktioniert genauso wenig. Man braucht hier ein logisches Not, kein binäres.
1 | while(!(PINC & (1<<PINC0)) && !(PINC & (1<<PINC1))) { |
Also bei mir ist es genau anders rum Beide Pins sind auf 1 --> es wird nicht in die Schleife rein gesprungen Ein Pin ist auf 0 --> es wird in die Schleife gesprungen Wie du es beschrieben hast funktioniert es: while(~(PINC & (1<<PINC0)) && (PINC & (1<<PINC1))); Aber warum wird ohne Invertierung, aus einer und Verknüpfung eine oder Verknüpfung gemacht???
Stefan Ernst wrote: > Christian L. wrote: > >
1 | > while(~(PINC & (1<<PINC0)) && ~(PINC & (1<<PINC1))) { |
2 | >
|
> > Nein, das funktioniert genauso wenig. Man braucht hier ein logisches > Not, kein binäres. > >
1 | > while(!(PINC & (1<<PINC0)) && !(PINC & (1<<PINC1))) { |
2 | >
|
OH, stimmt! Lange nichts mehr gecoded. Jo, ~ ist ja der Negierer auf Bitebene. Sorry, Stefan hat recht.
1 | while(!(PINC & (1<<PINC0)) && !(PINC & (1<<PINC1))) { |
2 | |
3 | }
|
Das ist was du suchst. EDIT: @Wertenbach: 1. Sicher, dass du IN die Schleife und nicht heraus springen willst? 2. Sicher, dass du die Pins von VCC aud GND ziehst? Egtl müsste "while(~(PINC & (1<<PINC0)) && (PINC & (1<<PINC1))){};" IMMER logisch wahr sein, oder irr ich mich? Beide Teilausdrücke sind doch IMMER ungleich 0 und somit wahr?
Ja ich bin sicher dass ich in die Schleife springen will. Ja die Pins werden von 1 auf 0 gezogen. Hier der ganze Code while(1) { while(!(PINC & (1<<PINC0)) && !(PINC & (1<<PINC1))); { do { PORTA=0b00000111; } while(!(PINC & (1<<PINC6))) && !(PINC & (1<<PINC7))); PORTA=0b00000000; } }
1 | while((PINC & ((1<<PINC0) | (1<<PINC1))) == 0) { |
2 | ...
|
bzw.
1 | while(!(PINC & ((1<<PINC0) | (1<<PINC1)))) { |
2 | ...
|
>>Aber warum wird ohne Invertierung, aus einer und Verknüpfung eine oder >>Verknüpfung gemacht??? Das ist das Gesetz von De Morgan. Dieses De Morgan'sche Gesetz besagt: !a & !b = !(a || b) !a || !b = !(a & b) Gruß Mandrake
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.