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; }