Справочник программиста на персональном компьютере фирмы IBM. Таймеры и звук
Страница 7. Операции запрограммированные во времени


     2.1.6 Операции запрограммированные во времени.


   Программа определяет время для выполнения определенной  опера-
ции в точности так же, как и человек: берется начальное показание
счетчика  времени суток и затем сравнивается с последующими пока-
заниями.  Можно получать  значения в формате часы-минуты-секунды,
но  слишком хлопотно вычислять разницу между такими  показаниями,
поскольку система счета не десятичная. Лучше прямо читать счетчик
времени  суток BIOS, измерять продолжительность в 1/18 секунды, а
затем уже переводить ее в обычный формат чч:мм:сс.

100 GOSUB 500              'получаем значение счетчика
110 START = TOTAL          'сохраняем начальное значение в START
      .
 (далее идет процесс, длительность которого измеряется)
      .
300 GOSUB 500              'получаем финальное значение
310 TOTAL = TOTAL - START  'подсчитываем число импульсов
320 HOURS = FIX(TOTAL/65520)  'вычисляем число часов
330 TOTAL = TOTAL - HOURS*65520  'вычитаем часы из TOTAL
340 MINUTES = FIX(TOTAL/1092)    'вычисляем число минут
350 TOTAL = TOTAL - MINUTES*1092 'вычитаем минуты из TOTAL
360 SECONDS = FIX(TOTAL/18.2)    'вычисляем число секунд
370 PRINT HOURS,MINUTES,SECONDS  'печатаем результат
380 END
      .
      .
500 DEF SEG = 0            'подпрограмма чтения времени суток
510 A = PEEK(&H46C)        'получаем младший байт
520 A = PEEK(&H46D)        'получаем следующий байт
530 A = PEEK(&H46E)        'и еще один
540 TOTAL = A + B*256 + C*65535  'подсчитываем результат в TOTAL
550 RETURN                 'все сделано

   Функция TIMER в Бейсике  возвращает  число секунд, прошедших с
момента, когда счетчик времени суток был последний раз установлен
в 0. Обычно это число  секунд,  прошедших  со  времени последнего
включения  компьютера.   Если при старте системы  правильно  было
установлено системное время,  то  TIMER  возвращает число секунд,
прошедших с полуночи. Просто напишите N = TIMER.

   Средний уровень.


   Прерывание  1AH  имеет  две функции для установки (AH =  1)  и
получения (AH = 0) счетчика  времени  суток.  Для чтения счетчика
надо просто выполнить прерывание с AH = 0.  При возврате значение
счетчика содержится в CX:DX, причем младшее слово в CX. AL содер-
жит 0, если счетчик не переходил через границу 24 часов с момента
последней установки. Для установки счетчика поместите два слова в
те  же  регистры, а в AH - 1.  В приведенном  примере  измеряются
промежутки времени в  пределах  часа.  При  этом нужны только два
младших  байта счетчика.  Но в этом случае необходимо  проверять,
что не было перехода через границу, когда начальное значение было
больше, чем следующее.

;---в сегменте данных
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 секунды и т.д.

 
« Предыдущая статья   Следующая статья »