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

[复制链接]
查看11 | 回复5 | 2013-5-2 13:06:48 | 显示全部楼层 |阅读模式
#include
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,此时不置零就不能再发送吧。
单片机的程序是不是像上面的不能自动退出运行,一直检查运行下去,要强制
关闭才停止?

回复

使用道具 举报

千问 | 2013-5-2 13:06:48 | 显示全部楼层
这个主要是单片机做串口发送用的,通常是当传送完成后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)这条语...
回复

使用道具 举报

千问 | 2013-5-2 13:06:48 | 显示全部楼层
发送数据发完的时候TI会自动置1向CPU发中断申请,在while(TI==0)时TI已经被置1判断为假,跳出循环。由于硬件自动将TI置1所以必须由软件将其清0所以就用上了TI=0的赋值动作....
回复

使用道具 举报

千问 | 2013-5-2 13:06:48 | 显示全部楼层
因为1为真,所以while(1)下面{}里的内容将一直循环进行,无法跳出,通常放在主程序中而while(T==0),这句是试探为0,若为0,即为真,将循环执行{}中的程序,不为零,直接跳出while下面得{}...
回复

使用道具 举报

千问 | 2013-5-2 13:06:48 | 显示全部楼层
串行口发送标记位,发送完毕,TI为1,手动置0后又可下次发送...
回复

使用道具 举报

千问 | 2013-5-2 13:06:48 | 显示全部楼层
TI==0 中的 == 判断两边是否相同TI=0;将数字0放入TI这个变量里...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行