#define CLOCK_FREQUENCY 168000ULL unsigned int ms_to_ticks(unsigned int ms) { return ms * (CLOCK_FREQUENCY/3); } void delay_routine(unsigned int delay_counter) { asm("mov r1, %[input]\n" "delay_loop:\n" "subs r1, #1\n" "bne delay_loop\n" : [input] "=r" (delay_counter)); } void delay_ms(unsigned int seconds) { delay_routine(ms_to_ticks(seconds)); }