49056 (608889), страница 2

Файл №608889 49056 (Создание приложения, обеспечивающего генерацию звука с помощью системного таймера) 2 страница49056 (608889) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Основная идея заключается в использовании прерывания 1Ch, которое вырабатывается таймером с частотой примерно 18,2 Гц. Пользовательский обработчик этого прерывания осуществляет контроль за выборкой нот из массива, содержащего мелодию, и программирование микросхемы 8254. Если подготовить таблицы частот и длительностей, то можно проигрывать простейшие мелодии.

Для определения значения, которое должно быть записано в регистр счетчика канала 2 таймера, надо разделить 1193180 на требуемую частоту в герцах.

В таблице ниже приведены частоты нот для второй октавы. При повышении (понижении) тона на октаву частота соответствующей ноты умножается (делится) на два.

Таблица 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».

2.3.4 Входные данные

Входными данными программы является ввод пользователем пункта меню.

2.3.5 Выходные данные

Выходными данными программы является звуковой сигнал динамика. Так же на экран выводится простое пользовательское меню.

3. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ

3.1 Общие сведения

Для создания курсовой работы использовалось следующее программное обеспечение:

  • Компилятор TASM

  • Компоновщик Tlink.exe

  • Отладчик TD.EXE

  • Текстовый редактор – ASM Editor

  • MS Office Word 2003

  • MS Office Visio 2003

3.2 Руководство системного программиста

3.2.1 Системные требования

Минимальные системные требования:

  • Процессор 80286 и выше

  • Оперативная память – 1 Мб

  • Свободного места на жестком диске 1 Мб

  • Операционная система DOS 3.3 и выше / Windows 9x/ME

  • Клавиатура

  • Мышь

3.2.2 Структура программы

Программа представляет собой один исходный файл для выполнения и называется Kur.exe. Она не имеет никаких связей с другими программами и работает автономно.

3.2.3 Тестирование программы

После запуска произойдет размещение программы в памяти. При наборе на клавиатуре 1 произойдет загрузка в регистр-аккумулятор мелодии «Чижик-пыжик», которая будет сгенерирована и воспроизведена через системный динамик. При наборе цифры 2 произойдет загрузка мелодии «Подмосковные вечера», которая будет воспроизводиться аналогично первому случаю. Если будет набрано «q», то произойдет завершение работы программы и выгрузка её из памяти.

3.2.4 Выходные и выходные данные

Входными данными является номер выбранного пункта меню.

Выходные данные – это сгенерированная мелодия в соответствии с выбранным пунктом.

3.3 Руководство оператора

3.3.1 Назначение программы

Данная программа предназначена для генерации звука с использованием системного таймера посредством системного динамика.

3.3.2 Выполнение программы

  1. Для запуска программы необходимо запустить приложение Kur.exe

  2. Выбрать любой из предложенных пунктов меню.

  3. Для генерации мелодии «Чижик-Пыжик» выберите пункт 1

  4. Для генерации мелодии «Подмосковные вечера» выберите пункт 2

  5. Для выхода из программы выход из программы выберите пункт q

3.3.3 Сообщения оператору

При загрузке программы выводится простое пользовательское меню:

Enter the point of menu:

1- CHIZHIK-PYZHIK

2 - PODMOCKOVNYE VECHERA

q – Qiute

Если пользователь введет пункт меню, который не предусмотрен программой, то на экран будет выведено сообщение.

ЗАКЛЮЧЕНИЕ

В ходе выполнения курсовой работы было создано приложение, которое способно генерировать мелодии «Чижик-Пыжик» и «Подмосковные вечера».

Для реализации поставленной цели были реализованы следующие задачи:

  • Изучены принципы работы системного таймера

  • Разработаны алгоритмы для перехвата и обработки прерываний системного таймера

  • Создана процедура для извлечения очередного звука

  • Создана процедура для обработки символов, введенных с клавиатуры

СПИСОК ЛИТЕРАТУРЫ

    1. Абель П. Язык Ассемблера для IBM PC и его программирование - М.: Высшая школа,1992. – 252с.

    2. С.В. Зубков Ассемблер для DOS, Windows и Unix – М.: ДМК Пресс, 1999. – 630 с.

    3. И. Юров Assembler – СПб.: Питер, 2001. – 624 с.

ПРИЛОЖЕНИЕ 1

Листинг программы

Assume CS: Code

Code SEGMENT

286

Start proc; Основная процедура

mov ax,cs

mov ds,ax; DS = CS

iniflag db 0; Флаг звучания

old_int1c_off dw 0; Смещение старого вектора

old_int1c_seg dw 0; Сегмент старого вектора

tek_mel dw?; Адрес текущей ноты выбранной мелодии

mov ax,351ch

int 21h

mov cs:old_int1c_off,bx

mov cs:old_int1c_seg,es

lea dx,new_int1c

mov ax,251ch

int 21h; DS:DX – адрес новой программы обр.

mov ah,09h

lea dx,menu

int 21h

beg1:

call kbin; Опрос клавиатуры

cmp al,'1'

jnz beg2 ; Нет

mov byte ptr iniflag,1; Взведение флага звуч.

lea ax,mel1

mov tek_mel,ax

jmp beg1; Переход на начало цикла

beg2:

cmp al,'2'

jnz beg3

mov byte ptr iniflag,1

lea ax,mel2

mov tek_mel,ax

jmp beg1

beg3:

cmp al,'q'

jnz beg4

jmp beg5

beg4:

mov ah,09h

lea dx,er

int 21h

jmp beg1

beg5:

Восстановление старого вектора 1с и выход

mov dx,old_int1c_off

mov ax,old_int1c_seg

mov ds,ax; DS:DX – адрес устанавл. вектора

mov ax,251ch

int 21h

movax,4c00h

int21h

start endp

Новый обработчик прерывания 1ch

new_int1c proc far

pusha

call muz; Вызов процедура извлечения звука

popa

iret

new_int1c endp

Процедура извлечения очередного звука

tek_mel – адрес текущей ноты выбранной мелодии

muz proc near

test byte ptr cs:iniflag,0ffh; Проверка флага

jnz muz1

muze:

in al,61h ; Чтение состояния системного порта В

and al,0fch; Запрещение звучания (биты 0 и 1)

out 61h,al; Запись в системный порт В

jmp ex ; Выход, если флаг не взведен

muz1:

mov si,cs:tek_mel; Адрес текущей ноты

mov bl,cs:[si]; Текущая нота

cmp bl,255; Пауза?

jnz muz2

Выключение звука

in al,61h

and al,0fch

out 61h,al

inc cs:tek_mel; Переход к адресу след. ноты

jmp ex

muz2:

or bl,bl; = 0?

jnz muz3

jmp muze

muz3:

xor bh,bh

mov ax,cs:noty [bx]

Программирование делителя частоты 2 канала

inc cs:tek_mel; Переход к адресу след. ноты

out 42h,al; Мл.байт частоты. канал 2 таймера

xchg al,ah; AH. AL

out 42h,al; Ст. байт частоты. канал 2 таймера

Разрешение звучания

in al,61h

or al,3; Разрешение звучания (биты 0 и 1)

out 61h,al; Запись в системный порт В

ex:

ret

muz endp

kbin proc near; Ввод с клавиатуры и проверка на выбор игры

mov ah,0

int 16h

ret

kbin endp

Мелодия "Чижик Пыжик"

mel1 db 17,17,255,13,13,255,17,17,255,13,13,255,18,18,255

db 17,17,255,15,15,15,15,255,255

db 8,8,255,8,8,255,8,8,255,10,255,12,255

db 13,13,255,13,13,255,13,13,13,13

db 0

Мелодия "Подмосковные вечера"

mel2 db 1,1,1,4,4,4,8,8,8,4,4,4,6,6,6,6,6,6,4,4,4,3,3,3

db 8,8,8,8,8,8,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1

db 0

menu db 10 dup(0ah), 30 dup(20h), 'Enter the point of menu:'

db 0dh,0ah,30 dup(20h),'1 - CHIZHIK-PYZHIK'.0dh,0ah,30 dup(20h),'2 - PODMOCKOVNYE VECHERA'.0dh,0ah,30 dup(20h), 'q - Quit',5 dup(0ah), "$ "

er db 'Incorrect input! Try again!',0dh,0ah,"$ "

Коэффициенты деления для нот

noty dw 0eeeh,0e18h,0d49h,0c8eh,0bdfh,0b2fh,0abeh

dw 9f7h,968h,8e0h,861h,7e8h,777h,70ch,6a5h,647h

dw 5edh,597h,547h,4fbh,4b4h,470h,430h,3f4h

dw 3bbh,386h,352h,323h,2f6h,2cbh,2a3h,27dh,25ah,238h,218h,1fah

dw 1ddh,1c3h,1a9h,192h,17bh,166h,152h,13fh,12dh,11ch,10ch,0fdh

dw 0

code ends

END

ПРИЛОЖЕНИЕ 2

Рис. 1 - Пользовательское меню

Рис. 2 - Некорректный ввод

Характеристики

Тип файла
Документ
Размер
2,86 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7026
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее