标题: 汇编语言延时程序具体应该怎么计算? [打印本页]
作者: 满腹经纶 时间: 2017-3-2 09:26
标题: 汇编语言延时程序具体应该怎么计算?
二重循环模型:
DEL: MOV R6,#y
DEL1:MOV R5,#X
DEL2:DJNZ R5,DEL2
DJNZ R6,DEL1
RET
我知道T=2XY+3Y+3
可是,如果我要实现一个200000uS,该如何计算出X和Y的数值 ,一个方程有两个未知数,怎么求呢?
三重循环模型:
DEL: MOV R7,#Z
DEL1:MOV R6,#Y
DEL2:MOV R5,#X
DEL3:DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
我知道T=2XYZ+3YZ+3Z+3
该如何计算出X、Y和Z的数值 ,一个方程有3个未知数,怎么求呢?
作者: ahshmj 时间: 2017-3-2 18:19
这3个都是未知数?
先确定两个然后计算求出第3个。
作者: zl2168 时间: 2017-3-2 19:58
"一个方程有两个未知数,怎么求呢?" 那就有无数个解。先设定一个未知数,然后就有对应的解了。看来楼主数学未学好!
作者: zl2168 时间: 2017-3-2 20:02
本帖最后由 zl2168 于 2017-3-2 20:35 编辑
【例3-24】 延时程序是单片机应用系统常用的模块程序。试按下列要求编写延时子程序:
⑴ 延时1ms,fOSC=6MHz;
⑵ 延时10ms,fOSC=12MHz;
⑶ 延时0.5s,fOSC=12MHz。
解:⑴ 延时1ms。fOSC =6MHz,一个机器周期为2ms,DJNZ指令为2个机器周期。
DY1ms: MOV R7,#250 ;置循环次数(指令为1个机器周期)
LOP: DJNZ R7,LOP ;250×2机周=500机周
RET ;子程序返回(单独Keil调试时,需用END替代RET)
上述子程序实际延时(500 +1)机周×2ms/机周=1002ms。
⑵ 延时10ms。fOSC =12MHz,一个机器周期为1ms。
DY10ms: MOV R6,#20 ;置外循环次数
DY1: MOV R7,#250 ;置内循环次数
DY2: DJNZ R7,DY2 ;250×2机周=500机周
DJNZ R6,DY1 ;500机周×20=10000机周
RET ;子程序返回(单独Keil调试时,需用END替代RET)
实际延时[(500+2+1)×20+1]机周×1ms /机周=10061ms。
⑶ 延时0.5s。fOSC=12MHz,一个机器周期为1ms。
DY05s: MOV R5,#5 ;置外循环次数
DY0: MOV R6,#200 ;置中循环次数
DY1: MOV R7,#250 ;置内循环次数
DY2: DJNZ R7,DY2 ;250×2机周=500机周
DJNZ R6,DY1 ;500机周×200 =100000机周
DJNZ R5,DY0 ;100000机周×5=500000机周
RET ;子程序返回(单独Keil调试时,需用END替代RET)
实际延时{[(2×250+2+1)×200+2+1]×5+1}机周×1ms/机周=503016ms。
以上摘自张志良编著
《80C51单片机实用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于学习51单片机原理,程序(c和汇编)语句条条有注解,便于阅读理解,便于自学。
作者: angmall 时间: 2017-3-2 20:12
以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
计算分析:
X:R5=150 Y:R6=132 Z:R7=5
程序共有三层循环
一层循环n:R5*2 = 150*2 = 300us (DJNZ 2us)
二层循环m:R6*(n+3) = 132*303 = 39996us (DJNZ 2us + R5赋值 1us = 3us)
三层循环: R7*(m+3) = 5*39999 = 199995us (DJNZ 2us + R6赋值 1us = 3us)
循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us
延时总时间 = 三层循环 + 循环外 = 199995+5 = 200000us =200ms
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
作者: yzwzfyz 时间: 2017-3-4 02:11
不计算的方法:用软件仿真运行,可以在运行结果中找到答案。不对再改。
作者: 满腹经纶 时间: 2017-5-19 08:48
用哪个软件仿真?
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |