Курсовая работа: Создание приложения, обеспечивающего генерацию звука с помощью системного таймера
В таблице ниже приведены частоты нот для второй октавы. При повышении (понижении) тона на октаву частота соответствующей ноты умножается (делится) на два.
Таблица 1 - Частоты нот
Нота | Частота, Гц |
До | 261,7 |
До-диез | 277,2 |
Ре | 293,7 |
Ре-диез | 311,1 |
Ми | 329,6 |
Фа | 349,2 |
Фа-диез | 370 |
Соль | 392 |
Соль-диез | 415,3 |
Ля | 440 |
Ля-диез | 466,2 |
Си | 493,9 |
2. КОНСТРУКТОРСКАЯ ЧАСТЬ
2.1 Общие сведения
Данная программа написана на ассемблере языке программирования низкого уровня, создана с использованием программных средств пакета Tasm и редактора AsmEdit. Исполняемый файл программы находится в формате.exe и называется kur.exe.
2.2 Функциональное назначение
Данная программа позволяет пользователю выбрать одну из двух представленных мелодий для генерации и воспроизведения.
2.3 Описание логической структуры программы
2.3.1 Алгоритм работы программы
- Вывод на экран строки
- Сохранение старого вектора прерывания
- Установка нового вектора прерывания
- Опрос клавиатуры
- Если выбран номер мелодии, то поместить массив в аккумулятор
- Иначе: восстановление обработчика прерывания и выход
2.3.2 Используемые методы
В начале программы происходит инициализация сегментного регистра CS. Все данные, которые описаны в программе, размещаются в регистре команд. После запуска программы на экран выводится сообщение. Происходит сохранение старого вектора прерывания и инициализации нового. В зависимости от выбора пользователя, после опроса клавиатуры, программа продолжает работу и передает текущую ноту в регистр-аккумулятор, либо происходит восстановление прерывания и выход их программы. Выход из программы происходит при нажатии кнопки “q”. Основная процедура программы - Start proc (см.Приложение 1, стр. 22).
Ниже описаны подпрограммы, которые вызывают в главной:
- new_int1c proc near – новый обработчик прерываний (см. Приложение 1, стр.23) .
Происходит сохранение всех регистров, вызывается процедура генерации звука, восстановление всех регистров и происходит возврат из программы обработки прерывания.
- kbin proc near - проверка введенного символа для дальнейшей передачи управления(см. Приложение 1, стр.24) .
Происходит вызов клавиатурного прерывания для считывания символа и выход из процедуры.
- muz proc near – процедура извлечения очередного звука (см. Приложение 1, стр.23) .
Первым делом осуществляется проверка, установлена ли переменная iniflag (она используется как флаг). Если нет, что считывается состоянии системного порта РВ ППИ, в 0 и 1 бит заносятся 0 и записывается обратно в порт. Таким образом происходит запрет звучания.
Если флаг установлен, то считывается текущая нота. Если она равно 255 (то есть это пауза), то происходит запрету звучания и продолжение считывания нот. В противном случае проверяется, если нота равно 0 (то есть конец массива нот), то происходит переход на начало выполнения программы и происходит выход, если флаг не возведен.
Если текущая нота не равно 255 или 0, то происходит считывание частоты ноты, младший и старший байты которой заносятся во второй канал таймера. Далее происходи разрешение звучания, то есть считывается значение системного порта РВ ППИ, в 0 и 1 бат заносятся единицы и отправляется обратного в порт. И происходит нормальный выход из процедуры.
2.3.3 Вызов и загрузка
Вызов программы осуществляется путём запуска файла «kur.exe». Если файл не существует, его необходимо скомпилировать из файла исходного текста программы под названием «kur.asm».