热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c语言程序延时参数500,C语言精确延时设计

我现在就用两种方法来实现,一种是while()语句,另一种是for()语句,这两种语句均可产生汇编语句中的DJNZ语句,以12MHZ晶振为例(说明:在编写C程序时,变量尽量使用un

我现在就用两种方法来实现,一种是while()语句,另一种是for()语句,这两种语句均可产生汇编语句中的DJNZ语句,以12MHZ晶振为例(说明:在编写C程序时,变量尽量使用unsigned char,如满足不了才使用unsigned int):

1.delay=99;while(–delay);

产生的汇编代码为:

000FH    MOV    08H,#63H

0012H    DJNZ    08H,0012H

这样产生的延时时间为:(99+1)×2us。最小延时时间为2us,若加上对delay赋值语句,则最小为4us。

2.for(i=delay;i>0;i–);

产生的汇编代码同while()语句。

下面来举例几个延时函数:

一. 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–);

}

三. 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语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 在C语言编程中,点操作符(.)和箭头操作符(->)用于访问结构体成员,但它们的使用场景和方式有所不同。本文将详细探讨这两种操作符的区别,并通过实例说明如何正确使用。 ... [详细]
  • 使用Matlab创建动态GIF动画
    动态GIF图可以有效增强数据表达的直观性和吸引力。本文将详细介绍如何利用Matlab软件生成动态GIF图,涵盖基本代码实现与高级应用技巧。 ... [详细]
  • 深入解析C语言中的关键字及其分类
    本文将全面介绍C语言中的关键字,并按照功能将其分为数据类型关键字、控制结构关键字、存储类别关键字和其他关键字四大类,旨在帮助读者更好地理解和运用这些基本元素。C语言中共有32个关键字。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 实现系统调用
    实现系统调用一、实验环境​本次操作还是基于上次编译Linux0.11内核的实验环境进行操作。环境如下:二、实验目标​通过对上述实验原理的认识,相信 ... [详细]
  • 深入解析 C++ 中的 String 和 Vector
    本文详细介绍了 C++ 编程语言中 String 和 Vector 的使用方法及特性,旨在帮助开发者更好地理解和应用这两个重要的容器。 ... [详细]
  • 在Android中实现黑客帝国风格的数字雨效果
    本文将详细介绍如何在Android平台上利用自定义View实现类似《黑客帝国》中的数字雨效果。通过实例代码,我们将探讨如何设置文字颜色、大小,以及如何控制数字下落的速度和间隔。 ... [详细]
  • 想把一组chara[4096]的数组拷贝到shortb[6][256]中,尝试过用循环移位的方式,还用中间变量shortc[2048]的方式。得出的结论:1.移位方式效率最低2. ... [详细]
  • Hanks博士是一位著名的生物技术专家,他的儿子Hankson对数学有着浓厚的兴趣。最近,Hankson遇到了一个有趣的数学问题,涉及求解特定条件下的正整数x,而不使用传统的辗转相除法。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了一种使用SQL Server存储过程来实现基于单一条件的高效分页查询的方法。通过示例代码,详细说明了如何构建和执行这种分页查询。 ... [详细]
author-avatar
mobiledu2502923977
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有