Глава 2. Таймеры и звук.

Раздел 2. Создание звука.

2.2.3 Генерация звука одновременно с другими действиями.

Для программистов на Бейсике различие между этим и предыдущим разделом совершенно несущественно. Hо программисты на ассемблере должны использовать совершенно другой метод. Поскольку микросхема таймера 8253 работает независимо от процессора, то очень просто генерировать звук, который издается одновременно с выполнением других операций. Вы должны просто запрограммировать канал 2 этой микросхемы для генерации определенной частоты, а затем перепрограммировать микросхему для выключения звука.

Hизкий уровень.

Просто пошлите счетчик в канал 2, как объяснено в {2.1.1}. Микросхема должна быть предварительно разрешена через порт B микросхемы интерфейса с периферией 8255 (адрес 61H). Вычислите требуемое значение счетчика для задвижки, разделив 1.19 миллионов на требуемую частоту в герцах. Звук будет продолжаться до тех пор, пока не будут закрыты ворота канала 2. Поэтому Вы должны сбросить бит 1 порта B в 0, иначе звук будет продолжаться бесконечно и может быть прекращен только перезагрузкой компьютера. Для точного регулирования длительности звука можно использовать счетчик времени суток BIOS, как указано в {2.1.6}. В данном примере генерируется частота 440 герц. Звук прекращается после нажатия любой клавиши на клавиатуре.
;---рарешение канала 2 установкой порта B микросхемы 8255
PORT_B EQU 61H ;установка адреса порта B
IN AL,PORT_B ;чтение его значения
OR AL,3 ;установка двух младших битов
OUT PORT_B,AL ;посылаем байт в порт B
;---установка регистров ввода/вывода
COMMAND_REG EQU 43H ;адрес командного регистра
CHANNEL_2 EQU 42H ;адрес канала 2
MOV AL,10110110B ;цепочка битов для канала 2
OUT COMMAND_REG,AL ;засылка в командный регистр
;---засылка счетчика в задвижку
MOV AX,2705 ;счетчик = 1190000/440
OUT CHANNEL_2,AL ;посылаем младший байт
MOV AL,AH ;сдвигаем младший байт в AL
OUT CHANNEL_2,AL ;посылаем старший байт
;---ждем нажатия клавиши
MOV AH,1 ;номер функции прерывания 21H
INT 21H ;вызываем прерывание
;---выключение звука
IN AL,PORT_B ;получаем байт из порта B
AND AL,11111100B ;сбрасываем два младших бита
OUT PORT_B,AL ;посылаем байт обратно


<~-2.2.2 Генерация тона.
Содержание
2.2.4 Гудок динамика.-~>

Сайт управляется системой uCoz