Hallo Leute, ich habe folgendes vor: (pseudocode) if ( PINE7 = PIND3) { ... } Also die Bedingung soll erfüllt sein, wenn beide Pins Low oder beide High sind.. Wie mache ich das am effektivsten.. PS: die beiden Pins liegen nicht auf dem selben Port. Danke schonmal
@Matthias: BTW: Der Vergleichs -Operator in C ist das "==". "=" macht eine Zuweisung!
@ Johannes M. (johnny-m): Das weiß ich, wollte ja nur das Problem darstellen und hab deshalb pseudocode drübergschrieben Danke für die Antworten
Das geht net..:
1 | if ( ( PINE & (1<<PE6) ) ^^ ( PIND & (1<<PD0) ) ) |
2 | {
|
3 | ..
|
4 | }
|
5 | else
|
6 | {
|
7 | ..
|
8 | }
|
der WinAVR bringt folgende Fehlermeldung: ../propuhr_bl.c:255: error: expected expression before '^' token Aber was soll mir das sagen?
"^" ist ein bitweiser Operator (ein logisches EXOR gibt es in C nicht). "^^" ist schlicht und ergreifend ein Syntaxfehler, weil es einen solchen Operator nicht gibt und deshalb der Compiler zwei bitweise EXOR direkt hintereinander sieht...
1 | if ( ( (PINE & (1<<PE6) ) && ( PIND & (1<<PD0) ) ) |
2 | || (!(PINE & (1<<PE6) ) && !( PIND & (1<<PD0) ) ) ) |
Einzige Möglichkeit?
Man kann den bitweisen Operator als logischen Operator mißbrauchen, wenn sichergestellt ist, das beide Ausdrücke nur 0 oder 1 sein können, z.b. durch eine logische Negation:
1 | if( !(PINE & 1<<PE6) ^ !(PIND & 1<<PD0) ) |
Peter
1 | if ( (( PINE & (1<<PE6) ) != 0 ) == (( PIND & (1<<PD0) ) != 0 ) ) |
2 | {
|
3 | ..
|
4 | }
|
habs jetzt so gelöst, scheint zu funktionieren:
1 | if ( ( (PINE>>PE6)^(PIND>>PD0) ) & 0x01 ) |
2 | {
|
3 | ...
|
4 | }
|
5 | else
|
6 | {
|
7 | ..
|
8 | }
|
Danke an alle!
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.