51單片機延時程序的設計方法_第1頁
已閱讀1頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、應用單片機的時候,經常會遇到需要短時間延時的情況。需要的延時時間很短,一般都是幾十到幾百微妙(us)。有時候還需要很高的精度,比如用單片機驅動DS18B20的時候,誤差容許的范圍在十幾us以內,不然很容易出錯。這種情況下,用計時器往往有點小題大做。而在極端的情況下,計時器甚至已經全部派上了別的用途。這時就需要我們另想別的辦法了。以前用匯編語言寫單片機程序的時候,這個問題還是相對容易解決的。比如用的是12MHz晶振的51,打算延時20us

2、,只要用下面的代碼,就可以滿足一般的需要:movr0#09hloop:djnzr0loop51單片機的指令周期是晶振頻率的112,也就是1us一個周期。movr0#09h需要2個極其周期,djnz也需要2個極其周期。那么存在r0里的數(shù)就是(202)2。用這種方法,可以非常方便的實現(xiàn)256us以下時間的延時。如果需要更長時間,可以使用兩層嵌套。而且精度可以達到2us,一般來說,這已經足夠了?,F(xiàn)在,應用更廣泛的毫無疑問是Keil的C編譯器。

3、相對匯編來說,C固然有很多優(yōu)點,比如程序易維護,便于理解,適合大的項目。但缺點(我覺得這是C的唯一一個缺點了)就是實時性沒有保證,無法預測代碼執(zhí)行的指令周期。因而在實時性要求高的場合,還需要匯編和C的聯(lián)合應用。但是是不是這樣一個延時程序,也需要用匯編來實現(xiàn)呢?為了找到這個答案,我做了一個實驗。用C語言實現(xiàn)延時程序,首先想到的就是C常用的循環(huán)語句。下面這段代碼是我經常在網上看到的:voiddelay2(unsignedi)f(i!=0i)

4、到底這段代碼能達到多高的精度呢?為了直接衡量這段代碼的效果,我把KeilC根據(jù)這段代碼產生的匯編代碼找了出來:FUNCTION_delay2(BEGIN)SOURCELINE#18VariableiassignedtoRegisterR7SOURCELINE#19SOURCELINE#200000C0007:0000EFMOVAR700016003JZC001000031FDECR7000480FASJMPC0007SOURCELINE

5、#210006C0010:000622RETFUNCTION_delay2(END)真是不看不知道~~~一看才知道這個延時程序是多么的不準點~~~光看主要的那四條語句,就需要6個機器周期。也就是說,它的精度頂多也就是6us而已,這還沒算上一條lcall和一條ret。如果我們把調用函數(shù)時賦的i值根延時長度列一個表的話,就是:idelaytimeus060008E4CLRA0009FFMOVR7A000AFEMOVR6A000BFDMOVR

6、5A000CFCMOVR4A000DAB00RMOVR3i03H000FAA00RMOVR2i02H0011A900RMOVR1i01H0013A800RMOVR0i0015C3CLRC0016120000ELCALLCULCMP0019601AJZC0010001BE500RMOVAi03H001D24FFADDA#0FFH001FF500RMOVi03HA0021E500RMOVAi02H002334FFADDCA#0FFH0025

7、F500RMOVi02HA0027E500RMOVAi01H002934FFADDCA#0FFH002BF500RMOVi01HA002DE500RMOVAi002F34FFADDCA#0FFH0031F500RMOViA003380D3SJMPC0007SOURCELINE#210035C0010:003522RETFUNCTION_delay2(END)呵呵,這倒是的確可以延遲很長時間~~~但是毫無精度可言了。那么,用C到底能不能實

8、現(xiàn)精確的延時呢?我把代碼稍微改了一下:voiddelay1(unsignedi)while(i)因為根據(jù)經驗,越簡潔的C代碼往往也能得出越簡潔的機器代碼。那這樣結果如何呢?把它生成的匯編代碼拿出來看一看就知道了。滿懷希望的我按下了“Buildtarget”鍵,結果打擊是巨大的:FUNCTION_delay1(BEGIN)SOURCELINE#13VariableiassignedtoRegisterR7SOURCELINE#140000

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論