【Delay】常用的延迟函数
来源:互联网 发布:ubuntu 分辨率不能调 编辑:程序博客网 时间:2024/05/21 17:38
【说明】1. 以下延迟函数均只适用于12M晶振;
2. 每个延迟效果均通过断点测试验证;
3. 除NOP精确延迟外,其余分为us级、ms级、s级延迟,误差不大。
1. 微秒级延迟
1.1 4us以内
#include<reg52.h>#include<intrins.h>#define uint unsigned intvoid main() <span style="white-space:pre"></span>//延时3μs{ uint a,b; a=1; _nop_(); _nop_(); _nop_(); b=2; while(1);}
本例直接使用_nop_();每使用一次,即精确延时1us。
1.2 10us以内
#include<reg52.h>#include<intrins.h>#define uint unsigned intvoid delay_7us() <span style="white-space:pre"></span>//延时7us{ _nop_(); _nop_(); _nop_();}
本例延迟7μs。其中使用了3个_nop_( )语句,每句执行时间为1 μs;而主函数调用delay_7us( )时,需先执行一个LCALL指令:2 μs;最后还需执行RET指令:2 μs。总计7μs。
类推之,增加_nop_( )的个数即可做相应的精确延时。
1.310的N倍 us
void delay_us(uint n) <span style="white-space:pre"></span>//延时10*n子程序</span>{ while(n--);}本例大致延迟10xN个us。
2. 毫秒级延迟
2.1 任意毫秒
void delay_ms(uint ms) <span style="white-space:pre"></span>//延时x ms子程序{ uint i,j; for(i=0;i<ms;i++) for(j=0;j<124;j++);}本例存在误差,偏大,单循环1.007019ms ;当内循环j<123时则偏小 。
3. 秒级延迟
3.1 任意秒
void delay_s(uint s) <span style="white-space:pre"></span>//延时x s子程序{ uint i,j; for(i=0;i<s;i++) for(j=0;j<21738;j++);}本例存在误差,但影响不大。
0 0
- 【Delay】常用的延迟函数
- Mootools中delay这个延迟函数的高级用法
- SysTick定时器和delay延迟函数
- 群延迟函数(group delay function)&群延迟滤波器
- 自定义的delay函数
- 内核延迟函数分析,区分delay和sleep
- 求delay函数的原理
- 关于Delay函数的思考
- 中断中处理延时及一些函数的调用规则(中断调i2c驱动有感)--中断中的延迟delay与printk函数的冲突
- jquery delay()延迟执行 认知
- asp脚本延时 自定义的delay函数
- WinAVR avr/delay函数的用法
- sleep,wait,delay函数的区别
- 自定义的delay()函数(C语言)
- delay函数的用法及声明
- 延时函数sleep和delay的区别
- C51延时函数delay的编写
- 常用的延迟 iOS
- jsonp的简单原理
- 教育行业VR虚拟现实的应用与前景
- Service的使用(一)
- js第五节-函数参数的传递
- CSS3 @keyframe动画的基本用法与常见错误用法
- 【Delay】常用的延迟函数
- android studio运行时报错the selected device is incompatible
- 下拉菜单
- 宏基 F5 572g 预装win10改win7
- 一些不常被注意到的Java问题
- 栈的思想用于求解迷宫问题
- Netty线程模型
- Swift写简易计算器
- UVa 514 Rails