51单片机C语言延时函数

发布者:Huanle最新更新时间:2013-01-30 来源: 21IC 关键字:51单片机  C语言  延时函数 手机看文章 扫描二维码
随时随地手机看文章

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为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--);

}

计算分析:

程序共有三层循环

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

}[page]

四. 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语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。

共有三条延时函数说明如下:

函数调用分两级:一级是小于10US的延时,二级是大于10US的延时

//====================小于10US的【用1US级延时】====================

//----------微秒级延时---------

for(i=X;i>X;i--) 延时时间=(3+5*X)/12 提示(单位us, X不能大于255)

//================大于10US<小于21.9955Ms的可用【10US级延时函数】===========

void Delay10us(uchar Ms)

{

uchar data i;

for(;Ms>0;Ms--)

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

}

i=[(延时值-1.75)*12/Ms-15]/4

如想延时60US则 i=[(60-1.75)*12/6-15]/4=25.375≈26; 修改i的值=26,再调用上面的【10US级延时函数】Delay10us(6); 则就精确延时60US;

如果想延时64US可以用这二种函数组合来用: Delay10us(6); for(i=9;i>X;i--) 共延时64US

关键字:51单片机  C语言  延时函数 引用地址:51单片机C语言延时函数

上一篇:51单片机汇编延时程序算法详解
下一篇:51单片机编程技巧整理

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

51单片机与PC串口通信程序
#include reg51.h #define BUFFERLEGTH 10 //----------------------------------------------------------------- void UART_init(); //串口初始化函数 void COM_send(void); //串口发送函数 char str ; char j; //------------------------------------------------------------------- void main(void) { unsigned char i; UART_init(); j=
[单片机]
51单片机位条件转移指令
判CY转移 指令 JC rel JNC rel 第一条指令的功能是如果CY等于1就转移,如果不等于1就次序执行。那么转移到什么地方去呢?我们能这样理解:JC 标号,如果等于1就转到标号处执行。这条指令我们在上节课中已讲到,不再重复。 第二条指令则和第一条指令相反,即如果CY=0就转移,不等于0就次序执行,当然,我们也同样理解: JNC 标号 判位变量转移指令 JB bit,rel JNB bit,rel 第一条指令是如果指定的bit位中的值是1,则转移,不然次序执行。同样,我们能这样理解这条指令:JB bit,标号 第二条指令请大家先自行分析
[单片机]
STC89C51单片机对超声波测距学习板的控制原理解析
1.功能 超声波测距学习板可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量范围在0-27~4.00m,测量精度1cm,测量时与被测物体无直接接触。能够清晰稳定地显示测量结果。 2.基本原理 超声波发生器内部结构有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波本时,将压迫压电晶片作振动,将机械能转换为电信号,就成为超声波接收器。在超声探测电路中,发射端得到输出脉冲为一系列方波,其宽度为发射超声的时间间隔,被测物距离越大,脉冲宽度
[单片机]
浅谈51单片机2个外部中断的应用案例
;51单片机的P1口上接有8只LED。 ;在外部中断0输入引脚P3.2接有一只按钮开关K1。 ;在外部中断1输入引脚P3.3接有一只按钮开关K2。 ;要求K1和K2都未按下时,P1口的8只LED呈流水灯显示, ;仅K1(P3.2)按下时,左右4只LED交替闪烁。 ;仅按下K2(P3.3)时,P1口的8只LED全部闪亮。 ;两个外中断的优先级相同。 ;============================================= ;用 PROTSUE 仿真界面如下: ;下列程序,可以满足要求。 ORG 0000H SJMP MAIN ORG 0003H SJMP X0_INT ORG 0013H SJMP X1_IN
[单片机]
浅谈<font color='red'>51单片机</font>2个外部中断的应用案例
基于51单片机自动售货机设计
一.硬件方案 本设计由STC系列单片机+12864显示+电源模块+按键模块+蜂鸣器报警模块等元件组成。 使用STC89C52(STC89C52数据手册)单片机设计,设有8个按键,3个按键模拟硬币(5元、1元、5角),另外5个按键模拟货物选择,一块12864显示屏;如图: 二.设计功能 (1)开机启动显示货物价格列表,自动切换列表。 (2)可以选择①—⑤种货物(或更多)。 (3)按对应按键可选择该货物。 (4)选择后,提示要投进的金额,并显示投币有效时间30秒(可修改)。 (5)按键模拟投币,有5元、1元、5角。 (6)投币金额等于或大于所选货物的金额则购物成功。 (7)若投币不足,则30秒后自动退回。 三.设计原理图 (1
[单片机]
基于<font color='red'>51单片机</font>自动售货机设计
51单片机多机通信协议
做自己以前没做过的东西,总会有各种踌躇,害怕做不出来,其实要是真的开始去做了,问题就解决大半了。 在家没网,就开始写了, 熬了两夜,加一个半天,总算是完成了通信协议,经调试,可以正常工作。 如果有孩子也要做这个,可以参考一下哈! 别的不多说,贴代码。 //------------------------------------------------- //主机程序,主机座控制,用中断法 //----------------------------------------------- #include basic.h //-------------------------------------
[单片机]
构造一个51单片机的实时操作系统
目前,大多数的产品开发是在基于一些小容量的单片机上进行的。51系列单片机,是我国目前使用最多的单片机系列之一,有非常广大的应用环境与前景,多年来的资源积累,使51系列单片机仍是许多开发者的首选。针对这种情况,近几年涌现出许多基于51内核的扩展芯片,功能越来越齐全,速度越来越快,也从一个侧面说明了51系列单片机在国内的生命力。 多年来我们一直想找一个合适的实时操作系统,作为自己的开发基础。根据开发需求,整合一些常用的嵌入式构件,以节约开发时间,尽最大可能地减少开发工作量;另外,要求这个实时操作系统能非常容易地嵌入到小容量的芯片中。毕竟,大系统是少数的,而小应用是多数而广泛的。显而易见,μC/OS—II是不太适合于以上要求的,而Keil
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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