Глава 2. Таймеры и звук.

Раздел 1. Установка и чтение таймера.

2.1.5 Задержка программных операций.

Если Вы осуществляете задержку в программе посредством пустого цикла, то Вам может потребоваться много времени для того, чтобы добиться нужного времени задержки. Даже если Вы определите требуемую длительность, то нельзя быть уверенным, что Ваша программа будет давать нужное время задержки при всех условиях. Длительность цикла может меняться в зависимости от используемого компилятора (или, для Бейсика, от того, компилируется программа или нет). А в наше время, когда имеется большой набор машин совместимых с IBM PC - имеющих широкий диапазон скорости процессора даже цикл на языке ассемблера может приводить к различным временам задержки. Поэтому разумно определять время программной задержки непосредственно по часам. Частота отсчета 18.2 раза в секунду, используемая для модификации счетчика времени суток, должна вполне удовлетворять большинство потребностей (как увеличить частоту отсчетов см. {2.1.1}).

Чтобы обеспечить задержку данной продолжительности, программа должна подсчитать требуемое число импульсов счетчика времени суток. Это значение добавляется к считанному текущему значению счетчика. Затем программа постоянно считывает значение счетчика и сравнивает его с запомненным. Kогда достигается равенство, то требуемая задержка прошла и можно продолжать выполнение программы. Четыре байта, в которых хранится значение счетчика времени суток хранятся, начиная с адреса 0040:006C (как обычно, начиная с младшего байта). Для задержек меньших 14 секунд можно пользоваться только младшим байтом. Два младших байта позволяют задержки до одного часа (точнее, на пол-секунды меньше, чем час).

Средний уровень.

Прочитайте значение счетчика времени суток BIOS, используя функцию 0 прерывания 1AH и добавьте к нему необходимое число импульсов по 1/18 секунды. После этого считывайте текущие значения счетчика времени суток, постоянно сравнивая с требуемой величиной. При достижении равенства надо кончать задержку. Прерывание 1AH возвращает два младших байта в DX (большинство задержек укладываются в этих пределах), поэтому два старших байта, возвращаемые в CX, могут игнорироваться, что позволит Вам избежать 32-байтных операций. В данном примере установлена задержка на 5 секунд, что соответствует 91 отсчету.
;---получение значения счетчика и установка задержки
MOV AH,0 ;номер функции для "чтения"
INT 1AH ;получаем значение счетчика
ADD DX,91 ;добавляем 5 сек. к младшему слову
MOV BX,DX ;запоминаем требуемое значение в BX
;---постоянная проверка значения счетчика времени суток BIOS
REPEAT: INT 1AH ;получаем значение счетчика
CMP DX,BX ;сравниваем с искомым
JNE REPEAT ;если неравен, то повторяем снова
;иначе, задержка окончена
AT имеет добавочную функцию прерывания 15H, которая позволяет осуществить задержку на указанное время. Поместите 86H в AH, а число микросекунд задержки в CX:DX. После этого выполните прерывание.


<~-2.1.4 Установка/чтение часов реального времени.
Содержание
2.1.6 Операции запрограммированные во времени.-~>

Сайт управляется системой uCoz