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了。
展开
 我来答
QQ_1468210198
2012-05-09 · TA获得超过197个赞
知道答主
回答量:111
采纳率:0%
帮助的人:103万
展开全部
我估计是你的波特率有问题,12MHz和11.0592MHz的晶振看起来没多少差别,实际上使用11.0592MHz的晶振是因为,以它为基准能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式