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, младший байт содержит принятое через порт значение.