菜鸟问题:关于串口通信。请大家帮忙啊。 用MSComm控件写了一个串口通信软件(上位机PC,下位机AT89S52),但是现在改用API写,PC发送和单片机接受都实现了。现在的问题是PC接收。我知道用ReadFile(),但是由于单片机发送数据过来的时机是随机的,我怎么判断何时去读串口呢?有没有类似中断的机制,可以当单片机发送过来数据的时候,执行ReadFile().请大家多多指教啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符MSComm 的GetCommEvent()函数可以解决你的问题,它一直监视端口,当接收缓冲区内有字符时它的返回值便为2,你便可以调用函数对接收缓冲区内的字符进行接收if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 { variant_inp=m_ctrlComm.GetInput(); //读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 for(k=0;k<len;k++) { …… } } 谢谢了。但是好像我没有说清楚,用控件的办法我已经会了,但是我现在不用空间,改用WindowsAPI,不知道如何做? 那就建立一个线程:while(true){ switch(WorkFlag){ case CallData: 下发数据函数:在下发函数中确定下发的RTU站址和命令 case WaitData: 检验接收数据,如果正确就WorkFlag=ProcessData; 否则等待,如果等待tci次还是不正确,就WorkFlag=CallData; case ProcessData: 处理数据;然后WorkFlag=CallData} Sleep(1000);}} 翻译Direct3D 11的文档,请大家多多指教 如何让程序崩掉时产生dump文件? 关于变换显示位图的问题 生成的EXE双击没反应~! 我收集的一些开发工具及文档,包括MSDN 2001 Oct哦 高人给推荐几本好书吧 距离场的快速计算 百思不得其解,望大虾指点 如何继承MFC中的标准类 菜鸟问题:怎么在控制台程序中使用CString类?需要加哪些头文件,顺序怎样??? 可行吗 哥哥们,帮我一把!
MSComm 的GetCommEvent()函数可以解决你的问题,它一直监视端口,当接收缓冲区内有字符时它的返回值便为2,你便可以调用函数对接收缓冲区内的字符进行接收
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++)
{
……
}
}
while(true)
{
switch(WorkFlag)
{
case CallData:
下发数据函数:在下发函数中确定下发的RTU站址和命令
case WaitData:
检验接收数据,如果正确就WorkFlag=ProcessData;
否则等待,如果等待tci次还是不正确,就WorkFlag=CallData;
case ProcessData:
处理数据;然后WorkFlag=CallData}
Sleep(1000);
}
}