延时函数

延时函数延时函数什么是延时函数所谓延时函数就是在函数中设置了几个空操作的动作,每次操作都需要消耗一定的时间,动作结束了,就会跳出延时函数继续做其他事情了。为什么要延时为了使CPU某些芯片的时序而采用的一些机制,比如独立按键、LED灯闪烁等单片机时序单片机时序就是CPU在执行指令命令时所需控制信号的时间顺序,为了保证各部件间的同步工作,单片机内部电路在唯一的时钟信号下严格的控制时序进行工作。振…

延时函数

什么是延时函数

所谓延时函数就是在函数中设置了几个空操作的动作,每次操作都需要消耗一定的时间,动作结束了,就会跳出延时函数继续做其他事情了。

为什么要延时

为了使CPU某些芯片的时序而采用的一些机制,比如独立按键、LED灯闪烁等

单片机时序

单片机时序就是CPU在执行指令命令时所需控制信号的时间顺序,为了保证各部件间的同步工作,单片机内部电路在唯一的时钟信号下严格的控制时序进行工作。
振荡周期:为单片机提供定时信号的振荡源的周期又称时钟周期
状态周期:2个振荡周期为1个状态周期,
机器周期:1个机器周期含6个状态周期,12个振荡周期。在一个机器周期内,CPU可以完成一个独立的操作。
指令周期:它是指CPU完成一条操作的所需的全部时间。,它以机器周期为单位

nop指令

执行一个_nop_() ,就是一个空操作,占用一个机器周期,也就是12个时钟周期。
一个机器周期=12/12MHz=1us
#include<intrins.h>
Void delay10us() //调用此函数需要执行LACLL指令耗时2个机器周期
{

nop();
nop();
nop();
nop();
nop();
nop();
} //结束执行一次RET指令耗时2个机器周期
Delay10us( )函数中共用了6个NOP ( )语句,每个语句执行时间为1 us。主函数调用Delay10us( )时,先执行个LCALL指令 (2 us),然后执行6个NOP ()语句(6 μs),最后执行了一个RET指令(2μs),所以执行上述函数时共需要10 uS。 可以把这一函数当作基本延时函数,在其他函数中调用,即嵌套调用[4],以实现较长时间的延时,但需要注意,如在Delay40us( )中直接调用4次Delay10us( )函数,得到的延时时间将是42 μs,而不是40 us。这是因为执行Delay40us( )时,先执行了一次LCALL指令(2μs) , 然后开始执行第一个Delay10us( ),执行完最后一个Delay10us( )时,直接返回到主程序。依此类推,如果是两层嵌套调用,如在Delay80us( )中两次调用Delay40us(),则也要先执行一次LCALL指令(2 μs),然后执行两次Delay40us( )函数(84μs) ,所以,实际延时时间为86 us。简言之,只有最内层的函数执行RET指令。该指令直接返回到上级函数或主函数。如在Delay80μs( )中直接调用8次Delay10us( ),此时的延时时间为82 us。通过修改基本延时函数和适当的组合调用,上述方法可以实现不同时间的延时。

分号“;”和nop指令

1、两个语句的相同点是都不会有实质上的控制操作;
2、两个语句的不同点是nop语句执行了就相当于延时一个机器周期(尽管一个机器周期很短),而;仅仅相当于一个格式上的字符,不会执行任何语句,也不会延时,和没有代码的作用一致。
注:;含义意指在for和while循环中常用。

Void delay(u16 i) void delay(u16 i)
{ {

for(;i>0;i–) for(;i>0;i–)
nop();
} }

keil4精确计算时间

1.设置成开发板晶振,比如12MHz;
在这里插 入图片描述
2.设置断点,进入时间仿真,并把时间复位
(设置断点时,要把你想仿真的语句的前后两个语句都设置成断点,这就好比,一段绳子,切成三段,而我取的是中间那一段,进入仿真按照截图标号依次点击)
在这里插入 图片描述
3.开始运行(断点上的箭头是蓝色时代表未开始运行,当变成黄色时代表已运行一次,黄色箭头所指语句代表还未执行此语句,只是执行了箭头上面的语句)
在这里插入 图片描述4.再次运行,计算delay的运行时间
在这里插入 图片描述
注意:这种计算延时时间有一定的误差,因为每次调用延时函数时会浪费一定的时间,每次执行语句达到的延时效果,还要额外加上调用函数所延时的时间,所以与自己设置的延时时间误差值为调用函数所产生的时间,理想设置延时时间=执行两次延时语句-执行一次延时语句,调用函数时间=执行一次延时语句-理想设置延时时间。通过反汇编也可以计算时间,在前面的nop指令,有简单介绍。

stc烧录软件延时函数

可以根据自己的需求设置时间,优点:生成代码速度快精准,缺点:不能在代码上灵活的修改延时的时间。
在这里插入图片描述

今天的文章延时函数分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/4736.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注