8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 12 13 14 15 16 17 18 ... 105

каждые 55 мс. Разрешается применять только третий счетчик, так как первые два уже используются операционной системой компьютера.

Следующая функция на языке ТР6 позволяет измерить временной интервал. Переменная х указывает, по какому аналоговому входу он будет определяться. Функция port($201): =0 выполняет операцию записи в игровой порт для запуска одновибратора. Сразу после этого считывается значение счетчика 8253 и полученный результат присваивается переменной Tiroel. Потом в цикле постоянно проверяется, когда соответствующий бит регистра станет равным нулю. Как только это произойдет, значение счетчика снова считывается и присваивается переменной Time2. Затем вычисляется временной интервал. Данная функция использует процедуру init 8253 и функцию Read 8253. Первая записывает число 255 в старший и младший разряды счетчика 3 и настраивает его как независимый счетчик, вторая считывает старший и младший байты счетчика 3.

(•-Библиотека ресурсов № А16 (получение длительности периода одновибратора).-*) Function interval game port(x:integer):integer; (*x выбирает AX(x=1), AY(x=2), BX(x=3), BY(x=4).*) var

timel,time2,dummy:integer;

Procedure init 8253; («Настройка 8253.*) begin

(«Управляющее слово = Ьбп = 10110110b:

10= выбор счетчика 2;

11= сначала чтение/запись младшего байта, затем старшего; 011 = режим 3;

0 = шестнадцатибитовый двоичный счет.*)

port($43) port($42) port($43) port($61) port($43) end;

=$Ь6;(«Запись управляющего слова в управляющий регистр 8253.*)

=255;(«-Загрузка младшего байта.*)

=255:(«Загрузка старшего байта.*)

=port($61)or 1;(«Выключение внутреннего динамика.*)

=$80:(*80h - команда фиксации для счетчика 3.*)

Function read 8253:integer;

(«Считывание младшего и старшего байтов счетчика.*) var

low byte,high byte:byte; begin

low byte:=port($42); high byte:=port($43); read 8253:=low byte+256»high byte; end:

var

i: integer; begin

init 8253;

for i;=1 to 100 do i:=i;


i:=0;

dummy:=bit weight(x);

port($201):=0;

timei:=read 8253;

repeat i:=i+l until (port($201) and dummy=0) or (i>=5000); time2:=read 8253; interval game port:=time2-time1; if i>=5000 then interval game port:=0; end;

А вот как выглядит эта функция, написанная на языке Turbo Pascal для Windows:

(•-Библиотека ресурсов № А14 (чтение регистра игрового порта).-*) Function read game port(bitx:integer):integer: export; (•Адрес игрового порта: 201h

Bitx выбирает состояние АХ, AY, ВХ, BY, ВА1, ВА2, ВВ1 и ВВ2.*) var

mput byte byte; begin

mput byte:=port($201);

read game port:=round((mput byte and bit weight(bitx))/bit weight(bitx)); end;

(•-Библиотека ресурсов № A15 (запись в регистр игрового порта).-*)

Function write game port:integer; export;

(«Вводит 0 в игровой порт для запуска мультивибратора.»)

begin

port($201) :=0; end,

(•-Библиотека ресурсов № А16 (получение длительности периода одновибратора).-*) Function interval game port(x:integer):integer; export; (•x выбирает AX(x=1), AY(x=2), BX(x=3), BY(x=4).*) var

timel,time2.dummy:integer,

Procedure imt 8253, (•Настройка 8253.•) begin

(* Управляющее слово = b6h = 10110110b

10= выбор счетчика 2;

11= сначала чтение/запись младшего байта, затем старшего; 011 = режим 3;

0 = шестнадцатибитовый двоичный счет.*) port($43

port($42 port($43 port($61 port($43 end;

=255 =255

(*3ап.ись управляющего слова в управляющий регистр 8253.*) (•Загрузка младшего байта.*)

("Загрузка старшего байта.*) port($6l) or 1; (*Выключение динамика.*) $80;(*80h - команда фиксации для счетчика 3.*)

Function read 8253:integer;

(«Считывание младшего и старшего байтов счетчика.*) var

low byte,high byte: byte;


begin

lowjyte =port($42), high byte =port($43), read 8253 =low byte+256»high byte, end,

var

l integer, begin

imt 8253,

for l =1 to 10 do l =i, l =0,

dummy =bit weight(x), port($201) =0, tirael =read 8253,

repeat l =1+1 until (port($201) and dummy=0) or (i>=10000), time2 =read 8253, interval game port =time2-time1 if i>=10000 then interval game port =0, end,



0 ... 12 13 14 15 16 17 18 ... 105