版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、KeilC51程序設(shè)計(jì)中幾種精確延時(shí)方法2011052014:45:30作者:段向東毋玉芝來源:互聯(lián)網(wǎng)關(guān)鍵字:KeilC51精確延時(shí)程序執(zhí)行時(shí)間引言單片機(jī)因具有體積小、功能強(qiáng)、成本低以及便于實(shí)現(xiàn)分布式控制而有非常廣泛的應(yīng)用領(lǐng)域[1]。單片機(jī)開發(fā)者在編制各種應(yīng)用程序時(shí)經(jīng)常會(huì)遇到實(shí)現(xiàn)精確延時(shí)的問題,比如按鍵去抖、數(shù)據(jù)傳輸?shù)炔僮鞫家诔绦蛑胁迦胍欢位驇锥窝訒r(shí),時(shí)間從幾十微秒到幾秒。有時(shí)還要求有很高的精度,如使用單總線芯片DS18B20時(shí),允許
2、誤差范圍在十幾微秒以內(nèi)[2],否則,芯片無法工作。用51匯編語言寫程序時(shí),這種問題很容易得到解決,而目前開發(fā)嵌入式系統(tǒng)軟件的主流工具為C語言,用C51寫延時(shí)程序時(shí)需要一些技巧[3]。因此,在多年單片機(jī)開發(fā)經(jīng)驗(yàn)的基礎(chǔ)上,介紹幾種實(shí)用的編制精確延時(shí)程序和計(jì)算程序執(zhí)行時(shí)間的方法。實(shí)現(xiàn)延時(shí)通常有兩種方法:一種是硬件延時(shí),要用到定時(shí)器計(jì)數(shù)器,這種方法可以提高CPU的工作效率,也能做到精確延時(shí);另一種是軟件延時(shí),這種方法主要采用循環(huán)體進(jìn)行。1使用定
3、時(shí)器計(jì)數(shù)器實(shí)現(xiàn)精確延時(shí)單片機(jī)系統(tǒng)一般常選用11.0592MHz、12MHz或6MHz晶振。第一種更容易產(chǎn)生各種標(biāo)準(zhǔn)的波特率,后兩種的一個(gè)機(jī)器周期分別為1μs和2μs,便于精確延時(shí)。本程序中假設(shè)使用頻率為12MHz的晶振。最長的延時(shí)時(shí)間可達(dá)216=65536μs。若定時(shí)器工作在方式2,則可實(shí)現(xiàn)極短時(shí)間的精確延時(shí);如使用其他定時(shí)方式,則要考慮重裝定時(shí)初值的時(shí)間(重裝定時(shí)器初值占用2個(gè)機(jī)器周期)。在實(shí)際應(yīng)用中,定時(shí)常采用中斷方式,如進(jìn)行適當(dāng)?shù)?/p>
4、循環(huán)可實(shí)現(xiàn)幾秒甚至更長時(shí)間的延時(shí)。使用定時(shí)器計(jì)數(shù)器延時(shí)從程序的執(zhí)行效率和穩(wěn)定性兩方面考慮都是最佳的方案。但應(yīng)該注意,C51編寫的中斷服務(wù)程序編譯后會(huì)自動(dòng)加上PUSHACC、PUSHPSW、POPPSW和POPACC語句,執(zhí)行時(shí)占用了4個(gè)機(jī)器周期;如程序中還有計(jì)數(shù)值加1語句,則又會(huì)占用1個(gè)機(jī)器周期。這些語句所消耗的時(shí)間在計(jì)算定時(shí)初值時(shí)要考慮進(jìn)去,從初值中減去以達(dá)到最小誤差的目的。2軟件延時(shí)與時(shí)間計(jì)算在很多情況下,定時(shí)器計(jì)數(shù)器經(jīng)常被用作其他
5、用途,這時(shí)候就只能用軟件方法延時(shí)。下面介紹幾種軟件延時(shí)的方法。2.1短暫延時(shí)可以在C文件中通過使用帶_NOP_()語句的函數(shù)實(shí)現(xiàn),定義一系列不同的延時(shí)函數(shù),如Delay10us()、Delay25us()、Delay40us()等存放在一個(gè)自定義的C文件中,需要時(shí)在主程序中直接調(diào)用。如延時(shí)10μs的延時(shí)函數(shù)可編寫如下:voidDelay10us()_NOP_()_NOP_()_NOP_()_NOP_()_NOP_()_NOP_()Del
6、ay10us()函數(shù)中共用了6個(gè)_NOP_()語句,每個(gè)語句執(zhí)行時(shí)間為1μs。主函數(shù)調(diào)用f(i=0i1i)f(j=0j124j)voidmain(void)Dly1ms()[next]把P1.0接入示波器,運(yùn)行上面的程序,可以看到P1.0輸出的波形為周期是3ms的方波。其中,高電平為2ms,低電平為1ms,即f循環(huán)結(jié)構(gòu)“f(j=0j124j)”的執(zhí)行時(shí)間為1ms。通過改變循環(huán)次數(shù),可得到不同時(shí)間的延時(shí)。當(dāng)然,也可以不用f循環(huán)而用別的語句
7、實(shí)現(xiàn)延時(shí)。這里討論的只是確定延時(shí)的方法。2.4使用反匯編工具計(jì)算延時(shí)時(shí)間對于不熟悉示波器的開發(fā)人員可用KeilC51中的反匯編工具計(jì)算延時(shí)時(shí)間,在反匯編窗口中可用源程序和匯編程序的混合代碼或匯編代碼顯示目標(biāo)應(yīng)用程序。為了說明這種方法,還使用“f(i=0iDlyTi)”。在程序中加入這一循環(huán)結(jié)構(gòu),首先選擇buildtaget,然后單擊startstopdebugsession按鈕進(jìn)入程序調(diào)試窗口,最后打開Disassemblywindow
8、,找出與這部分循環(huán)結(jié)構(gòu)相對應(yīng)的匯編代碼,具體如下:C:0x000FE4CLRA1TC:0x0010FEMOVR6A1TC:0x0011EEMOVAR61TC:0x0012C3CLRC1TC:0x00139FSUBBADlyT1TC:0x00145003JNCC:00192TC:0x00160EINCR61TC:0x001780F8SJMPC:00112T可以看出,0x000F~0x0017一共8條語句,分析語句可以發(fā)現(xiàn)并不是每條語句都執(zhí)
9、行DlyT次。核心循環(huán)只有0x0011~0x0017共6條語句,總共8個(gè)機(jī)器周期,第1次循環(huán)先執(zhí)行“CLRA”和“MOVR6,A”兩條語句,需要2個(gè)機(jī)器周期,每循環(huán)1次需要8個(gè)機(jī)器周期,但最后1次循環(huán)需要5個(gè)機(jī)器周期。DlyT次核心循環(huán)語句消耗(2DlyT85)個(gè)機(jī)器周期,當(dāng)系統(tǒng)采用12MHz時(shí),精度為7μs。當(dāng)采用while(DlyT)循環(huán)體時(shí),DlyT的值存放在R7中。相對應(yīng)的匯編代碼如下:C:0x000FAE07MOVR6R71T
10、C:0x00111FDECR71TC:0x0012EEMOVAR61TC:0x001370FAJNZC:000F2T循環(huán)語句執(zhí)行的時(shí)間為(DlyT1)5個(gè)機(jī)器周期,即這種循環(huán)結(jié)構(gòu)的延時(shí)精度為5μs。通過實(shí)驗(yàn)發(fā)現(xiàn),如將while(DlyT)改為while(DlyT),經(jīng)過反匯編后得到如下代碼:C:0x0014DFFEDJNZR7C:00142T可以看出,這時(shí)代碼只有1句,共占用2個(gè)機(jī)器周期,精度達(dá)到2μs,循環(huán)體耗時(shí)DlyT2個(gè)機(jī)器周期;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GPS聲納浮標(biāo)延時(shí)精確測量技術(shù)研究.pdf
- keil中的變量和常量定位問題
- keil調(diào)試經(jīng)驗(yàn)
- keil c51中光標(biāo)問題的處理方法
- keil多文件編程
- keil使用簡介
- 基于proteus和keil的單片機(jī)課程設(shè)計(jì)
- stc單片機(jī)keil中c語言函數(shù)定位的方法
- 基于延時(shí)鎖定環(huán)的高精度延時(shí)電路的研究與設(shè)計(jì).pdf
- 基于精確延時(shí)估計(jì)的腦電磁共振同時(shí)測量時(shí)梯度偽跡的去除.pdf
- 半定制設(shè)計(jì)中的數(shù)據(jù)路徑延時(shí)優(yōu)化方法研究.pdf
- keil c 簡介【外文翻譯】
- keil uvision2學(xué)習(xí)筆記
- keil 編譯錯(cuò)誤集
- 網(wǎng)絡(luò)控制系統(tǒng)中調(diào)度策略的設(shè)計(jì)與延時(shí)的處理.pdf
- 光學(xué)真延時(shí)-光纖延時(shí)線陣列的制備.pdf
- C程序精確形狀分析中的規(guī)范語言設(shè)計(jì).pdf
- 聲光控延時(shí)電路的畢業(yè)設(shè)計(jì)
- keil5使用說明
- keil c51使用詳解
評(píng)論
0/150
提交評(píng)論