当前位置:首页 > 单片机 > 单片机
[导读] C语言中,想使用精确的延时程序并不容易。IAR中有这样的一个函数__delay_cycles(),该函数在头文件intrinsics.h中定义,函数的作用就是延时N个指令周期。根据这个函数就可以实现精确的延时函数了(但不能

 

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

实现的方法:

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

#ifndef __IAR_DELAY_H
#define __IAR_DELAY_H

#include

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


#definedelay_us(x)__delay_cycles ( (unsigned long)(x * XTAL))
#definedelay_ms(x)__delay_cycles ( (unsigned long)(x * XTAL*1000UL) )
#definedelay_s(x)__delay_cycles ( (unsigned long)(x * XTAL*1000000UL) )

#endif

 

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

2. 比如x=10,10*8*1000≠80 000。因为10,8,1000默认都是int型,结果也是int型,最大32767,结果会丢失,1000UL,将1000改为unsigned long int,x*XTAL*1000UL结果为无符号长整型

 

验证方法:

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以下。

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

 

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制...

关键字: AVR 单片机 计算机

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通...

关键字: AVR 单片机 计算机

AVR与传统类型的单片机相比,除了必须能实现原来的一些基本的功能,其在结构体系、功能部件、性能和可靠性等多方面有很大的提高和改善。 但使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以...

关键字: AVR 单片机 硬件

在这篇文章中,小编将为大家带来AVR单片机的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: AVR 单片机

在下述的内容中,小编将会对AVR单片机的相关消息予以报道,如果AVR单片机是您想要了解的焦点之一,不妨和小编共同阅读这篇文章哦。

关键字: AVR 单片机

杰成医疗(健适医疗成员企业)的"经血管介入生物主动脉瓣膜"在国内首次得到成功应用,两名心脏瓣膜病患者通过经导管主动脉瓣置换术(TAVR)各被植入一枚"杰成经血管介入瓣膜"。杰成医疗已计划对该产品在全球范围内开展多个前瞻性...

关键字: AVR

新加坡2022年2月5日 /美通社/ -- 近日,新兴医疗科技公司“健适医疗”宣布,公司已完成对“苏州杰成医疗科技有限公司”的收购,后者是国内TAVR(Transcatheter Aortic Valve Replace...

关键字: AVR

心电图aVR导联在额面六轴系统中的地位与作用

关键字: AVR 导联理论

在六轴系统中,avR 导联位于额面右上方,其负极位于左下 30°,在Ⅰ和Ⅱ导联之间。由于胸导联的出现和对Ⅰ和Ⅱ导联的重视,avR 导联常被忽视。近年来有学指出,avR 导联有着重要的应用价值。

关键字: AVR 六轴

通常来讲,AVR单片机指的是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set Computer) 精简指令集高速8位单片机。AVR的单片机可以广泛应用于计算...

关键字: AVR 哈佛
关闭
关闭