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

370 Часть 111. Практическое программирование микроконтроллеров АVR кнопки, а может - от внешнего таймера, часов реального времени или любого дру­ гого устройства, например, какого-нибудь датчика, закончившего преобразование. В тестовой программе мы по нажатию кнопки будим контроллер, зажигаем свето­ диод на выводе РВО (вывод 1 4 ATmega8), выдерживаем паузу и даем контроллеру заснуть снова (листинг 1 4 . 1 ) . Рисовать схему не станем - мы уже неоднократно обсуждали, как подключить кнопку к выводу INTO ATmega8 (PD2, вывод 4), - см" например, рис . 6 . 1 в главе 6. Из этой же главы мы возьмем и основу для про­ цедуры пробуждения по прерыванию. . device AТrnega8 ; частота тактирования 4 МГц ( дпя определенности ) . include "rn8def . inc " . def ternp = rl б . def RazrO r17 ; разряды задержки . def Razrl = r 1 8 . def Razr2 = r2 0 ; ============ прерывания rjrnp RESET ; Reset Handle rjrnp EXT_INTO ; External Interrupt O Vector Address ; ========== программа ============ .rnacro Delay2 0 ; процедура задержки до 2 0 с при 4 Мгц ldi Razr2 , @ 0 ; старший байт задержки ldi Razrl , @ 1 ; средний байт задержки ldi Razr0 , @ 2 ;младший байт задержки R suЬ : suЬi Raz rO , 1 sbci Razrl , O sbci Razr2 , О brcc R sub . endrn ЕХТ INTO : ; кнопка нажата ldi ternp , ObO O O O O O O l ; порт В контакт РВО = 1 out PortB , ternp ; зажигаем светодиод Delay2 0 $0С , $ 3 5 , О ; задержка 1 с при 4 МГц clr ternp out PortB , ternp ; гасим светодиод ldi ternp, $ FF out GIFR, ternp ; сбросить флаги внешних прерываний reti ; конец прерывания INTO Reset : ldi ternp , low ( RAМEND ) out SPL , ternp ; устанавливаем указатель на стек

RkJQdWJsaXNoZXIy MTExODQxMg==