mikrocontroller.net

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


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
int main(void)
{
//lcd_init();            
//lcd_home();
DDRC  = 0x00;
PORTC = 0xff;
  
while(1)
{

  qwe = PINC;   // 1
if (qwe == 0b00000001);
{
//  lcd_string("1");  
}
....
}        

Autor: taucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wie ist PINC definiert?

Autor: ozo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wo hast du denn die variable "qwe" deklariert?

Autor: Frank (Gast)
Datum:

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

Autor: Roland Praml (pram)
Datum:

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

Gruß
Roland

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist eingestellt und sorry ich habe ein atmega 16

Autor: Kachel-Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mega16 und PortC???

Da klingeln sofort alle JTAG-Glocken...

KH

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte was klingelt????

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> if (qwe == 0b00000001);

Entferne das Semikolon.

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Ja, aber mit
if (qwe == 0b00000001) /*nichts*/;
{
   lcd_string("1");  
}
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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank (Gast)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.