汇编程序的延时可以直接根据指令计算
在12M晶振的条件下,1个机器周期的指令为1微妙
单片机的指令分为单字节、双字节、三字节三种,其机器周期分别为1us、2us、3us [12M晶振]
对上述程序,分三部分计算:
push 06h ;1周期 1us
push 07h ;1周期 1us
MOV R6,#14H ;2周期 2us
;下面做一个整体计算 (2+19*2+2)*14 us
DL1:MOV R7,#19H ;2周期
DL2:DJNZ R7,DL2 ;2周期
DJNZ R6,DL1 ;2周期
pop 07h;1周期 1us
pop 06h;1周期 1us
RET;1周期 1us
然后累加即可得答案
^_^ 希望对你有帮助~
push,pop、06h,07h,是保护和恢复R6,R7的内容。
其它关于延时时间的算法,看看你们学院电信专业用的教材54页即可知道。
晶振12M。14h=#20,#19h=#25 。执行一次DJNZ R7,DL2为2us,粗算时,不计其它几us的指令,就是2X20X25us=1ms
push为入栈指令,pop为出栈指令。保护进入延时子程序前的R6和R7的数据。退出时,数据还给它们。这里的06h和07h分别为R6、R7,因为push和pop不支持PUSH Rn 、POP Rn的写法。
晶振为12M说明1个机器周期的频率是为12分之一晶振即机器周期为1us,只要这样代下就可以算出来了。
push 06h
就是把第一组寄存器组的r6入栈使其不受延时影响之前的数据。
push是数据进栈进行保护,POP是出栈。上述的延时时间,因为用的是晶振12MHZ,所以一个机器周期为1us,因为上述MOV为一个机器周期,DJNZ为2个机器周期。所以定时时间为:20(即14H)*25(即19H)*2*2=2000us
pop和push的意思是入栈处理。保存现场,以防当前寄存器值改变。06h和07h是第0组寄存器的r6和r7。
大约520微秒。d1执行14h次,d2执行14h*19h次,最后一个djnz执行14h次。,加一起就是520了。