csdn下载的一个串口通讯与单片机通讯的程序,有些不明白的地方



计的思想主要就是在工地上传输各种材料,我列举了其中混凝土配料系统的传输:水泥,石子,沙子。本来应该是用单片机和pc机之间的通信,串口通过读缓存区异步通信,这是程序中的发送与接收部分,是程序的主体,测试连通时对方会发会发a5,我想问问outt[1]=9;这一条有什么用,我实在看不明白。
是不是写错了????????????????



void CCcc1Dlg::OnButton3() //发送按钮
{
// TODO: Add your control notification handler code here
if(!open)
{
MessageBox("串口没有打开,请重试");
return;
}
BYTE outt[9];
DWORD he;
UpdateData(TRUE);
if((m_hesha>65535)|(m_shuini>65535)|(m_shizi>65535))
return;
else{
outt[0]=term;
outt[1]=9;
outt[2]=(BYTE)(m_hesha%256);
outt[3]=(BYTE)(m_hesha/256);
outt[4]=(BYTE)(m_shuini%256);
outt[5]=(BYTE)(m_shuini/256);
outt[6]=(BYTE)(m_shizi%256);
outt[7]=(BYTE)(m_shizi/256);
he=(DWORD)(outt[0]+outt[1]+outt[2]+outt[3]+outt[4]+outt[5]+outt[6]+outt[7]);
outt[8]=(BYTE)(he%256);

WriteFile(hCom,outt,9,&num,NULL);
term++;
}
}





void CCcc1Dlg::OnTimer(UINT nIDEvent) //////接收
{
// TODO: Add your message handler code here and/or call default


if(!open)
return;
BYTE inn[10],compare;

DWORD hee,one,two,three;

ReadFile(hCom,inn,9,&num,NULL);

if(inn[0]==0xa5)
{
BYTE reback[2];
reback[0]=0x5a;
WriteFile(hCom,reback,2,&num,NULL);
}
else if(inn[0]==0x5a)
{
MessageBox("串口已经连通,请发送数据");
return;
}
else if(inn[0]==55)
{
MessageBox("数据出错,请重发.");
return;
}
else
{

hee=(DWORD)(inn[0]+inn[1]+inn[2]+inn[3]+inn[4]+inn[5]+inn[6]+inn[7]);
compare=(BYTE)(hee%256);
if(compare==inn[8])
{
one=(DWORD)inn[2]+(DWORD)inn[3]*256;
two=(DWORD)inn[4]+(DWORD)inn[5]*256;
three=(DWORD)inn[6]+(DWORD)inn[7]*256;

m_allhesha+=one;
m_allshuini+=two;
m_allshizi+=three;

m_input+=_ultoa(inn[0],nn,10);
m_input+=".\t";

m_input+=_ultoa(one,nn,10);
m_input+='\t';
m_input+=_ultoa(two,nn,10);
m_input+='\t';
m_input+=_ultoa(three,nn,10);
m_input+='\t';

GetLocalTime(&ttime);
m_input+=_ultoa(ttime.wHour,nn,10);
m_input+=':';
m_input+=_ultoa(ttime.wMinute,nn,10);
m_input+=':';
m_input+=_ultoa(ttime.wSecond,nn,10);

m_input+="\r\n";



UpdateData(FALSE);
term2++;
}//if(compare==inn[8])
else if(inn[0]==term2)
{
BYTE wrong[2];
wrong[0]=55;

WriteFile(hCom,wrong,2,&num,NULL);
}//else
}//else
CDialog::OnTimer(nIDEvent);
}

6 个解决方案

#1


如果是表示数组有9个成员的话,但实际上从来没用过,在程序的所部分(包括没列出的)只在这里出现过一条,是不是是多余的可以不要????

#2


有没有可能是为了串口通信的误码校验?

#3


长度吧

#4


他的误码校验是求和的,提供个长度值可以用于求和的误码校验?没见过

#5


这得看看单片机的程序是怎么样,他对这个outt[1]=9怎么处理。

OnTimer接收的是单片机返回的数据,不是 WriteFile 的返回啊。

#6


如果是异步通讯,那WriteFile(hCom,reback,2,&num,NULL);和ReadFile(hCom,inn,9,&num,NULL);最后一个参数是否不能为空阿?
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



猜您在找
有一个地方不明白 请教:个人做的一个地方游戏,还有些不明白! 刚学单片机,我不明白上拉电阻干嘛用? 单片机串口通讯 单片机串口通讯
智能推荐
 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告