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