单片机串口编程问题
时间:06-26
来源:互联网
点击:
我现在正搞双机通信,不过遇到一个问题,问题是这样的:
这样就可以
while(TI==0);
TI=0;
……
……
这样就不行,我用以下方法不能检测到TI=1,为何呀?
for(i=0;(i10)(TI==0);i++);
TI=0;
if(i10)
//正确处理
else
//错误处理
没有必要使用第二种方法
串口发送数据时需要一定时间。假设波特率为9600bps,则每位需要一百多us,如果数据位为8位,一位校验位,则发送一字节数据需要一个多ms。第二种方法的错误之处在于认为发送不需要时间或时间很短。作者的本意可能是对TI做10次判断,如果10次判断都发现TI为0,即发送未完成,则认为发生错误;否则若在10次判断之内发现TI为1,即发送完成,则认为发送正确。实际情况是执行10次循环的时间远小于发送所需的时间,因此发送还未结束,循环便已退出,并作出了发送错误的判断。正确的处理是在循环之前加一个延时程序,延时时间应大于发送所需的最小时间。我个人认为完全没有必要采用第二种方法。对于51单片机串口,只有发送结束和未结束的情况,没有正确与错误的概念。如果说发送错误,即执行发送的指令后51的内部硬件电路不能正确的将数据发送出去或者不能使TI置1,那表示CPU坏掉了或者晶振有问题。所谓的正确和错误应该是指接收方收到的数据是正确的还是错误的。
这样就可以
while(TI==0);
TI=0;
……
……
这样就不行,我用以下方法不能检测到TI=1,为何呀?
for(i=0;(i10)(TI==0);i++);
TI=0;
if(i10)
//正确处理
else
//错误处理
没有必要使用第二种方法
串口发送数据时需要一定时间。假设波特率为9600bps,则每位需要一百多us,如果数据位为8位,一位校验位,则发送一字节数据需要一个多ms。第二种方法的错误之处在于认为发送不需要时间或时间很短。作者的本意可能是对TI做10次判断,如果10次判断都发现TI为0,即发送未完成,则认为发生错误;否则若在10次判断之内发现TI为1,即发送完成,则认为发送正确。实际情况是执行10次循环的时间远小于发送所需的时间,因此发送还未结束,循环便已退出,并作出了发送错误的判断。正确的处理是在循环之前加一个延时程序,延时时间应大于发送所需的最小时间。我个人认为完全没有必要采用第二种方法。对于51单片机串口,只有发送结束和未结束的情况,没有正确与错误的概念。如果说发送错误,即执行发送的指令后51的内部硬件电路不能正确的将数据发送出去或者不能使TI置1,那表示CPU坏掉了或者晶振有问题。所谓的正确和错误应该是指接收方收到的数据是正确的还是错误的。
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)