Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_з_1.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
2.57 Mб
Скачать
    1. Программирование звукового канала таймера.

Рис. 9.1. Условное графическое обозначение БИС 8254

Распределения адресов каналов БИС 8254 Таблица 9.2

А1

А0

адрес устройства

0

0

0 канал

0

1

1 канал

1

0

2 канал

1

1

РУС

Адресные входы А0, А1 – предназначены для выбора одного из 3-х счётчиков или РУС (регистра управляющего слова) таймера.

CS – разрешает доступ к таймеру.

CLK – сигнал внешнего генератора, служит для синхронизации процессов в таймере, управляется состоянием входа GATE. (fmax≤4MHz)

GATE – сигнал управления каналом таймера, в зависимости от режима работы счётчика выбранного канала запрещает или разрешает счёт.

OUT – выходной сигнал канала таймера, его уровень и длительность зависят от режима работы выбранного канала.

9.7. Инициализация таймера

Каждый из 3-х каналов PIT может работать в одном из 6-и режимах, устанавливаемых с помощью регистра РУС, формат которого указан ниже:

Рис. 9.2. Формат управляющего байта.

Инициализация канала таймера заключается в записи управляющего байта, определяющего режим работы и последовательность загрузки начального значения счётчика. Записываемый управляющий байт определяет номер канала таймера, режим записи/чтения счётчика, режим работы канала и формат счётчика. Сразу после записи управляющего байта, счёт прекращается, состояние линии OUT определяется выбранным режимом работы. После записи управляющего байта может быть выполнена загрузка начального значения счётчика. Если выбран режим записи только одного (старшего или младшего) байта, то после загрузки этого байта другой байт регистра счётчика (CR), устанавливается в нулевое состояние. При выборе режима загрузки 2-х байтного счётчика сначала должен быть записан младший байт, затем старший. Инициализация каждого канала выполняется независимо и не влияет на работу других каналов PIT. Новое начальное значение счётчик CR может загрузить в любое время, без записи нового управляющего байта.

Пример инициализации нулевого канала таймера IBM PC: БИС 8254 в адресном пространстве ввода-вывода IBM PC принадлежат 4 адреса: 40h - 43h (см. Рис. 9.3.). Все операции проводятся через регистр AL, запись в регистры счётчика можно выполнять только командой вывода в порт – Out.

Mov Al, 00110110b ;управляющий байт: 0-й канал, младший и старший байт, 3-й режим

Out 43h, Al ; запись управляющего байта в РУС: 43h –адрес РУС

Mov Ax, 0FFFh ; для примера примем начальное значение счётчика - 0FFFh

Out 40h, Al ; запись младшего байта в 0-й канал: 40h –его адрес

Mov Al, Ah ; копируем старший байт в Al

Out 40h, Al ; запись старшего байта в 0-й канал: 40h –его адрес

9.8. Назначение каналов таймера в ibm pc

Стандартное использование каналов таймера в компьютере поясняется на рисунке 9.3.

Канал 0 таймера используется для отсчета текущего времени. При инициализации компьютера он программируется для работы в режиме 3 с двухбайтным начальным значением счетчика равным 0. При таком режиме полный цикл таймера (частота генерации OUT) составляет около 55 миллисекунд. Сигнал GATE всегда установлен в высокий уровень. Сигнал OUT поступает в контроллер прерываний на линию 0 (IRQ0), в результате чего с периодичностью 55 миллисекунд происходит прерывание от таймера.

Стандартный обработчик прерываний от таймера BIOS выполняет следующие функции:

  • увеличивает на 1 текущее время, которое содержится в двойном слове по адресу 40h:6Ch; при достижении значения 1800B0h обнуляет это двойное слово и устанавливает байт по адресу 40h:70h в единицу, указывая, что выполнен переход через полночь;

  • уменьшает на 1 байт счетчик ожидания выключения мотора дискет по адресу 40h:40h и при достижении нулевого значения выполняет выключение мотора;

  • выполняет команду INT 1Ch.

При перепрограммировании таймера на меньший интервал необходимо корректно передавать управление базовому обработчику прерываний таймера, чтобы не нарушить отсчет текущего времени и работу других программ.

Канал 1 таймера используется как генератор для схемы регенерации памяти. BIOS программирует его в режиме 2 с однобайтовым счетчиком (младший байт), равным 18. Такой счетчик обеспечивает интервал чуть больший 15 микросекунд. Не рекомендуется перепрограммировать канал 1, так как это нарушит цикл регенерации памяти и приведет к разрушению ее содержимого.

На компьютерах класса AT этот канал таймера можно использовать для отсчета интервалов времени. Для этого следует проверять бит 4 управляющего порта 61h, который меняет свое значение на противоположное каждый цикл первого канала таймера (то есть примерно через 15 микросекунд).

Канал 2 таймера, как правило, используется для генерации звука. Сигнал GATE для второго канала управляется битом 0 порта 61h. Сигнал OUT заведен на динамик. Соединение сигнала OUT с динамиком управляется битом 1 порта 61h.

Для генерации звуковой частоты обычно используется режим 3 – режим деления частоты. В программе вычисляется требуемое значение счетчика для регистра-защёлки таймера (делитель частоты), для этого входную частоту таймера - 1193000 Гц (см. рис.9.3.) делят на требуемую частоту в герцах (частота, которая будет генерироваться на выходе таймера). Например, для генерации частоты 330 Гц необходимо 1193000/330, результат деления перевести в шестнадцатеричную систему и записать младший и ст. байты шестнадцатеричного числа (делитель частоты) в счетчик канала 2. См. далее пример фрагмента программного кода.

В этом режиме на выходе сигнала OUT появляются прямоугольные колебания, частота которых определяется начальным значением счетчика таймера. Разумеется, режим 3 не является единственным режимом, используемым для генерации звуков. Интересные звуковые эффекты можно получить, программируя канал таймера в других режимах.

Поскольку микросхема таймера 8254 работает независимо от процессора, то очень просто генерировать звук, который издается одновременно с выполнением других операций. Вы должны запрограммировать канал 2 этой микросхемы для генерации определенной частоты (см. табл. 9.3. и описание «Канал 2 таймера»), а затем программно задать длительность звучания этой частоты (лучше использовать функцию 86h int15h, при этом программу следует запускать из WIN_98 или MS DOS). Работа таймера должна быть предварительно разрешена (см. рис. 9.3.) через порт B (адрес 61H, биты 0 и 1). Звук будет продолжаться до тех пор, пока биты 0 и 1 порта B установлены. Поэтому необходимо сбросить бит 1 порта B в 0, иначе звук будет продолжаться, и может быть прекращен только перезагрузкой компьютера.