历史上的今天
返回首页

历史上的今天

今天是:2025年01月14日(星期二)

正在发生

2021年01月14日 | 51单片机1s延时程序设计

2021-01-14 来源:eefocus

#include


sbit P1_0 = P1^0;


void Delay(); // 下面引用时一定要和这里的大小写一致否则会有警告或错误


void Main()


{


while (1) // 开始一直循环


{


P1_0 = 0;


Delay(); // 没有参数也要加 () 否则会有Warning


P1_0 = 1;


Delay();


}


}


void Delay() // 12M晶振1s延时


{


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--); // 最后个要有 ; 号


}


//=======以下非代码==========//


原理,利用h,i,j,k循环指令消耗掉一定时间来达到延时,为什么利用循环延时的做法,在12M晶振延时1秒中需要h,i,j,k四个变量,且各变量的值是上面代码中那样呢?这要从单片机的周期说起,单片机有指令周期,机器周期,状态周期,时钟周期;


时钟周期:也就晶振的振荡周期,以12MHz为例,时钟周期为 1/ 12000000 = 1/12us;


机器周期:1个机器周期=6个状态周期=12个时钟周期=1us;


指令周期:单片机执行一条指令所需要的时间称为指令周期,指令周期是以机器周期为单位的,不同的指令所需要的机器周期不一定相同(1-4个),单片机执行一条单周期指令需要1us,执行一条双周期指令需要2us,for循环需要8个指令周期;


具体执行for循环消耗的时间,可以在Keil里通过代码测量:


#include


sbit P1_0 = P1^0;


void Delay();


void Main()


{


while (1)// 开始一直循环


{


P1_0 = 0;


Delay();


P1_0 = 1;


Delay();


}


}


void Delay()


{


unsigned char h;


for (h = 1000; h 》 0; h--); // 此处下断点


}


51单片机1s延时程序设计


循环1000次执行完后的时间点



1000次循环耗时 0.00042850s - 0.00019600s = 0.00023250s = 232.5us;1次循环耗时约 0.2us,


1s = 1000000us,1000000us / 0.2us = 500000次,而5 * 4 * 116 * 214 = 496480;因为无符号字符型unsigned char 大小为1 byte,范围为0~255,所以只能通过循环嵌套,近似的得到一个1s延时。


推荐阅读

史海拾趣

Altmustech公司的发展小趣事

创新是Altmustech公司发展的核心动力。公司不断投入研发资金,引进优秀人才,推动技术创新和产品升级。从最初的半导体芯片到后来的智能设备、物联网解决方案,Altmustech始终站在技术前沿,引领行业发展趋势。这种持续的创新精神使得公司在激烈的市场竞争中始终保持领先地位。

HiRel Connectors Inc公司的发展小趣事
确保电源插头已牢固插入插座,插座无损坏且通电正常。
ATM [Advanced Technical Materials]公司的发展小趣事

然而,随着ATM的普及,安全问题也日益凸显。黑客攻击、恶意软件植入等事件时有发生,给ATM的安全运营带来了挑战。为了应对这些挑战,ATM行业加强了技术研发和安全防护,采用更加先进的加密技术和安全机制,确保用户的资金安全。

以上五个故事虽然不直接涉及ATM公司的具体发展,但展示了ATM技术在电子行业中的发展历程和重要事件。这些故事反映了ATM从诞生到广泛应用,再到技术创新和安全挑战的整个过程,也展示了电子行业在推动ATM发展中的重要作用。

启珑(CHIPLON)公司的发展小趣事

随着科技的进步,ATM也在不断进行技术创新和升级。从最初的简单取款功能,到现在的存款、转账、查询等多种功能,ATM的功能日益丰富。同时,随着移动支付和互联网金融的兴起,ATM也在逐渐与这些新技术融合,提供更加便捷、安全的金融服务。

Churod Electronics Co Ltd公司的发展小趣事

随着公司规模的扩大,中汇瑞德意识到,要想在激烈的市场竞争中保持领先地位,必须不断进行科技创新。于是,公司加大了对研发的投入,引进了一批高素质的研发人才,并建立了完善的研发体系。在研发团队的努力下,公司成功开发出了多款具有自主知识产权的新型继电器产品,不仅提高了产品的性能和质量,还降低了生产成本,赢得了客户的广泛好评。

Globaltech Semiconductor Co Ltd公司的发展小趣事

随着公司业务的不断发展壮大,Globaltech开始着手进行全球化布局。公司在全球多个地区设立了研发中心和销售中心,以便更好地服务全球客户。同时,公司还注重可持续发展和社会责任,积极参与公益事业和环保活动。这些举措不仅提升了公司的社会形象和品牌价值,也为公司的长期发展奠定了坚实的基础。

以上五个故事展示了Globaltech Semiconductor Co., Ltd.在电子行业中的发展历程和关键里程碑。通过技术创新、市场拓展、研发实力提升、战略调整和全球化布局等措施,公司不断壮大自身实力,并在全球半导体行业中占据了一席之地。

问答坊 | AI 解惑

嵌入式Linux应用程序开发详解

嵌入式Linux应用程序开发详解…

查看全部问答>

我的试验板原理图

集成很多东东在里面!!!…

查看全部问答>

帮忙设计一下串口通信程序

两个单片机相互通讯,数据包 = 3字节指令 + 1~4字节的数据。 一次大概有50个数据包。 一个单片机发送数据包,另外一个接收。 两个单片机都在一块板子内。 请问:这两个串口的程序该怎么设计,才能保证数据不会出错。(对数据的正确性要求很高) ...…

查看全部问答>

锂电池充电问题

我的CN3052A最大充电电流只有250mA左右,规范是不是说500吗?散热的问题能影响这么大吗?由于要用USB充电,不能采样大电流充电芯片…

查看全部问答>

WinCE 5.0 2440 唤醒时死机问题

我用 S3C2440 Samsung 官方的 Windows CE 5.0 BSP,休眠后,按下唤醒按钮,程序跳到 Stepldr 中继续执行,执行到 WAKEUP_POWER_OFF 子程序,进行对休眠的唤醒,详细代码如下: WAKEUP_POWER_OFF     ; Release SCLKn after wake-up fro ...…

查看全部问答>

在wince 6.0中如何进行应用程序开发?

在wince 6.0中如何进行应用程序开发?是直接在platform builder中写应用程序吗?我在vs2005中建立一个smart device的工程,无论是用自己导出的sdk,还是用自带的pocket pc sdk,运行时总是出现这样的错误:There were deployment errors.不知怎么解决 ...…

查看全部问答>

有谁用过irf7832吗

有谁用过irf7832吗?这款mos管的驱动能力如何呀?…

查看全部问答>

稀里糊涂STM32讲义更新问题

由于笔记比较多,慢慢整理!!!会在原帖中以跟帖的形式的更新资料的!大家可以的根据讲义的资料自己动手的!有STM32的板子就行了。。。。。。记得下载STM32的固件库和手册啊!…

查看全部问答>

MQX在kinetis上开发入门

再转一个,是苏州大学飞思卡尔实验室写的目前飞思卡尔芯片推广做的是糟糕透了,大概也只有我们几个大学教师写了点东西,用他们芯片做东西的工程师几乎是没有任何贡献高校学生对其芯片的了解也微乎其微。飞思卡尔真应该支持下学校,而不仅仅是苏大一 ...…

查看全部问答>

【转】Intel 的东进与 ARM 的西征 (1)-- 九韶定音剑 vs 九耳连环刀

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 对于 Intel CEO 欧德宁来说,2012 年的冬天注定会是一个漫长的时节,冬令时的钟摆刚刚拨过,他就披上了过冬棉衣。虽然一众下属没有人敢于在他面前说出“寒冷”二字,但,全世界都已经知道,Int ...…

查看全部问答>