...а если юзать не volatile unsigned n для задержек... -- не совсем так. Для этого имеется asm("nop") -- он именно для замены volatile -- asm компилятор не имеет право выкинуть, и весь цикл в итоге тоже. volatile наоборот нехорош даже тем, что насильно использует память, а иногда хочется обойтись исключительно регистрами.