Forum: Mikrocontroller und Digitale Elektronik Verriegelung und lvalue-Fehler


von Sven W. (sickone4)


Lesenswert?

hallo leute,

ich hab folgende struktur:
1
if ((Start) && !(RefPunkt_IND1) && !(RESERVE_IND1))              // Taster Start verriegelt gegen RefPunkt und Reserve
2
      { PROG_IND1; }

beim übersetzen bekomme ich die fehlermeldung:
Error: lvalue required as left operand of assignment

ich werd aber nciht schlau aus dem fehler.


was ich will ist eine verriegelung:
wenn taster gedrückt und nicht pin 1 und nicht pin 2 dann tu irgendwas

Start, Refpunkt_IND1 und RESERVE_IND1 und prog_int1 sind definitionen 
und so definiert:
1
#define bedienpanel PIND              // Ausgangsport D
2
#define Start bit_is_clear(bedienpanel,3)    // Taster-Start                           
3
4
#define RefPunkt_IND1 PORTB|=(1<<2)          // Referenzpunktfahrt LED an
5
#define RefPunkt_IND0 PORTB&=~(1<<2)        // Referenzpunktfahrt LED aus
6
7
#define  RESERVE_IND1 PORTB|=(1<<3)          // RESERVE LED an
8
#define  RESERVE_IND0 PORTB&=~(1<<3)        // RESERVE LED aus

und noch eine frage zwecks programmierung:

z.b. #define RefPunkt_IND0 PORTB&=~(1<<2)
kann man das irgendwie umschreiben, dass es auch funktioniert mit 
leerzeichen?

-> #define RefPunkt_IND0 PORTB &= ~(1<<2)  <- so würde ich das 
normalerweise schreiben

gruß sven

von ./. (Gast)


Lesenswert?

1
!(RefPunkt_IND1) && !(RESERVE_IND1)
Das sind Zuweisungen und keine Abfragen, also immer wahr, bzw. falsch 
(da negiert).
Was ist
1
PROG_IND1
?

Sven Weinmann schrieb:
> kann man das irgendwie umschreiben, dass es auch funktioniert mit
> leerzeichen?

Ja.

von Sven W. (sickone4)


Lesenswert?

Prog_IND1 ist ein port -> PROG_IND1 PORTB|=(1<<1)

dachte der wäre für den Fehler hier unwichtig.

Wie kann man es denn umschreiben mit leerzeichen? weil übersetze ich es 
MIT leerzeichen funktioniert es nicht!


./. schrieb:
> Das sind Zuweisungen und keine Abfragen, also immer wahr, bzw. falsch
> (da negiert).

ich möchte ieg abfragen, ob ein pin gesetzt ist oder nicht, also ist
RefPunkt_IND1 = 1 oder nicht.

aber ich glaube ich seh das problem. ich rage eine zuweisung ab, nicht 
den status vom pin

von Sven W. (sickone4)


Lesenswert?

eigentlich wollte ich das
1
    if ((Start)    && (!bit_is_set(PINB,2)) && (!bit_is_set(PINB,3)))      // Taster Start verriegelt gegen RefPunkt und Reserve
2
      { PROG_IND1; }

vermeiden.

von Sauger (Gast)


Lesenswert?

Nabend,

da fehlen Klammern in den Makros. Makros sind reine Textersetzungen. 
Zieh deine Abfrage mal auseinander (Expandiere die Makros von Hand und 
schau dir an was rauskommt).

MfG

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.