


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
avr-gcc中关于delay延时函数的应用 在51中我们的延时函数都是自己编写的,无论是在汇编中还是在C言语中。虽然有模板,有时还是有点烦。呵呵。不过在应用avr 单片机的时候我们就有福了。因为avr-gcc 提供给我们很方便的delay 延时函数, 只有在源文件包含:include 就可以使用了。这个头文件定义了两个级别的延时函数分别是:void _delay_us (double _us) ; /微秒级void _delay_ms (double _ms); /毫秒级不过不可以高兴的太早,因为要在你的avr-gcc中正确使用它们是有条件的,下面我将慢慢道来。这个参数和 Makefile 中的 F_CPU 值有关,Makefile 所定义的的F_CPU 变量的值会传递给编译器。你如果用AVR_studio 4.1X来编辑和调试,用内嵌AVR-GCC的进行编译,并且让AVR_studio 帮你自动生成Makefile 的话,那你可以在: Project - Configuration Options - Gerneral - Frequency 如下图:写下你的F_CPU的值,F_CPU这个值表示你的AVR单片机的工作频率。单位是 Hz ,不是 MHZ,不要写错。如 7.3728M 则 F_CPU = 7372800 。你会发现在delay.h 头文件中有这个样的一个定义如下:#ifndef F_CPU# warning F_CPU not defined for # define F_CPU 1000000UL / 1MHz#endif这是为了在你没有定义F_CPU这个变量(包括空),或是AVR_studio Frequency没有给值的时候,提供一个默认的 1MHz频率值。让编译器编译时不至于出错。下面是这两个函数的实体:void _delay_us(double _us) / 微秒uint8_t _ticks;double _tmp = (F_CPU) / 3e6) * _us; / 3e6 是因为调用的_delay_loop_1()是三条指令的if (_tmp 255) _ticks = 0; /* i.e. 256 */else _ticks = (uint8_t)_tmp;_delay_loop_1(_ticks);void _delay_ms(double _ms) / 毫秒uint16_t _ticks;double _tmp = (F_CPU) / 4e3) * _ms; / 4e3 是因为调用的_delay_loop_2()是四条指令的if (_tmp 65535) _ticks = 0; /* i.e. 65536 */else _ticks = (uint16_t)_tmp;_delay_loop_2(_ticks);你会发现他们都分别调用了 _delay_loop_1(); 和_delay_loop_2(); 这两个函数而这两个函数又如下所示:void _delay_loop_1(uint8_t _count)_asm_ volatile ( 1: dec %0 nt brne 1b : =r (_count) : 0 (_count);void _delay_loop_2(uint16_t _count)_asm_ volatile ( 1: sbiw %0,1 nt brne 1b : =w (_count) : 0 (_count);这两个函数都是avr-gcc 的 inline汇编格式写的,具体的语法规则我就不多说了。可以参考avr-libc。不过这两个函数很简单,很容易明白。一个是字节递减,一个是字递减。如果你认真看上面几个函数,你就会发现要正确使用它们是有如下条件的: 1. 首先,你要正确定义你的 F_CPU 的值,也就是你的AVR单片机实际的频率。否则延时不准。 2. 你在编译时一定要打开优化,Makefile中OPT 不要选 0 ,如果AVR_studio 不要选O0 。 3. 你在使用这两个delay()时,传递给两个函数的实参要使用常量,不要使用变量。 4. 设置的时间参数_ms , _us 是有范围的,不要超过范围。_ms:1 - 262.14 ms / (F_CPU/1e6) , _us:1- 768 us / (F_CPU/1e6) 。 . 表取整数部分.对于第4条范围,来个例子: 如果F_CPU = 7372800,则_ms范围:1 - 35 ,而_us范围:1 - 104 。只有具备了上面的条件你才可以正确使用延时函数 _delay_us () 和 _delay_ms () 。对于第三个条件,为什么要选用常量,还有第二个条件为什么要打开优化选项。这是为了让编译器在编译的时候就把延时的值计算好,而不是把它编译到程序中,在运行时才进行计算,那样的话,一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会员制营销策划方案
- 婴儿游泳馆的营销方案
- 钢琴室外活动策划方案
- 网络运营咨询管理方案
- abbs-建筑师-方案设计
- 新媒体营销汽车保险方案
- 建筑项目展示方案设计流程
- 洗衣液推广营销设计方案
- 餐饮店串串营销方案海报
- 辅道及绿化施工方案
- 24h药房温湿度记录表
- 药食同源培训教材课件
- 《战略的本质》读书分享
- 集成运算放大器的非线性应用课件
- 材料化学纳米材料市公开课一等奖省名师优质课赛课一等奖课件
- 从初高中物理教学衔接角度谈初中物理教学课件
- 安全学原理第2版-ppt课件(完整版)
- DB32-T 3751-2020公共建筑能源审计标准-(高清现行)
- 建设工程施工合同最新版(示范文本)(GF—2021—0201)
- 苹果电脑的发展史ppt课件
- 北京中考英语词汇表1600词汇+词组
评论
0/150
提交评论