Организация общесистемных средств счета времени
Программируемый интервальный таймер ВИ53/ВИ54 является прибором широкого назначения. На его основе могут "быть построены разнообразные времязависимые устройства, имеющие общесистемное значение: генераторы скорости передачи последовательных данных, часы суточного времени, средства контроля за длительностью обращения к системной магистрали и др. Учитывая широкий интерес к средствам такого типа, рассмотрим примеры их конкретной реализации для МС на базе ВМ80.
Генератор скорости. Генератор скорости передачи данных через последовательные каналы может быть построен на базе одного из счетчиков ПИТ. Например, адаптера ИРПС используется счетчик СТ2, который должен быть запрограммирован для работы в режиме генератора прямоугольных импульсов. На вход GATE счетчика необходимо подать напряжение высокого уровня, а вход CLK соединить с линией системной частоты CCLK. При перезапуске системы (включении питания или нажатии клавиши RESET) генератор скорости должен быть проинициализирован. Это делается с помощью специальной процедуры инициализации VELINI, переводящий СТ2 в режим 3 с обменом словами в двоичном коде:
VELINI:PUSH PSW
MVI A, 10110110B; Код команды
OUT PIT+3
POP PSW
RET
Процедуру установки скорости передачи удобно оформлять в виде отдельной подпрограммы VEL, принимающей через регистровую пару ВС 16-разрядный фактор скорости в двоичной форме:
VEL: PUSH PSW
MOV А, С ; Младший байт фактора
OUT PIT+2 ;скорости
MOV А, В ; Старший байт фактора
OUT PIT+2 ; скорости
POP PSW
RET
С учетом дополнительного деления частоты на К внутренними средствами ПСА параметр х для подпрограммы VEL рассчитывается по формуле: x=CCLK/KV, где V—скорость передачи информации. Значения переменной х для стандартных скоростей передачи при CCLK =2 МГц и К =16 приведено в табл. 14.3.
Очевидно, что с помощью данной схемы скорость передачи 19200 Гц с достаточной точностью не может быть получена. Для решения данной задачи необходим специальный подбор значений частоты CCLK, которая для ВМ80 связана с частотой выхода 02TTL ГТИ. Если использовать CCLK = 1,9384 МГц, то можно получить все стандартные частоты. Для этого потребуется кристалл с частотой OCS = 17,4456 МГц и параметр х, который представлен выше в скобках.
Часы суточного времени. Если функцию счета времени возложить на программные средства, то для реализации часов достаточно построить генератор меток реального времени. Для этой цели резервируется счетчик СТО программируемого таймера, вход CLK которого соединяется с CCLK, на вход GATE подается напряжение высокого уровня, а выход OUT используется в качестве сигнала запроса на прерывание высшего приоритета IRO. Такая схема обеспечивает своевременную обработку меток реального времени через систему прерываний.
Таблица 14.3
Требуемая скорость V, Гц | Параметр х | Действительная скорость V, Гц | Отклонение от стандарта, Гц |
104(112) 52(56) 26(28) 13(14) 7(7) | + 2 +4 + 8 + 16 -1343 |
Контроллер прерываний ВН59 фиксирует запрос на прерывание по фронту с предварительным удержанием низкого уровня напряжения на входе не менее 120 нс. Поэтому СТО можно запрограммировать для работы как в режиме 2, так и в режиме 3. Остановимся на режиме 2:
MVI OUT |
А.00110100В PIT+3 |
;Код команды ;для ПИТ |
Процедура установки частоты следования меток реального времени подобна VEL:
CLK: PUSH PSW
MOV А,С ;Младший байт
OUT PIT
MOV А,В ;Старший байт
OUT PIT
POP PSW
RET
Обычно эти метки следуют с частотой 50 Гц. Предполагая, что CCLK = 2 МГц, получаем стандартную процедуру инициализации генератора системного времени:
CLKINI: PUSH PSW
MVI А,00110100В ;Код команды
OUT PIT+3 ;для ПИТ
LXI B,40000 ;Слово данных ПИТ
CALL CLK ;Вывод слова данных
POP PSW
RET
Скорость счета может быть изменена в любой момент вызовом подпрограммы CLK.
Счет суточного времени может быть организован специальной программой, запускаемой по прерыванию IRO. Подпрограмма ведет счет в формате «часы, минуты, секунды, доли секунд» и использует 8 байт данных:
MODUL: DB 50 ;Число системных меток
;в секунде
DB 60 ;Число секунд в минуте
DB 60 ;Число минут в часе
DB 24 ;Число часов в сутках
TIME: DS 1 ;Доли секунд
DS 1 ;Секунды
DS 1 ;Минуты
DS 1 ;Часы
Предполагается, что метки следуют с частотой 50 Гц:
CLOCK: PUSH PSW ;Сохранить
PUSH В ;состояние регистров
;МП
PUSH D
PUSH Н
LXI H,MODUL ;Установить начальные
LXI D,TIME ;значения указателей
MVI В,4 ;Установить счетчик
;циклов
NEXT: LDAX D ;Выбрать текущее
;значение времени
INR А ;Увеличить его на 1
CMP M ;Сравнить с максимальным
JNZ ОК ;Конец счета, если меньше
XRA А ;Иначе-
STAX D ;сброс ячейки памяти
INX Н Модифицировать
INX D указатели
DCR В ;Уменышить значение
;счетчика циклов на 1
JNZ NEXT ;Переход, если цикл
;не последний
OK: STAX D ;Сохранить модифи-
;цированное значение
;текущего времени
POP H восстановить
POP D ;состояние регистров
;МП
POP В
CALL EOI ;Конец прерывания
POP PSW
EI ;Разрешить прерывание
RET
Для получения текущего времени хранения в четырех соседних байтах с базой TIME необходимо просто прочитать их содержимое, например, с помощью процедуры:
TGET: DI ;Запретить прерывания
LDA TIME+1 ;Секунды
LHLD TIME+ 2 ;Часы и минуты
EI ;разрешить прерывания
RET
Программа возвращает в регистре А секунды, в L минуты, в Н часы. Установка времени выполняется обратной процедурой, при этом доли секунд игнорируются:
TSET: DI ;Запретить прерывания
STA TIME+1 ;Секунды
SHLD TIME+ 2 ;Часы и минуты
EI ;разрешить прерывания
RET
Подпрограммы используются при запрещенных прерываниях, что обеспечивает монопольный доступ к разделяемому двумя параллельными процессами CLOCK и TGET/TSET блоку данных TIME. В противном случае могут быть ошибки, связанные с одновременностью доступа.
Временные затраты, необходимые для поддержки рассмотренных выше часов суточного времени при тактовой частоте ВМ80, равной 2 МГц, и частоте системных меток 50 Гц составляют 1,2%. В тех случаях, когда они не удовлетворяют пользователя, их можно снизить, за счет уменьшения частоты генерации системных меток, отказа от счета суточного времени с преобразованием в часы и перехода к счету в периодах системных меток, расширения аппаратурных средств поддержки часов или перехода к их полной аппаратной реализации.