![]() |
發布時間: 2018-7-31 23:08
正文摘要:各位好,本人由于剛剛接觸51單片機,在學習串口通訊中遇到了困難, 問題是: 由串口助手輸入字符串后,再返回到串口助手上的字符串卻有丟失,丟失的特點為,間隔丟失。 自己的理解: 函數中有比較函數 ... |
謝謝各位前輩給我的建議和熱心的解答!但是我的問題是為什么會出現這樣的情況以及解決方法,最佳答案只能給解決了這兩個問題的人哈。大家對我編程的建議我都應用在后續程序中了,使得邏輯更加清晰了,非常感謝!![]() |
void intSIO() interrupt 4 using 2 { if(TI) { TI=OFF; if(bSD) { if(curSND<lenSND) SBUF=bufSND[curSND++]; else {bSD=OFF;/*mSI=0;*/}}} if(RI){ RI=OFF; bufRCV[putRCV++]=SBUF; putRCV &= 0X07;} } |
那請問將發送寫入中斷后,如何觸發TI=1的條件呢?如果不能觸發TI=1就不能將數據寫入SBUF,而數據沒有寫入SBUF,就無法觸發TI=1的條件,這是個死循環啊。。。。。。 我的理解是這樣的![]() |
象這樣寫. void intSIO() interrupt 4 using 2 { if(TI){ TI=OFF; if(bSD){ if(curSND<lenSND) SBUF=bufSND[curSND++]; else {bSD=OFF;/*mSI=0;*/}}} if(RI){ RI=OFF; bufRCV[putRCV++]=SBUF; putRCV &= 0X07;} } |
把發送也要寫到中斷里,不能這樣寫 |
你的send_str函數里面已經在for循環里將i++了,然后你TI = 0;后依然i++。檢查一下。 void send_str(void) //發送接收到的字符串 { u8 i; for(i=0; i<10; i++) { TI = 0; SBUF=rec[i]; while(!TI); TI = 0; } } |