历史上的今天
返回首页

历史上的今天

今天是:2025年05月07日(星期三)

正在发生

2021年05月07日 | 关于51单片机几个精确延时程序

2021-05-07 来源:eefocus

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


一. 500ms延时子程序(晶振12MHz,一个机器周期1us.)


程序:


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


}


计算分析:


程序共有三层循环


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


}


void delay1s(void)//12M晶振,延时999999.00us


{


unsigned char i,j,k;


for(i=46;i>0;i--)


for(j=152;j>0;j--)


for(k=70;k>0;k--);


}


推荐阅读

史海拾趣

问答坊 | AI 解惑

单片机IO口不够用,用什么芯片扩展IO口?

如果要逐个点亮80个LED灯,且点亮后不熄灭,直到亮完80个灯后才一起熄灭,如此循环.那么就要有80路的输出,光用单片机的IO口是不可能的了,请教大家,有什么方法,谢谢~…

查看全部问答>

谁能介绍下WinCE BSP的BIB文件?谢谢!

谁能介绍下WinCE BSP的BIB文件?谢谢!…

查看全部问答>

求助大侠,那些只有DE信号的TFT屏怎么控制?(LCD 的 DE模式)

比如说:AT080TN42,最后的有用信号只有DE、CLK和颜色信号,这种TCON板到底是怎么分辨什么时候是帧的开始呢?(没有帧同步信号) 请各位大侠不吝赐教! …

查看全部问答>

跨平台的移动设备应用程序开发库

还在为开发不同平台的移动设备应用程序程序烦恼吗,用MUI吧!!! MUI是一个跨平台的移动设备应用程序开发库,可以用MUI提供的丰富的库函数来编写跨平台的 应用程序,它,可以让您可以把开发时间全部投入到你要开发的软件的核心功能上,而不需要 ...…

查看全部问答>

双网卡热备份(双网卡冗余备份)如何设计与实现呢?

大家好?WIN2000下,以太网网络,双网卡热备份,也就是一个网卡坏了,另一个冗余网卡热切换,两个网卡同一个IP地址,实现方案是什么?使用哪些工具,技术?代码是什么?我的QQ:270996889  E-MAIL:SDTZ_ZZ@126.COM,热切期待您的回复.谢谢!…

查看全部问答>

HX6321 镍氢电池充电IC

HX6321 充電控制功能: - 自動依鎳氫電池電壓狀態,作相對充電控制流程: 激活/預充/快充/涓流. - 依照規格需求,可通過外接電阻R6調整充電電流. - 合乎工業界高標准的精准-delta V、0deltaV判別電池充飽.   - PWM控制充電, 達到恒流充 ...…

查看全部问答>

AD键盘控制时钟

由于MSP430 Launchpad io口太少。所以我决定用AD键盘控制。AD键盘的原理是通过采集点不同电压而执行不同的功能 原理图 PCB 实物图 在做时钟时,我采用MSP430 Launchpad 为主控芯片,OLED为显示,AD键盘为调整 显示方面 总设置 ...…

查看全部问答>

12V产生-12V的DC-DC芯片

最近做信号发生器,其中运放需要用到正负12V供电,加起来-12V应该有200mA的电流,最好有最大电流可以输出500mA的。 想用电源适配器输入一路12V,然后产生整个板子所需要的电压,包括正负12V,正负5V,3.3V。现在就是负电压产生比较头疼。 …

查看全部问答>

Atmel SAM D21使用心得(2)----点灯

当我安装好了AtmelStudio 6.2之后,对怎样使用它是一无所知,这时想到的就是找“度娘”,这是我们学软件的一贯做法,当然我们是鼓励每一个人当有问题的是尽量上网找答案,接下来本来是打算再网上查找是否有Atmel Studio 6.2教程视频,但是找了好就 ...…

查看全部问答>