- •Завдання для студентів заочного відділення
- •Р лабораторная работа №1. Азработка микропроцессорного устройства формирования звука
- •Постановка задачи
- •Предварительные сведения Физические основы музыкального ряда
- •Алгоритм работы программы
- •Выполнение работы.
- •Описание работы программы (листинг 1)
- •Формат кодируемых мелодий
- •Лабораторная работа №2. Разработка микропроцессорного синтезатора мелодий
- •Предварительные сведения
- •Алгоритм работы музыкального синтезатора выполнение работы.
- •Описание работы программы (листинг 2)
- •Iнститут «Комп’ютерних систем та iнформацiйних технолгiй»
Описание работы программы (листинг 1)
Программа содержит только одну главную функцию main. Перед началом этой функции происходит определение и инициализация массива (строка 2). Этот массив предназначен для хранения коэффициентов деления регистра сравнения.
При инициализации элементам массива присваиваются значения соответствующие значениям таблицы коэффициентов.
Главная функция main программы занимает строки 3—21. В строках 4 и 5 создаются две переменные:
переменная count, которая будет использоваться для определения кода нажатого датчика;
переменная temp, предназначенная для вспомогательных целей.
Строки 6—12, занимает модуль инициализации. Здесь настраиваются порты ввода вывода (строки 6—9), компаратор (строка 10) и таймер Т1 (строки 11,12).
Основной цикл программы занимает строки 13—21. В строке 14 программа читает содержимое порта PD и помещает прочитанный байт в переменную temp. Этот байт содержит информацию о состоянии датчиков.
В строках 15—17 находится цикл сканирования датчиков. В качестве параметра цикла используется переменная count. Цикл выполняется, пока значение переменной count меньше семи. В теле цикла происходит проверка младшего бита переменной temp (строка 16).
Для проверки значения бита используется выражение temp&l. Оператор «&» выполняет операцию побитового «И» между значением переменной temp и числом 1 (0x01). При этом все старшие биты обнуляются, и результат выражения становится равным значению младшего бита переменной temp.
Оператор if в строке 16 проверяет результат выражения. Если он равен нулю (контакты очередного датчика замкнуты), управление передается по метке m2, и цикл прекращается досрочно. В противном случае (контакты датчика разомкнуты) цикл выполняется дальше.
В строке 17 производится логический сдвиг содержимого переменной temp. А затем цикл сканирования начинается сначала. Таким образом, за семь проходов цикла проверяются все семь датчиков.
Если контакты всех датчиков окажутся незамкнутыми, то цикл for (строки 15—17) завершается естественным образом, а управление переходит к строке 18. Здесь происходит выключение звука: регистру TCCR1А присваивается нулевое значение.
Затем в строке 19 управление передается в начало процедуры. Для передачи управления используется оператор безусловного перехода.
Если цикл завершился досрочно переходом к строке 20 (по метке m2), начинается процесс формирования звука. Так как процесс сканирования датчиков закончился досрочно, в переменной count находится номер датчика, контакты которого оказались замкнутыми. Теперь нам остается лишь извлечь коэффициент деления, соответствующий этому номеру датчика, и записать его в регистр совпадения таймера.
На С++ для этого регистру OCR1А присваивается значение соответствующего элемента массива tabkd (строка 20). В строке 21 производится включение звука. Звук включается путем записи в регистр TCCR1А кода 0x40. На этом завершается тело основного цикла программы. Так как основной цикл программы выполнен в виде бесконечного цикла, то после завершения его последней команды весь цикл повторяется сначала.
Самостоятельно: Разработать код программы для устройства «Синтезатор 7 нот», которое использует микроконтроллер ATmega16. Разработать схему в Proteus. Разработать печатную плату для устройства, использующего МК ATmega16.
