发'A5',接收到'35',串口接收127以后数据问题?
我自己根据网上资料编的程序,127以下收发没问题,127以上出现收到的数据不对?
源程序如下:
//打开并设置COM1
hComGPS=CreateFile( "COM1 ",
GENERIC_READ|GENERIC_WRITE,
0,
NULL ,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if (hComGPS ==(HANDLE)-1)
{
AfxMessageBox( "打开COM1失败 ");
return false;
}
else
{
DCB wdcb; //设定设备控制模块
GetCommState(hComGPS,&wdcb);
wdcb.BaudRate = 2400;
SetCommState(hComGPS,&wdcb);
PurgeComm(hComGPS, PURGE_TXCLEAR);
}
数据接收程序:
//char str[1024];
BYTE rechar[1]={0xff};
DWORD wCount; //读取的字节数]
DWORD dwMaskFlag;
DWORD dwCommEvent;
DWORD dwRes;
bool bWaitingOnStatusHandle = false;
BOOL bReadStat ;
OVERLAPPED m_os={0};
m_os.hEvent=NULL;
m_os.hEvent=CreateEvent(NULL,true,false,NULL);
if (m_os.hEvent==NULL)
return 0;
dwMaskFlag=EV_RXCHAR | EV_CTS;
if (!SetCommMask(hComGPS,dwMaskFlag))
{
return 0;
}
while(1)
{
if (!WaitCommEvent(hComGPS,&dwCommEvent,&m_os))
{
if (GetLastError() == ERROR_IO_PENDING)
{
bWaitingOnStatusHandle = true;
}
else
break;
}
else
{
bWaitingOnStatusHandle = false;
}
if (bWaitingOnStatusHandle)
{
dwRes = WaitForSingleObject(m_os.hEvent, INFINITE);
GetCommMask(hComGPS,&dwCommEvent);
if ((dwCommEvent & EV_RXCHAR)==EV_RXCHAR)
{
do
{
COMSTAT comstat;
DWORD dwError = 0;
ClearCommError(hComGPS,&dwError,&comstat);
if (comstat.cbInQue==0)
break;
bReadStat = ReadFile(hComGPS,rechar,1,&wCount,&m_os);
//在此函数内根据串口号触发消息
ParseCom(hWnd,rechar,1,1);
//::PostMessage(hWnd, COM_RECVDATA, (unsigned int) str, 1);
//发送消息给对话框主窗口,以进行接收内容的显示
//}
}
while(true);
}
if (dwRes==WAIT_OBJECT_0)
{
do
{
COMSTAT comstat;
DWORD dwError = 0;
ClearCommError(hComGPS,&dwError,&comstat);
if (comstat.cbInQue==0)
break;
ReadFile(hComGPS,rechar,1,&wCount,&m_os);
ParseCom(hWnd,rechar,1,1);
}
while(true);
}
}
//ReadFile(hCom,str, 100, &wCount, &m_os);
}
CloseHandle(m_os.hEvent);
我用串口调试助手,采用16进制方式发送一个字符,如 A5,用上面的程序接收的数据是35,望高手指点!!
[解决办法]
只是有符号无符号的区别。
[解决办法]
楼上强
------解决方案--------------------
强制类型转换,否则就丢了最高字节那一位了.
[解决办法]
恩,你收用的是BYTE型无符号的数,而你发的是有符号的数char型。
[解决办法]
汗
[解决办法]
1。有些参数是必须设置的。LZ只设置了波特率,可能因为参数不同而引起程序接收的不正常。
2。BYTE和char接收的时候没有区别,可以直接这样用,没有必要强制转化。
3。 hComGPS ==(HANDLE)-1最好不要这样判断
[解决办法]
you should declare "unsigned char " type string.