




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、- -談?wù)剢纹瑱C延時子程序談?wù)?1單片機延時子程序延時程序在單片機編程中使用非常廣泛,但一些讀者在學(xué)習(xí)中不知道延時程序怎么編程,不知道機器周期和指令周期的區(qū)別,不知道延時程序指令的用法, ,本文就此問題從延時程序的根本概念、機器周期和指令周期的區(qū)別和聯(lián)系、相關(guān)指令的用法等用圖解法的形式詳盡的答復(fù)讀者我們知道程序設(shè)計是單片機開發(fā)最重要的工作,而程序在執(zhí)行過程中常常需要完成延時的功能。例如在交通燈的控制程序中,需要控制紅燈亮的時間持續(xù)30秒,就可以通過延時程序來完成。延時程序是如何實現(xiàn)的呢?下面讓我們先來了解一些相關(guān)的概念。一、機器周期和指令周期1機器周期是指單片機完成一個根本操作所花費的時間,一
2、般使用微秒來計量單片機的運行速度,51 單片機的一個機器周期包括12 個時鐘振蕩周期,也就是說如果51 單片機采用12MHz 晶振,那么執(zhí)行一個機器周期就只需要1s;如果采用的是6MHz 的晶振,那么執(zhí)行一個機器周期就需要2 s。2 指令周期是指單片機執(zhí)行一條指令所需要的時間,一般利用單片機的機器周期來計量指令周期。在51 單片機里有單周期指令執(zhí)行這條指令只需一個機器周期,雙周期指令執(zhí)行這條指令只需要兩個機器周期,四周期指令執(zhí)行這條指令需要四個機器周期。除了乘、除兩條指令是四周期指令,其余均為單周期或雙周期指令。也就是說,如果51 單片機采用的是12MHz 晶振,那么它執(zhí)行一條指令一般只需12
3、 微秒的時間;如果采用的是6MH 晶振,執(zhí)行一條指令一般就需24 微秒的時間?,F(xiàn)在的單片機有很多種型號,但在每個型號的單片機器件手冊中都會詳細說明執(zhí)行各種指令所需的機器周期,了解以上概念后,那么可以依據(jù)單片機器件手冊中的指令執(zhí)行周期和單片機所用晶振頻率來完成需要準(zhǔn)確延時時間的延時程序。二、延時指令在單片機編程里面并沒有真正的延時指令,從上面的概念中我們知道單片機每執(zhí)行一條指令都需要一定的時間,所以要到達延時的效果,只須讓單片機不斷地執(zhí)行沒有具體實際意義的指令,從而到達了延時的效果。1數(shù)據(jù)傳送指令 MOV數(shù)據(jù)傳送指令功能是將數(shù)據(jù)從一個地方復(fù)制、拷貝到另一個地方。如:MOV R7,#80H ;將數(shù)
4、據(jù)80H 送到存放器R7,這時存放器R7 里面存放著80H,就單這條指令而言并沒有任何實際意義,而執(zhí)行該指令那么需要一個機器周期。2空操作指令 NOP空操作指令功能只是讓單片機執(zhí)行沒有意義的操作,消耗一個機器周期。3循環(huán)轉(zhuǎn)移指令 DJNZ循環(huán)轉(zhuǎn)移指令功能是將第一個數(shù)進展減1 并判斷是否為0,不為0 那么轉(zhuǎn)移到指定地點;為0 那么往下執(zhí)行。如:DJNZ R7,KK ;將存放器R7 的內(nèi)容減1 并判斷存放器R7 里的內(nèi)容減完1 后是否為0,如果不為0 那么轉(zhuǎn)移到地址標(biāo)號為KK 的地方;如果為0 那么執(zhí)行下一條指令。這條指令需要2 個機器周期。利用以上三條指令的組合就可以比較準(zhǔn)確地編寫出所需要的延時
5、程序。三、1 秒延時子程序、流程圖及時間計算以單片機晶振為12MHz 為例,1 個機器周期需要1s了解了以上的內(nèi)容,現(xiàn)在讓我們來看看程序總共所需時間:1+10+2560+330240+660480+5120+20+2=998433 s1S在這里運行這段程序共需998433 s,還差1567s 才到達1S 的,所以想要到達完美的1S 延時,需要在返回指令RET 前再添加一些指令讓它把1567s 的延時完成。有興趣的讀者可以自己試著添加完成。最后補充一點,編寫程序時一般將延時程序編寫成獨立的子程序,而所謂子程序也就是一個實現(xiàn)某個功能的小模塊。這樣在主程序中就可以方便地反復(fù)調(diào)用編寫好的延時子程序。小
6、提示:循環(huán)轉(zhuǎn)移指令DJNZ 除了可以給定地址標(biāo)號讓其跳轉(zhuǎn)外,還可以將地址標(biāo)號改成$,這樣程序就跳回本指令執(zhí)行。例如:DJNZ R7,$ ;R7 內(nèi)容減1 不為0,那么再次執(zhí)行本指令;為0 那么往下執(zhí)行,當(dāng)R7 的值改為10時,那么執(zhí)行完該條程序所需的時間為2*10=20 s。51單片機匯編延時程序算法詳解將以12MHZ晶振為例,詳細講解MCS-51單片機中匯編程序延時的準(zhǔn)確算法。指令周期、機器周期與時鐘周期指令周期:CPU執(zhí)行一條指令所需要的時間稱為指令周期,它是以機器周期為單位的,指令不同,所需的機器周期也不同。時鐘周期:也稱為振蕩周期,一個時鐘周期晶振的倒數(shù)。MCS-51單片機的一個機器周
7、期=6個狀態(tài)周期=12個時鐘周期。MCS-51單片機的指令有單字節(jié)、雙字節(jié)和三字節(jié)的,它們的指令周期不盡一樣,一個單周期指令包含一個機器周期,即12個時鐘周期,所以一條單周期指令被執(zhí)行所占時間為12*1/12000000=1s。程序分析例1 50ms 延時子程序:DEL:MOV R7,#200 DEL1:MOV R6,#125 DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 RET 準(zhǔn)確延時時間為:1+1*200+2*125*200+2*200+2=2*125+3*200+3 =50603s50ms由整理出公式只限上述寫法延時時間=2*內(nèi)循環(huán)+3*外循環(huán)+3 詳解:DEL這個子程
8、序共有五條指令,現(xiàn)在分別就每一條指令被執(zhí)行的次數(shù)和所耗時間進展分析。第一句:MOV R7,#200 在整個子程序中只被執(zhí)行一次,且為單周期指令,所以耗時1s第二句:MOV R6,#125 從看到只要R7-1不為0,就會返回到這句,共執(zhí)行了R7次,共耗時200s第三句:DJNZ R6,DEL2 只要R6-1不為0,就反復(fù)執(zhí)行此句內(nèi)循環(huán)R6次,又受外循環(huán)R7控制,所以共執(zhí)行R6*R7次,因是雙周期指令,所以耗時2*R6*R7s。例2 1秒延時子程序:DEL:MOV R7,#10 DEL1:MOV R6,#200 DEL2:MOV R5,#248 DJNZ R5,$ DJNZ R6,DEL2 DJN
9、Z R7,DEL1 RET 對每條指令進展計算得出準(zhǔn)確延時時間為:1+1*10+1*200*10+2*248*200*10+2*200*10+2*10+2=2*248+3*200+3*10+3 =998033s1s由整理得:延時時間=2*第一層循環(huán)+3*第二層循環(huán)+3*第三層循環(huán)+3 此式適用三層循環(huán)以內(nèi)的程序,也驗證了例1中式第三層循環(huán)相當(dāng)于1的成立。注意,要實現(xiàn)較長時間的延時,一般采用多重循環(huán),有時會在程式序里參加NOP指令,這時公式不再適用,下面舉例分析。例3仍以1秒延時為例DEL:MOV R7,#10 1指令周期1DEL1:MOV R6,#0FFH 1指令周期10DEL2:MOV R5
10、,#80H 1指令周期255*10=2550KONG:NOP 1指令周期128*255*10=326400DJNZ R5,$ 2指令周期2*128*255*10=652800DJNZ R6,DEL2 2指令周期2*255*10=5110DJNZ R7,DEL1 2指令周期2*10=20RET 2延時時間=1+10+2550+326400+652800+5110+20+2 =986893s約為1s整理得:延時時間=3*第一層循環(huán)+3*第二層循環(huán)+3*第三層循環(huán)+3 結(jié)論:針對初學(xué)者的困惑,對匯編程序的延時算法進展了分步講解,并就幾種不同寫法分別總結(jié)出相應(yīng)的計算公式,只要仔細閱讀例1中的詳解,并用
11、例2、例3來加深理解,一定會掌握各種類型程序的算法并加以運用。單片機延時子程序1)延時為:20ms 晶振12M1+(1+2*248+2)*4+1+1+1=20000US=20MS用匯編.優(yōu)點就是準(zhǔn)確.缺點就是算有點復(fù)雜.DELAY20MS:MOV R7,#4D1:MOV R6,#248DJNZ R6,$DJNZ R7,D1NOPNOPRET2一些通過計算51匯編指令得出的軟延時子程序;* ;延時10uS ;* time10us: mov r5,#05h ;11us djnz r5,$ ret ;* ;延時50uS ;* t ime50us: mov r5,#19h ;51us djnz r5,
12、$ ret ;* ;延時100uS ;* time100us: mov r5,#31h ;99.6us djnz r5,$ ret ;* ;延時200uS ;* time200us: mov r5,#64h ;201us djnz r5,$ ret ;* ;延時250uS ;* time250us: mov r5,#7ch ;249.6us djnz r5,$ ret ;* ;延時350uS ;* time350us: mov r5,#0afh ;351us time350us_1: djnz r5,time350us_1 ret ;* ;延時500uS ;* time500us: mov r
13、5,#0fah ;501us time500us_1: djnz r5,time500us_1 ret ;* ;延時1mS ;* time1ms: mov r5,#0fah ;1001us time1ms_1: nop nop djnz r5,time1ms_1 ret ;* ;延時2.5mS ;* time2_5ms: mov r5,#05h ;2.496ms time2_5ms_1: mov r6,#0f8h ;497us djnz r6,$ djnz r5,time2_5ms_1 ret ;* ;延時10mS ;* time10ms: mov r5,#14h ;10.262ms time
14、10ms_1: mov r6,#0ffh ;511us djnz r6,$ djnz r5,time10ms_1 ret ;* ;延時50mS ;* time50ms: mov r5,#63h ;49.996ms time50ms_1: mov r6,#0fbh ;503us djnz r6,$ djnz r5,time50ms_1 ret ;* ;延時100mS ;* time100ms: mov r5,#0c3h ;100.036ms time100ms_1: mov r6,#0ffh ;511us djnz r6,$ djnz r5,time100ms_1 ret ;* ;延時200mS
15、 ;* time200ms: mov r5,#02h ;250.351ms time200ms_1: mov r6,#0f4h ;125.173ms time200ms_2: mov r7,#0ffh ;511us djnz r7,$ djnz r6,time200ms_2 djnz r5,time200ms_1 ret ;* ;延時500mS ;* time500ms: mov r5,#04h ;500.701ms time500ms_1: mov r6,#0f4h ;125.173ms time500ms_2: mov r7,#0ffh ;511us djnz r7,$ djnz r6,t
16、ime500ms_2 djnz r5,time500ms_1 ret ;* ;延時1S ;* time1s: mov r5,#08h ;1001.401ms time1s_1: mov r6,#0f4h ;125.173ms time1s_2: mov r7,#0ffh ;511us djnz r7,$ djnz r6,time1s_2 djnz r5,time1s_1 ret12M晶振機器周期為為單周期指令為雙周期指令3;晶振12MHZ,延時1秒DELAY:MOV 72H,#100 LOOP3:MOV 71H,#100 LOOP1:MOV 70H,#47 LOOP0:DJNZ 70H,LOO
17、P0 NOP DJNZ 71H,LOOP1 MOV 70H,#46 LOOP2:DJNZ 70H,LOOP2 NOP DJNZ 72H,LOOP3 MOV 70H,#48 LOOP4:DJNZ 70H,LOOP44;延時1分鐘子程序,F(xiàn)=6MHz;程序已測過,延時時間60,000,000.0uSdelay60s:mov r3,#228mov r2,#253mov r1,#219loop1: djnz r1,$djnz r2,loop1djnz r3,loop1nopret5計算機反復(fù)執(zhí)行一段程序以到達延時的目的稱為軟件延時,單片機程序中經(jīng)常需要短時間的延時,但是相當(dāng)一局部人對延時程序很模糊,對
18、延時程序的算法不夠了解,在這里我以12MHz晶振和兩個經(jīng)典延時子程序為例,詳細分析單片機匯編延時程序。何為時鐘周期、機器周期、和指令周期?時鐘周期:也就是振蕩周期,以12MHz的時鐘脈沖為例,那時鐘周期就為1/12000000s=1/12us;機器周期:1個機器周期=6個狀態(tài)周期=12個時鐘周期=1us;指令周期:CPU執(zhí)行一條指令所需要的時間稱為指令周期,指令周期是以機器周期為單位的,不同的指令所需的機器周期不一定一樣,可參考51單片機指令速查表。由上可得:CPU執(zhí)行一條單周期指令,需要1us;執(zhí)行一條雙周期指令需要2us。下面是具體的延時子程序分析:0.1s延時子程序12MHz晶振:MOV R7,#200 ;單周期指令1usD1: MOV R6,#250 ;單周期指令1usDJNZ R6,$ ;雙周期指令2us/該指令自身執(zhí)行R6次DJNZ R7
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 好教育好人生
- 學(xué)校法制教育匯報
- 布氏桿菌肺炎CT表現(xiàn)
- 教育學(xué)心理學(xué)探討
- 2025年體育與健康課
- 牙齒美白術(shù)的護理
- 我運動·不怕冷·享健康
- 企業(yè)的主數(shù)據(jù)建設(shè)方法論與實踐
- 能源行業(yè)碳中和碳達峰光儲一體化智慧安全項目建設(shè)方案
- 2025年鎖眼機項目提案報告
- 公司客戶開發(fā)管理制度
- JG/T 3033-1996試驗用砂漿攪拌機
- 2025年數(shù)字媒體藝術(shù)專業(yè)考試試卷及答案
- (高清版)DB13∕T 5834-2023 化工建設(shè)項目安裝工程質(zhì)量技術(shù)資料管理規(guī)范
- 2024 - 2025湘美版小學(xué)美術(shù)期末試卷附答案
- 安徽省蕪湖市2025屆高考二模地理試題(含答案)
- 2025年電子信息工程專業(yè)綜合能力考試卷及答案
- 2025年度6深圳中考數(shù)學(xué)考點、知識點的總結(jié)模版
- DB13(J)-T 8422-2021 建筑工程消能減震技術(shù)標(biāo)準(zhǔn)
- 2024統(tǒng)編版七年級歷史下冊 第18課《清朝的邊疆治理》教學(xué)設(shè)計
- 噴粉技術(shù)員試題及答案
評論
0/150
提交評論