+-----------------------------------------+ | | | ************************************* | | * The IBM-PC COMMUNICATIONS library * | | ************************************* | | | +-----------------------------------------+ An interrupt driven serial I/O lobrary for Stand-Alone 8086 applicatons using MICRO-C. Copyright 1990-2000 Dave Dunfield All rights reserved. DK86 COMMUNICATIONS LIBRARY Page: 1 1. IBM-PC COMMUNICATIONS Library The MICRO-C WINDOWING LIBRARY is a set of functions which implement serial I/O with an 8250 type UART device, such as is used on most PC serial cards. The routines support interrupt driven reception, and XON/XOFF software flow control, as well as setting and monitoring the RS-232 control signals. To install these function into the 8086 library, place the COMM.ASM and COMM.H files in the library subdirectory (usually \MC\LIB86), and issue the following commands: slib i=tiny a=comm slib i=small a=comm 1.1 Function Definitions The following functions are available in the IBM-PC communications library: CCLOSE CCLOSE PROTOTYPE: Cclose() ARGUMENTS: None RETURN VALUE: None DESCRIPTION: This function closes the communications port previously opened using "Copen". The system interrupt vectors and all other hooks to the comm port are restored. This function must be called before any program using "Copen" terminates, otherwise the communications port will be left in an indeterminate state. If this is not done, there will be a possibility of system crash if an interrupt is received from the port after the program has terminated. EXAMPLES: Cclose(); /* Close comm port */ exit(0); /* And terminate */ CGETC CGETC PROTOTYPE: int Cgetc() ARGUMENTS: None RETURN VALUE: Character read from the communications port DESCRIPTION: This function reads a single character from the communications port previously opened with "Copen". If no character is available, "Cgetc" will wait for one. EXAMPLES: /* Get a string from the comm port */ while((c = cgetc()) != '\r') *ptr++ = c; *ptr = 0; COPEN COPEN PROTOTYPE: int Copen(int port, int speed, int mode, int modem) ARGUMENTS: port - Comm port to use (1, 2, 3 or 4) speed - Baudrate divisor to set mode - Communications parameters to set modem - Modem control lines to set RETURN VALUE: 0 - Successful open !0 - Requested comm port is not available DESCRIPTION: The "Copen" function opens a serial communications port on the IBM PC for access. An independant interrupt handler and I/O drivers are installed, which allow high speed full duplex operation of the serial port with optional XON/XOFF flow control of both receive and transmit streams. Only one serial port may be accessed at a time using these functions, If "Copen" is called more than once, it will automatically close the last port before opening the new one. The meaning of the "speed", "mode", and "modem" parameters if documented in the "comm.h" header file. An external "char" variable "Cflags" may be accessed to enable or disable transparency of the serial channel. When "transparent" is selected, XON/XOFF flow control is disabled, and all data is sent and received with no changes. When operating in this mode, you must insure that "Cgetc" is called frequently enough that the 256 byte internal receive buffer will not overflow. Since "Cflags" is used by the interrupt handler, you should disable and enable interrupts around any accesses to it. EXAMPLES: #include comm.h /* Get comm port defintions */ extern char Cflags; /* * Program to read & echo characters on the serial port * in transparent mode. (Until ESCAPE char is received) */ main() { char c; if(Copen(1, _2400, PAR_NO|DATA_8|STOP_1, SET_RTS|SET_DTR)) abort("Cannot access COM1"); disable(); /* Disable interrupts */ Cflags |= TRANSPARENT; /* Set transparency */ enable(); /* Re-enable interrupts */ while((c = Cgetc()) != 0x1B) /* Do until ESCAPE */ Cputc(c); Cclose(); /* Close the serial port */ } CPUTC CPUTC PROTOTYPE: Cputc(char c) ARGUMENTS: c - Character to write to communciation port RETURN VALUE: None DESCRIPTION: The "Cputc" function writes the given character to the communcinations port previously opened by "Copen". EXAMPLES: while(*ptr) /* Write a string to comm port */ Cputc(*ptr++); CSIGNALS CSIGNALS PROTOTYPE: int Csignals() ARGUMENTS: None RETURN VALUE: The modem input signals read from the open comm port DESCRIPTION: This function reads the modem input signals (DSR, CD, RI etc) from the serial communication port previously opened by "Copen", and returns them as an integer value. The meaning of the individual bits in the value returned by "Csignals" is documented in the "comm.h" header file. EXAMPLES: if(!(Csignals() & DSR)) { Cclose(); abort("Modem not ready"); } CTESTC CTESTC PROTOTYPE: int Ctestc() ARGUMENTS: None RETURN VALUE: 0-255 - Character read from comm port -1 - No character available DESCRIPTION: This function tests for a character from the communications port previously opened with "Copen", and returns that character if one if found. If no character is available, "Ctestc" returns -1. EXAMPLES: if((c = Ctestc()) == -1) { Cclose(); abort("No character available"); } DK86 COMMUNICATIONS LIBRARY TABLE OF CONTENTS Page 1. IBM-PC COMMUNICATIONS Library 1 1.1 Function Definitions 1