mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega162 und for-Schleife


Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi! Ich unternehme gerade meine ersten Gehversuche mit einem ATmega162 
und C. Dabei habe ich ein für mich nicht nachvollziehbares Verhalten bei 
folgendem Code:
while(1)
{  
  for (unsigned char i=7; i!=255; i--)
  {
    PORTE=i;
    for (unsigned char j=1; j<=5; j++) _delay_ms(100);
  }
  
  for (unsigned char j=1; j<=25; j++) _delay_ms(100);
}
Im Simulator von AVR Studio wird wie erwartet PORTE nacheinander auf 7, 
6, 5, 4, 3, 2, 1, 0 gesetzt; im nächsten Durchlauf der while-Schleife 
wiederholt sich dies.

Der AVR dagegen macht folgendes: PORTE läuft von 7 bis 1, dann kommt das 
lange Delay (an dem man erkennt, dass die for-Schleife verlassen wurde), 
und erst im nächsten Durchlauf der while-Schleife kommt die 0, und dann 
wieder 7 bis 1 usw. Also

7 - 6 - 5 - 4 - 3 - 2 - 1 _ 0 - 7 - 6 - ...

statt

7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 _ 7 - 6 - ...

(wobei "-" für das kurze und "_" für das lange Delay steht). 
Konsequenterweise gibt der AVR genau die richtige Sequenz aus, wenn ich 
die 255 im Kopf der for-Schleife durch 254 ersetze. Im Simulator dagegen 
wird in diesem Fall natürlich auch noch der Wert 255 an PORTE 
zugewiesen, was diesen auf 111, also 7 setzt. Man kann also sagen, dass 
der AVR den letzten for-Durchlauf einfach weglässt. Weiß jemand warum?

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, vergesst es. Der AVR arbeitet super, ich bin meiner eigenen 
Schusseligkeit zum Opfer gefallen :o

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.