Главная » Статьи » Статьи » Научные статьи |
Кроме часов реального времени, любой компьютер (даже простейший IBM PC) содержит устройство, называемое системным таймером. Это устройство подключено к линии запроса на прерывание IRQ0 и вырабатывает прерывание INT 8h приблизительно 18,2 раза в секунду (точное значение - 1193180/65536 раз в секунду). При инициализации BIOS устанавливает свой обработчик для прерывания таймера. Этот обработчик каждый раз увеличивает на 1 текущее значение четырехбайтовой переменной, располагающейся в области данных BIOS по адресу 0000:046Ch - счетчик тиков таймера. Если этот счетчик переполняется (прошло более 24 часов с момента запуска таймера), в ячейку 0000:0470h заносится 1. Другое действие, выполняемое стандартным обработчиком прерывания таймера - контроль за работой двигателей НГМД. Если после последнего обращения к НГМД прошло более 2 секунд, обработчик прерывания выключает двигатель. Ячейка с адресом 0000:0440h содержит время, оставшееся до выключения двигателя. Это время постоянно уменьшается обработчиком прерывания таймера. Когда оно становится равно 0, обработчик выключает двигатель НГМД. Последнее действие, которое выполняет обработчик прерывания таймера - вызов прерывания INT 1Ch. После инициализации системы вектор INT 1Ch указывает на команду IRET, т.е. ничего не выполняется. Программа может установить собственный обработчик этого прерывания для того чтобы выполнять какие-либо периодические действия. Необходимо отметить, что прерывание INT 1Ch вызывается обработчиком прерывания INT 8h до сброса контроллера прерывания, поэтому во время выполнения прерывания INT 1Ch все аппаратные прерывания запрещены. В частности, запрещены прерывания от клавиатуры. Обработчик прерывания INT 1Ch должен заканчиваться командой IRET. Если же вы подготавливаете собственный обработчик для прерывания INT 8h, перед завершением его работы необходимо сбросить контроллер прерываний. Это можно сделать, например, так: mov al, 20h Приведенный ниже рисунок иллюстрирует механизм обработки прерывания таймера:
Таймер обычно реализуется на микросхеме Intel 8253 (для компьютеров IBM PC и IBM XT) или 8254 (для компьютеров IBM AT и IBM PS/2). Следующий раздел книги посвящен описанию микросхемы 8254. Мы не будем подробно рассказывать о всех возможностях этих микросхем, так как обычно используются только несколько режимов работы (а чаще всего один). Полное описание вы сможете найти в справочной литературе по микросхемам 8253/8254 , а также по их отечественным аналогам К1810ВИ53 и К1810ВИ54. Средства MS-DOS для работы с таймером Для получения текущей даты используется функция 2Ah: На входе: AH = 2Ah. На выходе: DL = день (0...31); DH = месяц (1...12); CX = год (1980...2099); AL = номер дня недели: 0 - воскресенье; Обратите внимание на то, что функция возвращает вам номер дня недели, который она вычисляет на основе даты. Для установки даты используйте функцию 2Bh: На входе: AH = 2Bh; DL = день (0...31); DH = месяц (1...12); CX = год (1980...2099). На выходе: AL = 0, если установка выполнена правильно; Для того, чтобы определить текущее время, можно воспользоваться функцией 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, если установка выполнена правильно; | |
Категория: Научные статьи | Добавил: Warkl (12.04.2011) | |
Просмотров: 1609 |
Всего комментариев: 0 | |