[AVR单片机] ATMEGAL16怎么写延时函数?

[复制链接]
5116|9
 楼主| jinxuepeng123 发表于 2012-5-3 20:41 | 显示全部楼层 |阅读模式
求大虾们帮忙指点:我使用的是ATMEGAL16a单片机,接的是8M外部晶振。我现在想知道如何写延时函数。分两种情况:1、使用定时器,2、不使用定时器。比如,我要写延时5um和延时15nm的函数,用以上两种方法如何实现。求指点,详细的更好。谢谢!
dqyubsh 发表于 2012-5-4 00:08 | 显示全部楼层
你查查编译器说明,一般都有类似的延迟函数。可以参考一下开源的AVRLIB。
jobszheng 发表于 2012-5-4 23:17 | 显示全部楼层
8M外部晶振,每个指令周期的时间为0.125us
即5um的延时需要等40个周期。

15ns做不到。

以上假设楼主的5um = 5us;
joyme 发表于 2012-5-5 10:23 | 显示全部楼层
延时时间这么短,不用定时器很难做到精确
NE5532 发表于 2012-5-5 17:36 | 显示全部楼层
8MHz主频,延时5uS,汇编也就40条指令,楼主估计应该是写C的,如果是周期定时,你觉得用了定时器还能剩几句话的时间呢?还不如一个软件延时就做了,除非你有特殊需要。

15nS根本做不到,已经远小于单条指令执行时间了。
NE5532 发表于 2012-5-5 17:37 | 显示全部楼层
延时时间这么短,不用定时器很难做到精确
joyme 发表于 2012-5-5 10:23


楼上又在犯“定时器和软件延时哪个更准确”的老毛病。
joyme 发表于 2012-5-6 11:16 | 显示全部楼层
软件延时是独占的,容易被中断打断(特别是很多新人喜欢在中断里处理子函数甚至有延时),从而很难保证期准确性,我不认为有什么不对呀。楼主的这种短延时估计是用在通信时序上的,用的会非常频繁,被中断打断的概率会大大的增加
NE5532 发表于 2012-5-6 13:31 | 显示全部楼层
软件延时是独占的,容易被中断打断(特别是很多新人喜欢在中断里处理子函数甚至有延时),从而很难保证期准确性,我不认为有什么不对呀。楼主的这种短延时估计是用在通信时序上的,用的会非常频繁,被中断打断的概率 ...
joyme 发表于 2012-5-6 11:16


那简单程序里不用中断或者中断可关闭的情况下,再或者mS级以上延时,ISR服务时间很短,不至于影响其精度的情况下,还整那么复杂么?

凡事有个条件啊。
joyme 发表于 2012-5-7 09:42 | 显示全部楼层
延时时间这么短,不用定时器很难做到精确

我的回答里是有条件的,实际应用程序很少不用中断的,又不是实验点流水灯
NE5532 发表于 2012-5-7 15:50 | 显示全部楼层
我的回答里是有条件的,实际应用程序很少不用中断的,又不是实验点流水灯
joyme 发表于 2012-5-7 09:42


我产品代码里都没有中断……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部