Leere Zählschleifen sind gefundenes Fressen für den Optimizer! Das kann
so nichts werden. Wenn Du schon mit Verzögerungsschleifen arbeiten
willst, dann benutze bitte die _delay_XX-Funktionen aus der
util/delay.h. Allerdings solltest Du Dich dringendst mit der
Verwendung der Timer befassen. Solche Busy-Wait-Funktionen sind
ausschließlich dafür vorgesehen, kurze Verzögerungen im Programm zu
erzeugen, und nicht für lange Wartereien. Außerdem muss bei der
Verwendung von _delay_ms bzw. _delay_us beachtet werden, dass die nur
bei eingeschaltetem Optimizer, mit konstanten, zur Compiler-Laufzeit
bekannten Werten und bis zu einer Taktfrequenz-abhängigen Maximalzeit
funktionieren (AVR-libc-Doku beachten).