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