在溫度測(cè)量程序中,有如下代碼:
TMDAT = 0; //總線拉低
delay = 250;
while (--delay); //延時(shí)500us
TMDAT = 1; //拉高總線
而根據(jù)選用的晶振11.0592MHz,則晶振周期為Tosc = 1/fosc = 1/(11.0592*1000*1000) = 0.09042us,而機(jī)器周期為Tcy=12*Tosc=1.085us,一般一條指令執(zhí)行周期是1到2個(gè)機(jī)器周期,也就是1.085us到2.170us。
上面代碼中延時(shí)程序部分,翻譯成匯編語言大致為:
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個(gè)機(jī)器周期,所以紅色代碼部分總共的機(jī)器周期為:13*250 + 4=3254個(gè)機(jī)器周期,所以延時(shí)大約為(13*250+4)*Tcy=3254*1.085=3530.59us,也就是延時(shí)了3500微秒,比注釋中的長(zhǎng)大約7倍。
不知道我分析得對(duì)不對(duì)?
你分析得很對(duì),對(duì)于c51的延時(shí)我們必須要轉(zhuǎn)化為匯編代碼后分析每一條指令的執(zhí)行時(shí)間,而且最好是用12m 的晶振這樣便于計(jì)算一些.ds18b20的時(shí)序 不是太嚴(yán)格,所以大多數(shù)情況下11.0592 和 12m的都能用,
有一個(gè)方法可以粗略的驗(yàn)證一下你的分析是否正確,就是把這個(gè)代碼調(diào)用1000次,然后對(duì)著手表看,是不是35秒執(zhí)行完畢.
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |