Forum: Mikrocontroller und Digitale Elektronik WinAVR Bitzuweisung


von ABSimon (Gast)


Lesenswert?

Hallo Zusammen,

ich versuche gerade, da die Lizenz von ISP ablauft auf WinAVR
umzusteigen. Soweit ok, nur tritt hier ein Fehler auf
Bitzuweisung.
1
#define LCDDATA0  PB0
2
#define LCDDATA1  PB1
3
#define LCDDATA2  PB2
4
#define LCDDATA3  PB3
5
#define LCDDATA4  PB4
6
#define LCDDATA5  PB5
7
#define LCDDATA6  PB6
8
#define LCDDATA7  PB7
9
10
data = 0x38;
11
12
LCDDATA0 = data;
13
LCDDATA1 = data >>1;
14
LCDDATA2 = data >>2;
15
LCDDATA3 = data >>3;
16
LCDDATA4 = data >>4;
17
LCDDATA5 = data >>5;
18
LCDDATA6 = data >>6;
19
LCDDATA7 = data >>7;
1
LCDDATA1 = data >> 1

ergibt immer einen Fehler, kann ich das einfach
mit
1
LCDDATA2 |= (2 << data)

übersetzen, und ebenso dann auch
1
LCDDATA0 = data;

zu
1
LCDDATA0 |= (0 << data)

???

Wohl nicht oder. Weiß jemand wie hier die richtige Syntax für
WINAVR wäre?

Danke & Viele Grüße aus Neuss
ABSimon

von Matthias L. (Gast)


Lesenswert?

>LCDDATA1 = data >> 1

Ja, muss ja eine Fehler geben.
LCDATA1 ist ja mit PB0 gleichgesetzt.

Und PB0 wurde mit 0 definiert. Also steht da:

>LCDDATA1 = data >> 1

    0     = 0x38>>1 = 0x19

Und das stimmt ja nicht.

von ABSimon (Gast)


Lesenswert?

Hi,

hatte ich vergessen, vorab wird
1
DDRB  = 0b11111111;
2
PORTB = 0b11111111;

gesetzt. Dieser Fehler wird ausgegeben:
1
error: lvalue required as left operand of assignment

"Linker Wert erforderlich beim linken Zuweisungs-Operanden."

Kennt das jemand, was mache ich falsch, wie werden ansonsten
bei Variablen einzelne Bits anderen Variablen zugewiesen.

Danke & Viele Grüße
ABSimon

von Volker (Gast)


Lesenswert?

Ich glaube, dass du hier fündig wirst:

Beitrag "Bitzuweisung eines PortPins"

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
Noch kein Account? Hier anmelden.