谢谢您及大家的回复,看了大家的回复后,我领悟到我首贴描述的不严谨,在发送单个字节,不连续占用串口应该是可以的,程序发不出去数据是因为上一次的数据没有发送完成,连续往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写数据,等下次再写。
|