Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 335 состояние сразу семи управляющих кнопок. И если хотя бы одна из них оставалась нажатой, воспроизведение мелодии продолжалось. В нашем случае нам нужно проверить лишь одну кнопку — кнопку звонка. Доработанная процедура проверки расположена в строках 204 — 206. В строке 204 читается содержимое порта РВ и помещается в регистр temp. В строке 205 проверяется разряд номер 6. Именно этот разряд связан с кнопкой звонка. Если разряд равен нулю (кнопка нажата), то воспроизведение мело дии продолжается. Если разряд равен единице (кнопка отпущена), то оператор условного перехода в строке 206 передает управление по метке кшб, где происходит завершение процедуры формирования звука. После выключения звука команда безусловного перехода в строке 223 пере дает управление по метке main, то есть на начало программы замка. И первыми операциями этой программы будет перенастройка таймера под требования этой основной задачи. В строках 289 — 295 находятся таблицы всех мелодий. В целях сокра щения занимаемого места в данном примере все мелодии максимально сокращены. При повторении данной конструкции вы можете использовать мелодии целиком, взяв их из листинга 5.17. Еще проще скачать эту и все остальные программы в электронном виде с сайта http://book.mirmk.net . Там все восемь мелодий представлены в полном виде. Листинг 5.21 ;## ## Пример 11 ## ,## Кодовый замок ## ,## с музыкальным звонком ## ,## ## ;############################################## Псевдокоманды управления 1 . include "tn2313def inc" ; Присоединение файла описаний 2 . list , Включение листинга 3 def drebL = R1 ; Буфер антидребезга младший байт 4 .def drebH = R2 , Буфер антидребезга старший байт 5 .def tempi = R3 ; Вспомогательный регистр 6 def temp = R16 ; Второй вспомогательный регистр 7 .def data = R17 ; Регистр передачи данных 8 .def flz = R18 ; Фаза работы замка 9 def count = R19 , Регистр передачи данных 10 def addre = R20 , Указатель адреса в EEPROM 11 . def codL = R21 ; Временный буфер кода младший байт 12 . def codH = R22 ; Временный буфер кода старший байт 13 def loop = R23 , Регистр счетчика 14 def fnota = R24 , Частота текущей ноты 15 def dnota = R25 ; Длительность текущей ноты - Определение констант 16 equ bsize = 60 , Размер буфера для хранения кода 17 eq и kzad = 3000 ; Задержка при сканировании кнопок 18 equ kandr = 20 , Константа антидребезга
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==