Warning: fopen(/www/wwwroot/www.wendadaohang.com/data/md5_content_title/cd/cdee9178f80ed041f6bbc2c47453f51e.txt): failed to open stream: No space left on device in /www/wwwroot/www.wendadaohang.com/inc/function.php on line 2468

Warning: flock() expects parameter 1 to be resource, bool given in /www/wwwroot/www.wendadaohang.com/inc/function.php on line 2469

Warning: fclose() expects parameter 1 to be resource, bool given in /www/wwwroot/www.wendadaohang.com/inc/function.php on line 2475
关于一个单片机汇编语言的延时程序问题 - 99问答网

关于一个单片机汇编语言的延时程序问题

延时程序如下:DL1MS:
push 06h
push 07h
MOV R6,#14H
DL1:MOV R7,#19H
DL2:DJNZ R7,DL2
DJNZ R6,DL1
pop 07h
pop 06h
RET
我想问下,这个延时程序延迟了多长时间,晶振为12M,这个要怎么算啊,还有程序中的俩个push和俩个pop是什么意思,还有push,pop后的06h,07h是什么啊,谢谢了

汇编程序的延时可以直接根据指令计算
在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

然后累加即可得答案
^_^ 希望对你有帮助~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-08
push,pop、06h,07h,是保护和恢复R6,R7的内容。
其它关于延时时间的算法,看看你们学院电信专业用的教材54页即可知道。
第2个回答  2010-07-25
晶振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的写法。
第3个回答  2010-07-25
晶振为12M说明1个机器周期的频率是为12分之一晶振即机器周期为1us,只要这样代下就可以算出来了。
push 06h
就是把第一组寄存器组的r6入栈使其不受延时影响之前的数据。
第4个回答  2010-07-25
push是数据进栈进行保护,POP是出栈。上述的延时时间,因为用的是晶振12MHZ,所以一个机器周期为1us,因为上述MOV为一个机器周期,DJNZ为2个机器周期。所以定时时间为:20(即14H)*25(即19H)*2*2=2000us
第5个回答  2010-07-28
pop和push的意思是入栈处理。保存现场,以防当前寄存器值改变。06h和07h是第0组寄存器的r6和r7。
大约520微秒。d1执行14h次,d2执行14h*19h次,最后一个djnz执行14h次。,加一起就是520了。
相似回答