Цитата(SasaVitebsk @ Sep 11 2007, 19:07)

Мораль такова что IAR максимально точно генерит задержку, но, естественно, она должна быть кратна целому числу тактов процессора. Так как не существует команды выполняющейся за пол такта. Соответственно 5мкс/1/3.6864 = 5*3.6864 = 18.432 что соответствует 18 тактам. 18/3.6864=4.88мкс
Вероятно вы вставили операцию работы с портом с двух сторон чтобы замерить это это добавило ещё 2 такта 20/3.6864 = 5.425мкс - что полностью соотносится с увиденным
А учитывая то, что задержка почти наверняка генерируется при помощи чего-то подобного
Код
ldi r16, some_constant
L1:
dec r16
brne L1
время вообще кратно не одному, а трём целым тактам (тут с 18-ю просто повезло).
Для 1мкс some_constant = 1, три такта на этом "цикле", два такта на rjmp к началу while(1) и два такта на sbi, в которое превратилось PORTD |= ( 1 << PD6 ); - итого семь тактов, 1,9мкс - так что всё на месте.