c语言for循环延时,如何利用for循环实现C语言的精确延时.doc
如何利用for循环实现C语言的精确延时
C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章51单片机 Keil C 延时程序的简单研究,他是用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
在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响.
以下为6MHZ的晶振8051的核心单片机C语言的延时1秒的延时:
void delay1s(void)
{
unsigned char h,i,j,k;
for(h=3;h>0;h--)
for(i=5;i>0;i--)
for(j=82;j>0;j--)
for(k=19;k>0;k--);
}
展开阅读全文
c语言for循环延时,如何利用for循环实现C语言的精确延时.doc相关推荐
- c 程序多语言,怎样在程序中利用C支持多国语言
怎样在程序中利用C支持多国语言 本文以emule为例,探讨一下多国语言支持的实现.选择emule,因为它的多国语言支持实现的相当好,可以支持动态切换.而且最关键,它是开源的,可以直接通过源码来研究它的 ...
- python for循环案例-Python利用for循环打印星号三角形的案例
简单的for循环打印三角形 1,for循环方法实现星星三角 代码: for i in range(0,5): for j in range(i+1): if i == 4: print("* ...
- C语言简单计算器考虑优先级,利用你现有的c语言知识 设计开发一个简易计算器,可进行加、减、乘、除、求余运算。...
满意答案 nxy_159 推荐于 2017.11.21 采纳率:52% 等级:9 已帮助:3561人 #include float numA = 0; float numB = 0; float ...
- matlab中循环读入文件内容,[转载]Matlab利用load循环读入数据文件
Contents 1.load循环读入.mat 2.1.fprintf写出数据txt 2.2.load循环读入txt % 利用load循环读取文件 % 把文件的文件名按一定的规律命名,假如:f001. ...
- 利用for循环打印图形
利用for循环打印图形 利用for循环打印图形时,我们需要记住外层循环列,内层循环行,然后们需要做的不外乎是找到它们循环的规律罢了. 打印矩形图形 打印: ***** ***** ***** **** ...
- 6.2_[Java 数组]-利用二重循环打印各种图形
################################################## 目录 玩坏二重循环 一句话概括二重循环 打印一个矩形 打印正直角三角形左下角顶点 打印倒直角三角形 ...
- python循环语句打印三角形_如何使用python语言中的语句遍历循环生成三角形
在python语言中,除了使用if语句,还可以使用while循环语句,利用多层循环生成不同的图形,如果在特殊位置中断,可以创建不同的图形.下面利用实例说明如何生成三角形,操作如下: 工具/原料 pyc ...
- matlab中循环load,[转载]Matlab利用load循环读入数据文件
Contents 1.load循环读入.mat 2.1.fprintf写出数据txt 2.2.load循环读入txt % 利用load循环读取文件 % 把文件的文件名按一定的规律命名,假如:f001. ...
- 原理c语言for循环延时1s,for循环实现C语言精确延时
for循环实现C语言精确延时 for循环实现C语言精确延时 ----- djh2000 C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章 51单片机 Keil C 延时程序 ...
最新文章
- Xamarin环境搭建
- 布谷鸟哈希函数的参数_用于并发读密集型的乐观Cuckoo(布谷鸟) Hashing
- nginx引用外部配置
- python 拼音姓名排序_Python一秒将全部中文姓名转为拼音!
- webdriverAPI-Java
- 山哥新作:架构师必备技能之业务分析
- 一张图读懂nginx多线程高并发
- php mysql查询例子_php mysqli多个查询的例子
- 构造函数模式知识的扩展
- 苹果手机默认拍照比例_苹果手机拍照有什么技巧?这几个功能要知道,不然别说自己用苹果...
- 《大数据》2022年第4期目次摘要
- 单龙芯3A3000-7A1000PMON研究学习-(1)硬件原理图
- 如何查看电脑操作系统及系统类型
- Win10怎么看内存条频率
- 浏览器页签icon图标的设置和获取
- JavaScript模块机制
- 搭建表白墙 公众号_韶大表白墙 第十季 第75期 | 篮球共青杯决赛体教1班穿黑色衣服的0号...
- 微信小程序播放m3u8视频总结
- 人工神经网络的优缺点
- 基金使用计划 数学建模 matlab,基金使用计划(数学建模).ppt
热门文章
- html给看板娘添加语音,如何给你的Jekyll博客添加可爱的二次元看板娘(Live2D)
- Wordpress网站设计入门 设置logo 和菜单同行
- android嵌入有米广告,Android界面嵌入有米广告
- Linux | 分布式版本控制工具Git【版本管理 + 远程仓库克隆】
- Python Urlencode URL编码与解码
- SpringBoot 2 使用 SpringIntegration 与 Google Cloud Pub/Sub 进行消息传输
- eshop6-nginx
- 80后看了会哭的组图
- 使用 WebSocket 客户端连接 MQTT 服务器/vue 项目使用mqtt消息队列实现推送
- 电脑输入英文字符的时候字体突然变了样