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*1000) )

#define delay_s(x) __delay_cycles ( (unsigned long)(x * XTAL*1000000) )

#endif

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

验证方法:

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

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

按下图中红圈子的Activate按钮

,同时也把最右边的“Auto

Refresh"打开,在F5运行一段时间后,按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以下。

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

iar软件中用c语言编写电容程序,IAR 的精确延时程序相关推荐

  1. c语言图书管理系统用什么软件,编写c语言的软件 纯C语言编写图书管理系统.doc...

    编写c语言的软件 纯C语言编写图书管理系统 编写c语言的软件 纯C语言编写图书管理系统WORD文档bbszp 导读:就爱阅读网友为您分享以下"纯C语言编写图书管理系统WORD文档bbszp& ...

  2. c语言之bbs管理系统,编写c语言的软件 纯C语言编写图书管理系统WORD文档bbszp.doc...

    编写c语言的软件 纯C语言编写图书管理系统WORD文档bbszp 编写c语言的软件 纯C语言编写图书管理系统WORD文档bbszp 导读:就爱阅读网友为您分享以下"纯C语言编写图书管理系统W ...

  3. linux中用c语言编写一个经纬度转换大地坐标

    在Linux中用C语言编写一个经纬度转换大地坐标的程序,需要用到以下步骤: 包含相关的头文件,例如"math.h". 定义必要的常量和变量. 输入经纬度坐标. 将经纬度转换为弧度. ...

  4. PLC中用scl语言编写算法求解modbus crc校验码

    PLC中用scl语言编写算法求解modbus crc校验码 因为不是严格的modbus协议,是用的自由口通讯,传输数据里面得加上CRC校验,所以得搞个算法根据发送不同的数据生成相应的CRC校验码. 现 ...

  5. 用C语言编写一个Linux下的简单shell程序

    这是一个简单的C程序,展示了如何进行系统调用执行logout cd ls pwd pid rm mkdir mv cp等命令,这是一个简单的命令解释程序shell,其源代码如下: #include & ...

  6. 51单片机c语言延时计算软件,51单片机精确延时程序大集合+初值计算工具

    在论坛上看到不少不错的延时程序,整理如下共同分享: 精确延时计算公式: 延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5 ;延时5秒左右 DELAY5S:PUSH   04H;2个 ...

  7. 用c语言设计通讯录软件下载,C语言编写的通讯录.doc

    C语言编写的通讯录.doc 1目 录一. 训练项目 2二. 训练目的 2三. 设计分析 2四. 设计方案 2五.实训 详细设计 3六. 使用说明 4七. 运行调试 4八. 训练心得 4九. 参考文献 ...

  8. IAR 的精确延时程序(转)

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

  9. ubuntu系统中用c语言编写简单程序

    目录 (一):修改参数提高下载速度 (二):c语言入门编写helloworld (三):在ubuntu系统下编写简单程序 (四):在windows系统下编写简单程序 (五):在ubuntu系统下使用m ...

最新文章

  1. python中choicebox_学习python的第四天笔记
  2. 1003个微生物基因组数据发布
  3. 解码resources时里面是空的_深度解码超实用的OpenStack Heat
  4. 牛人学习h264运动估计的方法
  5. python 字符串函数总结
  6. 以图换字的几种方法及优劣分析
  7. 【采访】腾讯社交广告高校算法大赛决赛第二周最大进步队伍——拔萝卜比赛经验及心得分享
  8. Android Studio安装、配置教程全 - 安卓开发环境的配置手册
  9. 利用Matlab求解函数导数并绘图
  10. python cv2图片剪裁
  11. idea 修改工作空间
  12. 简述使用configurations.all统一androidx的版本
  13. 异构应用异构数据库用魔方智能中间件FIX平台转化
  14. UI设计初学者必入门必看!
  15. teamviewer检测为商业用途 5分钟后关闭解决方法
  16. 微信小程序云开发之云数据库查询及动态输入
  17. android 删除wifi文件,删除无线网络连接信号(wifi)(图文教程)
  18. 简单理解 tr069协议
  19. jmeter JSR223 PostProcessor 操作
  20. CUDA与cuDNN安装教程(超详细)

热门文章

  1. 物联网定位模块对智慧交通的意义
  2. 人脸区域马赛克,圆形(心形)模糊Mask
  3. Python元编程:控制你想控制的一切
  4. 运动学习与控制 学习的迁移
  5. Python调用周立功CAN接口卡接口库函数
  6. 77种网络经济创新模式
  7. 【STM32】STM32的时钟系统
  8. sdutacm-悼念512汶川大地震遇难同胞
  9. C# 开发微信公众号现金红包发送,解决IP地址非你在商户平台设置的可用IP地址和”未能创建 SSL/TLS 安全通道“ 问题
  10. Deeply supervised salient object detection with short connections 论文复现