Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
374 Часть 111 . Практическое программирование микроконтроллеров А VR nop ; - пропускаем 4 такта = 1 мкс , чтобы устоялся уровень sbic PinB , 1 ; пропустить , если нажата reti ldi temp , ObOO O O O O O l ; порт В контакт РВО = 1 out PortB, temp ; зажигаем светодиод Delay2 0 $0С , $ 3 5 , О ; задержка 1 с при 4 МГц clr temp out PortB , temp ; гасим светодиод ldi temp , $ FF out GIMSK, temp ; сбросить флаги внешних прерываний reti ; конец прерывания PCINT Reset : ldi temp, low (RAМEND ) ; устанавливаем указатель на стек out SPL, temp ; для tiny2 3 1 3 только SPL ldi temp , ObO O O O O O l O ; для первого разряда порта В out PORTB , temp ; подтягивающий резистор на всякий случай ldi temp , ObO OO O O O O l ; порт В контакт РВО на выход out DDRВ , temp ldi temp , ( 1<< SMl ) 1 ( l<<SE ) ; разрешение S leep , режим Power Down out MCUCR, temp ldi temp , ( l<<PCIE ) ; разрешаем прерывание PCINT out GIMSK, temp ldi temp , ( l<<PCINTl ) ; прерывание PCINT на выводе PCINTl ( PBl ) out PCMSK, temp sei ; разрешаем прерывания Gcykle : ; цикл отслеживания кнопки s leep ; уходим в сон rjmp Gcykle ; вернуть ся обратно , если не нажата Программа, как видите, при возникновении прерывания выжидает около микросе кунды, проверяет уровень на выбранном выводе, и если он низкий (кнопка нажата), то делает то же самое, что и программы, приведенные ранее, включая очистку фла гов прерываний, а затем снова уходит в «сою> . Применение сторожевого таймера Сторожевой таймер (Watchdog Timer, WDT) - одно из самых полезных устройств в составе микроконтроллеров. Причем в описаниях его полезность часто сводится к примитивной возможности автоматического перезапуска контроллера в случае за висания программы. Есть даже fusе-бит WDTON, который запрещает выключать WDT вообще, - его можно только периодически сбрасывать, не давая контроллеру уйти в перезагрузку. Конечно, это сильно ограниченный подход.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==