我来回答你:
是这样的,当单片机在发送的时候,TI是等于0的,只有当发送完了,TI会自动变为1 ,就是发送完了。while(!TI)是在等待单片机发送完毕。明白了吗?
例如:
TI=0;
SBUF=0xaa;
while(!TI);
TI=0;
SBUF=0xbb;
while(!TI);
TI=0;
这个意思是:先把TI手动清0,发送一个0xaa;此时TI是等于0的,会停在while(!TI);当发送完了,TI自动为1;跳出死循环;然后再把TI手动清0,再发送0xbb;然后会进入while(!TI);死循环,等发送完了,TI又被自动变为1了,就跳出死循环了,懂了吗?
电子工程师。3年工作经验了。MCU小菜一碟
打个比方说, cpu 处理 "打印 100000 个字" 只需要 0.001 秒
但打印 100000 个字到屏幕上, 却需要 1 秒,
然後下一道指令是 "打印另外 100000 个字".
这个 while 的作用, 就是等完这 1 秒, 让那 100000 个字完成打印到屏幕上, 然後才开始打印另外 100000 个字; 否则 0.001 秒之後, 就会开始 "打印另外 100000 个字". 那麼之前那 100000 个字, 从出现到消失, 根本快到看不到了.
while(!TI)的意思就是说当TI=0时!TI=1,则一直在循环。跟while(TI==0)是一样的。
!TI就是IF TI==0