关于VC串口控件MSComm响应中断函数次数不定的问题
2015-04-10 19:00
639 查看
设置函数:
m_ComPort.SetRThreshold(1);//接收缓冲区有大于等于1个字符时,将引发接收数据的OnCommMscomm事件
此函数并不是说串口来一个数据就会进中断处理函数,而是说当接收缓存中的数据等于多于1个字符时就会触发中断。,当传输数据过快时,接收缓存中一定多于1个字符。然而,MSComm串口接收数据是需要时间的。也许,你想以5个字符为一组数据进行接收,但是VC可能进中断的次数是1,2,3,4等等。无法通过设置SetRThreshold的参数来确定进入中断的次数。如果以5个字符为一组数据进行接收,依然设置SetRThreshold参数为1,我们需要在中断函数中实现这个功能--以5个字符为一组数据进行接收,程序如下:
注意,为了保证连续接收数据时VC有足够的时间接收数据,需要在接收前添加延时命令:Sleep(1);
//1ms(延时时间根据具体的数据传输时间来定).如果没有这句延时的命令,接收的数据个数必然不对。
参考自:CSDN /article/8995785.html
也可以使用类COMMTIMEOUTS 进行串口的接收(readfile)和发送,具体内容请查看帖子:http://bbs.csdn.net/topics/390116830
m_ComPort.SetRThreshold(1);//接收缓冲区有大于等于1个字符时,将引发接收数据的OnCommMscomm事件
此函数并不是说串口来一个数据就会进中断处理函数,而是说当接收缓存中的数据等于多于1个字符时就会触发中断。,当传输数据过快时,接收缓存中一定多于1个字符。然而,MSComm串口接收数据是需要时间的。也许,你想以5个字符为一组数据进行接收,但是VC可能进中断的次数是1,2,3,4等等。无法通过设置SetRThreshold的参数来确定进入中断的次数。如果以5个字符为一组数据进行接收,依然设置SetRThreshold参数为1,我们需要在中断函数中实现这个功能--以5个字符为一组数据进行接收,程序如下:
<span style="color:#333333;"> VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed. CString strtemp; if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 { </span><span style="color:#ff0000;">Sleep(1); //延时1ms</span><span style="color:#333333;"> variant_inp=m_ctrlComm.GetInput(); //读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 TRACE("len is %d\n",len); for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 if(len==6) { .........(具体处理代码) } }</span>
注意,为了保证连续接收数据时VC有足够的时间接收数据,需要在接收前添加延时命令:Sleep(1);
//1ms(延时时间根据具体的数据传输时间来定).如果没有这句延时的命令,接收的数据个数必然不对。
参考自:CSDN /article/8995785.html
也可以使用类COMMTIMEOUTS 进行串口的接收(readfile)和发送,具体内容请查看帖子:http://bbs.csdn.net/topics/390116830
相关文章推荐
- vc串口通讯控件MSComm编程详解
- VC控件MSComm编写串口通信程序
- VC串口控件编程,解决内存不断增加的问题
- (来自百度知道)c/c++ VC++ MFC 关于在Static 控件里面作图的问题 详见问题补充,希望能留下QQ,交流一下
- VC中基于文档(SDI/MDI)程序中能直接用串口MSComm通讯控件吗?
- vc mscom控件串口接收不到数据问题
- [VC]关于ocx控件的自己编写的dll问题
- 关于vc访问底层应用函数,win7不能调试的问题
- 关于AndroidSDK更新之后的Fragment的控件响应的新手问题
- vc++下MSComm控件的串口通信方法
- VC控件MSComm编写串口通信程序(转)
- 关于C51的中断函数要注意的几个问题
- VC控件MSComm编写串口通信程序(转)
- VC串口控件编程,解决内存不断增加的问题
- 关于vc编辑框控件的问题
- 关于 ExtAspNet 控件 Tree 嵌套在 Region Panel 内 OnNodeCommand 无响应的问题解决方法
- MSComm32控件只支持16个串口问题的解决
- VC控件MSComm编写串口通信程序
- VC控件MSComm编写串口通信程序(转)
- 串口控件MSCOMM的注册方法(使用MSCOMM串口控件程序的发布问题)