Генерація звуку
На вхід динаміка надходить логічне "І" двох сигналів: виходу 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 dx,frec+2;(dx:ax)=l 193180
div bx ;ax=(dx:ax)/bx
mov bx,a ;зберегти лічильник таймера
in al,61h ;дозволити рахунок каналу 2
or al,3; і дозволити роботу динаміка
mov al,10110110b ;керуюче слово таймера: канал 2,