20140627-STM8L101F3P6关于微秒级延时函数不同写法的波形
2014-06-27 12:52
218 查看
总结一下STM8L101F3P6工作在16MHz下,利用死循环、中断等不同写法的微秒级延时函数精度的情况。
一、死循环空指令的写法,延时函数程序如下:
Delay_us(1)大约延时3.3微秒。
Delay_us(10)大约延时10.58微秒。
Delay_us(100)大约延时83.465微秒。
Delay_us(1000)大约延时8118.5微秒。
可以看到,这种利用死循环来写的微秒级的延时,其精度实在太低,毫无规律可言。根本原因与指令流水、代码量、编译器优化等均有关系,我现在说不清楚,估计一两句也说不清楚。在微秒级的延时函数如此糟糕的精度下,如果利用该函数来模拟如IIC和SPI的时序,或是其它速度较快的通信协议时,其根本无法保证精度,结果可想而知,事必要花一定的时间来调时序,累时,费力,费人。
Delay_us(1)波形如下:
Delay_us(10)波形如下:
Delay_us(100)波形如下:
Delay_us(1000)波形如下:
-------------------------------------------------------------------------------------------------------------------------
一、死循环空指令的写法,延时函数程序如下:
/******************************************************************************/ /* Function name: Delay_us */ /* Descriptions: 微秒级延时函数函数,16MHz时钟 */ /* input parameters: nCount延时时间 */ /* output parameters: 无 */ /* Returned value: 无 */ /******************************************************************************/ void Delay_us(unsigned int nCount) { for (; nCount != 0; nCount--); }调用函数如下:
/******************************************************************************/ /* Function name: main */ /* Descriptions: 主函数 */ /* input parameters: 无 */ /* output parameters: 无 */ /* Returned value: 无 */ /******************************************************************************/ main() { BoardInit(); while(1) { GPIO_ResetBits(GPIOC,GPIO_Pin_2); Delay_us(1); GPIO_SetBits(GPIOC,GPIO_Pin_2); Delay_us(1); } }
Delay_us(1)大约延时3.3微秒。
Delay_us(10)大约延时10.58微秒。
Delay_us(100)大约延时83.465微秒。
Delay_us(1000)大约延时8118.5微秒。
可以看到,这种利用死循环来写的微秒级的延时,其精度实在太低,毫无规律可言。根本原因与指令流水、代码量、编译器优化等均有关系,我现在说不清楚,估计一两句也说不清楚。在微秒级的延时函数如此糟糕的精度下,如果利用该函数来模拟如IIC和SPI的时序,或是其它速度较快的通信协议时,其根本无法保证精度,结果可想而知,事必要花一定的时间来调时序,累时,费力,费人。
Delay_us(1)波形如下:
Delay_us(10)波形如下:
Delay_us(100)波形如下:
Delay_us(1000)波形如下:
-------------------------------------------------------------------------------------------------------------------------
相关文章推荐
- 20140627-STM8L101F3P6关于毫秒级延时函数不同写法的波形
- 关于js函数的写法 fun = function(){} fun:{}有什么不同
- 关于qsort的比较函数的不同写法对于大数据造成的错误
- 关于gcd的函数和过程两种不同写法
- 逆向BC3.1的程序后得到DOS下面关于精确延时1ms的函数(理论上可以非常精确延时到10微妙级别)
- S3C2440 进行微秒级、毫秒级延时函数
- avr-gcc中关于delay延时函数的应用修改版[ourdev]
- c/c++ 关于swap的不同写法
- VC 调用不同源文件内的函数特殊写法
- 一个微秒级的延时函数
- js自执行函数的几种不同写法的比较
- VC 微秒级延时函数
- [原创].关于编写Nios II的延时函数的一点心得
- S3C2440 进行微秒级、毫秒级延时函数
- 令人头大的单片机延时----这里转一篇关于延时函数的文章看看
- 不同层次的程序员对"C#判断奇偶数的函数"的不同写法
- WINCE 微秒级与毫秒级延时函数----s/ms/us/ns
- GCC 和 VC 关于函数提前申明的不同要求。
- 各数据库关于显示成男女各有不同的sql语句,有没有什么统一的标准写法呢???
- 关于WriteFile函数的lpNumberOfBytesWritten在Win8开始的不同