历史上的今天
今天是: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以下。
有了这个方法,以后就不用在改变晶振的情况下去调延时程序了!
史海拾趣
|
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 ...… 查看全部问答> |
|
首先说下,我的WINCE系统是支持WinSock2的,可以用WinSock2库的函数,在我的程序中想要创建多址广播套接字 创建函数:SOCKET WSASocket( int af, int type, int protocol, LPWSAPROTOCOL_INF ...… 查看全部问答> |
|
在当前的经济环境下,许多企业纷纷在削减无法在12个月里面带来丰厚投资回报的IT项目。但虚拟化项目却是几乎普通得到CIO们认可的IT项目之一,因为它有望提高效率、降低成本、迅速带来投资回报,还能提供一种与主要业务功能保持一致的更灵活的模式。 ...… 查看全部问答> |
|
请教: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型号有AT89S52STC12C2052(AD)STC12C5A60S2开 ...… 查看全部问答> |




