"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора"FREQUENCY", используется в качестве счетчика в пустом цикле
между действиями включения и выключения. Чем меньше ее значение, тем быстрее происходит изменение бита и тем больше частота. Пере- менная же "NUMBER_CYCLES" устанавливает продолжительность тона. Она говорит сколько раз должен быть повторен процесс включения и выключения. Чем больше это число, тем дольше звучит данный звук. Отметим, что для этой процедуры аппаратные прерывания должны быть запрещены. Причина этого в том, что прерывание таймера происходит с такой частотой и регулярностью (18.2 раза в секун- ду), что оно будет существенно влиять на частоту. Имейте ввиду, что пока прерывания запрещены, счетчик времени суток BIOS не будет работать. Если затем прочитать его значение, то оно будет отличаться на некоторую величину от реального, до тех пор, пока не будет сделано соответствующее изменение. NUMBER_CYCLES EQU 1000 FREQUENCY EQU 300 PORT_B EQU 61H CLI ;запрет прерываний MOV DX,NUMBER_CYCLES ;длительность тона в DX IN AL,PORT_B ;получаем значение из порта B AND AL,11111110B ;отключаем динамик от таймера NEXT_CYCLE: OR AL,00000010B ;включаем динамик MOV CX,FREQUENCY ;задержка на пол-цикла в CX FIRST_HALF: LOOP FIRST_HALF ;делаем задержку AND AL,11111101B ;выключаем динамик OUT PORT_B,AL ;посылаем команду в порт B MOV CX,FREQUENCY ;задержка на пол-цикла в CX SECOND_HALF: LOOP SECOND_HALF ;делаем задержку DEC DX ;вычитаем единицу из счетчика JNZ NEXT_CYCLE ;если 0, то надо кончать STI ;разрешаем прерывания .h3 2.2.3 Генерация звука одновременно с другими действиями. ------------------------------------------------------------ Для программистов на Бейсике различие между этим и предыдущим разделом совершенно несущественно. Но программисты на ассемблере должны использовать совершенно другой метод. Поскольку микросхема таймера 8253 работает независимо от процессора, то очень просто генерировать звук, который издается одновременно с выполнением других операций. Вы должны просто запрограммировать канал 2 этой микросхемы для генерации определенной частоты, а затем перепрог- раммировать микросхему для выключения звука. |
|
|