问题一:
在编写串口通信程序的时候,我们要写流量控制:
常见有硬件方式RTS/CTS和DTR/DSR方式,软件方式有XON/XOFF和自定义的方式.
(1)怎样写程序使流量控制为硬件方式RTS/CTS?
(2)怎样写程序使流量控制为硬件方式DTR/DSR?
(3)怎样写程序使流量控制为软件方式XON/XOFF?
(4)书写自定义方式怎样写?
问题二:
串口通信有异步和同步.
(1)同步和异步程序中有什么区别?
(2)它们分别怎样写?
请高手解答啊,分不够,我再开个帖子,一定重分答谢.但是谢绝灌水,灌水不给分.
在编写串口通信程序的时候,我们要写流量控制:
常见有硬件方式RTS/CTS和DTR/DSR方式,软件方式有XON/XOFF和自定义的方式.
(1)怎样写程序使流量控制为硬件方式RTS/CTS?
(2)怎样写程序使流量控制为硬件方式DTR/DSR?
(3)怎样写程序使流量控制为软件方式XON/XOFF?
(4)书写自定义方式怎样写?
问题二:
串口通信有异步和同步.
(1)同步和异步程序中有什么区别?
(2)它们分别怎样写?
请高手解答啊,分不够,我再开个帖子,一定重分答谢.但是谢绝灌水,灌水不给分.
看DCB struct
fOutxCtsFlow
If this member is TRUE, the CTS (clear-to-send) signal is monitored for output flow control. If this member is TRUE and CTS is turned off, output is suspended until CTS is sent again.
fOutxDsrFlow
If this member is TRUE, the DSR (data-set-ready) signal is monitored for output flow control. If this member is TRUE and DSR is turned off, output is suspended until DSR is sent again.
问题二
区别是软件的实现,最好用异步。
fDtrControl
{
dcb.fInX = TRUE;
dcb.fOutX = TRUE;
dcb.fOutxDsrFlow = FALSE;
dcb.fOutxCtsFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
}
// 设置流控制为硬件
{
dcb.fInX = FALSE;
dcb.fOutX = FALSE;
dcb.fOutxDsrFlow = TRUE;
dcb.fOutxCtsFlow = TRUE;
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
}
// 不用流控制
{
dcb.fInX = FALSE;
dcb.fOutX = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fOutxCtsFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
}// 创建异步通讯的串口,加上FILE_FLAG_OVERLAPPED标识
DWORD com = CreateFile( "COM3", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL );// 同步的写操作
DWORD size;
WriteFile( com, "123", 3, size, NULL );
// 同步的读操作
char buf[123];
ReadFile( com, buf, 123, size, NULL );// 异步的写操作
OVERLAPPED oa;
oa.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
WriteFile( com, "123", 3, NULL, &oa );
WaitForSingleObject( oa.hEvent, 0xFFFFFFFF );// 异步的读操作
DWORD e=0;
WaitCommEvent( com, &e, &oa );
WaitForSingleObject( oa.hEvent, 0xFFFFFFFF );
if( e == EV_RXCHAR )
{
ReadFile( com, buf, 123, NULL, &oa );
WaitForSingleObject( oa.hEvent, 0xFFFFFFFF );
}这些都是最基础的,剩下的自己去看MSDN!