打印
[AVR单片机]

ATMEGAL16怎么写延时函数?

[复制链接]
4116|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 | 只看该作者
延时时间这么短,不用定时器很难做到精确

使用特权

评论回复
5
NE5532| | 2012-5-5 17:36 | 只看该作者
8MHz主频,延时5uS,汇编也就40条指令,楼主估计应该是写C的,如果是周期定时,你觉得用了定时器还能剩几句话的时间呢?还不如一个软件延时就做了,除非你有特殊需要。

15nS根本做不到,已经远小于单条指令执行时间了。

使用特权

评论回复
6
NE5532| | 2012-5-5 17:37 | 只看该作者
延时时间这么短,不用定时器很难做到精确
joyme 发表于 2012-5-5 10:23


楼上又在犯“定时器和软件延时哪个更准确”的老毛病。

使用特权

评论回复
7
joyme| | 2012-5-6 11:16 | 只看该作者
软件延时是独占的,容易被中断打断(特别是很多新人喜欢在中断里处理子函数甚至有延时),从而很难保证期准确性,我不认为有什么不对呀。楼主的这种短延时估计是用在通信时序上的,用的会非常频繁,被中断打断的概率会大大的增加

使用特权

评论回复
8
NE5532| | 2012-5-6 13:31 | 只看该作者
软件延时是独占的,容易被中断打断(特别是很多新人喜欢在中断里处理子函数甚至有延时),从而很难保证期准确性,我不认为有什么不对呀。楼主的这种短延时估计是用在通信时序上的,用的会非常频繁,被中断打断的概率 ...
joyme 发表于 2012-5-6 11:16


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

凡事有个条件啊。

使用特权

评论回复
9
joyme| | 2012-5-7 09:42 | 只看该作者
延时时间这么短,不用定时器很难做到精确

我的回答里是有条件的,实际应用程序很少不用中断的,又不是实验点流水灯

使用特权

评论回复
10
NE5532| | 2012-5-7 15:50 | 只看该作者
我的回答里是有条件的,实际应用程序很少不用中断的,又不是实验点流水灯
joyme 发表于 2012-5-7 09:42


我产品代码里都没有中断……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

0

粉丝