Справочник программиста на персональном компьютере фирмы IBM. Таймеры и звук - Установка/чтение времени

ОГЛАВЛЕНИЕ

     2.1.2 Установка/чтение времени.

   При  старте MS DOS запрашивает у пользователя  текущее  время.
Введенное значение помещается в 4 байта, хранящие счетчик времени
суток  (начиная с 0040:006C, младший байт хранится  первым).   Но
сначала оно преобразуется в форму, в которой подсчитывается время
суток, т.е.  время преобразуется в  число восемнадцатых долей се-
кунды, прошедших с полночи.  Это число постоянно обновляется 18.2
раз в секунду прерыванием  таймера.   Когда  появляется очередной
запрос  на  время,  то текущее значение  счетчика  времени  суток
преобразуется обратно  в  привычный  формат  часы-минуты-секунды.
Если  при старте не было введено значения, то счетчик  устанавли-
вается в ноль, как будто сейчас  полночь.   Компьютеры снабженные
микросхемой  календаря-часов  могут  автоматически  устанавливать
счетчик времени суток.

   Высокий уровень.


   TIME$ устанавливает или получает время в виде строки чч:мм:сс,
где часы меняются от 0 до 23, начиная с полуночи. Для 5:10 дня:

   100 TIME$ = "17:10:00"  'установка времени
   110 PRINT TIME$         'вывод времени

   Поскольку TIME$ возвращает строку, то для выделения  отдельных
частей показания часов можно использовать строковые функции MID$,
LEFT$  и RIGHT$.  Например, чтобы преобразовать время 17:10:00  в
5:10 Вы должны вырезать строку  символов,  соответствующую часам,
преобразовать  ее в числовой вид (используя функцию VAL), вычесть
12, а затем представить результат опять в виде строки:

100 T$ = TIME$                'получаем строку времени
110 HOUR$ = LEFT$(T$,2)       'выделяем значение часов
120 MINUTES$ = MID$(T$,4,2)   'выделяем значение минут
130 NEWHOUR = VAL(HOUR$)      'преобразуем часы в число
140 IF NEWHOUR > 12 THEN NEWHOUR = NEWHOUR - 12
150 NEWHOUR$ = STR$(NEWHOUR)  'новое значение в строку
160 NEWTIME$ = NEWHOUR$ + ":" + MINUTES$  'делаем новую строку

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


   MS DOS предоставляет прерывания  для чтения и установки време-
ни, производя необходимые преобразования между значением счетчика
времени суток и часами-минутами-секундами.  Время выдается с точ-
ностью  до 1/100 секунды, но поскольку счетчик времени суток  об-
новляется с частотой в пять раз  меньшей,  то показания сотых се-
кунд очень приближенные. Функция 2CH прерывания 21H выдает время,
а  функция 2DH - устанавливает его.  В обоих случаях CH  содержит
часы (от 0 до 23, где 0 соответствует полночи), CL - минуты (от 0
до  59), DH - секунды (от 0 до 59) и DL - сотые доли секунд (от 0
до 99).

   Кроме того при  получении  времени  функцией  2CH, AL содержит
номер  дня недели (0 = воскресенье).  Значение дня  будет  верным
только если была установлена дата. DOS вычисляет номер дня недели
по дате.  Отметим также, что при установке времени функцией  2DH,
AL отмечает  правильность  введенного  значения времени (0 = пра-
вильно, FF = неправильно).

;---установка времени
   MOV   CH,HOURS       ;вводим значения времени
   MOV   CL,MINUTES     ;
   MOV   DH,SECONDS     ;
   MOV   DL,HUNDREDTHS  ;
   MOV   AH,2DH         ;номер функции установки времени
   INT   21H            ;устанавливаем время
   CMP   AH,0FFH        ;проверяем правильность значения
   JE    ERROR          ;переход на обработку ошибки

;---получение времени
   MOV   AH,2CH         ;номер функции получения времени
   INT   21H            ;получаем время
   MOV   DAY_OF_WEEK,AH ;получаем день недели из AH

   Низкий уровень.


   Если  Вы изменили скорость импульсов канала 1 микросхемы  8253
для специальных приложений, то  Вам необходимо написать свою про-
цедуру декодирования показаний счетчика времени суток.  BIOS поз-
воляет диапазон значений  счетчика  от  0 до 1.573 миллиона и это
может  быть изменено только путем изменения  прерывания  таймера.
Поэтому часы, реально  показывающие  сотые доли секунды, не могут
работать  24  часа без специально написанной программы.   Отметим
также, что байт 0040:0070  устанавливается  в  ноль при старте, а
затем увеличивается на 1 (не больше) по ходу часов.