




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、談?wù)剠R編延時(shí)子程序延時(shí)程序在單片機(jī)編程中使用非常廣泛,但一些讀者在學(xué)習(xí)中不知道延時(shí) 程序怎么編程,不知道機(jī)器周期和指令周期的區(qū)別,不知道延時(shí)程序指令的用法,本文就此問題從延 時(shí)程序的基本概念、機(jī)器周期和指令周期的區(qū)別和聯(lián)系、相關(guān)指令的用法等用圖解法的形式詳盡的回答讀者我們知道程序設(shè)計(jì)是單片機(jī)開發(fā)最重要的工作,而程序在執(zhí)行過程中常常需要完成延時(shí)的功能。例如在交通燈的控制程序中,需要控制紅燈亮的時(shí)間持續(xù)30秒,就可以通過延時(shí)程序來完成。延時(shí)程序是如何實(shí)現(xiàn)的呢?下面讓我們先來了解一些相關(guān)的概念。一、機(jī)器周期和指令周期1. 機(jī)器周期是指單片機(jī)完成一個(gè)基本操作所花費(fèi)的時(shí)間,一般使用微秒來計(jì)量單片機(jī)的運(yùn)行
2、速度,51單片機(jī)的一個(gè)機(jī)器周期包括12個(gè)時(shí)鐘振蕩周期,也就是說如果51單片 機(jī)米用12MHz晶振,那么執(zhí)行一個(gè)機(jī)器周期就只需要1 s;如果采用的是6MHz的晶振,那么執(zhí)行一個(gè)機(jī) 器周期就需要2 1 So2 .指令周期是指單片機(jī)執(zhí)行一條指令所需要的時(shí)間,一般利用單片機(jī) 的機(jī)器周期來計(jì)量指令周期。在51單片機(jī)里有單周期指令(執(zhí)行這條指令只需一個(gè)機(jī)器周期),雙周期 指令(執(zhí)行這條指令只需要兩個(gè)機(jī)器周期),四周期指令(執(zhí)行這條指令需要四個(gè)機(jī)器周期)。除了乘、除 兩條指令是四周期指令,其余均為單周期或雙周期指令。也就是說,如果 51單片機(jī)采用的是12MHz晶振, 那么它執(zhí)行一條指令一般只需12微秒的時(shí)間
3、;如果采用的是6MH晶振,執(zhí)行一條指令一般就需24微 秒的時(shí)間?,F(xiàn)在的單片機(jī)有很多種型號(hào),但在每個(gè)型號(hào)的單片機(jī)器件手冊(cè)中都會(huì)詳細(xì)說明執(zhí)行各種指令所需的機(jī)器周期,了解以上概念后,那么可以依據(jù)單片機(jī)器件手冊(cè)中的指令執(zhí)行周期和單片機(jī)所用晶振頻率來完成需要精確延時(shí)時(shí)間的延時(shí)程序。二、延時(shí)指令在單片機(jī)編程里面并沒有真正的延時(shí)指令,從上面的概念中我們知道單片機(jī)每執(zhí)行一條指令都需要一定的時(shí)間,所以要達(dá)到延時(shí)的效果,只須讓單片機(jī)不斷地執(zhí)行沒有具體實(shí)際 意義的指令,從而達(dá)到了延時(shí)的效果。1 .數(shù)據(jù)傳送指令MOV數(shù)據(jù)傳送指令功能是將數(shù)據(jù)從一個(gè)地方復(fù)制、拷貝到另一個(gè)地方。如:MOV R7 #80H ;將數(shù)據(jù)80H送
4、到寄存器R7,這時(shí)寄存器 R7里面存放著80H,就單這條指令而言并沒有任何實(shí)際意義,而執(zhí)行該指令則需要一個(gè)機(jī)器周期。2. 空操作指令NOP空操作指令功能只是讓單片機(jī)執(zhí)行沒有意義的操作,消耗一個(gè)機(jī)器周期。3 .循環(huán)轉(zhuǎn)移指令DJNZ循環(huán)轉(zhuǎn)移指令功能是將第一個(gè)數(shù)進(jìn)行減 1并判斷是否為0,不為0則轉(zhuǎn) 移到指定地點(diǎn);為0則往下執(zhí)行。如:DJNZ R7 KK ;將寄存器R7的內(nèi)容減1并判斷寄存器R7里的內(nèi) 容減完1后是否為0,如果不為0則轉(zhuǎn)移到地址標(biāo)號(hào)為KK的地方;如果為0則執(zhí)行下一條指令。 這條指令需要2個(gè)機(jī)器周期。利用以上三條指令的組合就可以比較精確地編寫出所需要的延時(shí)程序。三、1秒延時(shí)子程序、流程圖
5、及時(shí)間計(jì)算(以單片機(jī)晶振為12MHz為例,1個(gè)機(jī)器周期需要1 s)了解了以上的內(nèi)容,現(xiàn)在讓我們來看看程序總共所需時(shí)間:1+10+2560+330240+660480+5120+20+2=998433 s 1S在這里運(yùn)行這段程序共需998433 s,還差1567 s才達(dá)到1S的,所 以想要達(dá)到完美的1S延時(shí),需要在返回指令RET前再添加一些指令讓它把1567 s的延時(shí)完成。有興趣 的讀者可以自己試著添加完成。最后補(bǔ)充一點(diǎn),編寫程序時(shí)一般將延時(shí)程序編寫成獨(dú)立的子程序,而所謂子程序也就是一個(gè)實(shí)現(xiàn)某個(gè)功能的小模塊。這樣在主程序中就可以方便地反復(fù)調(diào)用編寫好的延時(shí)子程序。小提示:循環(huán)轉(zhuǎn)移指令(DJNZ )
6、除了可以給定地址標(biāo)號(hào)讓其跳轉(zhuǎn)外,還可以將地址標(biāo)號(hào)改成$,這樣程序就跳回本指令執(zhí)行。例如:DJNZ R7, $ ; R7內(nèi)容減1不為0,則再次執(zhí)行本指令;為0則往下執(zhí) 行,當(dāng)R7的值改為10時(shí),則執(zhí)行完該條程序所需的時(shí)間為 2*10=20 1 s。51單片機(jī)匯編延時(shí)程序算法詳解將以12MH鑫振為例,詳細(xì)講解MCS-5仰片機(jī)中匯編程序延時(shí)的精確算法。指令周期、機(jī)器周期與時(shí)鐘周期指令周期:CPIB行一條指令所需要的時(shí)間稱為指令周期,它是以機(jī)器 周期為單位的,指令不同,所需的機(jī)器周期也不同。時(shí)鐘周期:也稱為振蕩周期,一個(gè)時(shí)鐘周期=晶振的倒數(shù)。MCS-5仰片機(jī)的一個(gè)機(jī)器周期=6個(gè)狀態(tài)周期=12個(gè)時(shí)鐘周期
7、。MCS-5仰片機(jī)的指令有單字節(jié)、雙字節(jié)和三字節(jié)的,它們的指令周期不盡相同,一個(gè)單周期指令包含一個(gè)機(jī)器周期,即12個(gè)時(shí)鐘周期,所以一條單周期指令被執(zhí)行所占時(shí)間為12* (1/12000000) =% s。程序分析例1 50ms延時(shí)子程序:DEL MOV R7 #200 談?wù)剠R編延時(shí)子程序DEL1 MOVR6#125 DEL2 DJNZR6 DEL2 DJNZ R7 DEL1 RET精確延時(shí)時(shí)間為:1+ (1*200) + (2*125*200 ) + (2*200) +2=(2*125+3) *200+3 =50603sq 50ms由整理出公式(只限上述寫法)延時(shí)時(shí)間=(2*內(nèi)循環(huán)+3) *外
8、循環(huán)+3 詳解:DELS個(gè)子程序共有五條指令,現(xiàn)在分別就每一條指令 被執(zhí)行的次數(shù)和所耗時(shí)間進(jìn)行分析。第一句:MOV R7 #200在整個(gè)子程序中只被執(zhí)行一次,且為單周期指 令,所以耗時(shí)1從s第二句:MOVR6, #125從看到只要R7-1不為0,就會(huì)返回到這句, 共執(zhí)行了 R7次,共耗時(shí)200s第三句:DJNZR6, DEL2只要R6-1不為0,就反復(fù)執(zhí)行此句(內(nèi)循環(huán) R6 次),乂受外循環(huán)R7控制,所以共執(zhí)行R6*R7次,因是雙周期指令,所以耗時(shí) 2*R6*R7 s。例2 1秒延時(shí)子程序:DEL MOV R7,#10 DEL1 MOV R6 #200 DEL2 MOV R5 #248 DJN
9、Z R5 $ DJNZ R6 DEL2 DJNZ R7 DEL1 談?wù)剠R編延時(shí)子程序RET對(duì)每條指令進(jìn)行計(jì)算得出精確延時(shí)時(shí)間為:1+ (1*10) + (1*200*10 ) + (2*248*200*10 ) + (2*200*10 ) + (2*10) +2=(2*248+3) *200+3*10+3 =998033 s 1s由整理得:延時(shí)時(shí)間=(2*第一層循環(huán)+3) *第二層循環(huán)+3*第三層 循環(huán)+3此式適用三層循環(huán)以內(nèi)的程序,也驗(yàn)證了例1中式(第三層循環(huán)相當(dāng) 于1)的成立。注意,要實(shí)現(xiàn)較長(zhǎng)時(shí)間的延時(shí),一般采用多重循環(huán),有時(shí)會(huì)在程式序里 加入NOP旨令,這時(shí)公式不再適用,下面舉例分析。例
10、3仍以1秒延時(shí)為例DEL MOV R7,#10 1 指令周期 1DEL1 MOV R6 #0FFH 1 指令周期 10DEL2 MOV R5 #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延時(shí)時(shí)間=1+10+2550+326400+652800+5110+20+2 =986893 s 約為 1s整理得:延時(shí)時(shí)間=(3*第一層循環(huán)+
11、3) *第二層循環(huán)+3*第三層循環(huán) +3結(jié)論:針對(duì)初學(xué)者的困惑,對(duì)匯編程序的延時(shí)算法進(jìn)行了分步講解, 并 就幾種不同寫法分別總結(jié)出相應(yīng)的計(jì)算公式, 只要仔細(xì)閱讀例1中的詳解,并用 例2、例3來加深理解,一定會(huì)掌握各種類型程序的算法并加以運(yùn)用。談?wù)剠R編延時(shí)子程序單片機(jī)延時(shí)子程序1) 延時(shí)為:20ms晶振12M1+(1+2*248+2)*4+1+1+1=20000US=20MS用匯編.優(yōu)點(diǎn)就是精確.缺點(diǎn)就是算有點(diǎn)復(fù)雜.DELAY20MS:MOV R7,#4D1:MOV R6,#248DJNZ R6,$DJNZ R7,D1NOPNOPRET2) 一些通過計(jì)算51匯編指令得出的軟延時(shí)子程序* ;*;延
12、時(shí)10uS;*time10us:mov r5,#05h;11usdjnz r5,$* ;*;延時(shí)50uS* ;*time50us:mov r5,#19h;51usdjnz r5,$ret;*;延時(shí)100uS;*time100us:mov r5,#31h;99.6usdjnz r5,$ret;延時(shí)200uS *time200us:mov r5,#64h;201usdjnz r5,$ret;*;延時(shí)250uS;*time250us:mov r5,#7ch;249.6usdjnz r5,$ret;*;延時(shí)350uS;*time350us:mov r5,#0afh;351ustime350us1:dj
13、nz r5,time350us_1* ;*;延時(shí)500uS* ;*time500us:movr5,#0fah;501ustime500us_1:djnzr5,time500us_1ret;延時(shí)1mStimelms:mov r5,#0fah;1001ustime1ms_1:nopnopdjnz r5,time1ms_1ret *談?wù)剠R編延時(shí)子程序;延時(shí)2.5mS *time2 5ms:movr5,#05h;2.496mstime2 5ms1:movr6,#0f8h;497usdjnzr6,$djnzr5,time2_5ms_1ret *;延時(shí)10mS *time10ms:movr5,#14h;1
14、0.262mstime10ms1:movr6,#0ffh;511usdjnzr6,$djnzr5,time10ms_1ret *;延時(shí)50mS談?wù)剠R編延時(shí)子程序 *time50ms:movr5,#63h;49.996mstime50ms1:movr6,#0fbh;503us*djnz r6,$djnz r5,time50ms_1ret *;延時(shí)100mS *time100ms:movr5,#0c3h;100.036mstime100ms1:movr6,#0ffh;511usdjnz r6,$djnz r5,time100ms_1ret *;延時(shí)200mS *time200ms:time200m
15、s_1:time200ms_2:mov r5,#02hmov r6,#0f4hmov r7,#0ffhdjnz r7,$djnz r6,time200ms_2djnz r5,time200ms_1 ret;250.351ms;125.173ms;511us *time500ms:time500ms_1:time500ms_2:;延時(shí)500mS *mov r5,#04hmov r6,#0f4hmov r7,#0ffhdjnz r7,$djnz r6,time500ms_2djnz r5,time500ms_1 ret;500.701ms;125.173ms;511us *談?wù)剠R編延時(shí)子程序;延時(shí)
16、1S.* ;*timels:mov r5,#08h;1001.401mstime1s_1:mov r6,#0f4h;125.173mstime1s_2:mov r7,#0ffh ;511usdjnz r7,$djnz r6,time1s_2djnz r5,time1s_1ret12M晶振 機(jī)器周期為1USNOP為單周期指令DJNZ為雙周期指令.3);晶振12MHZ延時(shí)1秒DELAY:MOV 72H,#100LOOP3:MOV 71H,#100LOOP1:MOV 70H,#47LOOP0:DJNZ 70H,LOOP0NOPDJNZ 71H,LOOP1MOV70H,#46LOOP2:DJNZ70H
17、,LOOP2NOPDJNZ72H,LOOP3MOV70H,#48LOOP4:DJNZ70H,LOOP44) ;延時(shí)1分鐘子程序,F(xiàn)=6MHz;程序已測(cè)過,延時(shí)時(shí)間60,000,000.0uSdelay60s:mov r3,#228mov r2,#253mov r1,#219loop1: djnz r1,$djnz r2,loop1djnz r3,loop1nopret5) 計(jì)算機(jī)反復(fù)執(zhí)行一段程序以達(dá)到延時(shí)的目的稱為軟件延時(shí),單片機(jī)程序中經(jīng)常需要短時(shí)間的延時(shí),但是相當(dāng)一部分人對(duì)延時(shí)程序很模糊,對(duì)延時(shí)程序的算法不夠了解,在這里我以12MH我振和兩個(gè)經(jīng)典延時(shí)子程序?yàn)槔敿?xì)分析單片機(jī)匯編延時(shí)程序。何
18、為時(shí)鐘周期、機(jī)器周期、和指令周期?時(shí)鐘周期:也就是振蕩周期,以12MHZ勺時(shí)鐘脈沖為例,那時(shí)鐘周期就為(1/12000000) s= (1/12 ) us;機(jī)器周期:1個(gè)機(jī)器周期=6個(gè)狀態(tài)周期=12個(gè)時(shí)鐘周期=1us;指令周期:CPLM行一條指令所需要的時(shí)間稱為指令周期,指令周期是以機(jī) 器周期為單位的,不同的指令所需的機(jī)器周期不一定相同,可參考51單片機(jī)指令速查表。由上可得:CPlft行一條單周期指令,需要1us;執(zhí)行一條雙周期 指令需要2us。下面是具體的延時(shí)子程序分析:0.1s延時(shí)子程序(12MH布振):MOV R7,#200 ;單周期指令(1us)D1: MOV R6,#250 ;單周期指令(1us)DJNZ R6,$;雙周期指令(2us) /該指令自身執(zhí)行R6次DJNZ R7,D1
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020-2022年北京市初三一模道德與法治試題匯編:做守法的公民
- 廣東省深圳市寶安區(qū)文匯學(xué)校2019-2020學(xué)年八年級(jí)第二學(xué)期(3月份)月考數(shù)學(xué)試卷-含解析
- 物理-陜西省安康市2025屆高三下學(xué)期第二次質(zhì)量聯(lián)考(安康二模)試題和答案
- 油漆噴涂施工方案
- 座椅安裝施工方案
- 職業(yè)西藥師知識(shí)培訓(xùn)課件
- 北京征地拆遷合同范例
- 勞務(wù)分包安全合同范例
- 農(nóng)業(yè)社團(tuán)實(shí)踐與體驗(yàn)安排計(jì)劃
- 人力資源部的內(nèi)部安全管理計(jì)劃
- 胸痛中心培訓(xùn)課件胸痛中心救治流程
- 鋼管材質(zhì)證明書
- 2023電動(dòng)船舶直流充換電系統(tǒng)技術(shù)條件
- 2023年廣東廣州市中考語文真題及答案
- GB/T 7939.3-2023液壓傳動(dòng)連接試驗(yàn)方法第3部分:軟管總成
- 世界各國區(qū)號(hào)大全
- 認(rèn)識(shí)醫(yī)生和護(hù)士PPT完整版
- 第四章 新聞職業(yè)道德失范:虛假新聞1
- 護(hù)士延續(xù)注冊(cè)體檢表通用
- 高標(biāo)準(zhǔn)農(nóng)田建設(shè)勘測(cè)可研規(guī)劃設(shè)計(jì)與預(yù)算編制技術(shù)方案
- 穿堤涵閘工程施工方案
評(píng)論
0/150
提交評(píng)論