Hm, die _delay-Funktionen sind eigentlich die genausten Warte-Funktionen, wenn man keinen Timer benutzt.

Funktioniert es so nicht:
#include <util/delay.h>
#define F_CPU [die Taktrate deines µCs (in Hz!), z.B. 4000000ul]

Jetzt sollte _delay_ms(x) funktionieren.

Du musst aber beachten, dass die Funktionen sehr ungenau arbeiten, falls du den internen Quarzoszillator nutzt.