Измерение временных интервалов в IBM PC

Цель работы: Программирование микросхемы таймера 8254. Измерение периода следования импульсов.

В системах управления производственными процессами часто возникает задача контроля частотно-временных параметров. Существуют несколько способов измерения частоты. Например, подсчет количества импульсов входного сигнала в течение заданного интервала времени. Недостаток способа – зависимость точности измерения от частоты входного сигнала и длительности интервала измерения. Погрешность увеличивается при уменьшении измеряемой частоты и неизменной длительности временного окна.

Другой метод измерения – измерение периода входного сигнала, для чего подсчитывается количество импульсов эталонной частоты. Данный метод применим для измерения относительно низких частот, поскольку с увеличением входной частоты точность измерения снижается при неизменной частоте образцового сигнала.

Для повышения точности измерения можно подчитывать количество импульсов образцовой частоты в течение заданного количества периодов входного сигнала.

В основе систем реализующих данный метод – счетчики, осуществляющие счет импульсов входного и эталонного сигналов.

Программирование временных интервалов в IBM PC осуществляется с помощью микросхемы таймера 8254, работающей независимо от процессора. Микросхема имеет три идентичных канала, каждый из которых может программироваться.

Импульсы от нулевого канала накапливаются в четырехбайтовом счетчике в области данных BIOS.

 
 

Канал 0 устанавливается таким образом, что выдает импульсы с частотой 18,2 Гц. Каждый импульс инициирует прерывание от таймера, которое увеличивает показания счетчика.

На вход каждого канала поступают импульсы с частотой 1,19 МГц. Для канала 2 возможно управлять прохождением импульсов с помощью бита 0 системного порта 61h. Каждый канал имеет одинаковую структуру и содержит 8-битный регистр ввода-вывода, а также 16-битные регистр защелку и регистр счетчик.

Микросхема таймера имеет 6 режимов работы.

Чаще всего используется третий, при котором она формирует прямоугольные импульсы со скважностью 2.

Для управления микросхемой таймера используется восьмиразрядный регистр, содержащий слово состояния, с помощью которого производится выбор канала, задание режима работы канала, тип операции передачи значения в канал. Адрес регистра – 43h.

Слово состояния, записываемое по этому адресу имеет следующий формат.

бит 0 – тип константы пересчета. 0 – константа задана двоичным числом; 1 – константа задана двоично-десятичным числом. Константа пересчета – значение, загружаемое извне в регистр защелку и определяющее частоту импульсов на выходе канала.

биты 1...3 – определяют режим работы таймера. Для третьего режима 011.

биты 4 и 5 – определяют тип операции: 00 – передать значение счетчика в регистр-защелку; 10 – записать в регистр защелку только старший байт; 01 – записать в регистр-защелку только младший байт; 11 – записать сначала старший, затем младший байт.

Таким образом, для программирования микросхемы 8254 производится в три этапа:

1. Записать управляющий байт в регистр 43h.

2. Установить или сбросить бит 0 порта 61h для управления вторым каналом.

3. Определить значение счетчика в диапазоне от 0 до 65535, поместить его в ах и послать сначала младший, а затем старший байт в регистр ввода-вывода требуемого канала.

канал 0 – адрес 40h;

канал 1 – адрес 41h;

канал 2 – адрес 42h.

Каналы микросхемы работают постоянно, поэтому программы пользователя по завершению работы с таймером должны самостоятельно восстанавливать начальные установки его регистров.

Текущее время храниться в счетчике времени суток BIOS в четырех байтах (см. рисунок 10).

MS-DOS предоставляет средства для чтения и установки времени, при этом выполняя необходимые преобразования между значениями счетчика времени и часами-минутами-секундами. Время выдается с точностью до сотых секунд, но поскольку счетчик обновляется с частотой в пять паз меньшей, показания сотых очень приближенные. Для измерения временных интервалов с большей точностью возможно изменение установки канала 0 для повышения частоты обновления счетчика времени суток, которая является эталонной частотой при данном способе контроля временных интервалов.

Функция 2Сh прерывания 21h выдает время, а 2Dh – устанавливает его.

В обоих случаях регистр ch содержит часы, cl – минуты, dh – секунды, dl – сотые доли секунд.

Номер функции помещается в ah. То есть для получения времени:

mov ah, 2Dh

int 21h

Недостаток способа – неудобство его применения в том случае, если частота обновления счетчика времени изменяется программно, например для измерения временных интервалов с точностью большей, чем 1/18 секунды.

Более удобно использовать прерывание BIOS 1Ah, возвращающее два младших байта счетчика в dx, a два старших – в сх. Код функции помещается в ah. 1 – устанавливает счетчик, 0 – читает его. Для чтения счетчика:

mov ah, 0

int 1Ah

При изменении частоты следования импульсов на выходе канала 0 таймера, программы пользователя должны рассчитывать соответствующее изменение реального времени за период измерения и по окончании измерения восстанавливать корректное значение счетчика для сохранения времени.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: