"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу авторакак встретится оператор TIMER ON.
Поскольку он повторяется, оператор ON TIMER особенно полезен для вывода на экран текущего времени: 100 ON TIMER(60) GOSUB 500 'меняем показания часов каждые 60 110 TIMER ON 'секунд и разрешаем работу таймера . . 500 LOCATE 1,35:PRINT "TIME: ";LEFT$(TIME$,5) 'позиционируем 510 RETURN 'курсор и печатаем время Низкий уровень. BIOS содержит специальное пустое прерывание (1CH), которое ничего не делает, пока Вы не напишите для него процедуру. При старте вектор этого прерывания указывает на инструкцию IRET (возврат из прерывания); при его вызове происходит моментальный возврат. Но прерывание 1CH интересно тем, что оно вызывается прерыванием таймера BIOS после того, как это прерывание обновило значение счетчика времени суток. Можно сказать, что это аппарат- ное прерывание, происходящее автоматически 18.2 раза в секунду. Вы можете изменить вектор этого прерывания так, чтобы он указывал на процедуру в Вашей программе. После этого Ваша процедура будет вызываться 18.2 раза в секунду. О том как написать и установить свою процедуру обработки прерывания см. в [1.2.3]. цированное значение счетчика времени суток, сравнить его с ожи- даемым временем, и выполнить то что требуется, когда ожидаемое время наконец наступит. Естественно, что когда время еще не по- дошло, то процедура просто возвращает управление, ничего не де- лая. Таким образом, процессор не выполняет лишней работы. В приведенном примере процедура (не показанная здесь) запраши- вает у пользователя число минут (до 60), которое должно пройти до того, как раздастся звонок будильника. Это число, запасенное в MINUTES, умножается на 1092 для перевода в эквивалентное число импульсов счетчика времени суток. Для периода в пределах одного часа достаточно 16 бит - более длинные периоды требуют более сложных 32-битовых операций. Это число импульсов добавляется к младшему слову текущего значения счетчика времени суток и запоми- нается в ALARMCOUNT. Затем вектор прерывания 1CH изменяется таким образом, чтобы он указывал на процедуру ALARM. Помните, что как только вектор будет изменен, ALARM будет автоматически вызываться 18.2 раза в секун- ду. При вызове эта процедура читает текущее значение счетчика времени суток через прерывание 1AH и сравнивает с ALARMCOUNT. При совпадении этих величин вызывается процедура BEEP (также не пока- занная здесь - см. [2.2.4]), которая выдает звуковой сигнал. В противном случае происходит возврат. Обычный код возврата из аппаратных прерываний (MOV AH,20H / OUT 20H,AL) включать в проце- дуру не нужно, так как он будет в прерывании таймера. Будьте |
|
|