本帖最后由 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和匯編)語句條條有注解,便于閱讀理解,便于自學。
|