ich würde einen Timer nehmen, den so einstellen, dass er jede mS überläuft und dann im Interrupt einen Counter dekrementieren bis er 0 erreicht, in der Warte-Funktion würde ich dann einfach solange if(counter>0); schleifen bis der COunter halt auf 0 ist. Wenn man jetzt weiterdenkt, könnte man nämlich während er wartet noch andere Dinge tun!

Also quasi eine große Schleife, die neben der Bedingung "counter == 0" noch prüft obe es andere Arbeit gibt!

alternativ kannst du auch einfach die <utils/delay.h> includen und _delay_ms(int) oder wenns kürzer sein soll _delay_us(int) verwenden (Achtung F_CPU makro mit frequenz muss definiert sein) dann sparst du dir es das Rad neu zu erfinden