请教单片机高手,MODE 0的串口发送。while(!TI) 是什么意思?它里面的_nop_(); 会是死循环吗?
SBUF=*p;while(!TI)//如果发送完毕,硬件会置位TI(表示发送结束和申请中断){_nop_();}p++;...
SBUF = *p;
while(!TI) //如果发送完毕,硬件会置位TI (表示发送结束和申请中断)
{
_nop_();
}
p++; 展开
while(!TI) //如果发送完毕,硬件会置位TI (表示发送结束和申请中断)
{
_nop_();
}
p++; 展开
4个回答
展开全部
单片机串口发送过程中 TI 置 1,直到发送完毕,硬件自动将 TI 置 0
while(!TI) 就是 直到串口发送完毕就停止,由于 _nop_() 只是一个短延时,所以不会是死循环
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表示发送完了, 可以这样理解。
展开全部
while(!TI)
{
_nop_();
}
的意思是当TI=0时,一直执行空操作,知道TI=1,退出。
{
_nop_();
}
的意思是当TI=0时,一直执行空操作,知道TI=1,退出。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是,_nop_();延时一1US
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
nop() 不是死循环
while(!TI) 是 wait serial send data end
while(!TI) 是 wait serial send data end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询