Глава 2. Таймеры и звук.
Раздел 2. Создание звука.
2.2.4 Гудок динамика.
Hекоторым программам требуется набор предостерегающих гудков. Их легко создавать на Бейсике, но операционная система не обеспечивает функцию гудка, как таковую, и только косвенно позволяет получать доступ к гудку, который Вы слышите при старте системы. Для изменения тона вся процедура генерации звука должна быть запрограммирована на низком уровне. Для того чтобы гудок соответствовал подаваемому им сигналу необходимо проявить воображение. Для предсказания близкой опасности создайте набор понижающихся тонов {2.2.7} или, если принтер включен, чередуйте гудки динамика компьютера и принтера (вывод кода ASCII 7 на принтер).
Средний уровень.
Операционная система не предоставляет специальной функции для генерации звука. Hо Вы можете вызвать знакомый гудок просто подавая код ASCII 7 на стандартное устройство вывода (т.е. терминал), используя одну из функций DOS или BIOS. Kод ASCII 7 интерпретируется как управляющий символ "звонок" и он не рисуется на экране. Проще всего использовать функцию 2 прерывания 21H:
MOV AH,2 | ;функция вывода символа на экран |
MOV DL,7 | ;посылаем код ASCII 7 |
INT 21H | ;динамик гудит |
Hизкий уровень.
Для простого гудка лучше всего подходит метод, основанный на использовании микросхемы интерфейса с периферией 8255 {1.1.1}. Hиже приведен пример, который практически повторяет гудок, который Вы слышите при старте системы.
;---гудок динамика | |
MOV DX,800 | ;счетчик числа циклов |
IN AL,61H | ;читаем порт B 8255 |
AND AL,0FEH | ;выключаем бит таймера 8253 |
NEXTCYCLE: OR AL,2 | ;включаем бит динамика |
OUT 61H,AL | ;посылаем байт в порт B |
MOV CX,150 | ;длительность первой половины |
CYCLEUP: LOOP CYCLEUP | ;задержка пока сигнал высокий |
AND AL,0FDH | ;выключаем бит динамика |
OUT 61H,AL | ;посылаем байт в порт B |
CYCLEDOWN: LOOP CYCLEDOWN | ;задержка пока сигнал низкий |
DEC DX | ;уменьшаем счетчик циклов |
JNZ NEXTCYCLE | ;повторяем цикл пока DX не 0 |
<~-2.2.3 Генерация звука одновременно с другими действиями.
Содержание
2.2.5 Генерация набора тонов.-~>