[Назад] [Далее]

5.10.6. Динамик

Как сказано в главе 5.10.5, канал 2 системного таймера управляет динамиком компьютера — он генерирует прямоугольные импульсы с частотой, равной 1 193 180/начальное_значение_счетчика. При программировании динамика начальное значение счетчика таймера принято называть делителем частоты — считается, что динамик работает с частотой, равной 1 193 180/делитель герц. После программирования канала 2 таймера надо еще включить сам динамик — это делается путем установки бит 0 и 1 порта 61h в 1. Бит 0 фактически разрешает работу этого канала таймера, а бит 1 включает динамик.

; Процедура beep
; издает звук с частотой 261 Hz (нота "ми" средней октавы)
; длительностью 1/2 секунды на динамике
beep    proc       near
        mov        al,10110110b         ; канал 2, режим 3
        out        43h,al
        mov        al,0Dh               ; младший байт делителя
                                        ; частоты 11D0h
        out        42h,al
        mov        al,11h               ; старший байт делителя частоты
        out        42h,al
        in         al,61h               ; текущее состояние
                                        ; порта 61h в AL
        or         al,00000011b         ; установить биты 0 и 1 в 1
        out        61h,al               ; теперь динамик включен
        mov        cx,0007h             ; старшее слово числа микросекунд паузы
        mov        dx,0A120h            ; младшее слово числа микросекунд паузы
        mov        ah,86h               ; функция 86h
        int        15h                  ; пауза

        in         al,61h
        and        al,11111100b         ; обнулить младшие два бита
        out        61h,al               ; теперь динамик выключен
        ret
beep    endp

В связи с повсеместным распространением звуковых плат обычный динамик PC теперь практически никем не используется или используется для выдачи сообщений об ошибках. Вернемся к звуку чуть позже, а пока вспомним, что в главе 4.7.1 рассматривалось еще одно устройство, которое использовалось для определения текущего времени и даты, — часы реального времени.


п»ї
"target=_blank><\/a>") //-->