51单片机 串口通信 发送数据不稳定
我用的是STC的52RC,和电脑上C++的程序通信。计算机发送一个数,单片机接受到,在传回计算机。现在的问题是,我如果把一个数据发送20遍,只有第一次或者前两次传回的数据...
我用的是STC的52RC,和电脑上C++的程序通信。计算机发送一个数,单片机接受到,在传回计算机。
现在的问题是,我如果把一个数据发送20遍,只有第一次或者前两次传回的数据是对的,之后数据就是混乱的值了。
单片机程序(串口部分):
void senddata(char t)
{
SBUF=t;
while(TI==0);
TI=0;
}
void serialport(void) interrupt 4
{
while(RI==0);
RI=0;
Euler[i]=SBUF;
senddata(Euler[i]);
}
计算机C++程序:
int i;
for(i=0;i<20;i++)
{ char spbuff[2];
int a,b;
int sp_wr,sp_rd;
spbuff[0]=100;
spbuff[1]=20;
sp_wr=sp.SendData(spbuff,sizeof(spbuff));
if(sp_wr==0)
cout<<"data sending failed"<<endl;
else
cout<<"data sending successed"<<endl;
sp_rd=sp.ReadData(spbuff,2);
a=int(spbuff[0]);
b=int(spbuff[1]);
cout<<a<<" "<<b<<endl;
}
得到的结果是,前两次数据是100和20;之后是别的数,偶尔又是100和20。不知道是什么问题。
PS.在串口调试助手中发送的话,发送0f ff两个数,回传的是8f ff。如果发送10,回传是90。凡是最高位不是1的时候,全都变成1了。 展开
现在的问题是,我如果把一个数据发送20遍,只有第一次或者前两次传回的数据是对的,之后数据就是混乱的值了。
单片机程序(串口部分):
void senddata(char t)
{
SBUF=t;
while(TI==0);
TI=0;
}
void serialport(void) interrupt 4
{
while(RI==0);
RI=0;
Euler[i]=SBUF;
senddata(Euler[i]);
}
计算机C++程序:
int i;
for(i=0;i<20;i++)
{ char spbuff[2];
int a,b;
int sp_wr,sp_rd;
spbuff[0]=100;
spbuff[1]=20;
sp_wr=sp.SendData(spbuff,sizeof(spbuff));
if(sp_wr==0)
cout<<"data sending failed"<<endl;
else
cout<<"data sending successed"<<endl;
sp_rd=sp.ReadData(spbuff,2);
a=int(spbuff[0]);
b=int(spbuff[1]);
cout<<a<<" "<<b<<endl;
}
得到的结果是,前两次数据是100和20;之后是别的数,偶尔又是100和20。不知道是什么问题。
PS.在串口调试助手中发送的话,发送0f ff两个数,回传的是8f ff。如果发送10,回传是90。凡是最高位不是1的时候,全都变成1了。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询