Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METODIchka4.DOC
Скачиваний:
5
Добавлен:
04.05.2019
Размер:
940.03 Кб
Скачать

Генерация звука.

Для генерации звука необходимо использовать пор­ты микросхемы программируемого переферийного интерфейса (ППИ) 8255. ППИ имеет несколько пор­тов, через которые внешние устройства могут под­ключаться к ЦП. Через ППИ компьютер принимает скан-коды от клавиатуры, считывает состояние DIP-переключателей на системной плате, управляет ря­дом переферийных устройств, включая микросхему таймера 8253. IBM PC/AT не использует микросхему 8255. Вместо нее установлен клавиатурный процессор 8042, однако, IBM PC/AT использует те же адреса портов, что и 8255 для работы с клавиатурой и управ­ления таймером. Управление динамиком осуществля­ется с помощью двух бит порта 61h ППИ. Бит 0 этого порта подключен ко входу GATE2. Занесение 1 в этот бит разрешает счет канала 2 таймера. Бит 1 разреша­ет или запрещает прохождение импульса на динамик.

На вход динамика поступает логическое «И» двух сигналов: выхода OUT2 таймера и содержимого бита 1 порта 61h. Необходимо отметить, что при запреще­нии счета канала 2, когда GATE2=0, на выходе OUT2 устанавливается 1. При совпадении двух сигналов на динамик подается прямоугольный импульс, который слышится как щелчок. Так как динамик управляется двумя сигналами, то и генерация звука может быть произведена двояко:

- запретить работу канала 2 (бит 0 сброшен, OUT2=1), переключать бит 1, каждое переключение вызывает щелчок; скорость переключения бита 1 определяет частоту звучания;

- разрешить работу канала 2 (бит 0 установлен), включить динамик (бит 1 установлен), скорость пере­ключения и OUT2 определяет частоту звучания.

Учитывая, что остальные биты порта 61h исполь­зуются для работы с другими устройствами и не должны изменяться, установку битов 0 и 1 следует проводить командами OR и AND. Для программиро­вания канала 2 таймера так, чтобы он выдавал им­пульсы с частотой, лежащей в звуковом диапазоне (20-20 000 Гц), следует использовать режим таймера 3 и установить (CR) == 1193180/f, где f - требуемая частота звука.

Пример:

; подпрограмма генерации звука

; Вход: (АХ)= частота звука в Гц

Sound proc near

mov bx,ax ;частота

mov ax, free

mov dx,frec+2 ;(dx:ax)=l 193180

div bx ;ax=(dx:ax)/bx

mov bx,a ;сохранить счетчик таймера

in al,61h ;разрешить счет канала 2

or al,3 ;и разрешить работу динамика

out 61h,a1

mov al,10110110b ;управляющее слово таймера: канал 2,

; режим 3, двоичное слово

out 43h,al ;вывод в регистр режима

mov а1,bl

out 42h,al ;младший байт счетчика

mov al,bh

out 42h,al ;старший байт счетчика

ret

freq dd 1193180

Sound endp

;Подпрограмма выключения звука

;

No_Sound proc near

push ax

in al,61h ;порт PB

and al,0fdh ;сброс битов 0,1

out 61h,al

pop ax ret

No_Sound endp

*Приложение.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]