Смекни!
smekni.com

Коммуникационные порты (стр. 2 из 2)

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

Некоторые ПР вообще не имеют непосредственного отношения к выводам порта, т.к. являются регистрами состояния. Их используют для настройки порта. Например, некоторое количество ножек порта могут работать на передачу/приём. Для того, чтобы установить режим их работы (передача, приём или передача и приём) в соотв. ПР порта записывают определённый код. Ориентируясь на него, контроллер порта устанавливает соотв. режим работы этих ножек.

Каждой ножке в ПР соответствует весовой коэффициент в двоичном коде. Т.е. для того, чтобы выставить “1” на каком то выводе порта, нужно записать в соответствующий ей подрегистр её весовой коэффициент. Напротив, при считывании состояния входной линии порта, порт вернёт не состояние “0” или “1”, а “0” или “N”, где N – весовой коэффициент данной ножки. Возвращение портом “0” означает, что на входе “0”. Возвращение же “N” означает, что на входе “1”.

Указанные действия в языке Паскаль 7.0 выполняет процедура port[]. Формат её записи следующий: port[b+n]:=m; Где:

b – адрес БР порта.

n – номер подрегистра.

m – весовой коэффициент вывода.

Попробуем с её помощью установить “1” на выводе RTS(7) COM порта.

Для этого обратимся к таблице 1:

Таблица 1. Назначение контактов COM порта (разъём DB-9S.)

Сигнал. Контакт разъёма DB-9S. Направление. Подрегистр. Вес.
TxD 3 Передача. Х Х
RxD 2 Приём. Х Х
DTR 4 Передача. 4 1
DSR 6 Приём. 6 32
RTS 7 Передача. 4 2
CTS 8 Приём. 6 16
DCD 1 Приём. 6 8
RI 9 Приём. 6 64
GND 5 Земля. X X

Как следует из таблицы, выводу RTS соответствует 7 контакт стандартного девятиконтактного COM порта. Он относится к 4 подрегистру и имеет в нём вес равный 2.

Адрес базового регистра, это адрес порта. Для COM1 он равен $3F8 (для COM2 - $2F8, для LPT1 - $378, LPT2 - $278).

Теперь разберёмся, как читать состояние входов.

Как уже говорилось выше, порт возвращает “0”, если на входе “0”, и “N”, если на данном входе “1”. Причём в некоторых случаях (особенно, при работе с LPT) “N” может быть равно сумме кодов ножек, если “1” присутствует не на одном входе.

Осуществляется приём следующим образом: e:=port[b+n] and m;

Где: e – переменная типа byte, в которую сохраняют принятое значение.

b – адрес БР порта.

n – номер подрегистра.

m – весовой коэффициент входа (см. таблицу 1).

Для проверки этой записи соединим перемычкой выход RTS(7) и вход CTS(8) и запустим приведённый ниже код: (пример 1)

var

aa,e:word;

port,base,data:word;

{.........}

aa:=0;

base:=$3F8;

begin

port:=base+4;

data:=2;

outport(port,aa,data);

sleep(10);

port:=base+6;

e:=inport(port) and 16;

port:=base+4;

data:=0;

outport(port,aa,data);

end;

Управлять конкретными выводами порта из под Дельфи можно и с помощью API. Это хоть и сложнее, зато такая программа будет работать на любом Windows, в т.ч. на NT, 2000, XP (приведённые выше пример работоспособен лишь в 95/98/МЕ).

Список использованной литературы

1) Работа с коммуникационными портами (COM и LPT) в программах для Win32. http://bcb.net.ru/article/hard/index003.html

2) Коммуникационные порты персонального компьютера. http://electronics.org.ua/techinfo/lpt/lpt.htm

3) Основы программирования LPT для DOS и Win9x. http://radiopirat.h11.ru/prog/prog004.htm

4) Примеры работы с АЦП. http://dikoy44.narod.ru/photoalbum.html

5) Вакуленко А. Программа LPTtest. – Радио, 2004, №8, с. 23,24.

6) Патрик Гёлль. Как превратить ПК в измерительный комплекс. ДМКпресс, 2002г.

7) Фаронов В.В. TurboPascal 7.0 практика программирования, учебное пособие, М., изд. Нолидж, 2003 г.

8) Павловская Т.А. Паскаль. Программирование на языке высокого уровня, учебник, П, 2003 г.