Ich musste weg, desshalb mein so knapp gefasster Hinweis aber Du hast es
ja dann doch gefunden!
Noch ein Tip: Deine Warteshlaufe würde, so wie sie Du schreibst, vom
Optimizer wegoptimiert! Dennoch, den Optimizer solltest Du minsestsns
auf die 1. Stufe -O1 setzen (Höhere Stufen bewirken nur noch wenig)
Wenn Du verhindern willst, dass eine Variable "optimiert" wird, musst Du
diese als volatile deklarieren.
Beispiel: Eine Delay-Funktion:
//---------------------------------------------------------
// Warte-Funktion (Delay)
// Parameter: Wartezeit in 0...65'536 ms
//---------------------------------------------------------
void warte_ms(unsigned int wartezeit)
{
volatile unsigned int i; // Schlaufenzähler für Millisekunden-Loop
while(wartezeit) // Schlaufe für jede Millisekunde
{
i = F_CPU/17000; // Berechne Startwert für Millisekunden-Loop
while(i) // Schlaufe, solange i nicht gleich null ist
{
i--; // i minus eins
} // Schlaufen-Ende wenn i gleich null ist
wartezeit--; // minus eine Millisekunde
} // Schlaufen-Ende wenn wartezeit gleich 0 ist
} // Funktionsende => return