OUT 61H, AL
MOV CX, frequency ;Задержка на пол-цикла
second: LOOP second
DEC DX ;Уменьшаем длительность
JNZ next
STI ;Разрешение прерываний
Рисунок 4.2
Переменная FREQUENCY используется в качестве счетчика в пустом цикле: чем меньше ее значение, тем быстрее происходит изменение бита 1 и тем выше частота. Переменная CYCLES устанавливает продолжительность тона: чем больше ее величина, тем дольше звучит звук. Следует обратить внимание на запрет аппаратных прерываний, так как прерывание работы таймера может существенно влиять на частоту.
При генерации звука с использованием микросхемы таймера следует запрограммировать канал 2 этой микросхемы для формирования определенной частоты, а затем перепрограммировать микросхему для выключения звука. Микросхема таймера должна быть предварительно разрешена через порт 61h. Затем следует установить счетчик канала 2. Значение счетчика для задвижки вычисляется делением 1,19 миллионов на требуемую частоту в герцах. Звук будет продолжаться до тех пор, пока не будет сброшен в 0 бит 1 порта 61h. На рисунке 4.3 приведен фрагмент программы генерации звука частотой 440 Гц. Звук прекращается после нажатия любой клавиши на клавиатуре.
;--- Установка регистров ввода/вывода
MOV AL,0B6H ;Записать в регистр режим таймера
OUT 43H,AL
;--- Засылка счетчика в задвижку
MOV DI,440
MOV DX,12H
MOV AX,2870H ; 1190000/440
DIV DI
OUT 42H,AL ;Записать младший байт счетчика таймера 2
MOV AL,AH
OUT 42H,AL ;Записать старший байт счетчика таймера 2
;--- Разрешение канала 2 установкой порта 61Н
IN AL,61H ;Считать текущую установку порта 61Н
OR AL,3 ;Включить динамик
OUT 61H,AL
;--- Ожидание нажатия клавиши
MOV AH,0
INT 16H
;--- Выключение звука
IN AL,61H
AND AL,0FCH ;Восстановить исходную установку порта
OUT 61H,AL
Рисунок 4.3
На рисунке 4.4 показан фрагмент процедуры формирования звуковой частоты в диапазоне от 17 до 65535 Гц и любой длительности, заданной в регистре ВХ, с шагом 0,01 с. Нижний предел 17 Гц является наименьшим значением, на которое можно поделить 1190000, не вызвав переполнения. Для формирования задержки в несколько миллисекунд обычно используются временные циклы вида:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.