找回密码
 注册
关于网站域名变更的通知
查看: 478|回复: 2
打印 上一主题 下一主题

【51单片机】延时函数计算问题以及如何准确延时

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-2-25 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
【51单片机】延时函数计算问题以及如何准确延时$ Y0 u7 k5 ]* ~% Q: W' t) t
  h8 G$ X3 O0 a# G! X- o# [

几种周期介绍

周期名称描述时间
振荡(时钟)单片机提供时钟脉冲信号的振荡源的周期T=1/f
状态振荡周期经二分频后得到的2T
机器在一个机器周期内,CPU可以完成一个独立的 操作12T
指令指CPU完成一条操作所需的全部时间12-12nT

指令:

1、MUL、DIV:仅有的4周期指令

2、包含DPTR和PC的指令均为2周期指令

3、所有的绝对跳转和条件转移指令,均为2周期指令

4、所有包括A寄存器的指令,均为单周期指令

5、位操作指令中,ANL和ORL是2周期指令

6、所有包含立即地址的指令,除INC direct及DEC direct外,均为2周期指令

7、剩下的均为单周期指令。

STC-ISP软件查看各操作用时以及延时函数

_nop_函数可以在keil软件的C51->HLP->C51lib.chm文档中查阅 (授人以鱼不如授人以渔)

延时函数计算

示例:

[cpp] view plain copyvoid delay(uint z)

{

uint i,j;

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

for(j=0;j<921;j++);

}

分析:

1.先计算你单片机的振荡(时钟)周期 T= 1/晶振(11.0592MHZ)

2.一次i--操作为12T

3.忽略变量定义,上述延时函数共需时间:921*z*12T

4.带入T:921*12*T*z 约为 z ms

计算出现误差的原因

1.软件仿真时,函数调用的时候入栈出栈操作的耗时。

2.指令周期随指令的不同而不同导致的误差。

3.中断的影响。

4.变量的范围超过,从而与预计时间不一样。

所以实际上我们应该只能算出估计值,根据最开始周期的信息来计算延时函数中延时的时长。

! ?) K8 x$ k+ ~( l

该用户从未签到

3#
发表于 2022-3-25 12:35 | 只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-20 16:15 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表