←предыдущая следующая→
... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
ется девяти контактный раз'ем).Следует отметить,что довольно
большое число последовательных портов не поддерживает весь
набор сигналов,специфицированных в стандарте RS-232.Наиболее
общими сигналами являются сигналы,приведенные в таблице ниже
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДВДДДДДДДДДДї
і сигнал і аббревиатура і контакт і
і і ГДДДДДВДДДДґ
і і і 25 і 9 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДЕДДДДґ
і запрос на посылку данных і RTS і 4 і і
і очистка для посылки і CTS і 5 і і
і набор данных готов і DSR і 6 і і
і набор данных завершен і DTR і 20 і і
і передача данных і TxD і 2 і і
і прием данных і RxD і 3 і і
і земля і GRD і 7 і і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДБДДДДДБДДДДЩ
На самом деле сигналов намного больше и это обусловлено
тем,что последовательный порт первоначально разрабатывал-
ся,как устройство поддержки модема.В связи с этим,если порт
используется совместно с другими устройствами,то многие из
его сигналов просто не нужны.Эти сигналы используются для ус-
тановления протокола аппаратного уровня между модемом и
- 31 -
компьютером.
Основная ошибка - ошибка кадрирования,т.е ошибка возни-
кающая при передаче порции данных,фиксируется,если частоты
синхронизирующих импульсов двух портов значительно отличаются
друг от друга.
Непосредственно передача данных из последовательного
порта выполняется после того,как монитор обнаружит сигнал
"очистка для посылки" (CTS),отправленный из порта-приемни-
ка.Нельзя передавать данные до тех пор,пока с помощью сигнала
CTS не будет индицирована надежность и безопасность.В терми-
нах языка СИ эта подпрограмма будет иметь вид :
do {
while (not CTS) wait;
send(byte);
} while(bytes not send);
Если есть получить аппаратное подтверждение связи то
предпочтительнее использовать его.
я15.4. Функции BIOS,используемые при передачи данных
К последовательному порту компьютера IBM PC,а так-же
совместимых с ним моделей можно получить доступ непосредс-
твенно из DOS через ПЗУ-BIOS или в обход DOS и BIOS,(BIOSBa-
sic Input Output System - базовая система ввода вывода) ис-
пользуя непосредственное управление аппаратными средства-
ми.Доступ через DOS неудобен в связи с тем,что DOS не может
организовать обратной связи с последовательным портом для
анализа его текущего состояния и организует лишь слепое чте-
ние и запись данных в порт.Наилучшим образом доступ к после-
довательному порту осуществляется через BIOS.Обработка после-
довательного порта осуществляется им через прерывание с номе-
ром 14H.
Перед использованием последовательного порта его необхо-
димо установить в начальное состояние.Прерывание 14H,утилита
0,используется для инициализации последовательного порта.Сов-
местно с другими прерываниями BIOS регистр AH используется
для хранения номера утилиты Регистр AL используется для хра-
нения параметров инициализации,которые кодируются в байте в
следующем порядке:
номер бита 7 6 5 4 3 2 1 0
ДДВДДД ДВД В ДВД
скорость передачи (бод) ДДДДДДДДЩ і і і
контроль четности ДДДДДДДДДДДДДДЩ і і
количество завершающих битов ДДДДДДДДДДДДДДЩ і
количество битов данных ДДДДДДДДДДДДДДДДДДДДДЩ
кодирование скорости передачи данных осуществляется в
соответствии с таблицей:
скорость последовательность бит
9600 1 1 1
4800 1 1 0
2400 1 0 1
1200 1 0 0
600 0 1 1
- 32 -
300 0 1 0
150 0 0 1
110 0 0 0
Число завершающих битов определяется значением второго
разряда байта инициализации последовательного порта.Если 1,то
два завершающих бита,в противном случае один завершающий
бит.Если биты в первом и нулевом разряде образуют последова-
тельность "10",то для передачи используется семь бит,если
"11" - восемь бит данных.
Контроль четности - биты 4 и 3 кодируются в соответствии
с таблицей:
Вид контроля последовательность бит
контроль отменен 0 0 или 1 0
проверка на четность 0 1
проверка на нечетность 1 1
пример : скорость передачи - 9600;контроль на чет-
ность;один завершающий бит;количество завершающих битов -
1;разрядность передаваемых данных - 8; Байт 11111011 в деся-
тичном представлении 251.
Стандарт PC предусматривает до семи последовательных
портов.Для спецификации номера порта используется регистр
DX.Первый порт имеет номер 0,второй 1 и.т.д.Функция,представ-
ленная ниже,имеющая название init_port(),используется для
инициализации портов системы.
void port_init(int port,unsigned char code)
/* инициализация порта */
{
union REGS r;
r.x.dx = port; /* последовательный порт */
r.h.ah = 0; /* функция инициализации порта*/
r.h.al = code; /* код инициализации */
int86(0x14,&r,&r);
}
Эта функция использует функцию int86(),поддерживаемую
большинством компиляторов,включая Borland C++ .Но в Borland
C++ существует функция bioscom() , описанная в библиотеке BI-
OS.H,позволяющая инициализировать последовательный порт:
bioscom(int cmd,char byte,int port),где cmd = 0 - уста-
новить параметры,заданные в byte,port = com1-0,com2-1... ос-
тальные параметры описаны в описании функции.
Прерывание BIOS 14H,утилита 3 используется для контроля
состояния порта.Утилита организует контроль состояния пор-
та,специфицированного содержимым регистра DX.После возврата
из состояния,определяемым прерыванием,в регистры AH и AL бу-
дут содержать значение,определяющее в соответствии с табли-
цей,приведенной ниже
- 33 -
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДї
і значение,устанавливающее бит і бит і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДґ
←предыдущая следующая→
... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
|
|