C-Code ist Fehlerhaft

OP #1285460
Lesenswert?

Hallo,

ich habe folgenden Code geschrieben und der compiler von avr beschwert 
sich dabei immer.


if(PORTC|=0x40 && PORTD|=0x80)
        {
            PORTF|=(0<<PF3);
            PORTE|=(0<<PE1);
            PORTF|=0x04;
            PORTE|=0x01;
        }


Es sollen 2 Bedingungen eingelesen und mir einen Ausgang setzen.


Ist das so richtig? bzw, was mache ich falsch?

Gruß
Kay
#1285470
Lesenswert?

Hallo,

worüber beschwert er sich denn?
Ich würde mich auch beschweren.

Schreib es doch mal auseinander, vielleicht fällt Dir dann was auf?

if(PORTC = PORTC | 0x40 && PORTD = PORTD | 0x80)
        {

Wo fragst Du da was ab? Du setzt jeweils ein Bit in PORTC und PORTD...

Gruß aus Berlin
Michael
Persönliche Seite #1285473
Lesenswert?

Ich denke der Artikel Bitmanipulation bringt dich richtig voran!

Kay --- schrieb:

> if(PORTC|=0x40 && PORTD|=0x80)

Ist an PORTC Bit 5 gesetzt UND an PORTD Bit 7?

  if((PORTC & 0x40) && (PORTD & 0x80))

Wenn Eingänge abgefragt werden sollen:

  if((PINC & 0x40) && (PIND & 0x80))

>         {
>             PORTF|=(0<<PF3);
>             PORTE|=(0<<PE1);

Löschen von Bits geht anders:

              PORTF &= ~(1<<PF3);
              PORTE &= ~(1<<PE1);

>             PORTF |= 0x04;
>             PORTE |= 0x01;

Das macht die beiden Zeilen darüber nutzlos, da es anders geschrieben so 
zu lesen ist:

              PORTF |= (1<<PF3);
              PORTE |= (1<<PE1);

>         }
#1285479
Lesenswert?

Also ich hatte auch erst 1 Projekt und bin dabei noch net so fit, aber 
für mich sieht der Code gerade ziemlich falsch aus. Hier mal ne 
Verbesserung.

1
if((PORTC & 0x40) && (PORTD & 0x80))  //wenn Pin 3 von Port C und Pin 7 von Port D, dann ...
2
        {
3
            PORTF~=(1<<PF3);   //Pin 3 von Port F deaktivieren
4
            PORTE~=(1<<PE1);   //Pin 1 von Port E deaktivieren
5
            PORTF|=0x04;       //Pin 3 von Port F wieder aktivieren
6
            PORTE|=0x01;       //Pin 1 von Port E wieder aktivieren
7
        }

Ich kann mir vorstellen, dass du es vielleicht so gemeint hast.
Gast #1285481
Lesenswert?

Auch über die Zeilen, über die sich der Compiler nicht beschwert, 
solltest du dir nochmals Gedanken machen.
1
PORTF|=(0<<PF3);

ist zwar korrekter C-Code, aber ziemlich sinnlos, und tut nicht das, was 
du vermutlich erreichen möchtest.

Oliver
Gast #1285504
Lesenswert?

Kay --- schrieb:

> AVR schreibt dier als Fehler
>
> ../Komplett.c:46: error: lvalue required as left operand of assignment

Und jetzt sollten wir erraten, welches Zeile 46 ist?

Ueber dumme Kommentare solltest du dich nicht wundern, sondern 
nachdenken.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren