在溫度測量程序中,有如下代碼:
TMDAT = 0; //總線拉低 delay = 250; while (--delay); //延時500us TMDAT = 1; //拉高總線
而根據(jù)選用的晶振11.0592MHz,則晶振周期為Tosc = 1/fosc = 1/(11.0592*1000*1000) = 0.09042us,而機器周期為Tcy=12*Tosc=1.085us,一般一條指令執(zhí)行周期是1到2個機器周期,也就是1.085us到2.170us。
上面代碼中延時程序部分,翻譯成匯編語言大致為:
mov r2,#0xFA // 250 mov r3,#0x00 00101$: mov ar4,r2 2 mov ar5,r3 2 dec r2 1 cjne r2,#0xff,00108$ 2 dec r3 1 00108$: mov a,r4 2 orl a,r5 1 jnz 00101$ 2
循環(huán)部分為13*250個機器周期,所以紅色代碼部分總共的機器周期為:13*250 + 4=3254個機器周期,所以延時大約為(13*250+4)*Tcy=3254*1.085=3530.59us,也就是延時了3500微秒,比注釋中的長大約7倍。
不知道我分析得對不對? |