51单片机汇编(二)——延时函数解析

一、周期

  1. 单片机执行一条指令所需要的时间是一个指令周期
  2. 完成一个基本操作所用的时间是一个机器周期,如读操作、写等操作。当晶振频率为12MHz时,1个机器周期为1us。

二、单重循环短暂延时

DJNZ RN,REL 是一条件转移指令,先将工作寄存器 Rn 中的数减 “ 1 ” ,判断结果是否为 “ 0 ”,不为 “ 0 ” 程序就跳转到行标为 REL 的地方执行,否则,为 “ 0 ” 就不转移,继续执行下一条指令。值得一提的是,DJNZ 运行的机器周期为 2 。

如果需要短暂的延时,我们可以通过单重循环来实现。

例如,下面为延时250μs子程序。DJNZ的指令周期为两个机器周期,即执行一条DJNZ指令需要2us,每执行一次寄存器R7的值减 1 ,不断重复,到R7值为 0 的时候,跳转到 RET 指令结束,即执行 DJNZ 指令125次,即可以实现延时250μs的目的。

DELAY:	
		MOV R7,#125      
DELAY1:	
		DJNZ R7,DELAY1	
		RET

三、长延时

此子程序采用了3重循环结构。

1,运行第5行代码操作,每次减1,减到0为止;

2,运行第6行代码对R6进行减操作,每次减1,减1后不为0,则转移到标号DELAY2处运行,此时将R7赋值为100,并再对R7进行减法内循环;

3,当R6减为0时,程序运行到第7行,开始外循环;

4,R5减1不为0时转移到标号DELAY1处运行;

DELAY:	
		MOV R5,#40	
DELAY1: 
		MOV R6,#125
DELAY2: 
		MOV R7,#100
		DJNZ R7,$
		DJNZ R6,DELAY2
		DJNZ R5,DELAY1
		RET

为了计算上的简便,可以忽略赋值语句的时间,即只计算“DJNZ R7,$"语句的执行时间,该指令执行一次需2μs。执行的次数为R5、R6和R7值的乘积,即:
总延时 = 2 u s × R 7 × R 6 × R 5 = 2 u s × 100 × 125 × 40 = 1000000 u s = 1 s 总延时=2us×R7×R6×R5=2us×100×125×40 =1000000us=1s 总延时=2us×R7×R6×R5=2us×100×125×40=1000000us=1s

四、实例

(汇编里注释是使用英文输入的 “ ; ”)

		ORG 0000H 			;ORG:是个用于定位的伪指令,标志从某个地址开始
START:	CLR P1.0			;CLR:清空某一位,也就所谓的置0
		CALL DELAY			;CALL:函数指令,可以理解是执行函数
		SETB P1.0			;SETB:置位某一位,也就所谓的置1
		CALL DELAY			;CALL:函数指令,可以理解是执行函数
		JMP START			;JMP无条件跳转,直接跳转到后面跟着的参数地址(START)
		
DELAY:	MOV R5,#40
DELAY1: MOV R6,#125
DELAY2: MOV R7,#100
		DJNZ R7,$
		DJNZ R6,DELAY2
		DJNZ R5,DELAY1
		RET
		END
		

五、资料下载

链接:https://pan.baidu.com/s/1EuO__8LJrMqZcH_qi5qmhQ?pwd=axe4
提取码:axe4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值