51单片机发送字节,是把一个字节写入到subf,就会把ti置1,为什么又要把ti再置回0再开ES=1呢?

那接收数据又是个怎样的流程呢?是把数据发送过来就出发RI=1吗|?求大神详解... 那接收数据又是个怎样的流程呢?是把数据发送过来就出发RI=1吗|?求大神详解 展开
 我来答
lycdl
高粉答主

推荐于2017-11-26 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4918万
展开全部
单片机通过串口向外发送一个字节的数据结束后,就会将TI置1,表示发送完了,如果是开中断的话,就会产生中断,在中断子程序中继续发送下一个字节。因这次已经响应了,就应该把TI清0,表示这一次的中断已响应了,如果不清0,就会再次产生中断的,一次发送引起两次或者多次中断,就错误了。所以,一次中断后必须将本次的标志位TI清0,TI是一次有效。如果是查询方式,把要发送的数据写到SUBF后就要查询TI的状态了,当TI=1,就说明这次发送结束了,也必须将TI清0,再发送下一个字节。
在中断子程序中,通常是首先就将TI清0,而中断程序结束后再开ES=1,假如这个顺序反过了,也是可以的,只要在中断子程序中将TI清0就行,至于是否将再开ES=1,要看在中断子程序中的前面关了ES=0,从中断返回后就要开ES=1。其实这一关一开,在中断子程序中没有什么必要,如果不关,也就不用再开了,虽然没有关,在响应串口中断时也不会再响应串口中断,必须从中断返回后才能再次响应的。这只是一些人的习惯了这么写,也没有关系,只要不被误导就好。
如果是单片机接收数据,当接收到一个字节后,就会将RI置1,或者引起中断,从SBUF中读出数据,或者查询RI,再读数据。通常是采用中断的方式接收数据,这样不影响单片机执行其它程序,也不至于因为等待接收数据造成死机。
zhxiufan
2014-04-01 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38385
国家科技进步奖

向TA提问 私信TA
展开全部
你的说法是不准确的,当将数据写入SBUF后,只有发送完成后,TI才置1申请中断。你说的要将TI清0后再开ES=1中断,这是作者想发送数据时不要用到中断,发送完成后因为TI此时为1,如果ES=1,那么将进入中断服务程序,所以清0后再开中断。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2014-04-01 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
51单片机发送字节,是把一个字节写入到subf,
--对,这就开始发送了。

就会把ti置1,
--需要经过一段时间,发送完了,TI 才会置一。

为什么又要把ti再置回0再开ES=1呢?
--是应该这样。
--为什么?好好想想就知道了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式