[疑难问答] 串口通讯问题

[复制链接]
 楼主| guita 发表于 2010-6-12 23:01 | 显示全部楼层 |阅读模式
SBUF=data
while(TI==0)
TI=0;
请问
这是发送一个数据代码
data送给SBUF然后TI不就置1,
我就不明白 ,既然TI=1,那为什么还要while(TI==0)
这时TI始终为1,下面的TI=0就无法执行。那TI怎么置0.
xwj 发表于 2010-6-12 23:15 | 显示全部楼层
等待发送完。

发送前将TI清零,当发送完后硬件会自动将TI改为1,所以只要一直查询TI标志就能知道是否发送完了。
而之后的TI=0;当然是为了下一字节做准备。


另外,提醒LZ注意:
C语言下,“;”是非常重要的标志,代表执行这个语句,相当于DOS下的回车。
而没有这个的话语句肯定是不能执行的,编译器会直接报错。

所以贴程序是千万不要少了分号";"哦~ 也千万不要把半角的";"打成全角的""哦~
所以正确的程序应该这样写:

  1. SBUF=data;
  2. while(TI==0);
  3. TI=0;
而且如果写成下面这样的话编译器不会报错,但结果那就完全不一样了:
——就作为作业吧,你自己去想象,然后回答执行结果会有什么不一样。

  1. SBUF=data;
  2. while(TI==0)
  3. TI=0;
David_ming 发表于 2010-6-12 23:35 | 显示全部楼层
顶一下老X
hanfei08131106 发表于 2010-6-13 16:04 | 显示全部楼层
顶、、
 楼主| guita 发表于 2010-6-13 22:04 | 显示全部楼层
谢谢2楼的回答
wangwo 发表于 2010-6-13 22:09 | 显示全部楼层
这个回答很细致
jx_mcu 发表于 2010-6-13 22:57 | 显示全部楼层
受教,谢谢!
batsong 发表于 2010-6-13 23:08 | 显示全部楼层
老x回答的很好:handshake
xiaohuai 发表于 2010-6-16 23:10 | 显示全部楼层
X回答切中要害了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

108

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部