Forum: Mikrocontroller und Digitale Elektronik Mega162 und for-Schleife


von Christoph (Gast)


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:
1
while(1)
2
{  
3
  for (unsigned char i=7; i!=255; i--)
4
  {
5
    PORTE=i;
6
    for (unsigned char j=1; j<=5; j++) _delay_ms(100);
7
  }
8
  
9
  for (unsigned char j=1; j<=25; j++) _delay_ms(100);
10
}
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?

von Christoph (Gast)


Lesenswert?

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

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.