Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 281 195 db 140,112, 196 db 139,112, 197 .db 128,112, 198 .db 108,107, 199 .db 108,107, 200 db 96,255 105,108,107,107,107,105,140,139 103,102,103,105,108,107,105,103 107.110.108.108.108.140.112.105 107.107.139.112.103.102.103.105 105,103,105,139,132,128, 96, 96 Описание программы (листинг 5.17) Благодаря тому, что принципиальная схема, назначение выводов и режимы работы портов с предыдущего раза остались без изменений, то и новая наша программа во многом похожа на предыдущую. Главное отличие новой программы — наличие не одной, а несколь ких таблиц в памяти программ. Все таблицы помещаются в конце про граммы. Для описания данных, размещаемых в этих таблицах, применя ются как директивы db, так и директивы dw. Первая таблица содержит коэффициенты задержки для формирова ния всех вариантов музыкальной длительности. Таблица начинается с адреса, соответствующего метке tabz. Вся таблица занимает одну строку программы (строка 136). Так как в нашей программе мы будем применять лишь семь вариантов длительности, таблица имеет 7 элементов. Каждый элемент записывается в память как двухбайтовое слово. В строках 137 — 140 описывается таблица коэффициентов деления для всех нот. Начало таблицы соответствует метке tabkd. Каждый эле мент этой таблицы также имеет размер в два байта. Первый элемент таблицы равен нулю. Это неиспользуемый элемент. Ноты номер ноль у нас не существует. Ноль мы использовали для кодирования паузы. В паузе не формируется звуковой сигнал, поэтому и коэффициент деления там не имеет смысла. Поэтому значение нулевого элемента мас сива несущественно. Описание таблицы разбито на строки. Для удоб ства каждая строка описывает коэффициенты деления для одной октавы. Нулевая нота выделена в отдельную строку. Последняя октава неполная, так как наша шкатулка будет использовать всего 32 ноты. В строках 143 — 200 описана таблица мелодий. Вернее, это не одна таблица, а семь таблиц (своя таблица для каждой из мелодий). Каждая таблица помечена своей отдельной меткой (те 11, те 12 — те 17). Значение каждой метки — это адрес начала соответствующей мелодии. Каждое значение таблицы мелодий записывается в память в виде одного байта. Поэтому все строки, кроме последней, для каждой таблицы имеют четное число значений. В строках 141,142 описана таблица начал всех мелодий. Начало этой таблицы отмечено меткой tabm. Таблица используется для того, чтобы программа могла найти адрес начала нужной мелодии по ее номеру. В качестве элементов массива выступают удвоенные значения меток mell,
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==