Глава 2. Таймеры и звук.
Раздел 1. Установка и чтение таймера.
2.1.6 Операции запрограммированные во времени.
Программа определяет время для выполнения определенной операции в точности так же, как и человек: берется начальное показание счетчика времени суток и затем сравнивается с последующими пока- заниями. Можно получать значения в формате часы-минуты-секунды, но слишком хлопотно вычислять разницу между такими показаниями, поскольку система счета не десятичная. Лучше прямо читать счетчик времени суток BIOS, измерять продолжительность в 1/18 секунды, а затем уже переводить ее в обычный формат чч:мм:сс.
Средний уровень.
Прерывание 1AH имеет две функции для установки (AH = 1) и получения (AH = 0) счетчика времени суток. Для чтения счетчика надо просто выполнить прерывание с AH = 0. При возврате значение счетчика содержится в CX:DX, причем младшее слово в CX. AL содержит 0, если счетчик не переходил через границу 24 часов с момента последней установки. Для установки счетчика поместите два слова в те же регистры, а в AH - 1. В приведенном примере измеряются промежутки времени в пределах часа. При этом нужны только два младших байта счетчика. Hо в этом случае необходимо проверять, что не было перехода через границу, когда начальное значение было больше, чем следующее.
;---в сегменте данных | |
OLDCOUNT DW 0 | ;храним начальное значение счетчика |
;---получаем начальное значение счетчика | |
MOV AH,0 | ;номер функции |
INT 1AH | ;получаем значение счетчика |
MOV OLDCOUNT,DX | ;сохраняем начальное значение |
. | |
(здесь идет процесс, длительность которого измеряется) | |
. | |
;---позднее вычисляем длительность процесса | |
MOV AH,0 | ;номер функции |
INT 1AH | ;получаем значение счетчика |
MOV BX,OLDCOUNT | ;считываем старое значение |
CMP BX,DX | ;проверяем на переполнение |
JG ADJUST | ;обработка переполнения |
SUB DX,BX | ;иначе берем разность |
JMP SHORT FIGURE_TIME | ;и переводим ее в обычный вид |
;---обработка переполнения | |
ADJUST: MOV CX,0FFFFH | ;помещаем в CX максимальное число |
SUB CX,BX | ;вычитаем первое значение |
ADD CX,DX | ;добавляем второе значение |
MOV DX,CX | ;результат храним в DX |
;---процедура перевода времени в обычный формат | |
FIGURE_TIME: | ;делим на 18.2 секунды и т.д. |
<~-2.1.5 Задержка программных операций.
Содержание
2.1.7 Управление работой в реальном времени.-~>