Forum: Mikrocontroller und Digitale Elektronik Wo ist der Fehler??


von Sören (Gast)


Lesenswert?

Hallo,
ich habe eine kleines Problem. Ich möchte zwei Pins an Port F auf High 
setzen.
Ich habe folgendes geschrieben:

PORTF |= (1<<PF1) && PORTF |= (1<<PF3);

Als Fehlermedlung erscheint immer:

error: lvalue required as left operand of assignment

Wo ist da der Fehler??

von Martin (Gast)


Lesenswert?

&& ist ein logischer operator.

Es muss so aussehen: PORTF |= (1<<PF1) | (1<<PF3);

von nicht "Gast" (Gast)


Lesenswert?

das && ist ein vergleichender Operator - du willst abernichts 
vergleichen, sondern zuweisen.
Schreib den Teil nach dem && einfach in eine zweite Zeile

__
Gast

von Patrick (Gast)


Lesenswert?

Autsch. Das:

Sören schrieb:
> PORTF |= (1<<PF1) && PORTF |= (1<<PF3);

muss korrekt natürlich so heißen:
1
PORTF |= (1<<PF1) | (1<<PF3);

Wenn eine andere Funktionalität beabsichtigt gewesen wäre, hätte man das 
auch z. B. so umbauen können:
1
PORTF |= (1<<PF1) && (PORTF | (1<<PF3));

;)

von Sören (Gast)


Lesenswert?

Okay.
Also steht "|" für und??

von Peter II (Gast)


Lesenswert?

Patrick schrieb:
> muss korrekt natürlich so heißen:
> PORTF |= (1<<PF1) | (1<<PF3);

sieht zwar gut aus hat aber nebenwirkungen. Es kommt jetzt auf die 
Hardware an. Wenn es ein Atmel ist dann wird hier erst PORTF eingelesen 
und dann wieder zurückgeschrieben. Das könnte Probleme machen wenn es 
noch interupts gibt die auch PORTF verwenden.
Wenn es auch ok, das man die beiden pins nicht gleichzeitig setzt würde 
ich liber so schreiben.

PORTF |= (1<<PF1);
PORTF |= (1<<PF3);

das ist je nach hardware sogar schneller.

von Patrick Star (Gast)


Lesenswert?

ja

von Klaus W. (mfgkw)


Lesenswert?

Sören schrieb:
> Also steht "|" für und??

Nein, für (binäres) ODER.

Allerdings ist die Umngangssprache da sehr ungenau.
Wenn du sagst "im Ergebnis muß ein Bit gesetzt sein, daß in dem einen 
Operanden vorkommt, und eines, das im anderen Operanden vorkommt", dann 
entspricht das der eher mathematischen Aussage "im Ergebnis sollen alle 
Bits gesetzt sein, die im einen oder dem anderen Operanden gesetzt 
sind".

Diese verwaschene Bedeutung in der deutschen Sprache sorgt öfters für 
Verwirrung, da muß man durch.

Das korrekt gemeinte "in einem Operanden gesetzt und im anderen" führt 
im Ergebnis nur zu einem gesetzten Bit, wenn an der entsprchenden Stelle 
in beiden Operanden das Bit gesetzt ist.

von Sören (Gast)


Lesenswert?

Danke.
Ich hasse den Montagmorgen ;)

von Karl H. (kbuchegg)


Lesenswert?

Sören schrieb:
> Okay.
> Also steht "|" für und??

Wenn du schon so fragst, brauchst du dringend ein C-Buch und ein paar 
Vorabübungen auf einem PC. C programmieren auf einem PC hat den Vorteil, 
dass du wesentlich bessere Einsteigerbedingungen hast um die Grundlagen 
zu lernen. Das Buch wird dir die Anfänge in einer systematischen Art und 
Weise von der Pieke auf beibringen.


| steht für Oder

Aber das ist hier nicht der springende Punkt. Der springende Punkt ist, 
dass nicht jedes umgangssprachlich gesprochende UND sich in einem 
Zeichen in der Sprache C niederschlägt. In diesem Fall bedeutet dieses 
UND im Satz "setze Ausgang A UND setzte Ausgang B" nämlich keine 
irgendwie logische Verknüpfung von 2 Aussagen sondern es bedeutet ganz 
einfach: "zuerst mach das, danach mach das". Maximal könnte man noch 
"mach die beiden Dinge A und B in einem Aufwasch" darin sehen. In C 
schreibst sich das im einfachsten Fall einfach als 2 Anweisungen 
hintereinander, eine Sequenz, die abgearbeitet wird

    Setze Ausgang A;
    Setze Ausgang B;

der Nettoeffekt der beiden Anweisungen ist, dass sowohl Ausgang A als 
auch (also UND) Ausgang B gesetzt ist.

Anderes Beispiel: "Gehe zum Fenster UND mache es auf". Obwohl hier ein 
UND verwendet wird, bedeutet dieser Satz einfach nur die Sequenz

    Zum Fenster gehen;
    Fenster öffnen;

Das ist aber etwas völlig anderes, als das UND in "Wenn es regnet UND 
ich keinen Schirm habe, dann werde ich nass". Hier verknüpft das UND 2 
Bedingungen zu einer Komplettaussage. Und es ist dieses UND, welches 
sich in C in Form eines & oder eines && wiederfindet.

Gerade wenn es um die Wörter UND bzw. ODER geht, sind wir in der 
gesprochenen Sprache unglaublich schlampig. Das macht insofern nichts, 
weil unser Gehirn die Dinge trotzdem richtig aussortiert und die 
Bedeutung rausfindet. Man muss da sehr genau aufpassen, ob man hier 
nicht einem logischen Trugschluss aufsitzt, wenn man die UND bzw. ODER 
aus der gesprochenen Sprache einfach übernimmt und 1:1 in eine 
Programmiersprache abbildet.

von Klaus W. (mfgkw)


Lesenswert?

Karl Heinz Buchegger schrieb:
> eines & oder eines &&

Du hast es geschafft, zwischen zwei Und noch ein Oder zu bekommen :-)

von Sören (Gast)


Lesenswert?

Alle Fehler beseitigt :). Programm läuft. Danke und noch einen schönen 
Tag

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.