关于while(--i)延时讨论

发布者:数字冲浪最新更新时间:2015-02-09 来源: 51hei关键字:while  延时讨论  延时程序 手机看文章 扫描二维码
随时随地手机看文章

很多人从汇编转到C语言后感到不是非常适应,特别是一些要求比较高的延时程序,感觉C的操控性没有汇编那么高。在DALLAS的单总线(1-wire)操作中,对延时的精度由为重要。很多人写单总线的程序的时候一般是在C中嵌入汇编。这是最直观的一种方法。但不是最方便的。在Keil C51中,还是有一定规律可寻的。经过一些尝试,得到了一种比较好用的方法。可以通过软件仿真来验证。程序的执行时间可在keil仿真状态下的左侧察看。

1.精确延时试验代码:
void delay(unsigned char i);

void main()
{delay(50);
while(1);
}

void delay(unsigned char i)
{while(--i);
}

延时说明:采用本延时程序可满足精度要求比较高的短延时。
精确延时时间=2*i*T+5*T
T为一个机器周期
比如晶振采用12M,那么delay(50);延时时间=2*50*1uS+5*1uS=105uS

2.近似精确延时试验代码:
void delay(unsigned int i);

void main()
{delay(50);
while(1);
}

void delay(unsigned int i)
{while(--i);
}
延时时间=8*i*T(约等于,实际值比此值大,延时时间越长,误差越大,最大误差262*T)

关键字:while  延时讨论  延时程序 引用地址:关于while(--i)延时讨论

上一篇:用74HC164实现数码管的静态显示
下一篇:(STC12)for语句延时的测量参考

推荐阅读最新更新时间:2024-03-16 13:53

HAL库中do{...} while(0U)宏定义的作用和意义
1写在前面 很多初学者,以及有一定工作经验的朋友都不知道这个“do{...} while(0U)”作用和意义,甚至觉得这样写的代码复杂且没意义。 相信使用过STM32Cube HAL库的朋友都知道,源码里面有许多do{...} while(0U)的宏定义语句。 今天讲的主要知识点是:HAL库中do{...} while(0U)作用和意义。 当然,do{...} while(0U) 不限于HAL库中,适用于很多地方。 2 HAL库中do{} while(0U)宏定义 在HAL库中,很多.h文件都有do{...} while(0U)这样的宏定义,比如:在stm32f1xx_hal_rcc.h中,使能GPIO时钟:
[单片机]
HAL库中do{...} <font color='red'>while</font>(0U)宏定义的作用和意义
c51 1ms-6MHZ延时程序
#include reg52.h void delay(unsigned char n) //约n(ms)延时 { unsigned char i,j,k; for(k=0;k n;k++) { for(j=0;j 5;j++) // 约1ms延时 { for(i=0;i 31;i++) //约0.1ms延时 {;} } } } main() { while(1) { delay(15); } } /*约15ms延时 ,需较准确延时: 1、在 keil uvision3\project\options for target\target\
[单片机]
单片机延时程序分析
单片机延时程序分析 应用单片机的时候,经常会遇到需要短时间延时的情况。需要的延时时间很短,一般都是几十到几百微妙(us)。有时候还需要很高的精度,比如用单片机驱动 DS18B20的时候,误差容许的范围在十几us以内,不然很容易出错。这种情况下,用计时器往往有点小题大做。而在极端的情况下,计时器甚至已经全部派上了别的用途。这时就需要我们另想别的办法了。 汇编语言写单片机程序的时候,这个问题还是相对容易解决的。比如用的是12MHz晶振的51,打算延时20us,只要用下面的代码,就可以满足一般的需要: mov r0, #09h loop: djnz r0, loop 51 单片机的指令周期是晶振频率的1/12,也就是1u
[单片机]
C51全局初始化及精确延时程序
/********************************************************************************************************* * Initialization Program * QiZhao,2007 * All Rights Reserved * File : initial.h * By : QiZhao * Contact : zq1987731@163.com * * Version : V2.
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved