|
|
екундами. Время выдается с точ-
ностью до 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 (не больше) по ходу часов.
2.1.3 Установка/чтение даты.
При включении компьютера MS DOS запрашивает у пользователя
текущие дату и время. Время записывается в области данных BIOS.
Дата же содержится в переменной в COMMAND.COM. Она хранится в
формате трех последовательных байтов, которые содержат соответст-
венно день месяца, номер месяца и номер года, начиная с 0, где 0
соответствует 1980 году. В отличии от счетчика времени суток,
адрес даты в памяти меняется с изменением версии DOS и положением
в памяти COMMAND.COM. По этой причине для получения даты всегда
надо использовать готовые утилиты Бейсика или MS DOS, а не обра-
щаться к этой переменной напрямую.
Машины, оборудованные микросхемой календаря-часов, автомати-
чески устанавливают время и дату с помощью специальной программы
(обычно запускаемой при старте через файл AUTOEXEC.BAT). Как
получить доступ к микросхеме календаря-часов, см. [2.1.4]. Отме-
тим также, что когда счетчик времени суток BIOS переходит через
отметку 24 часов, MS DOS меняет дату.
Высокий уровень.
Оператор Бейсика DATE$ устанавливает или получает дату в виде
строки формата ММ-ДД-ГГГГ. Можно использовать косую черту (/)
вместо дефиса (-). Первые две цифры года могут быть опущены. Для
31-го октября 1984 г.:
100 DATE$ = "10/31/84" 'установка даты
110 PRINT DATE$ 'вывод даты
... и на дисплее будет выведено: 10-31-1984.
Средний уровень.
Функции 2AH и 2BH прерывания 21H получают и устанавливают
дату. Для получения даты поместите в AH 2AH и выполните прерыва-
ние. При возврате CX будет содержать год в виде числа от 0 до
119, что соответствует диапазону лет 1980 - 2099 (можно сказать
что выдается смещение относительно 1980 г.). DH содержит номер
месяца, а DL - день.
MOV AH,2AH ;номер функции получения даты
INT 21H ;получение даты
MOV DAY,DL ;день из DL
MOV MONTH,DH ;месяц из DH
ADD CX,1980 ;добавляем базу к году
MOV YEAR,CX ;получаем номер года
Для установки даты поместите день, месяц и год в те же регист-
ры и выполните функцию 2BH. Если значения, указанные для даты
неверны, то в AL будет возвращено FF, в противном случае - 0.
MOV DL,DAY ;помещаем день в DL
MOV DH,MONTH ;помещаем месяц в DH
MOV CX,YEAR ;помещаем год в CX
SUB CX,1980 ;берем смещение относительно 1980
MOV AH,2BH ;номер функции установки даты
INT 21H ;установка даты
CMP AH,0FFH ;проверяем успешность операции
JE ERROR ;неверная дата, идем на обработку ошибки
2.1.4 Установка/чтение часов реального времени.
Часы реального времени имеют свой собственный процессор, кото-
рый может подсчитывать время не влияя на другие компьютерные опе-
рации. Они имеют также независимый источник питания, используемый
когда компьютер выключен. Программно можно как читать, так и
устанавливать часы рельного времени. Обычно имеется дополнитель-
ное программное обеспечение, которое устанавливает счетчик време-
ни суток BIOS и переменную даты DOS таким образом, чтобы они
соответствовали текущим показаниям часов реального времени. Но
можно программно проверить соответствие между ними и при обнару-
жении разногласий принять необходимые меры.
Различные установки времени и даты осуществляются через набор
адресов портов. Многие многофункциональные платы расширения для
IBM PC имеют часы реального времени, но, к сожалению, нет стан-
дартной микросхемы и диапазона адресов портов. AT оборудуется
часами реального времени, основанными на микросхеме MC146818
фирмы Motorola, которые используют те же регистры, что и микрос-
хема, содержащая данные о конфигураци
|