Глава 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 Управление работой в реальном времени.-~>