logo
несколько программ / bsp33

Формирование задержки

Функция 86h специально предназначена для формирования задержек. Она позволяет определять время задержки в микросекундах, что достаточно удобно для многих задач. Во время выполнения задержки разрешены прерывания.

Формат вызова функции:

Регистры на входе:

AH= 86h

CX = старшее слово времени работы счетчика, задается в микросекундах;

DX = младшее слово счетчика;

Регистры на выходе:

Регистры не используются

Средства MS-DOS для работы с таймером

MS-DOS использует четыре функции прерывания INT 21h для работы с системным таймером. Эти функции позволяют узнать и установить текущие дату и время. MS-DOS версии 3.30 и более поздних версий при установке времени и даты изменяет также показания часов реального времени.

Определение текущей даты

Для определения текущей даты используется функция 2Ah:

Регистры на входе:

AH= 2Ah

Регистры на выходе:

DL = день (0...31);

DH = месяц (1...12);

CX = год (1980...2099);

AL = номер дня недели:

0 - воскресенье;

1 - понедельник;

2 - вторник;

. . .

6 - суббота

Обратите внимание на то, что функция возвращает вам номер дня недели, который она вычисляет на основе даты.

Установка даты

Для установки даты используйте функцию 2Bh:

Регистры на входе:

AH= 2Bh

DL = день (0...31);

DH = месяц (1...12);

CX = год (1980...2099)

Регистры на выходе:

AL = 0, если установка выполнена правильно;

AL = FFh, если при установке были заданы неправильные параметры

Определение текущего времени

Для того, чтобы определить текущее время, можно воспользоваться функцией 2Ch:

Регистры на входе:

AH= 2Ch

Регистры на выходе:

CH = часы (0-24);

CL = минуты (0-59);

DH = секунды(0...59);

DL = сотые доли секунды (0-99)

Точность времени, полученного при помощи этой функции, определяется таймером (его счетчик обновляется 18,2 раза в секунду).

Установка времени

Для установки времени можно использовать функцию 2Dh:

Регистры на входе:

AH= 2Dh

CH = часы (0-24);

CL = минуты (0-59);

DH = секунды(0-59);

DL = сотые доли секунды (0-99)

Регистры на выходе:

AL = 0, если установка выполнена правильно;

AL = FFh, если при установке были заданы неправильные параметры

Функции стандратной библиотеки С

Стандартные библиотеки C содержат многочисленные функции для работы с датой и временем. Они основаны на описанных выше функциях MS-DOS и предоставляют широкие возможности для отображения даты и времени в различных форматах. Подробное описание этих функций и примеры их использования вы найдете в документации на библиотеку С.

Таймер и музыка

Одно из наиболее распространенных применений таймера - генерация звуковых сигналов и проигрывание музыки. Таймер позволяет проигрывать музыку в фоновом режиме, то есть во время работы программы может звучать музыка.

Настройка таймера для проигрывания музыки

Как мы уже говорили, канал 2 микросхемы 8254 связан с громкоговорителем компьютера. Однако громкоговоритель не просто соединен с выходом OUT канала 2. Порт вывода 61h также используется для управления громкоговорителем. Младший бит порта 61h подключен ко входу GATE канала 2 таймера. Этот бит при установке в 1 разрешает работу канала, то есть генерацию импульсов для громкоговорителя.

Дополнительно для управления громкоговорителем используется бит 1 порта 61h. Если этот бит установлен, импульсы от канала 2 таймера смогут проходить на громкоговоритель.

Таким образом, для включения звука надо выполнить следующие действия:

Так как остальные 6 битов порта 61h используются для других целей, установка младших битов должна выполняться таким образом, чтобы значения остальных битов не были изменены. Для этого вначале надо считать байт из порта 61h в рабочую ячейку памяти, установить там нужные биты, затем вывести новое значение байта в порт 61h.

Для выключения звука надо сбросить два младших бита порта 61h, при этом нельзя изменять значение остальных битов этого порта.

Одноголосая мелодия состоит из нот, разделенных или не разделенных паузами. При проигрывании мелодии необходимо для каждой ноты программировать соответствующим образом канал 2 таймера и включать громкоговоритель (с помощью порта 61h) на определенное время, равное длительности ноты. Затем программа должна выключить динамик и выдержать паузу перед проигрыванием следующей ноты, если такая пауза требуется.