Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_лаб_ПЗСУ.doc
Скачиваний:
2
Добавлен:
17.04.2019
Размер:
524.8 Кб
Скачать

Додаток і Використання убудованого динамику

Комп'ютер має можливість генерувати звук за допомогою убудованого динаміка з постійним магнітом. Можна вибрати один із двох способів управління динаміком або використовувати обидва в комбінації: 1) використання біта 1 порту 61h для активізації мікросхеми Intel 8255A-5 (програмувальний периферійний інтерфейс) (РР1); 2) використання тригера програмувального інтервального таймеру Intel 8353-5 (PIT). Годинниковий генератор видає сигнал з частотою 1,19318 Мгц. Таймер PPI керує тригером 2 через біт 0 порту 61 h.

Нижче наведена програма на генерує серію звукових нот зі зростаючою частотою. Значення в поле DURTION формує тривалість звучання кожної ноти, а значення в поле TONE визначає частоту звучання. На початку роботи програма зчитує вміст порту 61 Н и зберігає отримане значення. Команда CLI скидає прапор переривань, забезпечуючи рівномірне звучання. Інтервальний таймер генерує 18,2 такти в секунду, що (при відсутності CLI) перериває виконання програми і викликає появу звуку. Значення поля TONE визначає частоту звуку: великі значення дають низьку частоту, а малі - високу. Після того, як підпрограма BIOSPKR виконає чергову ноту, вона збільшує частоту звуку за допомогою зрушення вправо на 1 біт значення в поле TONE (тобто поділяє значення поля TONE на 2). Тому що зменшення TONE у даному прикладі приводить до скорочення тривалості звучання, то підпрограма також збільшує DURTION за допомогою зрушення його значення на один біт уліво, тобто подвоює це значення.

Програма завершується, коли вміст полю TONE зменшиться до нуля. Початкові значення в полях DURTION і TONE не мають принципового значення. Можна провести експерименти з іншими значеннями, а також випробувати виконання без команди CLI. Можна змінити програму для генерації звуків зі зменшуваною частотою, установивши для цього в поле TONE значення 01, а в поле DURTION - деяке більше значення. У кожнім циклі при цьому необхідно збільшувати значення в поле TONE і зменшувати значення в поле. DURTION. При досягненні нуля в DURTION програму можна завершити.

Можна використовувати будь-як варіанти виконання послідовності нот. Нижче наведен лістінг програми для генерації звуку.

TITLE SOUND (COM) Процедура для генерации звука

SOUNSG SEGMENT PARA 'Code'

ASSUME CS:SOUNG,DS:SOUNG,SS:SOUNG

ORG 100H

BEGIN: JMP SHORT MAIN

; -------------------------------------------------------

DURTION DW 1000 ;Время звучания

TONE DW 256H ;Высота (частота) звука

; -------------------------------------------------------

MAIN PROC NEAR

IN AL,61H ;Получить и сохранить

PUSH AX ; данные порта

CLI ;Запретить прерывания

CALL B10SPKR ;Произвести звук

POP AX ;Восстановить значение

OUT 61H,AL ; порта

STI ;Разрешить прерывания

RET

MAIN ENDP

B10SPKR PROC NEAR

B20:

MOV DX,DURTION ;Установить время звучания

B30:

AND AL,11111100B ;Очистить биты 0 и 1

OUT 61H,AL ;Передать на динамик

MOV CX,TONE ;Установить частоту

B40:

LOOP B40 ;Задержка времени

OR AL,00000010B ;Установить бит 1

OUT 61H,AL ;Передать на динамик

MOV CX,TONE ;становить частоту

B50:

LOOP B50 ;Задержка времени

DEC DX ;Уменьшить время звучания

JNZ B30 ;Продолжать?

SHL DURTION,1 ; нет - увеличить время,

SHR TONE,1 ; сократить частоту

JNZ B20 ;Нулевая частота?

RET ; да - выйти

B10SPKR ENDP

SOUNSG ENDS

END BEGIN

2