请教单片机串口发送延时的问题
我想用单片机连接不断地向电脑发数,如下:while(1){send_char('9');delay(n);}如每发送一个数,应延时多少微妙好呢?即一般最短能延时多少微米呢...
我想用单片机连接不断地向电脑发数,如下:
while (1)
{
send_char('9');
delay(n);
}
如每发送一个数,应延时多少微妙好呢?即一般最短能延时多少微米呢?如延时太长的话,那发送很多数据不就用很长时间吗? 展开
while (1)
{
send_char('9');
delay(n);
}
如每发送一个数,应延时多少微妙好呢?即一般最短能延时多少微米呢?如延时太长的话,那发送很多数据不就用很长时间吗? 展开
3个回答
展开全部
不做太多的串口处理分析,只顺着你的问题和你的方法说说:
先考虑下串口的速率 假设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);这部就是延迟等待吗?那根本不需要主函数去延迟了,直接发就行了。
先考虑下串口的速率 假设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);这部就是延迟等待吗?那根本不需要主函数去延迟了,直接发就行了。
展开全部
一般来说,延时不需要太长的。有的时候我们为了确认每一数发送正确,会手动添加比较长的延时,例如几us。
但是,如果你要连续发送字符串,每个字节间不需要太长的延时。只要保证了通信数据最后的停止位,再适当添加几个时钟周期来保证同步,就可以了。
欢迎追问~
但是,如果你要连续发送字符串,每个字节间不需要太长的延时。只要保证了通信数据最后的停止位,再适当添加几个时钟周期来保证同步,就可以了。
欢迎追问~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以不用延时,可以这样
while (1)
{
SBUF='9';
while(!TI);
TI=0;
}
如果回答对你帮助,请采纳、谢谢
while (1)
{
SBUF='9';
while(!TI);
TI=0;
}
如果回答对你帮助,请采纳、谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询