CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по функциям C/C++
bioscom
bioscom
Функция Выполняет ввод/вывод из последовательного порта. Синтаксис #include<bios.h> 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 <bois.h> #include <conio.h> #define COM1 0 #define DATA_READY 0x100 #define TRUE 1 #define FALSE 0 #define SETTINGS (0x80|0x02|0x00|0x00) int main(void) { int in, out, status,DONE=FALSE; bioscom(0, SETTINGS, COM1); cprintf("... BIOSCOM [ESC] to exit ...\n"); while (!DONE) { 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') DONE = TRUE; bioscom(1, in, COM1); } } return 0; }