在线等,VC串口。

coolwangfei 2004-03-23 03:05:36
为什么总是不能正确收到数据。(总是重复收一个数),只需要得到一个BYTE
初始化:
m_comm.SetCommPort(1);
m_comm.SetInputMode(1);
m_comm.SetSettings("2400,n,8,1");
m_comm.SetRThreshold(1);
if(!m_comm.GetPortOpen())
m_comm.SetPortOpen(TRUE);
接收:
VARIANT Recieve;
COleSafeArray Rdata;
CString str;
LONG length,i;
BYTE data[1024];
// data[0]=0;
char a=0;

if(m_comm.GetCommEvent()==2)
{

m_Rdata.Empty();
Recieve=m_comm.GetInput();

length=Rdata.GetOneDimSize();

//将数据转换为BYTE型数组
for(i=0;i<length;i++)
{

Rdata.GetElement(&i,data+i);

}


//将数组转换为CString型变量
for(i=0;i<length;i++)
{
char a=*(char*)(data+i);
str.Format("%c",a);
m_Rdata+=str;
}
}

}
...全文
30 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hnliuling 2004-03-23
  • 打赏
  • 举报
回复
int CCommunicationCL_2001::AcceptData(unsigned long nLength)
{
unsigned long length=nLength;
int nReadResult=0;
COMSTAT ComState;
DWORD dwErrorFlags;

if(nLength<=0) return 0;
// 保护COM串口资源
EnterCriticalSection(&m_csCommunicationSync);
// 从指定串口读取指定长度的数据
nReadResult=ReadFile(m_hComm,m_aAcceptData,nLength,&length,&m_osRead);
// nReadResult=0表示读取失败,非0表示已读取的字符个数

if(!nReadResult)
{//不成功
if(GetLastError()==ERROR_IO_PENDING) // 异步读取还再进行
{//如读串口未完成
// 读取异步操作结果,0表示失败,非0表示成功
while(!GetOverlappedResult(m_hComm,&m_osRead,&nLength,true))
{//等待读操作完成
if(GetLastError()==ERROR_IO_INCOMPLETE)
continue;//IO操作未完成,继续等待
else
{//IO操作完成,清除串口错误
ClearCommError(m_hComm,&dwErrorFlags,&ComState);
break;
}
}
}
else
{//清除串口错误。
ClearCommError(m_hComm,&dwErrorFlags,&ComState);
}
}
PurgeComm(m_hComm,PURGE_RXCLEAR);//清除串口接收缓冲区
// 释放串口资源
LeaveCriticalSection(&m_csCommunicationSync);

// 返回已读到的字符个数
return nReadResult;
}
m_aAcceptData是个自己设置大小的缓冲区
aidoudou 2004-03-23
  • 打赏
  • 举报
回复
设置一下输入缓冲区

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧