单片机与电脑串口通信,无论发什么信息都收到00,求问是怎么回事?代码见下面。
答案:3 悬赏:60
解决时间 2021-02-15 20:13
- 提问者网友:寂寞梧桐
- 2021-02-15 10:23
单片机与电脑串口通信,无论发什么信息都收到00,求问是怎么回事?代码见下面。
最佳答案
- 二级知识专家网友:不如潦草
- 2021-02-15 11:27
当然老是接收到00了,我给你解释一下:你的串口中断函数不止是在接收数据的时候执行,在执行while(!Ti);时等待发送完成时也会触发中断函数,此时sbuf里面为空,数据之前被取走了。解决办法:把串口中断函数改为:void ser()interrupt 4
{if(Ri)
{Ri=0;
a=sbuf;
}
if (Ti)
{
}}
当然老是接收到00了,我给你解释一下:你的串口中断函数不止是在接收数据的时候执行,在执行while(!Ti);时等待发送完成时也会触发中断函数,此时sbuf里面为空,数据之前被取走了。解决办法:把串口中断函数改为:void ser()interrupt 4{if(Ri){Ri=0;a=sbuf;
flag=1;
}if (Ti){}}
再说一句,sbuf里面的数之前被取走的话就为0了,速度给分啊,用手机打了老半天
{if(Ri)
{Ri=0;
a=sbuf;
}
if (Ti)
{
}}
当然老是接收到00了,我给你解释一下:你的串口中断函数不止是在接收数据的时候执行,在执行while(!Ti);时等待发送完成时也会触发中断函数,此时sbuf里面为空,数据之前被取走了。解决办法:把串口中断函数改为:void ser()interrupt 4{if(Ri){Ri=0;a=sbuf;
flag=1;
}if (Ti){}}
再说一句,sbuf里面的数之前被取走的话就为0了,速度给分啊,用手机打了老半天
全部回答
- 1楼网友:woshuo
- 2021-02-15 12:08
void ser() interrupt 4 //串口中断函数
{
if(RI)
{
RI=0;
a=SBUF; //收到的数据存入缓冲器,然后赋给a
flag=1;
}
}
另外看看你的波特率,应该有问题,9600的话初值应该是0xfd,初始化时也没有设置1T模式,缺省状态应该12T模式的。
{
if(RI)
{
RI=0;
a=SBUF; //收到的数据存入缓冲器,然后赋给a
flag=1;
}
}
另外看看你的波特率,应该有问题,9600的话初值应该是0xfd,初始化时也没有设置1T模式,缺省状态应该12T模式的。
- 2楼网友:行雁书
- 2021-02-15 11:40
TMOD = 0x20;//设置定时器1为工作方式2
TH1 = 0xd9; //装初值,设定波特率为9600
TL1 = 0xd9;
……
d9,这是设定 9600 吗?
TH1 = 0xd9; //装初值,设定波特率为9600
TL1 = 0xd9;
……
d9,这是设定 9600 吗?
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯