请教单片机高手,MODE 0的串口发送。while(!TI) 是什么意思?它里面的_nop_(); 会是死循环吗?

SBUF=*p;while(!TI)//如果发送完毕,硬件会置位TI(表示发送结束和申请中断){_nop_();}p++;... SBUF = *p;
while(!TI) //如果发送完毕,硬件会置位TI (表示发送结束和申请中断)
{
_nop_();
}
p++;
展开
 我来答
gaphy2010
2011-04-27 · TA获得超过5848个赞
知道小有建树答主
回答量:786
采纳率:0%
帮助的人:827万
展开全部
单片机串口发送过程中 TI 置 1,直到发送完毕,硬件自动将 TI 置 0
while(!TI) 就是 直到串口发送完毕就停止,由于 _nop_() 只是一个短延时,所以不会是死循环
追问
SBUF = *p是已发一个数据吗?while(!TI) 是当TI=1时则“!TI”为0表示发送完了?这样理解吗?谢谢~~
追答
SBUF = *p 不要理解为已发一个数据(这时候是未发送的),这是将 1Byte 数据存入 SBUF,
但是单片机开了总中断和串口中断后,会自动将存入 SBUF 的数据发送出去·。(数据存入 SBUF 后,单片机自动将TI 置 1,并发送数据,发送完,单片机自动将TI 置 0)
接着,为了保证每发送完 1Byte 后再发下 1Byte,用 while(!TI) 即检查 TI 是否等于 0 循环判断当前 SBUF 中的数据是否发送完毕,未发送完毕的话,延时一下,再检查,直到确认发送完毕,退出循环,继续循环后的代码。
while(!TI) 是当TI=1时则“!TI”为0表示发送完了, 可以这样理解。
zhxiufan
推荐于2017-10-24 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38385
国家科技进步奖

向TA提问 私信TA
展开全部
while(!TI)
{
_nop_();
}
的意思是当TI=0时,一直执行空操作,知道TI=1,退出。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黄石佳诚家电维修
2011-04-27 · TA获得超过1427个赞
知道小有建树答主
回答量:1559
采纳率:93%
帮助的人:599万
展开全部
不是,_nop_();延时一1US
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一万光年MEGn0
2011-04-27 · TA获得超过3712个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1073万
展开全部
nop() 不是死循环
while(!TI) 是 wait serial send data end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式