亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1359 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號