51单片机Keil C延时程序的简单研究,作者:InfiniteSpace Studio/isjfk

写得不错,他是用while(--i);产生DJNZ来实现精确延时,后来有人说如果while里面不能放其它语句,否则也不行,用do-while就可以,具体怎样我没有去试.所有这些都没有给出具体的实例程序来.还看到一些延时的例子多多少少总有点延时差.为此我用for循环写了几个延时的子程序贴上来,希望能对初学者有所帮助.(晶振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--);

}

产生的汇编:

C:0x0800    7F0F     MOV      R7,#0x0F

C:0x0802    7ECA     MOV      R6,#0xCA

C:0x0804    7D51     MOV      R5,#0x51

C:0x0806    DDFE     DJNZ     R5,C:0806

C:0x0808    DEFA     DJNZ     R6,C:0804

C:0x080A    DFF6     DJNZ     R7,C:0802

C:0x080C    22       RET

计算分析:

程序共有三层循环

一层循环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--);

}

产生的汇编

C:0x0800    7F05     MOV      R7,#0x05

C:0x0802    7E84     MOV      R6,#0x84

C:0x0804    7D96     MOV      R5,#0x96

C:0x0806    DDFE     DJNZ     R5,C:0806

C:0x0808    DEFA     DJNZ     R6,C:0804

C:0x080A    DFF6     DJNZ     R7,C:0802

C:0x080C    22       RET

三. 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--);

}

产生的汇编

C:0x0800    7F05     MOV      R7,#0x05

C:0x0802    7E04     MOV      R6,#0x04

C:0x0804    7DF8     MOV      R5,#0xF8

C:0x0806    DDFE     DJNZ     R5,C:0806

C:0x0808    DEFA     DJNZ     R6,C:0804

C:0x080A    DFF6     DJNZ     R7,C:0802

C:0x080C    22       RET

四. 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:0x0800    7F05     MOV      R7,#0x05

C:0x0802    7E04     MOV      R6,#0x04

C:0x0804    7D74     MOV      R5,#0x74

C:0x0806    7CD6     MOV      R4,#0xD6

C:0x0808    DCFE     DJNZ     R4,C:0808

C:0x080A    DDFA     DJNZ     R5,C:0806

C:0x080C    DEF6     DJNZ     R6,C:0804

C:0x080E    DFF2     DJNZ     R7,C:0802

C:0x0810    22       RET

在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响.

c语言while延时10ms,for循环实现C语言精确延时相关推荐

  1. 原理c语言for循环延时1s,for循环实现C语言精确延时

    for循环实现C语言精确延时 for循环实现C语言精确延时 ----- djh2000 C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章 51单片机 Keil C 延时程序 ...

  2. keil c语言 延迟程序,Keil C51程序设计中几种精确延时方法

    前几天时间在做一个基于51单片机开发板的等精度频率计,用LCD1602液晶显示的,晶振是22.1184MHZ,用得是测频率法,目的是想做到能够测试0--900KHZ的信号. 液晶显示部分花了我好几天才 ...

  3. c51语言1秒延时程序,KeilC51程序设计中几种精确延时方法

    实现延时通常有两种方法: 一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时:另一种是软件延时,这种方法主要采用循环体进行. 1 使用定时器/计数器实现精确延时 ...

  4. c语言 10 9-8 7-6… 1循环语句,C语言学习与总结---第五章:循环结构程序设计

    循环结构程序设计 5.1 while语句 5.2 do-while语句 5.3 for语句 5.4 循环的嵌套 5.5 while与do-while的比较 5.7 改变循环执行的状态 5.7.1 co ...

  5. keil4延时1秒C语言,KEIL单片机C语言精确延时值的计算

    关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而51hei给出的本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为S ...

  6. R语言程序设计中的for循环实战

    R语言程序设计中的for循环实战 目录 R语言程序设计中的for循环实战 R语言控制结构(Control Structures) R语言程序设计中的fo

  7. pic单片机延时程序C语言,PIC单片机C语言延时程序和循环子程序实现方法

    PIC单片机C语言延时程序和循环子程序实现方法 很多朋友说C中不能精确控制延时时间,不能象汇编那样直观. 其实不然,对延时函数深入了解一下就能设计出一个理想的框价出来. 一般的我们都用 for(x=1 ...

  8. c语言for循环延时,如何利用for循环实现C语言的精确延时.doc

    如何利用for循环实现C语言的精确延时 C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章51单片机 Keil C 延时程序的简单研究,他是用while(--i);产生DJN ...

  9. c语言调用延时子程序的例子,C语言精确延时.doc

    C语言精确延时 C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章 51单片机 Keil C 延时程序的简单研究,作者:InfiniteSpace Studio/isjfk ...

最新文章

  1. linux停止客户端,linux – 从客户端打印motd停止ssh登录?
  2. java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setCharacterStream(ILjava/io/Reader;
  3. (0027)iOS 开发之调整导航条上BarButtonItem与屏幕边界的间距
  4. 多线程编程之四——线程的同步
  5. php中getdistance函数_php代码渗透测试 后门分析篇
  6. mongodb第二篇文章~关于集群认证的那点事
  7. 基于Java的TCP Socket通信详解(计算机端/Android手机端)
  8. c语言 函数 收集,c语言库函数大全--资料收集+
  9. 怎么自动运行文件并隐藏_绝对实用!iphone用久卡顿怎么办?5个隐藏小技巧提升运行速度...
  10. 【Modelsim】下载安装教程
  11. bch纠错码 码长8_浅析BCH码的编码方法.docx
  12. navicat for mysql 10.0.11 简体免安装中文破解版
  13. html5网上商城模板代码,商城 HTML5模板
  14. 母函数与指数型母函数模板
  15. WFQ/CBWFQ/LLQ介绍
  16. 在阿里云用python发送邮件
  17. 模型数据处理之数据格式转换——SuperMap iDesktop
  18. 固态硬盘 Solid State Disk
  19. WiFi DFS(动态频率选择)
  20. 我眼中的云计算——PaaS(平台即服务)

热门文章

  1. 菜鸟教程学习——HTML5 video,audio,input(各种新元素),output,datalist
  2. win10 路由虚拟服务器,水星 MW300R V10~V15 设置虚拟服务器操作说明 路由器
  3. java积累(一)------后端---Comparator比较器的用法
  4. 华为3COMSOX法案IT内控实践
  5. linux C-kermit 安装使用
  6. 递归和循环两种方法完成树的镜像转换
  7. 最简单的解决Chrome浏览器主页被hao123、360和2345篡改的方法是什么
  8. 2022年北京首店补贴及首店首发项目征集申报情况介绍,补贴200万
  9. 体验部署ThinkAdmin
  10. 详解FindBugs的各项检测器