请教单片机串口发送延时的问题

我想用单片机连接不断地向电脑发数,如下:while(1){send_char('9');delay(n);}如每发送一个数,应延时多少微妙好呢?即一般最短能延时多少微米呢... 我想用单片机连接不断地向电脑发数,如下:
while (1)
{
send_char('9');
delay(n);
}
如每发送一个数,应延时多少微妙好呢?即一般最短能延时多少微米呢?如延时太长的话,那发送很多数据不就用很长时间吗?
展开
 我来答
zero_fn
推荐于2017-11-24 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:457万
展开全部
不做太多的串口处理分析,只顺着你的问题和你的方法说说:

先考虑下串口的速率 假设9600,那么发送一个字符要多久?
(9600bit/S) / 10bit(一个字符1+8+1) = 960字符/秒 约 1ms/byte
也就是说你如果在1ms内发送超过一个字符就没意义了,硬件速度达不到。
while(1)
{
send_char('9');
delay(n);
}
这个循环是执行周期也就十几微秒+delay()的延迟,所以任何小于1040微秒的延迟对串口硬件来说没意义,上一个还没处理完,下一个就来了根本执行不了嘛。

如果你send_char()里面有while(!TI);TI = 0;这样的语句或有串口中断TI的处理的话,那么实际上你的delay()已经在发送函数里了,while(!TI);这部就是延迟等待吗?那根本不需要主函数去延迟了,直接发就行了。
lzback1
2011-12-07 · TA获得超过2954个赞
知道小有建树答主
回答量:496
采纳率:0%
帮助的人:696万
展开全部
一般来说,延时不需要太长的。有的时候我们为了确认每一数发送正确,会手动添加比较长的延时,例如几us。
但是,如果你要连续发送字符串,每个字节间不需要太长的延时。只要保证了通信数据最后的停止位,再适当添加几个时钟周期来保证同步,就可以了。
欢迎追问~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zgr_我要下载
2011-12-07 · TA获得超过1401个赞
知道小有建树答主
回答量:454
采纳率:100%
帮助的人:510万
展开全部
可以不用延时,可以这样
while (1)
{
SBUF='9';
while(!TI);
TI=0;
}
如果回答对你帮助,请采纳、谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式