<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Keil C51精確延時程序設(shè)計

          Keil C51精確延時程序設(shè)計

          作者: 時間:2013-05-16 來源:網(wǎng)絡(luò) 收藏

          摘要 針對C語言代碼的執(zhí)行時間的可預(yù)見性差,結(jié)合 開發(fā)工具,分析了在 開發(fā)工具中利用C語言實現(xiàn)程序的設(shè)計,指出了常用方法優(yōu)缺點。并通過一些實例分析了時間的計算方法,使C語言代碼的延時時間可以被預(yù)見。C語言中嵌套匯編語言是一種有效的方法,可以充分發(fā)揮出各語言的優(yōu)勢特點、提高開發(fā)效率。
          關(guān)鍵詞 ;C語言;軟件延時;單片機(jī)

          C語言具有較強(qiáng)的數(shù)據(jù)處理能力、語言功能齊全、使用靈活方便、開發(fā)效率高,被廣泛應(yīng)用于在單片機(jī)系統(tǒng)開發(fā)應(yīng)用中。在單片機(jī)幕統(tǒng)開發(fā)的過程中,經(jīng)常需要使用到延時程序,但C語言代碼執(zhí)行時間。的可預(yù)見性和實時性較差,在開發(fā)一些具有嚴(yán)格通信時序要求的系統(tǒng)時,往往需要反復(fù)調(diào)試延時代碼,給開發(fā)者帶來了較大困難。比如使用DS18B20進(jìn)行溫度測控時,必須按照其單總線通信協(xié)議,否則無法讀取溫度數(shù)據(jù)。針對上述問題,結(jié)合Keil C51開發(fā)工具和Proteus仿真軟件,介紹在Keil C51開發(fā)系統(tǒng)中,利用C語言編寫的延時及其運行的時間的計算方法。

          1 常用延時程序的設(shè)計方法
          1.1 利用定時器/計數(shù)器延時
          利用C51單片機(jī)內(nèi)部2個16位定時器/計數(shù)器實現(xiàn)的程序,由于定時器/計數(shù)器不占用CPU的運行時間,可以提高CPU的使用效率。但假設(shè)使用12 MHz晶振,定時器工作在方式1模式下,其最長定時時間也只能達(dá)到65.53 ms,由此,可以采用中斷方式進(jìn)行溢出次數(shù)累加的方法進(jìn)行長時間的延時。但在開發(fā)過程中要考慮C51自動對斷點的保護(hù)和重裝初值所帶來的延時誤差,也可以使用定時器工作在方式2模式下,減少重裝初值所帶來的誤差。
          1.2 利用空操作實現(xiàn)延時
          當(dāng)所需的延時非常短,可以利用Keil C51自帶intrins.h頭文件中的_nop_()函數(shù)實現(xiàn)函數(shù)延時。
          當(dāng)主程序調(diào)用delay()函數(shù)時,首先執(zhí)行LCALL指令,占用2個機(jī)器周期,然后執(zhí)行_nop_()函數(shù),它相當(dāng)于匯編中的NOP指令,占用一個指令周期,最后執(zhí)行一個RET返回指令,一共占用5個機(jī)器周期。若要增加延時時間,可以在delay()函數(shù)中增加_nop_()函數(shù)的數(shù)目。但利用這種方法進(jìn)行長時間的延時,會降低成程序的可讀性。
          1.3 利用C語言中嵌套匯編程序?qū)崿F(xiàn)延時
          與C語言相比,在編寫匯編程序的時候可以清楚地知道執(zhí)行每一條指令所需的機(jī)器周期,從而確定其執(zhí)行時間。Keil C51開發(fā)環(huán)境可以實現(xiàn)C語言中嵌入?yún)R編語言,可以在延時時,結(jié)合匯編語言的優(yōu)點,精確確定延時時間。C語言中嵌入?yún)R編程序的方法:
          #pragma asm
          ;匯編程序代碼
          #pragma endasm
          以12 MHz晶振為例,介紹C語言嵌套匯編語言設(shè)計延時程序:
          a.JPG
          delay函數(shù)采用單循環(huán)延時,主函數(shù)調(diào)用delay函數(shù)時,首先執(zhí)行LJMP指令占用2個指令,delay函數(shù)執(zhí)行結(jié)束后,執(zhí)行一個RET返回指令。而DJNZ執(zhí)行占用2個機(jī)器周期,一共執(zhí)行了10次,所以在12 MHz晶振下,延時函數(shù)執(zhí)行的時間為△t=2×10+1+2+2=25μs。如果需要進(jìn)行長時間延時,可以采用多重循環(huán)嵌套實現(xiàn)。
          1.4 利用for循環(huán)實現(xiàn)延時
          在單片機(jī)開發(fā)過程中,for語句和while語句也經(jīng)常用于延時程序的設(shè)計。設(shè)晶振頻率為12 MHz,在調(diào)用延時函數(shù)時,一共需要18個機(jī)器周期。當(dāng)delay函數(shù)中的實參改變時,函數(shù)的延長時間變長,具體的延時時間△t=3×i+5×(i+1)+5。由于delay函數(shù)中變量的類型為unsigned char,最大值為255,不能進(jìn)行長時間延時。可以通過改變變量的類型和利用for語句嵌套,實現(xiàn)長時間延時,但是延時時間的計算和delay函數(shù)有差異。
          如表1所示,在設(shè)計延時程序時,應(yīng)該考慮延時的長短,開發(fā)系統(tǒng)的資源利用與二次開發(fā)等情況進(jìn)而確定設(shè)計延時程序設(shè)計的方法。

          本文引用地址:http://www.ex-cimer.com/article/170502.htm

          b.JPG

          c語言相關(guān)文章:c語言教程


          塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理
          晶振相關(guān)文章:晶振原理
          燃?xì)鈭缶飨嚓P(guān)文章:燃?xì)鈭缶髟?/a>


          關(guān)鍵詞: 程序設(shè)計 延時 精確 C51 Keil

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();