c语言while延时10ms,for循环实现C语言精确延时
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语言精确延时相关推荐
- 原理c语言for循环延时1s,for循环实现C语言精确延时
for循环实现C语言精确延时 for循环实现C语言精确延时 ----- djh2000 C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章 51单片机 Keil C 延时程序 ...
- keil c语言 延迟程序,Keil C51程序设计中几种精确延时方法
前几天时间在做一个基于51单片机开发板的等精度频率计,用LCD1602液晶显示的,晶振是22.1184MHZ,用得是测频率法,目的是想做到能够测试0--900KHZ的信号. 液晶显示部分花了我好几天才 ...
- c51语言1秒延时程序,KeilC51程序设计中几种精确延时方法
实现延时通常有两种方法: 一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时:另一种是软件延时,这种方法主要采用循环体进行. 1 使用定时器/计数器实现精确延时 ...
- 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 ...
- keil4延时1秒C语言,KEIL单片机C语言精确延时值的计算
关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而51hei给出的本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为S ...
- R语言程序设计中的for循环实战
R语言程序设计中的for循环实战 目录 R语言程序设计中的for循环实战 R语言控制结构(Control Structures) R语言程序设计中的fo
- pic单片机延时程序C语言,PIC单片机C语言延时程序和循环子程序实现方法
PIC单片机C语言延时程序和循环子程序实现方法 很多朋友说C中不能精确控制延时时间,不能象汇编那样直观. 其实不然,对延时函数深入了解一下就能设计出一个理想的框价出来. 一般的我们都用 for(x=1 ...
- c语言for循环延时,如何利用for循环实现C语言的精确延时.doc
如何利用for循环实现C语言的精确延时 C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章51单片机 Keil C 延时程序的简单研究,他是用while(--i);产生DJN ...
- c语言调用延时子程序的例子,C语言精确延时.doc
C语言精确延时 C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章 51单片机 Keil C 延时程序的简单研究,作者:InfiniteSpace Studio/isjfk ...
最新文章
- linux停止客户端,linux – 从客户端打印motd停止ssh登录?
- java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setCharacterStream(ILjava/io/Reader;
- (0027)iOS 开发之调整导航条上BarButtonItem与屏幕边界的间距
- 多线程编程之四——线程的同步
- php中getdistance函数_php代码渗透测试 后门分析篇
- mongodb第二篇文章~关于集群认证的那点事
- 基于Java的TCP Socket通信详解(计算机端/Android手机端)
- c语言 函数 收集,c语言库函数大全--资料收集+
- 怎么自动运行文件并隐藏_绝对实用!iphone用久卡顿怎么办?5个隐藏小技巧提升运行速度...
- 【Modelsim】下载安装教程
- bch纠错码 码长8_浅析BCH码的编码方法.docx
- navicat for mysql 10.0.11 简体免安装中文破解版
- html5网上商城模板代码,商城 HTML5模板
- 母函数与指数型母函数模板
- WFQ/CBWFQ/LLQ介绍
- 在阿里云用python发送邮件
- 模型数据处理之数据格式转换——SuperMap iDesktop
- 固态硬盘 Solid State Disk
- WiFi DFS(动态频率选择)
- 我眼中的云计算——PaaS(平台即服务)
热门文章
- 菜鸟教程学习——HTML5 video,audio,input(各种新元素),output,datalist
- win10 路由虚拟服务器,水星 MW300R V10~V15 设置虚拟服务器操作说明 路由器
- java积累(一)------后端---Comparator比较器的用法
- 华为3COMSOX法案IT内控实践
- linux C-kermit 安装使用
- 递归和循环两种方法完成树的镜像转换
- 最简单的解决Chrome浏览器主页被hao123、360和2345篡改的方法是什么
- 2022年北京首店补贴及首店首发项目征集申报情况介绍,补贴200万
- 体验部署ThinkAdmin
- 详解FindBugs的各项检测器