單片機(jī)編寫延時(shí)函數(shù)的簡單方法_第1頁
單片機(jī)編寫延時(shí)函數(shù)的簡單方法_第2頁
單片機(jī)編寫延時(shí)函數(shù)的簡單方法_第3頁
單片機(jī)編寫延時(shí)函數(shù)的簡單方法_第4頁
單片機(jī)編寫延時(shí)函數(shù)的簡單方法_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、在本站51hei-5板子上做315兆無線解碼和紅外解碼試驗(yàn)的時(shí)候,延時(shí)函數(shù)的精度很重要,要做到相當(dāng)精確才可以成功,所以大家一定要掌握這也是大家最常在QQ里問我的一個(gè)問題,如果從keil里看了c語言的反匯編代碼然后根據(jù)晶振和指令計(jì)算延時(shí)的時(shí)間這樣雖然非常的準(zhǔn)確但是相當(dāng)?shù)穆闊┒胰菀赘沐e(cuò),我這里介紹一個(gè)最簡單的方法.可以驗(yàn)證你的延時(shí)函數(shù)這里用一個(gè)例程詳細(xì)介紹一下。過程參考如下:在編譯器下建立一個(gè)新項(xiàng)目,也可以利用已有項(xiàng)目。此過程中需要注意,單片機(jī)晶振的選擇,因?yàn)閒or循環(huán)里指令的執(zhí)行時(shí)間和晶振有直接關(guān)系,本例中晶振使用11.0592M。此主題相關(guān)圖片如下:20090oc1.jpg編寫一段關(guān)于延時(shí)的

2、函數(shù),主要利用for循環(huán),代碼如下:voiddelay_ms(unsignedintms)unsignedinti;unsignedcharj;for(i=0;ims;i+)for(j=0;j200;j+);for(j=0;j102;j+);其中ms是輸入?yún)?shù),如果輸入1,就是要求程序延時(shí)1ms。j變量是調(diào)整程序運(yùn)行的時(shí)間參數(shù)。調(diào)整j的數(shù)值,使1次循環(huán)的時(shí)間在1ms。將此程序編譯通過,然后利用軟件仿真,調(diào)整時(shí)間。此匕主題相關(guān)圖片如下20090oc2.jpg下面這個(gè)sec就是程序運(yùn)行到現(xiàn)在的這一行所用的時(shí)間。此主題相關(guān)圖片如下:20090oc3.jpg5p_ni:立ip+rFC$:豐pswkOO

3、OOc:0 xoazc畑n0.00144314OkOO利用2庶時(shí)間差,計(jì)囂處延腎時(shí)間。uiisigneciintj:jpO;cle1ay_ms(1);Jnliile兩次時(shí)間差就是延時(shí)函數(shù)使用的時(shí)間,如果與1ms相差比較多,用戶可以調(diào)整j參數(shù)的值,使延時(shí)時(shí)間盡量接近1ms。如增大j的值for(j=0;j105;j+);此方法得出延時(shí)函數(shù),在晶振不同的情況下,延時(shí)時(shí)間會(huì)不準(zhǔn)。軟件調(diào)試結(jié)果,這個(gè)程序的延時(shí)時(shí)間為:1.01779ms,般的單片機(jī)系統(tǒng)中都可以應(yīng)用。下面來說說匯編的傳統(tǒng)計(jì)算方法:指令周期、機(jī)器周期與時(shí)鐘周期指令周期:CPU執(zhí)行一條指令所需要的時(shí)間稱為指令周期,它是以機(jī)器周期為單位的,指令不

4、同,所需的機(jī)器周期也不同。時(shí)鐘周期:也稱為振蕩周期,一個(gè)時(shí)鐘周期=晶振的倒數(shù)。MCS-51單片機(jī)的一個(gè)機(jī)器周期=6個(gè)狀態(tài)周期=12個(gè)時(shí)鐘周期。MCS-單片機(jī)的指令有單字節(jié)、雙字節(jié)和三字節(jié)的,它們的指令周期不盡相同,一個(gè)單周期指令包含一個(gè)機(jī)器周期,即12個(gè)時(shí)鐘周期,所以一條單周期指令被執(zhí)行所占時(shí)間為12*(1/12000000)=1us。了解了上面這些我們來看一個(gè)例子延時(shí)1秒子程序=DELAY_1S:MOVR4,#10;延時(shí)子程序,12M晶振延時(shí)1.002035秒L3:MOVR2,#200;1指令周期L1:MOVR3,#249;1指令周期L2:DJNZR3丄2;2指令周期DJNZR2丄1;2指令

5、周期DJNZR4丄3;2指令周期RET;2指令周期;循環(huán)體延時(shí)時(shí)間:(249*2+1+2)*200+1+2*10*12/12000000=1.002030s;加上ACALL指令和第一條mov指令以及最后一條RET指令算出來整個(gè)函數(shù)的時(shí)間為1.002035s通常選用的是11.0592MHZ的晶振:(249*2+1+2)*200+1+2*10*12/11059200=1.08727213541666666.S匯編延時(shí)子程序的延時(shí)計(jì)算問題對(duì)于程序DELAY:MOVR0,#00HDELAY1:MOVR1,#0B3HDJNZR1,$DJNZR0,DELAY1查指令表可知MOV一個(gè)機(jī)器周期,DJNZ指令需

6、用兩個(gè)機(jī)器周期,而一個(gè)機(jī)器周期時(shí)間長度為12/11.0592MHz,所以該段程序執(zhí)行時(shí)間為:(0B3x2+1+2)x256+1)x1211059200=100.2789mS第一層:DJNZR1,$:執(zhí)行了B3H次,一次兩個(gè)周期,所以為0B3x2;第二層:MOVR1,#0B3H為一個(gè)周期,DJNZR0,DELAY1為兩個(gè)周期,這樣循環(huán)一次就是0B3x2+1+2個(gè)周期;第二層的執(zhí)行次數(shù)本來是255次,但因?yàn)橘x首值為0,而DJNZ是先減1,再比較的,所以就應(yīng)該是256次。這樣的話,整個(gè)循環(huán)執(zhí)行完應(yīng)該是(0B3x2+1+2)x256+1次。再加上開始賦值這一句,就是(0B3x2+1+2)x256+1)了還說明一下:nop指令或者_(dá)nop_();函數(shù)占一個(gè)機(jī)器周期,在stc單片機(jī)的12T模式下一個(gè)機(jī)器周期是一個(gè)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論