• 联系我们
  • 地址:湖北武汉三环科技园
  • 电话:159116031100
  • 传真:027-68834628
  • 邮箱:mmheng@foxmail.com
  • 当前所在位置:首页 - 嵌入式
  • avr-gcc中关于delay延时函数的应用修改版
  •   这是为了在你没有定义F_CPU这个变量(包括空),或是AVR_studio Frequency没有给值的时候,提供一个默认的 1MHz频率值。让编译器编译时不至于出错。

      }从其函数注释里面可以了解到,该函数用来延迟3个晶振时钟周期,不包括程序调用和退出该函数所花费的时间。该函数的形参__count是一个8位的变量,由此,我们就可以根据系统采用的晶振频率算出该函数最大的延迟时间了:

      这两个函数都是avr-gcc 的 inline汇编格式写的,具体的语法规则我就不多说了。可以参考avr-libc。不过这两个函数很简单,很容易明白。一个是字节递减,一个是字递减。如果你认真看几个函数,你就会发现要正确使用它们是有如下条件的:

      1. 首先,你要正确定义你的 F_CPU 的值,也就是你的AVR单片机实际的频率。否则延时不准。(延时只在数字上不准确,具体可以计算)

      只有具备了的条件你才可以正确使用延时函数 _delay_us () 和 _delay_ms () 。对于第三个条件,为什么要选用常量,还有第二个条件为什么要打开优化选项。这是为了让编译器在编译的时候就把延时的值计算好,而不是把它编译到程序中,在运行时才进行计算,那样的话,一是会增加代码的长度,还会使你的延时程序的延时时间加长,或是变得不可预料。产生时序的错误。在08版本中已经修改,具体函数如下:void

      本文来源于ipfs