求AVR16单片机中延时函数的计算方法c语言编程。

 我来答
头好舞05
推荐于2016-02-09 · TA获得超过2099个赞
知道小有建树答主
回答量:797
采纳率:100%
帮助的人:497万
展开全部
那个1141是比较精确的。8M晶振,也就是说AVR在1秒内有8000000个时钟周期,而很多指令是单周期的,所以1ms能执行8000条指令,而for循环本身会有几条指令,要加1,要比较,再加上一个跳转,一次循环要用8个时钟周期。可能很多8M晶振偏快一点,所以就不是1000而是1141了。要注意有些编译器会优化掉这种在编译器看来无意义的空循环。
百度网友2ec756f
2011-10-31
知道答主
回答量:13
采纳率:0%
帮助的人:7.5万
展开全部
void delayMS(uint i)
{
uint j;
for(;i!=0;i--)
{for(j=8000;j!=0;j--){;}}
}
这种是普通延时
计算的时候
注意晶振的频率
这个延时1ms
8MHZ晶振
AVR单片机技术提供 ( http:// szphdz .taobao .com )去空格复制浏览器
追问
为啥我们看到的普通的AVR单片机8M晶振下,延时程序都是
for(i=0;i<1141;i++)
这里是1141,而你这个是写的8000
这个差距也太大了吧。貌似还需要算uint是多少位这个,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
302659906
2011-10-31 · 超过28用户采纳过TA的回答
知道答主
回答量:93
采纳率:0%
帮助的人:68.4万
展开全部
for(i=255;i>0;i--)
for(j=255;j>0;j--)
{;}
照着修改吧,然后debug看延时多少修改i,j数值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wqs4
2011-11-01
知道答主
回答量:3
采纳率:0%
帮助的人:5016
展开全部
void Delay_1us(void)
{
asm("nop");
}
void Delay_Nus(unsigned int unNus)
{
for(;unNus > 0; unNus-- )
Delay_1us();
}
毫秒级可以照着修改
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式