標(biāo)題: 匯編語言延時(shí)程序具體應(yīng)該怎么計(jì)算? [打印本頁]
作者: 滿腹經(jīng)綸 時(shí)間: 2017-3-2 09:26
標(biāo)題: 匯編語言延時(shí)程序具體應(yīng)該怎么計(jì)算?
二重循環(huán)模型:
DEL: MOV R6,#y
DEL1:MOV R5,#X
DEL2:DJNZ R5,DEL2
DJNZ R6,DEL1
RET
我知道T=2XY+3Y+3
可是,如果我要實(shí)現(xiàn)一個(gè)200000uS,該如何計(jì)算出X和Y的數(shù)值 ,一個(gè)方程有兩個(gè)未知數(shù),怎么求呢?
三重循環(huán)模型:
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
該如何計(jì)算出X、Y和Z的數(shù)值 ,一個(gè)方程有3個(gè)未知數(shù),怎么求呢?
作者: ahshmj 時(shí)間: 2017-3-2 18:19
這3個(gè)都是未知數(shù)?
先確定兩個(gè)然后計(jì)算求出第3個(gè)。
作者: zl2168 時(shí)間: 2017-3-2 19:58
"一個(gè)方程有兩個(gè)未知數(shù),怎么求呢?" 那就有無數(shù)個(gè)解。先設(shè)定一個(gè)未知數(shù),然后就有對(duì)應(yīng)的解了。看來樓主數(shù)學(xué)未學(xué)好!
作者: zl2168 時(shí)間: 2017-3-2 20:02
本帖最后由 zl2168 于 2017-3-2 20:35 編輯
【例3-24】 延時(shí)程序是單片機(jī)應(yīng)用系統(tǒng)常用的模塊程序。試按下列要求編寫延時(shí)子程序:
⑴ 延時(shí)1ms,fOSC=6MHz;
⑵ 延時(shí)10ms,fOSC=12MHz;
⑶ 延時(shí)0.5s,fOSC=12MHz。
解:⑴ 延時(shí)1ms。fOSC =6MHz,一個(gè)機(jī)器周期為2ms,DJNZ指令為2個(gè)機(jī)器周期。
DY1ms: MOV R7,#250 ;置循環(huán)次數(shù)(指令為1個(gè)機(jī)器周期)
LOP: DJNZ R7,LOP ;250×2機(jī)周=500機(jī)周
RET ;子程序返回(單獨(dú)Keil調(diào)試時(shí),需用END替代RET)
上述子程序?qū)嶋H延時(shí)(500 +1)機(jī)周×2ms/機(jī)周=1002ms。
⑵ 延時(shí)10ms。fOSC =12MHz,一個(gè)機(jī)器周期為1ms。
DY10ms: MOV R6,#20 ;置外循環(huán)次數(shù)
DY1: MOV R7,#250 ;置內(nèi)循環(huán)次數(shù)
DY2: DJNZ R7,DY2 ;250×2機(jī)周=500機(jī)周
DJNZ R6,DY1 ;500機(jī)周×20=10000機(jī)周
RET ;子程序返回(單獨(dú)Keil調(diào)試時(shí),需用END替代RET)
實(shí)際延時(shí)[(500+2+1)×20+1]機(jī)周×1ms /機(jī)周=10061ms。
⑶ 延時(shí)0.5s。fOSC=12MHz,一個(gè)機(jī)器周期為1ms。
DY05s: MOV R5,#5 ;置外循環(huán)次數(shù)
DY0: MOV R6,#200 ;置中循環(huán)次數(shù)
DY1: MOV R7,#250 ;置內(nèi)循環(huán)次數(shù)
DY2: DJNZ R7,DY2 ;250×2機(jī)周=500機(jī)周
DJNZ R6,DY1 ;500機(jī)周×200 =100000機(jī)周
DJNZ R5,DY0 ;100000機(jī)周×5=500000機(jī)周
RET ;子程序返回(單獨(dú)Keil調(diào)試時(shí),需用END替代RET)
實(shí)際延時(shí){[(2×250+2+1)×200+2+1]×5+1}機(jī)周×1ms/機(jī)周=503016ms。
以上摘自張志良編著
《80C51單片機(jī)實(shí)用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學(xué)習(xí)51單片機(jī)原理,程序(c和匯編)語句條條有注解,便于閱讀理解,便于自學(xué)。
作者: angmall 時(shí)間: 2017-3-2 20:12
以某晶振為12MHz的單片機(jī)為例,晶振為12MHz即一個(gè)機(jī)器周期為1us。
計(jì)算分析:
X:R5=150 Y:R6=132 Z:R7=5
程序共有三層循環(huán)
一層循環(huán)n:R5*2 = 150*2 = 300us (DJNZ 2us)
二層循環(huán)m:R6*(n+3) = 132*303 = 39996us (DJNZ 2us + R5賦值 1us = 3us)
三層循環(huán): R7*(m+3) = 5*39999 = 199995us (DJNZ 2us + R6賦值 1us = 3us)
循環(huán)外: 5us 子程序調(diào)用 2us + 子程序返回 2us + R7賦值 1us = 5us
延時(shí)總時(shí)間 = 三層循環(huán) + 循環(huán)外 = 199995+5 = 200000us =200ms
計(jì)算公式:延時(shí)時(shí)間=[(2*R5+3)*R6+3]*R7+5
作者: yzwzfyz 時(shí)間: 2017-3-4 02:11
不計(jì)算的方法:用軟件仿真運(yùn)行,可以在運(yùn)行結(jié)果中找到答案。不對(duì)再改。
作者: 滿腹經(jīng)綸 時(shí)間: 2017-5-19 08:48
用哪個(gè)軟件仿真?
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |