Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
216 Микроконтроллеры AVR от азов программирования... целых три вложенных друг в друга цикла. По этой причине нам понадо бится не один, а три вспомогательных регистра. Поэтому в блок инициализации новой программы включены три опе ратора, определяющие три вспомогательные переменные loopl, 1оор2 и ІоорЗ (строки 4, 5, 6). В остальном блок инициализации полностью соответствует аналогичному блоку из предыдущего примера. Теперь он занимает строки 1 — 18. Основной цикл программы занимает строки 19 — 27. Он начинается с установки единицы в младшем разряде порта РВ (строка 19). В резуль тате светодиод выключается. Следующая команда читает содержимое порта PD и помещает его в регистр temp (строка 20). В строке 21 содержимое младшего разряда полученного числа про веряется на равенство единице. Если младший разряд равен единице (кнопка отпущена), то управление передается по метке main. И цикл замыкается. Так происходит все время, пока кнопка не нажата. При каж дом проходе оператор sbi (строка 19) подтверждает единицу на выходе РВО. Светодиод остается незажженным. Как только кнопка будет нажата, младший бит считанного из порта PD числа окажется равным нулю. Повинуясь команде сравнения в строке 21, микроконтроллер пропустит строку 22, и управление перейдет к строке 23. В строке 23 начнется процедура мигания светодиода. Она реализует один цикл мигания и работает следующим образом. Сначала оператор cbi (строка 23) устанавливает на выходе РВО низкий логический уровень (зажигает светодиод). Затем происходит вызов под программы задержки (строка 24). По окончании задержки команда sbi (строка 25) переводит разряд РВО в единицу (тушит светодиод). И снова задержка (строка 26). Оператор безусловного перехода (строка 27) передает управление на начало основного цикла программы. И вся процедура повторится сна чала. Снова проверка нажатия кнопки. Если кнопка нажата, то цикл мигания повторяется. Если же кнопка окажется отпущенной, продолже ния мигания не произойдет. Программа потушит светодиод и войдет в цикл ожидания нажатия кнопки (строки 19 — 22). Итак, с миганием мы разобрались. Теперь перейдем к подпро грамме формирования задержки. Текст этой подпрограммы зани мает строки 28 — 44. Так как требуемая частота мигания должна быть равна 5 Гц, подпрограмма должна обеспечивать время задержку 1/5 = 0,2 с (200 мс). Как уже говорилось, подпрограмма представляет собой три вложенных друг в друга цикла. Самый внутренний цикл организован при помощи регистра loopl и включает в себя строки 38 и 39. Перед началом цикла в регистр loopl записывается число 255 (строка 37). Поэтому цикл повто
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==