Программирование на C и C++

Онлайн справочник программиста на C и C++

bioscom, _bios_serialcom

int bioscom(int cmd, char byte, int port)

unsigned _bios_serialcom(int cmd, int port, char byte)

Прототип: 
Описание: 

Эти функции не определены стандартом ANSI С.

Функции bioscom() и _bios_serialcom() используются для манипуляций асинхронным комму­никационным портом RS232, задаваемым в параметре port. Их операции определяются парамет­ром cmd, чьи величины показаны ниже, как и их макроэквиваленты, определенные в файле bios.h.

cmd Макрос Значение
0 _COM_INIT Инициализировать порт
1 _COM_SEND Послать символ
2 _COM_RECEIVE Получить символ
3 _COM_STATUS Возвратить статус порта

Перед использованием последовательного порта может возникнуть необходимость инициали­зировать его каким-либо образом, отличным от установок по умолчанию. Для этого установим параметр cmd равным 0. Точный способ установки порта определяется значением параметра byte, кодирующегося инициализирующими параметрами, как показано ниже:

Скорость передачи в бодах кодируется, как показано ниже:

Скорость Битовый шаблон
9600 1 1 1
4800 1 1 0
2400 1 0 1
1200 1 0 0
600 0 1 1
300 0 1 0
150 0 0 1
110 0 0 0

Разряды паритета кодируются, как показано ниже:

Паритет Битовый шаблон
Без паритета 0 0
Нечетный 0 1
Четный 1 1

Число стоп-битов определяется вторым битом байта, инициализирующего последовательный порт. Если он равен 1, то используются два стоп-бита, в противном случае используется один стоп-бит. И наконец, число бит данных устанавливается с помощью кода в нулевом и первом бите инициализирующего байта. Из четырех возможных битовых шаблонов действительными являются только два. Если первый и нулевой биты содержат шаблон 1 0, то используются 7 бит данных, если они содержат 1 1, то используются 8 бит данных.

Например, если необходимо установить порт на скорость в 9600 бод с четным паритетом, одним стоп-битом и восемью разрядами данных, то следует использовать следующий битовый шаблон:

В десятичном представлении это дает 251.

Возвращаемое значение функции bioscom() и _bios_serialcom() всегда является 16-разрядной величиной. Старший байт содержит разряды статуса, принимающие следующие значения:

Разряд Значение в случае установки
0 Данные готовы (data ready)
1 Ошибка наложения (overrun error), когда несчитанные данные заменяются новыми
2 Ошибка четности
3 Ошибка кадра (framing error)
4 Обнаружено состояние брейк (break-detect error)
5 Промежуточный регистр передачи пуст
6 Сдвиговый регистр пуст
7 Ошибка тайм-аут (time-out error)

Если параметр cmd установлен в 0, 1, 2 или 3, то младший байт кодируется следующим образом:

Разряд Значение в случае установки
0 Изменение состояния CTS (clear-to-send)
1 Изменение в готовности приема данных
2 Детектор конца посылки вызова
3 Изменение сигнала DCD (несущей)
4 Свободен для передачи (clear-to-send)
5 Готов принимать данные (data-set-ready)
6 Индикатор вызова
7 Обнаружен сигнал на линии

Когда параметр cmd имеет значение 2, младший байт содержит принятое через порт значение.

Пример: