转载自:https://blog.csdn.net/shawsun/article/details/24560255

Shawsun 2014-04-26 23:34:21

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。

一. 500ms延时子程序

程序:

void delay500ms(void)

{

unsigned char i,j,k;

for(i=15;i>0;i--)

for(j=202;j>0;j--)

for(k=81;k>0;k--);

}

计算分析:

程序共有三层循环

一层循环n:R5*2 = 81*2 = 162us DJNZ 2us

二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us

三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us

循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us

延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms

计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5

二. 200ms延时子程序

程序:

void delay200ms(void)

{

unsigned char i,j,k;

for(i=5;i>0;i--)

for(j=132;j>0;j--)

for(k=150;k>0;k--);

}

三. 10ms延时子程序

程序:

void delay10ms(void)

{

unsigned char i,j,k;

for(i=5;i>0;i--)

for(j=4;j>0;j--)

for(k=248;k>0;k--);

}

四. 1s延时子程序

程序:

void delay1s(void)

{

unsigned char h,i,j,k;

for(h=5;h>0;h--)

for(i=4;i>0;i--)

for(j=116;j>0;j--)

for(k=214;k>0;k--);

}

关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。

共有三条延时函数说明如下:

函数调用分两级:一级是小于10US的延时,二级是大于10US的延时

//====================小于10US的【用1US级延时】====================

//----------微秒级延时---------

for(i=X;i>X;i--) 延时时间=(3+5*X)/12 提示(单位us, X不能大于255)

//================大于10US<小于21.9955Ms的可用【10US级延时函数】===========

void Delay10us(uchar Ms)

{

uchar data i;

for(;Ms>0;Ms--)

for(i=26;i>0;i--);

}

i=[(延时值-1.75)*12/Ms-15]/4

如想延时60US则 i=[(60-1.75)*12/6-15]/4=25.375≈26; 修改i的值=26,再调用上面的【10US级延时函数】Delay10us(6); 则就精确延时60US;

如果想延时64US可以用这二种函数组合来用: Delay10us(6); for(i=9;i>X;i--) 共延时64US

四. 1s延时子程序

程序:

void delay1s(void)

{

unsigned char h,i,j,k;

for(h=5;h>0;h--)

for(i=4;i>0;i--)

for(j=116;j>0;j--)

for(k=214;k>0;k--);

}

关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。

共有三条延时函数说明如下:

函数调用分两级:一级是小于10US的延时,二级是大于10US的延时

//====================小于10US的【用1US级延时】====================

//----------微秒级延时---------

for(i=X;i>X;i--) 延时时间=(3+5*X)/12 提示(单位us, X不能大于255)

//================大于10US<小于21.9955Ms的可用【10US级延时函数】===========

void Delay10us(uchar Ms)

{

uchar data i;

for(;Ms>0;Ms--)

for(i=26;i>0;i--);

}

i=[(延时值-1.75)*12/Ms-15]/4

如想延时60US则 i=[(60-1.75)*12/6-15]/4=25.375≈26; 修改i的值=26,再调用上面的【10US级延时函数】Delay10us(6); 则就精确延时60US;

如果想延时64US可以用这二种函数组合来用: Delay10us(6); for(i=9;i>X;i--) 共延时64US
————————————————
版权声明:本文为CSDN博主「Shawsun」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shawsun/article/details/24560255

51单片机C语言us级延时函数相关推荐

  1. 51单片机:生成精准的软件延时函数——以STC8演示

    目录 一.延时函数的基本结构 二.计算延时函数的变量 三.C11 代码实现 1.main.c 2.delay.c 3.delay.h 4.说明 四.代码下载--Github 毕业设计涉及IOT的内容, ...

  2. 51单片机应用定时器实现精准延时函数的封装

    #include <STC89C5xRC.H>typedef unsigned char u8; typedef unsigned int u16; sbit led = P2^0; bi ...

  3. 51c语言延时作用,51单片机C语言延时函数怎么定义和使用

    描述 51单片机C语言延时函数怎么定义 C语言定义延时函数主要通过无意义指令的执行来达到延时的目的.C程序中可使用不同类型的变量来进行延时设计.经实验测试,使用unsigned char类型具有比un ...

  4. 单片机独立式按键c语言程序,(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询)...

    (原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询) /************************************************************ ...

  5. 51单片机c语言编程100,51单片机C语言编程100例.doc

    51单片机C语言编程100例.doc 目 录实例3用单片机控制第一个灯亮3实例4用单片机控制一个灯闪烁认识单片机的工作频率3实例5将 P1口状态分别送入P0.P2.P3口认识I/O口的引脚功能4实例6 ...

  6. 矩阵键盘逐行扫描C语言,(原创)51单片机C语言程序设计--速学教程实例(入门篇)之矩阵键盘(逐行扫描法).pdf...

    (原创)51单片机C语言程序设计--速学教程实例(入门篇)之矩阵键盘(逐行扫描法).pdf /***************************************************** ...

  7. 51单片机c语言试题及答案,单片机考试复习题及答案

    <单片机考试复习题及答案>由会员分享,可在线阅读,更多相关<单片机考试复习题及答案(14页珍藏版)>请在人人文库网上搜索. 1.选择题1.主频为12MHz的单片机他的机器周期为 ...

  8. 51单片机蜂鸣器演奏《小苹果》C语言程序,51单片机C语言蜂鸣器发声生日快乐播放程序...

    <51单片机C语言蜂鸣器发声生日快乐播放程序>由会员分享,可在线阅读,更多相关<51单片机C语言蜂鸣器发声生日快乐播放程序(4页珍藏版)>请在人人文库网上搜索. 1.按键发音/ ...

  9. 单片机c语言100例 的案例,51单片机C语言100个实例 [推荐下载】

    51单片机c语言100例 ,墙裂推荐下载 附上目录 ************************************************************函数的使用和熟悉****** ...

  10. 51单片机C语言程序100例分析(1)IO+C语言+头文件

    51单片机C语言程序100例分析(1)IO+C语言+头文件 \\\插播一条:文章末尾有惊喜哟~///  P1=0xfe;//P1=11111110B,即P1.0输出低电平} 分析:通过这短短的几行代码 ...

最新文章

  1. java EE map
  2. 探索 dotnet core 为何在 Windows7 系统需要补丁的原因
  3. 在windows上使用go编译dll文件,供C++调用
  4. 方法超出 android,Android工程方法数超过64k,The number of method references in a .dex file cannot exceed 64K....
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的企业费用信息管理系统
  6. Gsoap在QT工程里如何调用
  7. DFX 9.303 for QQMusic 2010
  8. 「JavaScript面向对象编程指南」闭包
  9. vc++播放wav声音
  10. MATLAB 简单神经网络案例
  11. Newton形式的Hermite插值多项式
  12. froala 的使用
  13. 进度类计算_PERT
  14. 3-Coloring(奇偶涂色)
  15. Windows开发:鼠标操作
  16. 《途客圈创业记:不疯魔,不成活》一一2.4 与iWeekend再续前缘
  17. JQuery简单使用
  18. 教你使用Python从零开始搭建一个区块链项目!
  19. Java项目框架搭建系列(Java学习路线)-博客提纲 (转自一位技术大佬)
  20. 笔记摘抄div+css

热门文章

  1. 三步生活法:土豆(Todo),优势,庆祝
  2. 获取网站icon图标
  3. 【校内互侧】ZYF loves qaq (找规律+递推)
  4. 无线网卡插到服务器 没有反应,无线网卡插上没反应怎么办
  5. mat java_使用MAT分析Java内存
  6. 计算机CPU风扇的功能及作用,CPU和风扇之间涂的是什么东西
  7. 嵌入式设计 | 基于51单片机的tea5767收音机设计实操教程
  8. python二手房数据分析_使用python抓取分析链家网二手房数据
  9. 求解Catalan数,(大数相乘,大数相除,大数相加)
  10. Linux 基础之基础网络ss命令