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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.