// QC_LIB.C 
// программа иллюстрирует доступ к последовательному порту
// через функцию _bios_serialcom()

#include <bios.h>  //необходимо включить при использовании _bios_serialcom()
#include <stdio.h>

#define COM1        0   // первый последовательный порт
#define DATA_READY  0x100   // данные приняты и готовы для чтения

int main(void) {

	int in, out, status;

	// инициализируем последовательный порт
	// устанавливаем скорость 1200 бод, 8 битов на символ, один
	// стоповый бит

	_bios_serialcom(_COM_INIT, COM1, _COM_1200 | _COM_CHR8 | _COM_STOP1);

	printf("\n\nДля выхода нажмите клавишу [ESC]\n");

	for(;;)  {

		// определяем состояние последовательного порта

		status = _bios_serialcom(_COM_STATUS, COM1, 0);

		// если данные готовы, считываем их из
		// последовательного порта и выводим на экран  дисплея

		if(status & DATA_READY)
			if((out = _bios_serialcom(_COM_RECEIVE, COM1, 0) & 0x7F) != 0)
				putch(out);

		//  проверяем не нажата ли клавиша на клавиатуре?

		if(kbhit()) {

			// если нажата клавиша [ESC] выходим из программы

			if((in = getch()) == 0x1b)
				break;

			// в противном случае передаем код нажатой клавиши
			// на асинхронный последовательный порт

			_bios_serialcom(_COM_SEND, COM1, in);
		}
	}
	return(0);
}

