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

Глава 14. Режимы энергосбережения и сторожевой таймер 381 Расширенный вариант WDT с использованием прерывания мы покажем на примере А Ttiny23 1 3 (листинг 1 4 . 7). Чтобы убедиться, что значения регистров сохраняются после выхода из «сна>> , мы включим сторожевой таймер на пробуждение каждые 2 секунды и в прерывании, кроме включения светодиода на четверть секунды, бу­ дем посылать через UART последовательные значения счетчика от О до 255 (перед подключением UART ознакомьтесь с материалом главы 15) . Светодиод подключен также к выводу РВО (вывод 1 2 АTtiny23 1 3 ), а к TXD (вывод 3 АTtiпy23 1 3 ) нужно подключить вывод RxD адаптера UART (см. разводку выводов ATtiny23 1 3 на рис . 1 4. 1 ) . Тактирование в нашем случае производится от внешнего кварца 4 МГц, иначе UART будет сложно настроить . . device ATtiny2 3 1 3 ; 4 МГц кварц ( важно дпя задержки и UART ) . include "tn2 3 1 3def . inc" . def temp =rl б . def RazrO r1 7 ; разряды . def Razrl r l B . def Raz r2 r1 9 . def count r2 0 ; счетчик ; ============ прерывания rjmp RESET ; Reset Handle . org WDTaddr задержки rjmp WDT_over ; External Interrupt Vector Addres s ; ========== программа ============ out com : ; посыпка байта из count с ожид . готовности ret sbis UCSRA, UDRE ; ждем готовности буфера передатчика r jmp out сот out UDR, count ; count ! ! ! а не temp . macro Delay2 0 ; процедура задержки до 2 0 с при 4 Мгц ldi Razr2 , @ 0 ; старший байт задержки ldi Razrl , @ 1 ; средний байт задержки ldi Razr0 , @ 2 ;младwий байт задержки R suЬ : suЬi Raz r0 , 1 sbci Razrl , O sbci Raz r2 , 0 brcc R suЬ . endm WDT over : ; пробуждение по Watchdog sbi PortB , 0 ; зажигаем светодиод

RkJQdWJsaXNoZXIy MTExODQxMg==