基于MFC的无线串口调试工具-哈工大(威海)
时间:12-17 15:41 阅读:1772次
*温馨提示:点击图片可以放大观看高清大图
简介:这是一个基于CSerialPort类的串口发送接收程序,比较完美适应半双工无线发射设备。
MFC是边学边做,优化度不高,但基本可以满足使用要求
大家使用的时候修改CSerialPortTestDlg::OnComm()来改变接收协议
修改 CSerialPortTestDlg::OnButtonSend() 改变发送协议
下位机按照上位机的协议写串口发送接收协议即可
示例:
void SCI_Send(void)
{
//发送 激光检测信息
unsigned char sci[17]={128},i;
sci[1]=(unsigned char)(PWMDTY23/128);
sci[2]=PWMDTY23%128;
sci[3]=PWMDTY0%128;
sci[4]=((PWMDTY0/128)<<6)|(Laser_Rec/64);
sci[5]=Laser_Rec%64 ;
sci[6]=(unsigned char)(Laser_Rec2/64);//小前瞻
sci[7]=Laser_Rec2%64 ;
sci[8]=(unsigned char)(CarSpeed/128);
sci[9]=CarSpeed%128;
sci[10]=Steer_PD.p1;
sci[11]=Steer_PD.p2;
sci[12]=Steer_PD.d1;
sci[13]=Steer_PD.d2;
sci[14]=Value;
sci[15]=Value2;
for(i=0;i<16;i++) {
while(!SCI0SR1_TDRE);
SCI0DRL=sci[i]; //标记位
}
}
/*************************************************************/
/* 串口接收函数 */
/*************************************************************/
unsigned char SCI_receive(void)
{
while(!SCI0SR1_RDRF); //等待发送数据寄存器满
return(SCI0DRL);
}
/*************************************************************/
/* 串口中断接收函数 */
/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void receivedata(void)
{
if (SCI_receive()>127)//if (SCI0DRL>127)
{
SCI_Count=0;
buf[SCI_Count]=SCI0DRL;
}
else
{
SCI_Count++;
buf[SCI_Count]=SCI0DRL;
if(SCI_Count==8)
{
//PWMDTY23=buf[1]*128+buf[2];
//PWMDTY0=buf[3]*128+buf[4];
//PWMDTY1=buf[3]*128+buf[4];
Steer_PD.p1=buf[5];
Steer_PD.p2=buf[6];
Steer_PD.d1=buf[7];
Steer_PD.d2=buf[8];
}
if(SCI_Count>8) SCI_Count=0;
}
}