Do AVR delay functions (_delay_us() and _delay_ms()) use timers?
No, these macros expand to calls to __builtin_avr_delay_cycles(),
which are compiled into delay loops. It should be noted that:


the arguments to these macros should be compile-time constants, they
can be floating point
the macros are cycle-accurate, e.g. _delay_us(0.125) will take
exactly two CPU cycles on an Uno
whereas the CPU time used by the call is exactly what you ask for,
the physical time will be larger if the call gets interrupted.