打印
[疑难问答]

串口通讯问题

[复制链接]
2106|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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下的回车。
而没有这个的话语句肯定是不能执行的,编译器会直接报错。

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

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

SBUF=data;
while(TI==0)
TI=0;

使用特权

评论回复
板凳
David_ming| | 2010-6-12 23:35 | 只看该作者
顶一下老X

使用特权

评论回复
地板
hanfei08131106| | 2010-6-13 16:04 | 只看该作者
顶、、

使用特权

评论回复
5
guita|  楼主 | 2010-6-13 22:04 | 只看该作者
谢谢2楼的回答

使用特权

评论回复
6
wangwo| | 2010-6-13 22:09 | 只看该作者
这个回答很细致

使用特权

评论回复
7
jx_mcu| | 2010-6-13 22:57 | 只看该作者
受教,谢谢!

使用特权

评论回复
8
batsong| | 2010-6-13 23:08 | 只看该作者
老x回答的很好:handshake

使用特权

评论回复
9
xiaohuai| | 2010-6-16 23:10 | 只看该作者
X回答切中要害了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

108

帖子

1

粉丝