×
嵌入式 > 技术百科 > 详情

单片机串口编程问题

发布时间:2020-06-06 发布时间:
|
我现在正搞双机通信,不过遇到一个问题,问题是这样的:
这样就可以
while(TI==0);
TI=0;
……
……

这样就不行,我用以下方法不能检测到TI=1,为何呀?
for(i=0;(i<10)&&(TI==0);i++);
TI=0;
if(i<10)
//正确处理
else
//错误处理

没有必要使用第二种方法 
串口发送数据时需要一定时间。假设波特率为9600bps,则每位需要一百多us,如果数据位为8位,一位校验位,则发送一字节数据需要一个多ms。第二种方法的错误之处在于认为发送不需要时间或时间很短。作者的本意可能是对TI做10次判断,如果10次判断都发现TI为0,即发送未完成,则认为发生错误;否则若在10次判断之内发现TI为1,即发送完成,则认为发送正确。实际情况是执行10次循环的时间远小于发送所需的时间,因此发送还未结束,循环便已退出,并作出了发送错误的判断。正确的处理是在循环之前加一个延时程序,延时时间应大于发送所需的最小时间。我个人认为完全没有必要采用第二种方法。对于51单片机串口,只有发送结束和未结束的情况,没有正确与错误的概念。如果说发送错误,即执行发送的指令后51的内部硬件电路不能正确的将数据发送出去或者不能使TI置1,那表示CPU坏掉了或者晶振有问题。所谓的正确和错误应该是指接收方收到的数据是正确的还是错误的。 
 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
教你如何选一款内外兼备的吊顶LED灯