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