Ich gehe mal davon aus, dass Du AVRStudio zusammem mit WINAVR benutzt. Dann steht Dir die Bibliotheksfunktion
Code:
void _delay_ms (double __ms)
zur Verfügung. Erläuterungen z.B. hier (klick). Die Bibliothek befindent sich (abhängig von Betriebssystem und Installation) z.B. in: C:\WinAVR-20100110\avr\include\util\delay.h AUF DEINEM Computer.

Sieht schon etwas komplexer aus als Deine Funktion :
Code:
void
_delay_ms(double __ms)
{
    uint16_t __ticks;
    double __tmp = ((F_CPU) / 4e3) * __ms;
    if (__tmp < 1.0)
        __ticks = 1;
    else if (__tmp > 65535)
    {
        //    __ticks = requested delay in 1/10 ms
        __ticks = (uint16_t) (__ms * 10.0);
        while(__ticks)
        {
            // wait 1/10 ms
            _delay_loop_2(((F_CPU) / 4e3) / 10);
            __ticks --;
        }
        return;
    }
    else
        __ticks = (uint16_t)__tmp;
    _delay_loop_2(__ticks);
}
Sie funktioniert eine begrenzte Anzahl Millisekunden. Einschränkungen sind in der Funktionsbeschreibung im oben genannten Link zu nongnu.org und im Quelltext der _delay_ms ausführlich genannt. Lies das mal durch und - vielleicht Probierst Du mal das ? !