標(biāo)題: 與admin討論溫度測(cè)量實(shí)驗(yàn)中關(guān)于精確延時(shí)問題 [打印本頁]

作者: yantao    時(shí)間: 2010-5-31 14:17
標(biāo)題: 與admin討論溫度測(cè)量實(shí)驗(yàn)中關(guān)于精確延時(shí)問題

在溫度測(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ì)?


作者: admin    時(shí)間: 2010-5-31 15:44

   你分析得很對(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