Глава 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 Гудок динамика.-~>