einfacher C-Code funzt nicht

Gast #59088
Lesenswert?
• ▲
▼
hallo,
hab eben versucht ein total einfaches programm, das ich in C
(Codevision) geschrieben habe, zum laufen zu bringen.(auf meinem
at90s8535) geht aber wie üblich nicht. eine LED (zwischen GND und PC0)
soll leuchten, wenn der schalter (zwischen GND und PC1) auf on steht.
der schalter funktioniert und die LED auch. hier der code:

#include <90s8535.h>

main()
{
DDRC=0b00000001;
PORTC=0b00000000;
t:
if (PINC=0b00000011);
PORTC=0b00000001;
if (PINC=0b00000001);
PORTC=0b00000000;
goto t;
}

anstatt das die LED nur leuchtet, wenn die verbindung zwischen GND und
PC1 ist, leuchtet sie immer, auch wen der schalter auf on ist.
es liegt wohl am code.
helft mir!

mfg raoul4
Gast #59090
Lesenswert?
• ▲
▼
> if (PINC=0b00000011);
Den Strichpunkt am Zeilenende entfernen. (in beiden Ifs)
Sonst wird, wenn die Abfrage TRUE ist, nur ein "Leerkommando" (kann
man so sagen?) ausgeführt. Das PortC=1; danach kommt immer. Genau wie
das nachfolgende PortC=0; immer ausgeführt wird.

Eigentlich müßte die LED gedimmt leuchten, da die Zeit nach PortC=0;
länger ist als wie nach PortC=1;
Noch genauer betrachtet müsste sich sogar die Helligkeit ändern, je
nachdem ob der Taster gedrückt ist oder nicht (vielleicht nur mit Oszi
erkennbar).

Du willst, daß die LED leuchtet, wenn der Taster gedrückt ist. Momentan
wäre dies aber genau umgekehrt (wenn man sich die beschriebenen Fehler
schon rausdenkt).

> goto t;
Bitte? ;)  while(1) {    if-abfragen usw.;    }

Schmittchen.
Gast #59091
Lesenswert?
• ▲
▼
Nun, Du solltest wohl mal C lernen. ;-)

t:
...
goto t;

ist schon recht lustig.  In C schreibt man das eher so:

for (;;) {
 ...
}

Außerdem hast Du den Unterschied zwischen einer Zuweisung (=) und
einem Test auf Gleichheit (==) nicht verstanden; das ist hier Dein
eigentliches Problem.

Sinnvoller als ein Test auf Gleichheit ist aber ohnehin eher ein Test
auf einen bestimmten Bit-Wert sowie das Setzen/Löschen nur eines Bits:

if (PINC & 2)
  PORTC |= 1;
else
  PORTC &= ~1;
Gast #59093
Lesenswert?
• ▲
▼
Drei verschiedene (zeitgleiche) Posts - 3x verschiedene Fehler
gefunden. Wie viele Fehler in den 8 Zeilen stecken können :)

@ape: Doch, (wie von Jörg schon gesagt): Der Vergleichsoperator besteht
aus den 2 Gleichheitszeichen "==".
Gast #59095
Lesenswert?
• ▲
▼
#include <90s8535.h>

main()
{
DDRC=0b00000001;
PORTC=0b00000000;
t:
if (PINC=0b00000011);
PORTC=0b00000001;
if (PINC=0b00000001);
PORTC=0b00000000;
goto t;
}

 Leider nicht wirklich gut. Ich machs so:

#include <90s8535.h>

#define Led      PORTC.0     // Led
#define Schalter                PINC.1     //Schalter



main()
{
DDRC  =  0b00000001;
PORTC =  0b00000000;

      while (1)            //Endlosschleife
          {

          Led  =  !Key     //Schalterzustand an die Led, Rufez.negiert

           }

}
Gast #59098
Lesenswert?
• ▲
▼
|               Bitweise Oder-Verknüpfung
 &               Bitweise Und-Verknüpfung
 ~1              Bitweises Komplement
 ^               Bitweises Exclusive ODER

 Byte |= (1<<4)   ist gleich Kurzform von  Byte =  Byte | (1<< 4)  //ein
Bit setzen in einer Char-Variable

Gutes C-Buch: C für Mikrocontroller  (Schwerpunkt AVR- Controller)
von Burkhard Mann und "Jetzt lerne Ich C" von Peter Monadjemi


Schöne Grüße Josef
Gast #59099
Lesenswert?
• ▲
▼
> wenn ich jetzt mit meinem finger an irgendein masseteil komme wird
> die LED entweder heller oder geht aus. wieso?

Weil Du keine definierten Pegel hast.  Wahrscheinlich schwingt der
Eingang gelegentlich sogar fröhlich vor sich hin (daher wird die LED
heller oder dunkler).  Du solltest mindestens die Pullups aktivieren.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.