[经验分享] 51单片机单片机延迟函数与周期计算

[复制链接]
468|0
Xiashiqi 发表于 2025-10-10 08:02 | 显示全部楼层 |阅读模式
一,单片机的延迟函数和周期计算
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个机器周期执行一个指令



————————————————
版权声明:本文为CSDN博主「一只自律的鸡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2401_86738532/article/details/151758875

本帖子中包含更多资源

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

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

97

主题

282

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部