【51单片机】单片机延迟函数与周期计算
一,单片机的延迟函数和周期计算
1 延迟函数
要想学习延迟函数内部实现原理就要学习对应的汇编代码,才可以深刻理解延迟函数的内部是实现原理
void Delay500ms(void) //@11.0592MHz { unsigned char data i, j, k; _nop_(); i = 4; j = 129; k = 119; do { do { while (--k); } while (--j); } while (--i); }将上述代码转换为对应的汇编语言如下
DELAY500MS: ;@11.0592MHz PUSH 30H PUSH 31H PUSH 32H MOV 30H,#4 MOV 31H,#129 MOV 32H,#112 NEXT: DJNZ 32H,NEXT DJNZ 31H,NEXT DJNZ 30H,NEXT POP 32H POP 31H POP 30H RET转化为汇编语言,需要计算时间的话,还需要知道指令执行的时间怎么进行计算
2 机器周期,时钟周期,指令周期
学习这个时间的计算我要学习时间周期,机器周期和指令周期
这些周期有什么用呢?这些周期是给我门用计算这个周期是要花费多少的时间
大概概述一下就是
(1) 时钟周期
时钟周期就类似于一个单位,这个时钟周期为0.09微秒。
(2) 机器周期
机器周期就类似于一个指令周期的一个单位,这个机器周期默认为12个时钟周期。
(3) 指令周期
当然你想缩短机器周期的时间开销,你可以调整为6个时钟周期,在默认状态下是12个时钟周期。
指令周期的详细含义:
一个指令周期是完成一个指令所需要的时间,由一个机器周期或者多个组成,这个为我们后面计算时间十分重要,因为在计算时间的时候,还要计算执行指令的时间开销。
3 汇编指令
下面为一个汇编指令图的样例
这个就是那个手册里面每一个指令所需要开销所花的时间,6时钟指令我们是可以调的,这就可以让cpu的运行时间缩短一倍
在STC-ISP里面也有6T模式可以自己进行设置
我们来计算一下每一个指令所需要花的多少时间
根据手册上每一个汇编指令所需要花的时间,我们来统计
(1) NOP
就是一个空操作,不执行任何的指令操作,花销是1个机器周期。(2) PUSH
就是一个直接把这个地址里面的数据进行压栈,开销2个机器周期。
在这里的含义为,把这个30H的数据压入,下一个PUSH也是这样的操作,两个都是开销2个机器周期。(3) MOV
含义为把所对应的数据放入到对应的地址里面,开销为2个机器周期
就是把这个2和194分别放到30H和31H地址里面去,时间开销为2个机器周期(4) DJNZ
这个指令类似于循环,DJNZ 地址所表示的值 不为0所跳转的地方,每一次执行开销为2个机器周期
观察上面的代码可以看出当前地址存放的为194,然后减到0,然后跳到下一个DJNZ,但是在执行该DJNZ的时候,由跳到了NEXT,然后又执行了一次一个DJNZ,然后为0-1变成了-1,跟上面描述,为-1的时候,看作为255,此时又要执行255次,然后减到0之后就再执行一次第二个DJNZ,就结束了。(5) POP
就是将栈里面的数据弹出栈,开销为2个机器周期。(6) RET
表示子程序返回,开销为2个机器周期。
所以后面我们就有了467个机器周期,只需要乘以机器周期的时间开销就好了
4 6T模式
这个模式由上述可知,这个就是可以使得这个LED灯闪烁的更快,也就是6个机器周期执行一个指令,但是我们一般都是12个机器周期执行一个指令
特性 6T模式 (1机器周期=6时钟周期) 12T模式 (1机器周期=12时钟周期) 核心优势 执行速度更快 (相同晶振下,速度是12T模式的2倍) 兼容性和稳定性更好 (对硬件要求低,系统设计简单可靠) 执行速度 ⭐⭐⭐⭐⭐ 快 ⭐⭐⭐ 慢 (相同晶振下,速度是6T模式的一半) 兼容性 ⭐⭐⭐ 较差 (对存储器和外围器件的工作速度要求高) ⭐⭐⭐⭐⭐ 极好 (与传统低速器件兼容性强) 系统稳定性 ⭐⭐⭐ 要求高 (对时钟抖动、电源噪声、PCB布线更敏感) ⭐⭐⭐⭐⭐ 高 (对噪声和布线不敏感,更稳定可靠) 功耗表现 ⭐⭐ 相对较高 (相同晶振下,操作频率高,动态功耗大)
或 ⭐⭐⭐⭐ 可优化 (可通过降频获得同等性能并降低功耗)⭐⭐⭐⭐ 相对较低 (相同晶振下,操作频率低,动态功耗小)
或 ⭐⭐ 为提速而增高 (为提升性能需提高晶振,导致功耗和EMI增加)适用场景 追求高性能、高处理能力的应用;可使用高速存储器的现代嵌入式系统 传统工业控制、教学实验、对可靠性要求极高、使用低速外围器件的经典系统
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐







所有评论(0)