看板Programming
标 题Re: 请问_inp与_outp如何使用
发信站SayYA 资讯站 (Wed Jul 5 00:50:53 2006)
转信站ptt!ctu-reader!news.nctu!SayYa
※ 引述《[email protected] (我要认真念书)》之铭言:
> 各位大大:
> 小弟我现在的程式目的是希望可以写一个C程式的介面,在这个介面中我可以让使用者
> 输入一个数字,然後程式接收到这个数字後,可以透过RS-232传出电脑给我已经插好
> 的一块8051版子做处理,然後再把处理好的结果透过RS-232传回电脑来给介面程式
> 然後要秀在萤幕上,可是小弟我现在的瓶颈是我查MSDN找到了_inp与_outp这两个
> 函式库可以用於传送和接收的动作,而我想问的是如果我现在的port如果是COM1 =0x3f8
> 这个port,那我只要把0x3f8这个port number当作是parameter传给_inp与_outp
> 这两个function就可以了嘛,这样RS-232就会透过我的程式帮我把data送出去了嘛
> 还是我的程式还缺少什麽,需要再做什麽样的设定,请各位大大教我。
> 谢谢
如果是在 Win32 OS 下, OS 已经提供了 Win32 Communications API.
这边我示范一个例子, 透过 COM1 输出一个字串 "Hi There\r\n", 然後读入一个 byte.
(用 115200 bps baud rate)
{
DCB dcb;
HANDLE handle;
COMMTIMEOUTS cto;
DWORD dwNoByte;
char szPort[] = "\\\\.\\COM1";
char buf[1];
handle = CreateFile (szPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (handle == INVALID_HANDLE_VALUE) {
ulErr = GetLastError ();
return;
}
memset (&dcb, 0, sizeof (dcb));
BuildCommDCB ("115200,n,8,1", &dcb);
dcb.fOutxCtsFlow = TRUE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.EofChar = 0x1a;
dcb.XonChar = 0x11;
dcb.XoffChar = 0x13;
SetCommState (handle, &dcb);
cto.WriteTotalTimeoutMultiplier = 0;
cto.WriteTotalTimeoutConstant = 0;
cto.ReadIntervalTimeout = MAXDWORD;
cto.ReadTotalTimeoutMultiplier = MAXDWORD;
cto.ReadTotalTimeoutConstant = 100; // 100 ms timeout
SetCommTimeouts (handle, &cto);
WriteFile (handle, "Hi There\r\n", 10, &dwNoByte, 0);
ReadFile (handle, buf, 1, &dwNoByte, 0);
}
slash
--
※ Origin: SayYA 资讯站 <bbs.sayya.org>
◆ From: 202-178-172-235.cm.dynamic.apol.com.tw