读书人

C++Builder API串口接收数据异常

发布时间: 2012-05-03 14:06:56 作者: rapoo

C++Builder API串口接收数据错误
我用C++Builder API接收不到单片机发送的0xFF。
但是英文字母都能接受到,哪位大虾能帮帮忙,多谢。下面是我的接收代码

void __fastcall hComThread::Execute()
{
//---- Place thread code here ----
char ReadBuff[1];
memset(&OverRead,0,sizeof(OVERLAPPED));
OverRead.hEvent=CreateEvent(NULL,true,true,NULL);
if (OverRead.hEvent==NULL)
Terminate();
if (!SetCommMask(hCom,EV_RXCHAR|EV_TXEMPTY))
Terminate();
while (!Terminated)
{

WaitForSingleObject(OverRead.hEvent,INFINITE);
bool WaitComEv;
DWORD dwError;
AnsiString Gotstr;
DWORD ReadStat;
DWORD BytesRead;
DWORD dwErrorFlags;

WaitComEv=WaitCommEvent(hCom,&dwEvtMask,&OverRead);
if (WaitComEv)
ClearCommError(hCom,&dwError,&comstat); //更新串口状态结构体,并清除所有串口硬件错误
else if (!WaitComEv && GetLastError()==ERROR_IO_PENDING)
{
ClearCommError(hCom,&dwError,&comstat);//更新串口状态结构体,并清除所有串口硬件错误
while (comstat.cbInQue>0)// && dwEvtMask==EV_RXCHAR)
{
ReadStat=ReadFile(hCom,//用CreateFile 获得的文件句柄
ReadBuff,//输入缓冲区首址
1,//设定读入字节数
&BytesRead,//实际读入字节数
&os); //重叠操作方式数据结构地址
if (!ReadStat && GetLastError()==ERROR_IO_PENDING )
{
while (!GetOverlappedResult(hCom,&os,&BytesRead,true))
{
dwError=GetLastError();
if (dwError==ERROR_IO_INCOMPLETE)
continue;
else
break;
}
}
dat=ReadBuff[0];//dat+ReadBuff[0];接收到的数据
ClearCommError(hCom,&dwError,&comstat);//更新串口状态结构体,并清除所有串口硬件错误
if(ReadBuff[0]==255) //判断是否为0xFF
dat="F";
}
}
}
}
//---------------------------------------
//用定时器将接收到的代码显示出来
void __fastcall TForm5::Timer1Timer(TObject *Sender)
{
Label1->Caption = dat;
Edit1->Text="";
Edit1->Text=dat;
Memo2->Text=intput_data;
}

[解决办法]
问题可能在这一句
if(ReadBuff[0]==255) //判断是否为0xFF

这一句应该写成
if ( static_cast<unsigned char>(ReadBuff[0]) == 255 )

或者将ReadBuff定义成无符号字符型

读书人网 >C++ Builder

热点推荐