Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

264 Микроконтроллеры AVR от азов программирования... (строка 54). Затем складываем старшие байты с учетом переноса (строка 55). В результате сложения в регистре Z мы получим искомый адрес. Теперь, используя этот адрес, приступим к извлечению требуемого коэффициента деления. В строке 56 извлекается первый байт коэффи ­ циента. Причем используется версия команды 1pm, которая автомати ­ чески увеличивает содержимое регистровой пары Z. Извлеченный байт помещается в младшую часть регистровой пары Y (регистр YL). Так как в содержимое Z стало на единицу большим, то очередная команда в строке 57 извлекает очередной байт коэффициента деления. Извлеченный байт помещается в старшую часть регистровой пары Y (регистр YH). В строках 58 и 59 прочитанный только что коэффициент деления записывается в регистр совпадения OCR1A. При этом соблюдается пра ­ вило записи для регистров с двойной буферизацией: ♦ сначала записывается старшая часть регистра (строка 58); ♦ затем записывается младшая (строка 59). Сразу после записи коэффициента деления таймер начнет вырабаты ­ вать сигнал с нужной нам частотой. Теперь остается лишь подключить этот сигнал на выход (выполнить включение звука). Включение звука происходит в строках 60,61. Для этого в регистр TCCR1 А записывается код 0x40. Этот код имеет еди ­ ницу в шестом разряде, которая и подключает сигнал от таймера к выводу ОС1 А. В результате на выходе появляется звуковой сигнал, который через транзисторный ключ VT1 поступает на звуковой излучатель VF1. Команда безусловного перехода в строке 62 завершает основной цикл программы. Она передает управление по метке main. В результате весь описанный выше процесс повторяется. Если в результате нового опроса датчиков обнаружится, что их состояние не изменилось, программа про ­ сто подтвердит все настройки таймера и генерация звука не прервется. Если состояние датчиков изменилось, то изменится и частота звука. Если же при очередном сканировании контакты всех датчиков окажутся незамкнутыми, управление перейдет по метке ml , и звук прекратится. Программа на языке СИ Возможный вариант той же программы на языке СИ приведен в листинге 5.16. В программе применяются следующие новые для нас опе ­ раторы. for _______________________________________________ Оператор цикла. Мы уже привыкли к оператору цикла while. Оператор for — это альтернативный способ организации циклов. В общем случае оператор for записывается следующим образом:

RkJQdWJsaXNoZXIy MTExODQxMg==