Цитата(rezident @ Dec 21 2010, 19:10)

Для определения длительности временного промежутка достаточно взять разность значений между двумя интересующими событиями. Запустите таймер и считывайте значения его счетчика в интересующие вас моменты времени. Для вычисления промежутка времени достаточно взять беззнаковую разность этих значений, поделив ее на тактовую частоту таймера. (T2-T1)/Fclk. Где T1 это значение счетчика таймера в момент времени t1, а T2 соответствующее значение в момент времени t2 (t2 ≥ t1), Fclk - частота тактирования таймера в Гц. Максимальный промежуток времени при этом ограничивается периодом переполнения счетчика таймера. Для расширения диапазона отсчета временных интервалов можно увеличить разрядность счетчика программно. Для этого нужно разрешить прерывания от переполнения таймера и при возникновении этого прерывания инкрементировать некую переменную (назовем ее, например, TimerOVF). Тогда временные промежутки будут вычисляться как ((TimerOVFT2+T2)-(TimerOVFT1+T1))/Fclk, где TimerOVFT1, T1 и TimerOVFT2, T2 значения переменной и счетчика таймера соответственно в моменты времени t1 и t2.
а вход-выход в п/п обработки прерывания не внесет еще бОльшие погрешности, чем 1/Fclk ? хотя.. такты входа-выхода можно и посчитать, наверное