Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 283 Особенности программы Итак, процедура, расположенная в строках 45 — 52 программы, проска нировала клавиатуру и нашла код первой из нажатых кнопок. Искомый код, если вы не забыли, находится в регистре count. Затем управление переходит к строке 53. С этого места начинается процедура выбора мело дии (строки 53 — 58). Суть процедуры — прочитать из таблицы tabm зна чение адреса начала этой мелодии. То есть прочитать элемент таблицы, номер которого равен коду нажатой клавиши. Прежде чем прочитать элемент, необходимо найти его адрес. Для вычисления адреса используем подпрограмму addw. Перед тем, как вызвать подпрограмму, подготовим все данные. Номер нажатой клавиши помещаем в регистр YL (строка 53). Адрес начала таблицы записываем в регистровую пару Z (строки 54,55). И лишь затем в строке 56 вызыва ется подпрограмма addw. После выхода из подпрограммы в регистровой паре Z находится результат вычислений — адрес нужного нам элемента таблицы tabm. Следующие две команды (строки 57 и 58) извлекают тот элемент (адрес начала мелодии) и помещают его в регистровую пару X. Там этот адрес будет храниться все время, пока воспроизводится именно эта мелодия. Следующий этап — воспроизведение мелодии. Воспроизведением мелодии занимается процедура, расположенная в строках 59 — 77. Для последовательного воспроизведения нот нам понадобится указатель текущей ноты. В качестве указателя текущей ноты используется реги стровая пара Z. В самом начале процедуры воспроизведения мелодии в регистровую пару Z помещается адрес начала мелодии их регистровой пары X (строки 59,60). Затем начинается цикл воспроизведения (строки 61 — 77). В этом цикле программа извлекает код ноты по адресу, на который указывает наш указатель, выделяет из кода ноты код тона и код длительности, вос производит ноту, а затем увеличивает значение указателя на единицу. Затем весь цикл повторяется. Этот процесс происходит до тех пор, пока код очередной ноты не ока жется равным 255 (метка конца мелодии). Прочитав этот код, программа передает управление на строку 62, где в регистр Z снова записывается адрес начала мелодии. Воспроизведение мелодии начнется сначала. Этот процесс должен прерваться лишь в одном случае — при отпускании управляющей кнопки. Для проверки состояния кнопок в цикл воспроизведения мелодии включена специальная процедура (строки 61 — 63). Процедура упро щенно проверяет состояние сразу всех кнопок. Она считывает содер жимое порта PD (строка 61) и сравнивает его с кодом 0x7F (строка 62). Прочитанное из порта значение может быть равно 0х7Ғ только в одном
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==