本帖最后由 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é)。
|