Thread View: comp.os.msdos.programmer
2 messages
2 total messages
Started by Gord Kurtenbach
Thu, 26 Jul 1990 01:57
Help! serial comm problems
Author: Gord Kurtenbach
Date: Thu, 26 Jul 1990 01:57
Date: Thu, 26 Jul 1990 01:57
32 lines
1480 bytes
1480 bytes
I'm not a DOS programmer and I`m trying to write a program to read and
write over the serial port. The basic structure is:
while (1) {
<if there is something to send out then stuff it down the serial port >
<if something has been sent to the serial port then read it>
}
I've tried opening "com2" using fopen and I can successsfully stuff
data down the stream. But when I try to read from the stream with say
a call to fgetc, I get a "General failure reading com2:" errormessage.
I've fopened com2 for reading and writing and the baud rates etc are
correct and I can read data from the hardware port using bioscom so
communication is working. What is wrong here? Will this approach work
or am I on the wrong track?
My second question is, if I do get the read working how can I avoid
blocking on it?
If some kind soul out there has a stitch of code (C would be great)
that does what I want I would be most thankful for their help.
Thanks.
Gord Kurtenbach
PS: I've notice that the DOS command "copy com2: junk" also gives the
same error. Could my system be configured wrong?
Re: Help! serial comm problems
Author: Stephen B Coy
Date: Fri, 27 Jul 1990 19:51
Date: Fri, 27 Jul 1990 19:51
89 lines
2677 bytes
2677 bytes
In article <487@roo.UUCP>, kurtenba@parc.xerox.com (Gord Kurtenbach) writes:
>
> I'm not a DOS programmer and I`m trying to write a program to read and
> write over the serial port. The basic structure is:
>
> while (1) {
>
> <if there is something to send out then stuff it down the serial port >
>
> <if something has been sent to the serial port then read it>
> }
>
> If some kind soul out there has a stitch of code (C would be great)
> that does what I want I would be most thankful for their help.
>
> Thanks.
>
> Gord Kurtenbach
This is for Microsoft C although I think the only thing you'll need
to change for Turbo C or others is the _bios_serialcom() function
calls. Since its not a standard function everyone has created their
own standards. Hope this helps.
Stephen Coy
uw-beaver!ssc-vax!coy
/*
Test serial port interaction. Keyboard hits are sent across
the serial line, characters received are displayed on the
screen. Hit ESC to exit.
*/
#include <stdio.h>
#include <stdlib.h>
#include <bios.h>
#define COM1 (0)
#define COM2 (1)
#define COM COM1
#define PARITY _COM_NOPARITY
#define BITS _COM_CHR8
#define STOP _COM_STOP1
#define BAUD _COM_9600
main(int ac, char **av)
{
int c, status, error;
/* init serial port, 8bits, 1s stop bit, no parity, 9600 baud */
_bios_serialcom(_COM_INIT, COM, BITS | STOP | PARITY | BAUD);
for(;;) {
/* Is DATA_READY set? If so, grab the character. */
status = 0x0100 & _bios_serialcom(_COM_STATUS, COM, 0);
if(status) {
c = 0x00ff & _bios_serialcom(_COM_RECEIVE, COM, 0);
printf("%c", c);
}
/* Do we have data to send? */
if(kbhit()) {
c = getch();
/* bail if esc as hit */
if(c == 27) {
printf("\n\nbye...\n");
exit(0);
}
/* wait until transmit hold reg empty */
status = 0x2000 &_bios_serialcom(_COM_STATUS, COM, 0);
while(status != 0x2000) {
status = 0x2000 &_bios_serialcom(_COM_STATUS, COM, 0);
}
status = _bios_serialcom(_COM_SEND, COM, c);
if(status & 0x8000) {
fprintf(stderr, "\nError send %c\n", c);
}
} /* end of if kbrd hit loop */
} /* end of forever loop */
} /* end of main */
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads