|
謝謝您及大家的回復(fù),看了大家的回復(fù)后,我領(lǐng)悟到我首貼描述的不嚴謹,在發(fā)送單個字節(jié),不連續(xù)占用串口應(yīng)該是可以的,程序發(fā)不出去數(shù)據(jù)是因為上一次的數(shù)據(jù)沒有發(fā)送完成,連續(xù)往SBUF寫數(shù)據(jù),造成數(shù)據(jù)丟失,編寫程序時應(yīng)該判斷串口是否正在發(fā)送數(shù)據(jù),正在發(fā)送數(shù)據(jù)就不要往SBUF寫了。我現(xiàn)在才明白,有一些程序,定義一個TI_BUSY,初始化為0,程序如下:串口中斷中是這樣:if (TI){TI=0;TI_BUSY=0;} 主程序是這樣:
while(TI_BUSY);SBUF=DAT;TI_BUSY=1;這樣數(shù)據(jù)在串口忙時就等待串口發(fā)送完成,再發(fā)送下一個數(shù)據(jù),需要浪費CPU時間,但不丟數(shù)據(jù),我以前的程序就是這個路子,是不是如果發(fā)送數(shù)據(jù)的要求不是很嚴格的情況下,也可以這樣編寫:串口中斷中還是跟以前一樣,主程序中是這樣:if (!TI_BUSY){SBUF=DAT;TI_BUSY=1},先判斷串口發(fā)送器是不是忙,如果忙就不往SBUF寫數(shù)據(jù),等下次再寫。
|
|