![]() |
發(fā)布時(shí)間: 2018-7-31 23:08
正文摘要:各位好,本人由于剛剛接觸51單片機(jī),在學(xué)習(xí)串口通訊中遇到了困難, 問題是: 由串口助手輸入字符串后,再返回到串口助手上的字符串卻有丟失,丟失的特點(diǎn)為,間隔丟失。 自己的理解: 函數(shù)中有比較函數(shù) ... |
謝謝各位前輩給我的建議和熱心的解答!但是我的問題是為什么會(huì)出現(xiàn)這樣的情況以及解決方法,最佳答案只能給解決了這兩個(gè)問題的人哈。大家對(duì)我編程的建議我都應(yīng)用在后續(xù)程序中了,使得邏輯更加清晰了,非常感謝!![]() |
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;} } |
那請(qǐng)問將發(fā)送寫入中斷后,如何觸發(fā)TI=1的條件呢?如果不能觸發(fā)TI=1就不能將數(shù)據(jù)寫入SBUF,而數(shù)據(jù)沒有寫入SBUF,就無法觸發(fā)TI=1的條件,這是個(gè)死循環(huán)啊。。。。。。 我的理解是這樣的![]() |
象這樣寫. 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;} } |
把發(fā)送也要寫到中斷里,不能這樣寫 |
你的send_str函數(shù)里面已經(jīng)在for循環(huán)里將i++了,然后你TI = 0;后依然i++。檢查一下。 void send_str(void) //發(fā)送接收到的字符串 { u8 i; for(i=0; i<10; i++) { TI = 0; SBUF=rec[i]; while(!TI); TI = 0; } } |
Powered by 單片機(jī)教程網(wǎng)