单片机中while(TI==0);TI=0; 是什么意思啊

#include<reg51.h>
unsigned char a;
void main ()
{
TMOD=0x20;
TL1=0x0fd;
TH1=0x0fd;
SCON=0x0d8;
PCON=0x00;
TR1=1;
while(1):。。一直循环吗?怎么跳出来啊
{ while(RI==0)
a=SBUF;
while(TI==0) 这是什么意思啊?
TI=0; 什么意思?
}
}

有些程序中的while(1);就一个空循环,这绕进去了怎么
出来啊,要不能后面都没法运行了。
不知道这些是什么意思,劳驾高手解决下。
谢谢!!!!!
T=1,不是帧发送结束符吗?应该是发送结束时T=1,此时不置零就不能再发送吧。
单片机的程序是不是像上面的不能自动退出运行,一直检查运行下去,要强制
关闭才停止?

这个主要是单片机做串口发送用的,通常是当传送完成后TI=1,而判断TI是否等于1共有两种方法,一种是查询另一种就是串口中断,而你给出的就是查询方法,所以要无限循环的查询下去,
while(1) 就是用于查询的,但要记住因为是无限循环所以这个最好是用在主程序里,
while(RI==0) a=SBUF;这两句就是当别的单片机或者其他的设备给本单片机发送数据用的,当接收完成时那么单片机接收标志位RI==1,而当RI==1时跳转到a=SBUF,就是把接收暂存器里的数据赋值到a里,
而当本单片机送出数据时就要看发送标志位TI了,当发送完成后TI==1,while(TI==0) TI=0;这两句就是当没有发送时就一直执行while(TI==0)这条语句,而当有发送时TI==1所以就不执行这条语句而转到执行TI=0这条来,因为采用那个查询方式时,当发送完成后必须要手动使TI=0,否则单片机将无法进行下次传送,因为TI==1单片机就默认为传送一直进行中。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-02
发送数据发完的时候TI会自动置1向CPU发中断申请,在while(TI==0)时TI已经被置1判断为假,跳出循环。由于硬件自动将TI置1所以必须由软件将其清0所以就用上了TI=0的赋值动作.
第2个回答  推荐于2017-09-14
因为1为真,所以while(1)下面{}里的内容将一直循环进行,无法跳出,通常放在主程序中

而while(T==0),这句是试探为0,若为0,即为真,将循环执行{}中的程序,不为零,直接跳出while下面得{}本回答被提问者采纳
第3个回答  2009-05-07
串行口发送标记位,发送完毕,TI为1,手动置0后又可下次发送
第4个回答  2009-05-07
TI==0 中的 == 判断两边是否相同
TI=0;将数字0放入TI这个变量里
相似回答