单片机汇编延时程序

时间:2023-03-16来源:佚名

单片机汇编实现延迟的程序代码:

DELAY: MOV R7,#250 ;

D1: MOV R6,#250 ;

D2: DJNZ R6,D2 ;

DJNZ R7,D1 ;

RET

如果用高级语言编程,只需要简单地调用延时函数就可以实现,但是计算机具体是怎么实现的呢?要想知其所以然,还得从汇编开始学起。

冒号前面的“DELAY”、“D1”、“D2”为语句行的名字,是为了程序的条件语句跳转用的,分号后面为注释,计算机执行时将过滤掉这些信息,最大限度减少代码长度,提高效率。

DELAY: MOV R7,#250 ; 名字为“DELAY”的语句:意思是将CPU内部内存RAM的R7位置填写为250(原来为0,为什么是0呢?因为任何程序开始执行前都要复位,就像我们打算盘要将算子复位一样,或者我们用沙盘写字,要将沙盘抹平类似)

D1: MOV R6,#250 ; 名字为“D1”的语句:将R6位置填写为250

D2: DJNZ R6,D2 ; 名字为“D2”的语句:将R6位置的250减1,如果为0就继续执行下一条,不为0就继续执行D2这一句,因为R6=250,所以这个语句要原地踏步执行250次!

DJNZ R7,D1 ; 这句没有名字,因为没有别的语句要跳到这里,所以就省略了。R7同样等于250,但它不是原地踏步,而是跳回了D1,这么干,D!、D2和本句将被循环执行250遍,需要强调的是:D2语句自身每次都要执行250遍,也就是执行了250*250=62500遍!

RET ;子程序结束(因为延时程序一般不作为独立程序存在,它只是一个子程序,也就是高级语言中的一个函数,看到这个字符,子程序将跳回到母程序,进行下一步)。

这个子程序这么反复地循环指令,到底有什么意义呢?又是怎么实现的延时程序呢?说起来计算机真是有点笨,它是*数程序执行的次数来累加时间的!也就是说语句本身就是为了浪费时间!哈哈,可笑吧?这就像你没有钟表,但是你知道你跑操场一圈是一分钟,然后就绕着操场跑了60圈,时间过了正好一小时一样。

如果是人的话,谁也不会笨到干这么累的活儿来计时,但计算机不一样,它不论静止还是运动,程序总是一拍一拍地运行着,所以它不累。

那么,计算机执行一个语句耗费的时间是多少呢?

以51型单片机为例:如果采用12MHz的晶振,运行一个机器周期为1微秒,具体为什么暂时不管。单片机的指令系统分为单周期、双周期和三周期指令(三周期实际上占用四个周期,多余一个周期浪费掉),这是有指令的内容决定的,内容多的单周期执行不完,肯定要延长了。子程序里面的MOV是单周期、DJNZ是双周期。

这样,我们就可以算算这个子程序累计进行了多少个周期,然后乘以1微秒,就算出它占用的时间,也就是延时的时长了!

第一句:DELAY: MOV R7,#250 ;执行了一次,没有任何语句跳转给它,单周期。1

第二句:D1: MOV R6,#250 ;执行了250次,全部是第四句跳过来的,单周期。250

第三句:D2: DJNZ R6,D2 ;原地执行了250次,从第二句顺延(第二句执行完,没有其它跳转的话肯定要执行第三句)过来250次,也就是250*250=62500次,双周期*2。125000

第四句:DJNZ R7,D1 ; 从第三句顺延过来250次,双周期*2。500

总计:1 250 125000 500=1257501次,乘以1微秒,换算约为0.13秒。

我们可以通过调整R6、R7的数值来调整延时的长度。事实上,8位计算机中,R6之类的工作寄存器地址最大只能放下255的十进制数值,因此要通过上述程序达到更长的延时是办不到的。

那怎么办呢?

我们可以再增加一个R4,让上述的程序最多可以循环255遍,这样,0.13秒的200多倍就是30秒上下了,不够的话再增加循环,又可以扩大200多倍,当然,工作寄存器的数量是有限的,因此这个延时程序也是有限的,如果还不够用怎么办呢,就目前我所学的知识,只能在母程序里面设置循环了,也就是让这个子程序在母程序里面继续循环......

    相关阅读

    锂离子电池充电器电路图解析

    1.TP4056升压5V TP4056 是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。其底部带有散热片的 SOP8/MSOP8 封装与较少的外部元件数目使得 TP4056 成为便携式应用的理想选择。...
    2023-08-15
    锂离子电池充电器电路图解析

    MOS管如何控制电源的开关?

    摘要:前两天同学做了一个电路,功能就是用MOS管来控制一个电源的开关,但是做出来后发现不能用控制MOS管的开关,MOS管一直处于导通状态。一起来看看到底是什么原因? MOS管如何控...
    2023-06-06
    MOS管如何控制电源的开关?

    事故预想:燃机满负荷正常运行中,一台88TK出现故障跳闸

    1.事故预想内容 :燃机满负荷正常运行中,一台88TK出现故障跳闸,燃机有哪些报警、故障现象,该如何处理?汽机锅炉应作哪些相应处理?如两台同时跳闸,燃机有哪些报警、故障现象...
    2023-06-13
    事故预想:燃机满负荷正常运行中,一台88TK出现故障跳闸

    小型配电柜进、出线电缆说明

    大家好!每天学一点,学习更轻松。关注我,感谢大家为我点赞。 知识点1: 交联聚乙烯绝缘电缆是一种适用于配电网等领域的电缆,具有PVC绝缘电缆无法比拟的优点。它结构简单、重...
    2023-04-17
    小型配电柜进、出线电缆说明

    因数是什么?

    因数是什么?因数是一个数学名词,如果数a能被数b整除(b≠0),a就叫做b的倍数,b就叫做a的因数。举例说明,3x4=12 ,3和4是12的因数。12是3的倍数,也是4的倍数。5x3=15,5和3也是15的...
    2023-03-21

    热销商品

    加厚abs安全帽电工建筑工地程施工领导监理透气防砸头盔可印字V型

    这款加厚ABS安全帽专为电工、建筑工地施工人员、领导及监理设计,采用高强度ABS工程塑料,抗冲击、防砸性能优异,有效保障头部安全。帽体加厚设计,增强耐用性与防护等级...
    5.8

    水口钳高硬度模型剪钳电子钳工业级口水剪斜嘴钳偏口斜口专用钳子

    水口钳高硬度模型剪钳是一款工业级精密工具,专为电子、模型制作及精细作业设计。采用优质高碳钢材质,经热处理工艺打造,具备卓越的硬度和耐磨性,可轻松剪切金属引脚、...
    4.8

    170电子剪钳II 如意斜口钳 工业斜嘴钳水口钳 模型剪塑胶钳尖嘴钳

    170电子剪钳II如意斜口钳是一款专业级精密工具,集工业斜嘴钳、水口钳、模型剪、塑胶钳与尖嘴钳功能于一体,适用于电子维修、模型制作、手工艺及精密作业。其采用优...
    4.5

    安全帽国标工地加厚施工领导透气安全头盔建筑工程监理免费印字

    本款安全帽严格遵循国家GB 2811-2019标准,专为建筑工程、工地施工及监理人员设计。采用高强度ABS工程塑料,加厚壳体有效抗冲击,保障头部安全。帽体轻盈透气,内置可调...
    10

    包邮三角型简易螺丝刀三角十字螺丝刀螺丝批改锥起子五金工具5mm

    这款5mm三角型简易螺丝刀,专为拧紧或拆卸三角形螺丝设计,适用于电子维修、家电维护及精密仪器装配等场景。采用优质合金钢材质,刀头硬度高、耐磨损,确保长久使用不变...
    3.64

    网站栏目