題目:MCS-51單片機,使用 6MHz 晶振,一個機器周期為 2us,計算出下列程序的延時時間。
DEL: MOV R5, #100
DEL0: MOV R6, #200
DEL1: MOV R7, #248
DEL2: DJNZ R7, DEL2
DJNZ R6, DEL1
DJNZ R5, DEL0
RET
最佳答案: 題目中的答案是錯的。應該是:19 960 606 us。
本題目的程序,共有三重循環(huán),耗時的正確計算方法,可見下圖。
后記:
能夠精確計算程序的執(zhí)行時間,是匯編語言的長處。而用C語言編寫程序,執(zhí)行的時間只能進行估算和測試。
但是有很多網(wǎng)友,都把這兩者弄混了:
在用C語言編程的時候,偏要追問程序執(zhí)行時間的計算公式;
在用匯編語言編程的時候,卻采用簡略的時間計算方法。
特別是現(xiàn)在這道題,要求精確算出 us 量級的數(shù)值,很明顯是應該采用精確的計算方法。多數(shù)網(wǎng)友卻馬虎的很!采用了簡略的算法。如果這是考試題,顯然會掛科一批人。
精確的計算方法,其實并不難,看看插圖,劃分出幾個循環(huán)結(jié)構(gòu)的圈,逐“層”計算即可。
如果用簡易的估算方法,只是計算主要的循環(huán)體(本題僅為2T)的循環(huán)耗時時間,過程如下:
100 * 200 * 248 * 2T = 9 920 000 T
如:T = 2us,則延時時間為:19 940 000 us 。
這個數(shù)字和精確計算的結(jié)果相比,誤差約為千分之一。這個算法,在實際應用方面,是完全可以的。
但是,這個簡易的算法,精度僅在 10ms 的等級,如果作為理論分析來用,誤差還是相當大的。
另外,用 keil 軟件進行單步調(diào)試的時候,所耗用所機器周期和時間, keil 都能夠十分清晰給出,它要比 Proteus 軟件的效果好得多。
對于本題目,做而論道提出的答案,完全得到了驗證,可見插圖所示。