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

Глава 9. Программирование таймеров out PortD, temp ; вЫБести в порт D out TCNTO , rK_div ; "заряжаем" таймер к следующему разу reti ; конец прерЫБания таймера Reset : ldi temp , low (RAМEND ) ; загрузка указателя стека out SPL, temp ldi temp , high (RAМEND ) ; загрузка указателя стека out SPH , temp ldi temp , ObO l O O b O O O ; шестой разряд порта D на выход out DDRD , temp clr couпt ; очищаем clr temp ; регистры ldi temp , ( l<<TOIEO ) ; разр . прерЫБания TimerO OVerflow out T IMSK, temp ldi rK_div , K_div ; значение к . деления ( 2 5 0 ) neg rK_div ; 2 5 6-K_div, т . к . счетчик суммирующий out TCNTO , rK_div ; "заряжаем" таймер на первый раз ldi temp , ObOO O O O O l O ; TimerO включить 1 : 8 out TCCRO , temp sei Cykle : rjmp cykle ЗАМЕТКИ НА ПОЛЯХ 229 При отсутствии под рукой осциллографа или мультиметра с частотомером , для про­ верки функционирования прогР.аммы можно временно установить коэффициент деле­ ния входной частоты таймера 1 / 1 024 (вместо 1 /в) и подключить к выводу PD6 (вывод 1 2 корпуса) светодиод. О н должен замигать с видимой глазом частотой около 8 герц. По­ том не забудьте опять установить правильный коэффициент предделителя. В этом примере нам требуется переключать вывод дважды за период (один раз в 1 и один раз обратно в О) . Если же за период выполнять только одно действие, то можно переписать прерывание следующим образом (листинг 9.2) . ldi count , 2 TIMO : ; прерывание TimerO dec count sbrc count , 0 ; если счетчик четный, пропустить rjmp exit ; на выход <производим нужное действие> exit : out TCNT O , rK_div ; " заряжаем" таймер reti ; конец прерЫБания таймера

RkJQdWJsaXNoZXIy MTExODQxMg==