猿问

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

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


MM们
浏览 1303回答 3
3回答

MYYA

用ICC产生的初始化程序#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXCvoid 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);}

九州编程

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

温温酱

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