Страница 3 из 19
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 (не больше) по ходу часов.
|