为了账号安全,请及时绑定邮箱和手机立即绑定

Qt串口单片机通信接收到的为什么是乱?

Qt串口单片机通信接收到的为什么是乱?

MM们 2019-04-11 11:07:37
Qt串口单片机通信接收到的为什么是乱
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

用ICC产生的初始化程序
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
//uart has received a character in UDR
//UCSRB&=~BIT(RXCIE); //接收完毕中断不使能
//AVR没有中断优先级概念,中断处理结束前不接受新中断,没必要关接收中断
RX_Buffer[i]=UDR;
// delay(5);
i++;
if(i==12)
{
i=0;
flag=1;
//delay(5);
}

查看完整回答
反对 回复 2019-04-15
?
九州编程

TA贡献1785条经验 获得超4个赞

当然老是接收到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了,速度给分啊,用手机打了老半天

查看完整回答
反对 回复 2019-04-15
?
温温酱

TA贡献1752条经验 获得超4个赞

void ser() interrupt 4 //串口中断函数
{
if(RI)
{
RI=0;
a=SBUF; //收到的数据存入缓冲器,然后赋给a
flag=1;
}
}
另外看看你的波特率,应该有问题,9600的话初值应该是0xfd,初始化时也没有设置1T模式,缺省状态应该12T模式的。



查看完整回答
反对 回复 2019-04-15
  • 3 回答
  • 0 关注
  • 1302 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信