首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

发'A5',接收到'35',串口接收127以后数据有关问题

2012-02-01 
发A5,接收到35,串口接收127以后数据问题?我自己根据网上资料编的程序,127以下收发没问题,127以上出现

发'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.

热点排行