历史上的今天
返回首页

历史上的今天

今天是:2025年05月18日(星期日)

正在发生

2018年05月18日 | AVR 的精确延时程序

2018-05-18 来源:eefocus

C语言中,想使用精确的延时程序并不容易。IAR 中有这样的一个函数 __delay_cycles(),该函数在头文件intrinsics.h中定义,函数的作用就是延时N个指令周期。根据这个函数就可以实现精确的延时函数了(但不能做到100%精确度)。

实现的方法:

建立一个delay.h的头文件:

#ifndef __IAR_DELAY_H
#define __IAR_DELAY_H

#include

#define   XTAL   8   //可定义为你所用的晶振频率(单位Mhz) 


#define   delay_us(x)   __delay_cycles ( (unsigned long)(x * XTAL)  ) 
#define   delay_ms(x)   __delay_cycles ( (unsigned long)(x * XTAL*1000UL) )
#define   delay_s(x)    __delay_cycles ( (unsigned long)(x * XTAL*1000000UL) )

#endif 

 

注意: __delay_cycles(x),x必须是常量或则是常量表达式,如果是变量则编译报错!

 

验证方法:

     1.设置IAR编译器,设置如下:

 

 

 

 Ctrl+D进入软件仿真后,在主菜单View->Proifing,即可调出分析函数的运行时间。


按下图中红圈子的Activate按钮 

,同时也把最右边的“Auto Refresh"打开,在F5(Debug->Go)运行一段时间后,按Debug->Break中断程序的执行,即可列出所有函数的Cycles周期。

 

 



2.编写测试函数

 

空函数

 void delay()
{   
}

发现这个空函数所用到的指令周期为 4 ,本人用的是IAR AVR 5.20来测试

 

分别尝试不用的测试值,测试us ,ms ,s级的延时,然后把delay()运行的指令周期减去4就是delay_us(),delay_ms(),delay_s()所执行的指令周期

  void delay()
{   
   delay_us(100);

   //delay_ms(100);

  // delay_s(100);
}

 

测试发现,精确度比较高,误差在1us以下。

有了这个方法,以后就不用在改变晶振的情况下去调延时程序了!


推荐阅读

史海拾趣

博林(BL)公司的发展小趣事

随着全球环保意识的不断提高,博林公司积极响应号召,将绿色环保理念融入到产品设计和生产过程中。公司采用环保材料和节能技术,努力降低产品的能耗和排放。同时,博林公司还加强了对废弃电子产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了博林公司的品牌形象,也为其在可持续发展的道路上奠定了坚实基础。

需要强调的是,以上故事是基于一般性的行业知识和假设构建的,并不直接代表博林公司的实际发展经历。博林公司的具体发展历程和故事可能涉及更多的细节和复杂性,需要进一步的了解和研究。

Good Sky Electric Co Ltd公司的发展小趣事
电气原理图在摇臂钻床维修中起着至关重要的作用。它详细描绘了设备的电气控制系统和元件之间的连接关系,为维修人员提供了准确的故障排查和检修依据。通过仔细阅读和分析电气原理图,维修人员可以迅速定位故障点并采取相应的修复措施,从而缩短维修时间并降低维修成本。
微芯(CMOSIC)公司的发展小趣事

随着全球化的加速发展,微芯生物也积极开展国际合作与交流。他们与国际知名医药企业、科研机构以及高校建立了紧密的合作关系,共同开展新药研发和技术创新。通过国际合作与交流,微芯生物不仅吸收了国际先进的研发理念和技术经验,还为公司的发展带来了更广阔的市场空间和合作机会。

COMPEX公司的发展小趣事

在电子行业竞争激烈的今天,COMPEX公司始终坚持质量至上的原则。公司建立了严格的质量管理体系,从原材料采购到产品生产、检验、出货等各个环节都严格把关,确保产品质量符合客户要求。这种对质量的执着追求,使得COMPEX的产品在市场上具有很高的口碑和竞争力。

ELM [ELM Electronics]公司的发展小趣事

随着产品线的不断扩张,ELM开始积极拓展市场,寻求更广阔的发展空间。公司制定了国际化战略,通过参加国际展会、建立海外销售渠道等方式,成功将产品打入国际市场。同时,ELM还积极与国际知名电子企业开展合作,共同研发新产品、开拓新市场。这些举措不仅为ELM带来了更多的商业机会,也提升了公司的国际影响力。

EOREX公司的发展小趣事

随着环保意识的日益提高,EOREX公司积极响应国家的绿色发展战略,将环保理念融入到产品研发和生产过程中。他们采用环保材料和绿色生产工艺,减少产品对环境的影响。同时,EOREX还加大了对环保技术的研发投入,推出了一系列具有环保功能的电子产品。这些举措不仅提升了公司的品牌形象和社会责任感,还为公司的可持续发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在展示一个电子公司可能的发展路径和策略。在实际应用中,每个公司的发展故事都有其独特性和复杂性。

问答坊 | AI 解惑

单片机驱动蜂鸣器产生音乐

c语言程序代码都在里面。 可能有的单片机板子不一样,改一下端口就可以了…

查看全部问答>

SX1213 Receiver Ultra-Low Power Integrated UHF Receiver

The SX1213 is a low cost single-chip receiver operating in the frequency ranges from 300MHz to 510MHz. The SX1213 is optimized for very low power consumption (3mA). It incorporates a baseband demodulator with data rates up to 200 ...…

查看全部问答>

WINCE5.0 多址广播WSASocket创建失败?

首先说下,我的WINCE系统是支持WinSock2的,可以用WinSock2库的函数,在我的程序中想要创建多址广播套接字 创建函数:SOCKET WSASocket(   int af,   int type,   int protocol,   LPWSAPROTOCOL_INF ...…

查看全部问答>

全面入手虚拟化的五个步骤

在当前的经济环境下,许多企业纷纷在削减无法在12个月里面带来丰厚投资回报的IT项目。但虚拟化项目却是几乎普通得到CIO们认可的IT项目之一,因为它有望提高效率、降低成本、迅速带来投资回报,还能提供一种与主要业务功能保持一致的更灵活的模式。 ...…

查看全部问答>

Modelsim后仿真,SDF文件加载失败

请教:XILINX生成的标准时延文件,用MODELSIM后仿真,标准时延文件SDF文件加载失败,错误结果:# Loading C:/Modeltech6.2b/xilinx_lib/simprim_ver.X_ONE# Loading C:/Modeltech_6.2b/xilinx_lib/simprim_ver.X_ZERO# Loading work.glbl# ** Error ...…

查看全部问答>

那天偶然看见发现我也能制作啊

那天偶然看见HOZEN的产品目录,发现我也能制作啊我从产品目录看到的我手头使用的真空镊子要被改造的注射器改造后的实物 [ 本帖最后由 DIAG 于 2011-1-5 19:41 编辑 ]…

查看全部问答>

大家来聊聊你使用的51单片机型号和开发环境

这个问题源于毕业论文的一句话。现在想做个小调查,之前因为考虑不周,加上对论坛的 投票贴 不甚了解,闹了不少笑话,请大家见谅。现在先开个帖子,看看大家都用的什么型号和开发欢迎。我前后使用过的51型号有AT89S52STC12C2052(AD)STC12C5A60S2开 ...…

查看全部问答>

为什么DSP版块没有版主和帖子显示呢?

RT,其它版块都有,就DSP版块没有。…

查看全部问答>

有人用过BQ2000T吗??

我是按照数据手册上推荐的原理图做得板子,为什么,充到最后一只是红绿等交替闪烁呢??  …

查看全部问答>