
Міністерство освіти і науки, молоді та спорту України
Запорізький національний технічний університет
кафедра програмних засобів
ЗВІТ
з лабораторної роботи № 2
з дисципліни "Операційні системи"
на тему:
«Використання звукових можливостей IBM PC»
Виконав:
Ст. групи ІОТ-420 Перепелиця А. М.
Перевірив: О. О.Степаненко
О.І. Качан
2012
ЛАБОРАТОРНА РОБОТА №2
ВИКОРИСТАННЯ ЗВУКОВИХ МОЖЛИВОСТЕЙ IBM PC
Тема: Використання звукових можливостей IBM PC.
Мета: Вивчити способи генерації звука, навчитися використовувати звукові можливості ibm-сумісних пеом та практично реалізувати запропоновані способи генерації звука.
1 ХІД РОБОТИ
Постановка задачі:
Написати та відлагодити програму на Асемблері, що реалізує генерацію звуку за допомогою таймера.
Код програми:
dseg segment para 'data'
Ok dw 2700
Okk dw 2800
dseg ends
stck segment stack 'stack'
db 256 dup(?)
stck ends
cseg segment para 'code'
start:
assume cs:cseg, ss:stck, ds:dseg
;отправление таймеру соо об подключении счетчика
mov al,0B6h
out 43h,al
mov cx,2
A:
mov Ok,3500
mov Okk,500
in al,61h ;
or al,3
push cx
mov cx,75
; управление динамиком
music:
mov ax,Ok
out 42h, al
xchg al,ah
out 42h, al
sub Ok,40
;задержка
push cx
mov cx,1000
ext11:
push cx
mov cx,5000
iter11:
loop iter11
pop cx
loop ext11
pop cx
;конец задержки
loop music
mov cx,75
music2:
mov ax,Okk
out 42h, al
xchg al,ah
out 42h, al
add Okk,40
;задержка
push cx
mov cx,1000
ext12:
push cx
mov cx,5000
iter12:
loop iter12
pop cx
loop ext12
pop cx
;конец задержки
loop music2
in al,61h
and al,0FCh
out 61h,al
push cx
mov cx,10
stop:
;задержка
push cx
mov cx,1000
ext13:
push cx
mov cx,5000
iter13:
loop iter13
pop cx
loop ext13
pop cx
;конец задержки
loop stop
pop cx
pop cx
loop A
mov ax,4c00h
int 21h
cseg ends
end start
Написати та відлагодити програму на Асемблері, що реалізує генерацію звуку за допомогою прямого керування динаміком.
Код програми:
Dseg segment para 'data'
vremya DW 75 ;Общее время
kolvo DW 10 ;Время звучания одного колебания
visota DW 256h ;Высота (частота) звука
Dseg ends
stck segment stack 'stack'
db 256 dup(?)
stck ends
cseg segment para 'code'
start:
assume cs:cseg, ds:Dseg, ss:stck
mov ax,Dseg
mov ds,ax
xor ax,ax
mov cx,2
S:
push cx
in al,61h
cli
push ax
mov cx,vremya
new:
push cx
mov dx,kolvo
zanovo:
and al,11111100b
out 61h,al
mov cx,visota
ciklChastota:
loop ciklChastota
or al,00000010b
out 61h,al
mov cx,visota
ciklChastota2:
loop ciklChastota2
dec dx
jnz zanovo
add kolvo,1
pop cx
loop new
pop ax ;восстановить значение
out 61h,al
sti
push cx ;задержка
mov cx,1000
ext11:
push cx
mov cx,5000
iter11:
loop iter11
pop cx
loop ext11
pop cx ;конец задержки
pop cx
loop S
mov ax,4c00h ;стандартный выход
int 21h
cseg ends
end start
Висновок: У цій лабораторній роботі я вивчила способи генерації звука, навчилася використовувати звукові можливості ibm-сумісних пеом та практично реалізувати запропоновані способи генерації звука.
Контрольні запитання
1. Що таке звук?:
Звук — коливальний рух частинок пружного середовища, що поширюється у вигляді хвиль у газі, рідині чи твердому тілі. Більшість явищ у природі супроводжуються характерними звуками, які сприймаються та розпізнаються вухом людини і тварин і служать для орієнтування та спілкування.
Характеристиками звуку є частота, довжина хвилі, амплітуда і швидкість, а також тембр.
Частота. Найпростішим типом звуку є звук, в якому тиск у кожній точці простору змінюється за синусоїдним законом, тобто здійснює гармонічні коливання з певною частотою.
Частота — це кількість коливань певної точки звукової хвилі в секунду. Одному циклу коливання в секунду відповідає величина 1 Гц (1/с).
Діапазон від 16 Гц до 20 кГц називають чутним діапазоном. Звуки з частотами до 16 Гц називаються інфразвуком, понад 20000 Гц — ультразвуком. Звуки з частотою 109-1013 Гц називають гіперзвуком.
Людське вухо сприймає та розрізняє частоту звукових коливань як висоту звуку або тон.
Гучність звуку визначається амплітудою коливань, однак гучність - суб'єктивна характеристика інтенсивності звуку, тоді як об'єктивною фізичною характеристикою є звуковий тиск.
2. В чому полягає основна ідея отримання звуку на ibm pc?:
Динамік в комп’ютерах IBM PC вібрує за рахунок електричних імпульсів, що надсилає йому комп’ютер. Через те, що комп’ютери мають справу з двійковими числами, то й створюють вони або високу, або низьку напругу. При кожному переході напруги з одного стану в іншій мембрана динаміка або виштовхується, або втягується.
Звук через динамік ми можемо генерувати двома способами. При одному способі можна записати програму, яка буде змінюючи стан двох розрядів динаміка в периферійному інтерфейсі, що програмується (РРІ), включати та виключати динамік. При іншому способі для створення коливань в динаміку заданої частоти використовується вмонтований в РС таймер, що програмується.
3. Спосіб генерації звуку за допомогою таймеру.:
Для створення звуку за допомогою таймера необхідно виконати два кроки:
- необхідно запрограмувати таймер для генерації деякої частоти;
- направити вихід з таймеру на динамік. Таймер по команді зчитує сигнал генератора тактових імпульсів (маючих частоту 1.193 МГц) до тих пір, поки їх число не співпаде з числом, заданим нами (лічильник). Фактично таймер ділить тактову частоту на наше число, та створює вихідну частоту. В результаті таймер генерує сигнали, які створюють звук визначеної частоти, коли ми підєднуемо його до динаміка.
Лічильник і результуюча частота пов’язані між собою наступним відношенням: частота = 1193180/лічильник.
Після обчислювання лічильника, що необхідний для тієї частоти звуку, яка нам потрібна (звукова), ми надсилаємо його в регістр таймера. Це робиться за допомогою трьох виводів у порти. Спочатку у порт 43Н надсилається значення В6Н, тим самим таймеру повідомляється, що йому надіслано лічильник. Потім в порт 42Н надсилається спочатку молодший, потім старший байти лічильника.
Після того, як ми запрограмували таймер, необхідно задіяти схеми динаміка. Динамік керується за допомогою РРІ та використовує порт 61Н. Динаміком використовується тільки два з восьми розрядів порту: розряди 0 та 1. Останні розряди використовуються для інших цілей, тому при роботі з динаміком ми не повинні змінювати їх.
Розряд 0 керує сигналом таймера, що використовується для роботи динаміка. Для того, щоб динамік працював від таймеру, обидва ці розряди повинні бути встановлені в 1.