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

274 Микроконтроллеры AVR от азов программирования... Алгоритм работы музыкальной шкатулки Теперь мы можем сформулировать алгоритм работы музыкальной шкатулки. 1. Просканировать клавиатуру и определить номер самой первой нажатой клавиши. 2. Извлечь из таблицы начал мелодий значение элемента, номер кото ­ рого соответствует только что определенному номеру нажатой кла ­ виши. Это значение будет равно адресу в программной памяти, где начинается нужная нам мелодия. 3. Начать цикл воспроизведения мелодии. Для этого поочередно извлекать коды нот из памяти, начиная с адреса, который мы опре ­ делили в п. 2 алгоритма. 4. Каждый код ноты разложить на код тона и код длительности. 5. Если код тона равен нулю, отключить звук и перейти к формирова ­ нию задержки (к п. 9 настоящего алгоритма). 6. Если код тона не равен нулю, извлечь из таблицы коэффициентов деления значение элемента с номером, равным коду тона. 7. Записать коэффициент деления, который мы нашли в пункте 6 настоящего алгоритма, в регистр совпадения таймера Т1. 8. Включить звук (подключить вывод ОС1А к выходу таймера Т1). 9. Извлечь из таблицы длительностей задержки значение элемента с номером, равным коду длительности. 10. Сформировать паузу с использованием константы задержки, кото ­ рую мы нашли в пункте 9 настоящего алгоритма. 11. По окончании паузы выключить звук (отключить ОС1А от выхода таймера). 12. Повторять цикл (пункты 4 — 11 настоящего алгоритма) до тех пор, пока нажата соответствующая кнопка. 13. Если очередной код ноты окажется равным 255, перейти к началу текущей мелодии, то есть вернуться к п. 3 настоящего алгоритма. Программа на Ассемблере Возможный вариант программы на языке Ассемблер приведен в листинге 5.17. В программе используются следующие новые для нас опе ­ раторы. andi _________________________________________________________ Логическое «И» содержимого РОН и константы. Команда имеет сле ­ дующий формат: andi Rd, К,

RkJQdWJsaXNoZXIy MTExODQxMg==