Описание функций Си

       

Bioscom



     bioscom

Функция Выполняет ввод/вывод из последовательного порта.

Синтаксис #include

int bioscom(int cmd, char abyte, int port);

Файл, содержащий bios.h прототип

Описание Функция bioscom выполняет разнообразную связь через RS232 при помощи порта ввода/вывода, указываемого в аргументе port.

Значение 0 аргумента port соответствует COM1, значение 1 соответствует COM2 и т.д.

Значение аргумента cmd может быть одним из следу- ющих:

0 - устанавливает параметры связи в abyte; 1 - пересылает символ в abyte по линии связи; 2 - получает символ по линии связи; 3 - возвращает текущее состояние коммуникационного порта.

abyte является комбинацией следующих битов (из каждой группы выбирается одно значение):

0x02 - 7 битов данных 0x00 110 бод 0x03 - 8 битов данных 0x20 150 бод

0x00 - 1 стоп-бит 0x40 300 бод 0x04 - 2 стоп-бита 0x60 600 бод 0x00 - нет проверки на четность 0x80 1200 бод 0x08 - проверка на нечетность 0xA0 2400 бод 0x18 - проверка на четность 0xC0 4800 бод 0xE0 9600 бод

Например, если abyte имеет следующее значение 0xEB (0xE0|0x08|0x00|0x03), то это устанавливает для коммуникационного порта скорость передачи 9600 бод, контроль на нечетность, 1 стоп-бит, и 8 битов данных. bioscom использует прерывание BIOS 0x14.

Возвращаемое Для всех значений cmd bioscom возвращает шестнадца- значение тибитовое целое число, где 8 старших бит - это биты состояния, а 8 младших битов варьируются в зави- симости от значения cmd. Старшие биты в возвраща- емом значении имеют следующие значения:

бит 15 - таймаут; бит 14 - передающий сдвиговый регистр пуст: бит 13 - передающий регистр хранения пуст; бит 12 - обнаружено прерывание; бит 11 - ошибка формирования кадра синхронизации; бит 10 - ошибка четности; бит 9 - ошибка переполнения; бит 8 - готовность данных.

Если значение в abyte невозможно передать, то ус- танавливается бит 15. В других случаях старшие и младшие биты устанавливаются соответствующим об- разом. К примеру, если возникла ошибка кадра син- хронизации, то устанавливается бит 11.


Если cmd имеет значение 2, то считываемый байт находится в младших битах, если не было ошибки. Если же произошла ошибка, устанавливается, по крайней мере, один из старших бит. Если ни один из старших бит не установлен, значит байт был по- лучен без ошибки.

Если cmd имеет значение 0 или 3, то возвращаемое значение содержит старшие биты, как они были опреде- лены выше, а младшие биты определяются следующим образом:

бит 7 - прием обнаруженного линейного сигнала; бит 6 - кольцевой индикатор; бит 5 - набор данных готов; бит 4 - готовность к передаче; бит 3 - изменение в приеме детектора линейного сигнала; бит 2 - завершающий кольцевой детектор; бит 1 - изменение в готовности набора данных; бит 0 - изменение в готовности к передаче.

Переносимость bioscom поддерживается только на компьютерах IBM PC или совместимых с ними.

Пример:

#include

#include

#define COM1 0 #define DATA_READY 0x100 #define SETTINGS (0x80|0x02|0x00|0x00)

int main(void) { register int in, out, status; bioscom(0, SETTINGS, COM1); cprintf("... BIOSCOM [ESC] to exit ...\n"); while (1) { status = bioscom(3, 0, COM1); if (status & DATA_READY) if ((out=bioscom(2, 0, COM1) & 0x7F) != 0) putch(out); if (kbhit()) { if ( (in = getch()) == '\x1B') return(0); bioscom(1, in, COM1); } } return 0; }


Содержание раздела