Forum: Mikrocontroller und Digitale Elektronik Quelltext bleibt immer stehen und geht nicht weiter


von Frank (Gast)


Lesenswert?

Ich habe ein Problem der Quelltext bleibt immer an der stelle "1"

stehen und geht nicht weiter wenn ich das Programm in AVR studio 
laufenlassen möchte als Mikro. verwende ich einen atmega8.
brauch dringend HILFE
1
int main(void)
2
{
3
//lcd_init();            
4
//lcd_home();
5
DDRC  = 0x00;
6
PORTC = 0xff;
7
  
8
while(1)
9
{
10
11
  qwe = PINC;   // 1
12
if (qwe == 0b00000001);
13
{
14
//  lcd_string("1");  
15
}
16
....
17
}

von taucher (Gast)


Lesenswert?

und wie ist PINC definiert?

von ozo (Gast)


Lesenswert?

wo hast du denn die variable "qwe" deklariert?

von Frank (Gast)


Lesenswert?

Die variable ist über int main und PINC ist 0x00.

von Roland P. (pram)


Lesenswert?

ich tipp mal ins Blaue:
Compile und Zielplatform stimmen nicht überein.
Du musst im AVR-Studio unter Project-Options ATMega8 einstellen.

Gruß
Roland

von Frank (Gast)


Lesenswert?

ist eingestellt und sorry ich habe ein atmega 16

von Kachel-Heinz (Gast)


Lesenswert?

Mega16 und PortC???

Da klingeln sofort alle JTAG-Glocken...

KH

von Frank (Gast)


Lesenswert?

Bitte was klingelt????

von Johannes M. (johnny-m)


Lesenswert?

Kachel-Heinz wrote:
> Mega16 und PortC???
>
> Da klingeln sofort alle JTAG-Glocken...
Ist im Simulator aber egal, ob JTAG aktiv ist oder nicht. Und aufhängen 
darf sich das Programm deswegen überhaupt nicht.

von Stefan E. (sternst)


Lesenswert?

> if (qwe == 0b00000001);

Entferne das Semikolon.

von Johannes M. (johnny-m)


Lesenswert?

Stefan Ernst wrote:
>> if (qwe == 0b00000001);
>
> Entferne das Semikolon.
Richtig, das ist ratsam, wenn das Programm etwas einigermaßen Sinnvolles 
tun soll...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan Ernst wrote:
>> if (qwe == 0b00000001);
> Entferne das Semikolon.

Ja, aber mit
1
if (qwe == 0b00000001) /*nichts*/;
2
{
3
   lcd_string("1");  
4
}
dürfte er nicht stehenbleiben, sondern immer in die Klammer springen,
auch wenn z.B. qwe = 0x45 wäre. Dann führt er /nichts*/ eben nicht aus. 
Oder was übersehe ich?

von Stefan E. (sternst)


Lesenswert?

Sorry, das war nicht als Antwort auf die eigentliche Frage gedacht, 
sondern als Zusatzhinweis. ;-)

Zur eigentlich Frage denke ich, dass die Zeile "qwe = PINC;" der einzige 
Inhalt der while-Schleife ist, weil der Rest wegoptimiert wurde. Der 
if-Block ist ja schon mal leer und wer weiß schon, was "...." ist. Dann 
scheint im Simulator die Ausführung an dieser Zeile hängenzubleiben, 
weil einfach nur immer wieder diese Zeile ausgeführt wird.

von Frank (Gast)


Lesenswert?

Ich habe den Fehler gefunden es war das == zwischen qwe und 0b.. jetzt 
habe ich nur noch ein gleich und es geht.

von Stefan E. (sternst)


Lesenswert?

Frank wrote:
> ... und es geht.

Vielleicht scheint die Ausführung jetzt nicht mehr hängen zu bleiben, 
aber der Code macht sicher nicht das, was du möchtest, denn ein "=" ist 
an dieser Stelle definitiv falsch.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>ein "=" ist an dieser Stelle definitiv falsch
Aber das ist doch egal, denn
>>es geht
und was will man mehr?   ;-)

@ Frank
Ich habe ja auch schon mal aus Versehen eine Zuweisung (=) statt eines 
Vergleichs (==) in eine Abfrage gemacht, aber ich war hinterher nicht 
stolz drauf...

Mit einer Zuweisung (=) hier
:
if (qwe = 0b00000001)
{
   irgendwas();
:
wird "irgendwas" immer ausgeführt. Denn da wird qwe zuerst der Wert 1 
zugewiesen, und dann geprüft ob qwe Null ist. Ist es natürlich nicht, 
und damit ist die Bedingung erfüllt.

von P. S. (Gast)


Lesenswert?

Ich wuerde mir mal ein C-Buch besorgen, das lesen und dann erst mit dem 
Programmieren anfangen. Wenn eine Posix-Umgebung vorhanden ist, finde 
ich immer noch das alte "Kernighan & Ritchie, Programmieren in ANSI-C" 
empfehlenswert.

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.