單片機延時匯編語言計算方法
MOV R5,#5 ①
D1: MOV R6,#4 ②
D2: MOV R7,#248 ③
DJNZ R7,$ ④
DJNZ R6,D2 ⑤
DJNZ R5,D1 ⑥
RET ⑦
這個延時程序共有七條指令,現(xiàn)在就每一條指令執(zhí)行的次數(shù)和所耗時間進行分析:
第一條, MOV R5,#5 在整個程序中只執(zhí)行一次,且為單周期指令,所以耗時1μs,
第二條, MOV R6,#4 看⑥的指令可知,只要R5-1不為0,就會返回執(zhí)行這條指令,共執(zhí)行了R5次,共耗時5μs,
第三條, MOV R7,#248 同第二條類似,只要R6-1不為0,就會返回執(zhí)行這條指令,同時受到外部循環(huán)R5的控制,共耗時R5*R6*1=20μs,
第四條, DJNZ R7,$ 只要R7-1不為0,就執(zhí)行這條指令,同時受到外部循環(huán)的控制,由于該指令是雙周期指令,共耗時為R7*R6*R5*2=9920μs,
第五條, DJNZ R6,D2 只要R6-1不為0,就反復執(zhí)行此條指令(內(nèi)循環(huán)R6次),又受外循環(huán)R7的控制,共耗時R6*R5*2=40μs,
第六條, DJNZ R5,D1 只要R5-1不為0,就反復執(zhí)行此條指令,耗時為R5*2=10μs,
第七條, RET 此指令為雙周期指令,耗時為2μs,
我們也要考慮在調(diào)用子程序時用到LCALL指令,耗時2μs,最后可以得到總的延時為:1+5+20+9920+40+10+2=9998μs=10ms
我們可以總結(jié)延時總時間的公式:
延時總時間=[(2*一層循環(huán)次數(shù)+3)*二層循環(huán)次數(shù)+3]*三層循環(huán)次數(shù)+3
注意此公式只適用于三層以內(nèi)的循環(huán)
評論