Assembler для начинающих



         

Время суток - часть 6


    автоматически "проскочил" от значения 0 к значению 0FFFFH, и
    значение прочитанное вторым оказалось численно больше первого. Но
    из-за того, что регистр таймера снова начинает счет со значения
    0FFFFH, мы всегда можем вычитать эти два числа. При этом иногда
    будет появляться перенос, иногда нет, но разность этих двух чисел
    всегда будет равна числу отсчетов.
 
      Чтобы убедить вас в правильности этого положения, рассмотрим
    случай, когда счетчик загружается числом 8000H. Если первый переход
    возникает при значении 6000H, второй появится при значении 5B00H, и
    разница между ними составляет 500H. Но если первый переход
    возникает при значении 100H, второй возникает при значении 7C00H, и
    разница станет равна 8500H. Чтобы правильно отреагировать на эту
    ситуацию, программа должна была бы проверить, не произошло ли
    переполнение счетчика за время отсчета.
 
      При выполнении этой программы вы обнаружите, что значение в
    регистре BX составляет около 0A00H, и не равно ожидаемому значению
    500H. Так происходит потому, что таймер работает в режиме
    уменьшения содержимого счетчика на два по каждому временному
    импульсу. Чтобы разобраться в работе микросхемы 8253, нужно
    ознакомиться с инструкцией по ее программированию.
 
      Фиг. 8.6 дает сводку для управляющего слова микросхемы 8253.
    Для настройки одного из каналов на конкретный режим работы вы
    выводите это управляющее слово в порт 43H. Мы уже встречались с
    выводом некотрых значений в порт 43H. Чтобы "заморозить" счетчик,
    мы послали в этот порт нуль, а для настройки генератора тональности
    - код 0B6H. Посмотрим, откуда берутся эти значения.
 
      Два старших бита управляющего слова определяют канал таймера.
    Следующие два бита - выполняемую операцию. Когда мы выводим
    значение 0, выбирается таймер 0 и запирание данных в счетчике.
    Следующие 3 бита задают режим работы выбранного таймера. Эти биты



Содержание  Назад  Вперед