Nabend, Folgendes Problem: #define ident_ID 0xD0; UDR = ident_ID & pow(2,(7-countTimer)); Dieser Code soll mir immer eine Stelle von ident_ID übermitteln. Angenommen ident_ID ist 10011101 soll folgende Übertragung stattfinden: 1 0 0 1 1 1 0 1 Aber immer wenn ich den Code kompiliere kommt folgender Fehler: ../main.c:21: error: lvalue required as unary '&' operand Irgendwie steh ich grad aufm Schlauch, kann ich nicht einfach 2 Werte mit dem "&" Operator Logisch-UND-verknüpfen? LG
No. Dafür willst du ganz sicher nicht pow benutzen. Mach dir einen unsigned char, in den du eine 0x01 reinschreibst und mit jedem Durchgang durch die Schleife, die das nächste Bit abarbeiten soll, schiebst du die Maske mittels << um eine Stelle nach links. (Oder 0x80 in die Maske laden und mit >> um 1 Stelle nach rechts schieben. Je nachdem ob du MSB first rausbringen willst oder LSB). Und darüber, was wohl der ; in #define ident_ID 0xD0; anrichtet solltest du auch noch einmal nachdenken, denn der führt zu deiner Fehlermeldung.
> unary '&' operand
Der Compiler erkennt das & als Adreßoperator.
Versuche es mal mit: && -> Logisches UND Mit dem & Operator weist man dem Pointer die Adresse einer Variablen zu. pointervar = &variable
Ah perfekt jez hab ichs: UDR = ((ident_ID & (0x80>>countTimer))>>(7-countTimer)) & 0x01; Das ";" bei dem #define is mir dazwischen gerutscht, sry:) Also vielen Dank, Karl Heinz Buchegger dein Tip war goldwert. Und && bringt nicht, es muss der & Operator benutzt werden. LG
Aufpasssen: & ist die binäre (bitweise) UND-Verküpfung && ist die logische UND-Verküpfung
Melow schrieb: > UDR = ((ident_ID & (0x80>>countTimer))>>(7-countTimer)) & 0x01; Das ist doppelt gemoppelt. Entweder:
1 | UDR = (ident_ID & (0x80 >> countTimer)) >> (7 - countTimer); |
Oder besser:
1 | UDR = (ident_ID >> (7 - countTimer)) & 0x01; |
Was ist denn countTimer? Wenn man den rückwärts laufen läßt, spart man sich auch die Subtraktion. Noch besser wäre ident_ID in eine Variable und diese bei jedem Durchlauf um 1 shiften
1 | uint8_t id = ident_ID |
2 | UDR = (id & 0x80) ? 1 : 0; |
3 | id <<= 1; |
Wenn man dann die Bits der ID auch noch umdreht, würde sowas in der Art reichen:
1 | #define ident_ID 0x0B // bit reversed 0xD0
|
2 | uint8_t id = ident_ID |
3 | UDR = id & 0x01; |
4 | id >>= 1; |
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.