Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 333 текущий номер мелодии. При каждом последующем нажатии кнопки звонка этот номер будет изменяться. В строках 23 — 25 находится блок резервирования ячеек в EEPROM. Этот блок целиком взят из исходной программы электронного замка. В строках 28 — 46 находится таблица переопределения векторов прерыва ний. Она тоже объединена из двух таблиц. Однако в связи с тем, что про грамма музыкальной шкатулки прерываний не использует, новая таблица полностью повторяет таблицу из программы электронного замка. Модуль инициализации занимает строки 47 — 60. В данном случае в новый блок попали те команды, которые в исходных блоках обеих про грамм одинаковы. Это команды инициализации стека, инициализации портов ввода-вывода и инициализации (выключения) компаратора. Команды инициализации таймера для каждой из исходных программ отличаются друг от друга. Поэтому они исключены из общего блока ини циализации. Инициализация таймера будет производиться по-разному в зависимости от выбранного режима работы (звонок или замок). В строке 61 начинается основная часть программы. За основу этой части взята программа электронного замка. Программа звонка подклю чается к основной части путем доработки процедуры ожидания нажатия кнопки. В остальном программа замка не претерпела никаких изменений. Начинается основная программа с инициализации таймера под задачи замка (строки 61 — 66). Затем в строках 67, 68 записывается кон трольное значение в буфер codH+codL. В качестве контрольного значе ния используется код состояния клавиатуры при полностью отпущенных кнопках. Этот код будет использоваться далее в цикле ожидания отпуска ния кнопок и в цикле ожидания нажатия кнопок. В строках 69, 70 нахо дится цикл ожидания отпускания кнопок. До сих пор программа замка не имела принципиальных изменений. В строках 71 — 75 находится цикл ожидания нажатия кнопок. Именно этот цикл изменен таким образом, что выполняет теперь комбинирован ный опрос не только кнопок ввода кода, но и кнопки звонка. И начина ется цикл с опроса кнопки звонка (строки 71 — 73). В строке 71 содержи мое порта РВ считывается и помещается в регистр temp. В строке 72 проверяется значение бита номер шесть полученного числа. Именно этот бит отвечает за кнопку звонка. Если кнопка звонка нажата, то значение данного бита будет равно нулю. В этом случае команда условного перехода в строке 73 передаст управление по метке kkl, где находится программа воспроизведения мелодий. Если кнопка звонка не нажата, то управление передается к строке 74. В строках 74 и 75 находится знакомая нам процедура проверки кнопок набора кода. Если ни одна из кнопок набора кода не нажата, то управление пере дается на начало комбинированного цикла (по метке ml), и цикл продол
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==