Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 9 . Программирование таймеров 245 Прерывание переполнения Timer l будет таким же простым, как и ранее (лис­ тинг 9 . 1 0) TIMlOVF : inc count2 reti И прерывание «захвата» T IМl_CAPT (листинг 9 . 1 1 ) будет на первый взгляд выглядеть даже проще, чем обработчик переполнения TimerO в предыдущем случае: TIМl САРТ : c l r temp out TCNT lH, temp out TCNTlL , temp ; первым делом очищаем T imerl in count O , ICRlL ;младший счетчика in countl , ICRlH ; старший счетчика <что-то делаем с числом count2 : count l : count0> reti Вся громоздкость будет заключаться в процедуре, обозначенной в листинге 9. 1 1 как «что-то делаем . . .» . Иногда и делать почти ничего не требуется - если стоит задача измерения периода или временного интервала, то по этому алгоритму мы сразу получим время в микросекундах (при частоте «кварца» 8 МГц и делителе 1 : 8 частота счета будет ровно 1 МГц) . Его можно временно сохранить в SRAM, а в промежутках между прерываниями, например, посылать «наружу» по UARТ или записывать во внешнюю память. Если же наша задача, как и ранее, измерение частоты внешних событий, то нам придется ее вычислять : делить некое заданное число (входную частоту счетчика) на измеренный период. В общем случае это выльется в одну из модификаций про­ цедур деления многобайтовых чисел, описанных в главе 8. Но это еще не все . Если тактовая частота, как и ранее, 8 МГц, то на входе таймера будет 1 МГц, и для полу­ чения частоты в герцах на полученный интервал придется делить число 1 0 6 • При измеряемой частоте порядка единиц герц в результате деления получатся числа около единицы с большим и очень информативным «хвостом» после запятой. От­ бросить этот «хвост» нельзя - разрешающая способность метода будет такова, что не стоило и затевать все эти «захваты», а можно было просто ограничиться обыч­ ным подсчетом частоты по способу частотомера. Как же вывернуться? Для этого нужно сдвинуть запятую (десятичную! - прием с манипулированием двоичными числами здесь не проходит) вправо, т. е . осущест­ вить дополнительное умножение результата, например, на 1 ООО, чтобы получить три дополнительные значащие цифры после запятой при диапазоне в единицы герц

RkJQdWJsaXNoZXIy MTExODQxMg==