《單片機(jī)應(yīng)用技術(shù)》項(xiàng)目2-軟件延時(shí)流水燈控制_第1頁
《單片機(jī)應(yīng)用技術(shù)》項(xiàng)目2-軟件延時(shí)流水燈控制_第2頁
《單片機(jī)應(yīng)用技術(shù)》項(xiàng)目2-軟件延時(shí)流水燈控制_第3頁
《單片機(jī)應(yīng)用技術(shù)》項(xiàng)目2-軟件延時(shí)流水燈控制_第4頁
《單片機(jī)應(yīng)用技術(shù)》項(xiàng)目2-軟件延時(shí)流水燈控制_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、子情境子情境1-21-2:軟件延時(shí)流水燈控制:軟件延時(shí)流水燈控制任務(wù)任務(wù)1-2-2 1-2-2 任務(wù)任務(wù)1-2-11-2-1軟件延時(shí)實(shí)現(xiàn)燈的閃爍及流動(dòng)軟件延時(shí)實(shí)現(xiàn)燈的閃爍及流動(dòng) 1s1s軟件延時(shí)程序的設(shè)計(jì)及調(diào)試軟件延時(shí)程序的設(shè)計(jì)及調(diào)試 任務(wù)1-2-1:1s軟件延時(shí)程序的設(shè)計(jì)及調(diào)試 任務(wù)要求任務(wù)要求:設(shè)計(jì)延時(shí)設(shè)計(jì)延時(shí)1s1s的軟件延時(shí)程序的軟件延時(shí)程序多重循環(huán)軟件多重循環(huán)軟件延時(shí)延時(shí)1s程序設(shè)計(jì)程序設(shè)計(jì)單循環(huán)軟件延單循環(huán)軟件延時(shí)時(shí)1ms程序設(shè)計(jì)程序設(shè)計(jì) 認(rèn)識(shí)認(rèn)識(shí)單片機(jī)時(shí)序單片機(jī)時(shí)序Step 1Step 2Step 3任務(wù)實(shí)施步驟任務(wù)實(shí)施步驟知識(shí)點(diǎn)小結(jié)知識(shí)點(diǎn)小結(jié)如何實(shí)現(xiàn)燈的流動(dòng)及顯示如何實(shí)現(xiàn)燈的流

2、動(dòng)及顯示 燈的閃爍燈的閃爍 即燈亮?xí)礋袅習(xí)鐣?huì)滅會(huì)再亮再亮再滅再滅,所以要實(shí)現(xiàn)燈的閃爍,首先,所以要實(shí)現(xiàn)燈的閃爍,首先應(yīng)能控制燈的亮滅,上一章的學(xué)習(xí)可以知道,應(yīng)能控制燈的亮滅,上一章的學(xué)習(xí)可以知道,P1.0P1.0引腳置引腳置00燈亮,置燈亮,置11燈滅。其次,閃爍的快慢可以通過控制亮滅的間隔時(shí)間實(shí)現(xiàn),便涉及時(shí)間控?zé)魷纭F浯?,閃爍的快慢可以通過控制亮滅的間隔時(shí)間實(shí)現(xiàn),便涉及時(shí)間控制的問題。制的問題。 燈的流動(dòng)顯示燈的流動(dòng)顯示 先假設(shè)一只燈向左流動(dòng)顯示,即燈亮的順序?yàn)橄燃僭O(shè)一只燈向左流動(dòng)顯示,即燈亮的順序?yàn)镈1D2D7DD1D2D7D1D2 1D2 ,其實(shí)現(xiàn)方法是先將,其實(shí)現(xiàn)方法是先將P1.0

3、P1.0置置00,其它口置,其它口置11,點(diǎn)亮,點(diǎn)亮D1D1,間隔時(shí)間到后,將間隔時(shí)間到后,將P1.1P1.1置置00,其它口置,其它口置11,點(diǎn)亮,點(diǎn)亮D2D2依次循環(huán)下去。依次循環(huán)下去。 因此,不管是閃爍還是流動(dòng)控制,都需要因此,不管是閃爍還是流動(dòng)控制,都需要延時(shí)延時(shí),首先學(xué)習(xí)延時(shí)程序的設(shè),首先學(xué)習(xí)延時(shí)程序的設(shè)計(jì)。計(jì)。1 1如何進(jìn)行時(shí)間控制如何進(jìn)行時(shí)間控制軟件延時(shí)軟件延時(shí) 利用單片機(jī)的利用單片機(jī)的空操作指令空操作指令(即(即NOPNOP指令,指令,CPUCPU執(zhí)行該指令時(shí),單片機(jī)不做執(zhí)行該指令時(shí),單片機(jī)不做任何事,僅僅占用任何事,僅僅占用CPUCPU時(shí)間。)來實(shí)現(xiàn),當(dāng)點(diǎn)亮某只燈后就讓時(shí)間。

4、)來實(shí)現(xiàn),當(dāng)點(diǎn)亮某只燈后就讓CPUCPU執(zhí)行該指令執(zhí)行該指令,控制該指令的執(zhí)行次數(shù)便可以控制延時(shí)時(shí)間。,控制該指令的執(zhí)行次數(shù)便可以控制延時(shí)時(shí)間。定時(shí)器延時(shí)定時(shí)器延時(shí) 利用單片機(jī)內(nèi)部定時(shí)器實(shí)現(xiàn)硬件定時(shí)。利用單片機(jī)內(nèi)部定時(shí)器實(shí)現(xiàn)硬件定時(shí)。返回返回Step 1 Step 1 認(rèn)識(shí)單片機(jī)時(shí)序認(rèn)識(shí)單片機(jī)時(shí)序 軟件延時(shí)的前提是單片機(jī)軟件延時(shí)的前提是單片機(jī)CPUCPU執(zhí)行指令要花時(shí)間,而執(zhí)行指令要花時(shí)間,而NOPNOP指令更是專門為軟件延時(shí)設(shè)指令更是專門為軟件延時(shí)設(shè)計(jì)的指令之一,要控制延時(shí)時(shí)間,首先應(yīng)弄清楚計(jì)的指令之一,要控制延時(shí)時(shí)間,首先應(yīng)弄清楚執(zhí)行一次該指令要花多長(zhǎng)時(shí)間執(zhí)行一次該指令要花多長(zhǎng)時(shí)間。 St

5、ep 1 Step 1 認(rèn)識(shí)單片機(jī)時(shí)序認(rèn)識(shí)單片機(jī)時(shí)序 2.2.單片機(jī)的時(shí)序單片機(jī)的時(shí)序 時(shí)鐘周期時(shí)鐘周期 時(shí)鐘電路所提供給單片機(jī)的時(shí)鐘信號(hào)的周期時(shí)鐘電路所提供給單片機(jī)的時(shí)鐘信號(hào)的周期,單片機(jī)內(nèi)部所有電路的工作,單片機(jī)內(nèi)部所有電路的工作時(shí)鐘都來自于此,當(dāng)時(shí)鐘電路晶振頻率為時(shí)鐘都來自于此,當(dāng)時(shí)鐘電路晶振頻率為l2MHz,它的時(shí)鐘周期就是,它的時(shí)鐘周期就是 。機(jī)器周期機(jī)器周期 單片機(jī)訪問一次存儲(chǔ)器的時(shí)間單片機(jī)訪問一次存儲(chǔ)器的時(shí)間,稱之為一個(gè)機(jī)器周期。一個(gè)機(jī)器周期包括,稱之為一個(gè)機(jī)器周期。一個(gè)機(jī)器周期包括12個(gè)時(shí)鐘周期,如果一個(gè)單片機(jī)選擇的時(shí)鐘頻率為個(gè)時(shí)鐘周期,如果一個(gè)單片機(jī)選擇的時(shí)鐘頻率為l2MHz

6、,機(jī)器周期則為,機(jī)器周期則為 。 指令周期指令周期 所謂指令周期就是所謂指令周期就是CPU指執(zhí)行一條指令所花的時(shí)間指執(zhí)行一條指令所花的時(shí)間。51單片機(jī)的所有指令中單片機(jī)的所有指令中,按執(zhí)行時(shí)間可分為單機(jī)器周期、雙機(jī)器周期和,按執(zhí)行時(shí)間可分為單機(jī)器周期、雙機(jī)器周期和4機(jī)器周期指令。機(jī)器周期指令。 NOP指令屬單機(jī)器周期指令,即,當(dāng)時(shí)鐘頻率為指令屬單機(jī)器周期指令,即,當(dāng)時(shí)鐘頻率為l2MHz時(shí),時(shí),CPU執(zhí)行一次執(zhí)行一次NOP指令,將耗時(shí)指令,將耗時(shí) 。 1 s1 s1/12 sStep 1 Step 1 認(rèn)識(shí)單片機(jī)時(shí)序認(rèn)識(shí)單片機(jī)時(shí)序 Step 2 Step 2 單循環(huán)軟件延時(shí)單循環(huán)軟件延時(shí)1ms1

7、ms程序設(shè)計(jì)程序設(shè)計(jì)610610s1 s610 根據(jù)上面的分析知道,執(zhí)行一次根據(jù)上面的分析知道,執(zhí)行一次NOPNOP指令耗時(shí)指令耗時(shí) ,假設(shè)延時(shí),假設(shè)延時(shí)1s(即(即 ),則需要),則需要執(zhí)行執(zhí)行NOP指令次指令次 ,我們不可能在程序中寫,我們不可能在程序中寫 條條NOP指令,利用指令,利用循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)可以很好的可以很好的解決這個(gè)問題。解決這個(gè)問題。 循環(huán)程序是一種常用的程序結(jié)構(gòu),其流程圖如圖,可知:循環(huán)程序是一種常用的程序結(jié)構(gòu),其流程圖如圖,可知: 循環(huán)程序包括設(shè)置循環(huán)程序包括設(shè)置循環(huán)次數(shù)循環(huán)次數(shù)、設(shè)置、設(shè)置循環(huán)初值循環(huán)初值、循環(huán)體循環(huán)體、 次數(shù)修改次數(shù)修改及及循環(huán)條件判斷循環(huán)條件判斷等

8、,其中,循環(huán)體為需要多次等,其中,循環(huán)體為需要多次 重復(fù)執(zhí)行的程序塊。重復(fù)執(zhí)行的程序塊。 執(zhí)行整個(gè)循環(huán)程序的耗時(shí)為:執(zhí)行整個(gè)循環(huán)程序的耗時(shí)為:1ttt循環(huán)次數(shù)及條件判斷賦初值及循環(huán)次數(shù)時(shí)間循環(huán)次數(shù)()1.1.匯編循環(huán)程序結(jié)構(gòu)及執(zhí)行時(shí)間匯編循環(huán)程序結(jié)構(gòu)及執(zhí)行時(shí)間32 21ms1ms延時(shí)程序設(shè)計(jì)延時(shí)程序設(shè)計(jì) 程序功能分析程序功能分析 單片機(jī)采用單片機(jī)采用12Mhz12Mhz晶振,機(jī)器周期為晶振,機(jī)器周期為1us1us,要實(shí)現(xiàn),要實(shí)現(xiàn)1ms1ms軟件延時(shí),即需單片機(jī)執(zhí)行軟件延時(shí),即需單片機(jī)執(zhí)行1 1000000個(gè)機(jī)器周期。個(gè)機(jī)器周期。算法確定算法確定 采用循環(huán)程序,循環(huán)執(zhí)行指令采用循環(huán)程序,循環(huán)執(zhí)行

9、指令10001000個(gè)機(jī)器周期。個(gè)機(jī)器周期。 程序流程圖程序流程圖 假設(shè)循環(huán)次數(shù)為假設(shè)循環(huán)次數(shù)為200次,則循環(huán)程序執(zhí)次,則循環(huán)程序執(zhí) 行時(shí)間包括:行時(shí)間包括: (1)循環(huán)體)循環(huán)體+循環(huán)次數(shù)修改判斷兩部分循環(huán)次數(shù)修改判斷兩部分 程序要執(zhí)行程序要執(zhí)行200次的耗時(shí);次的耗時(shí); (2)賦循環(huán)初值、循環(huán)次數(shù)等指令耗時(shí))賦循環(huán)初值、循環(huán)次數(shù)等指令耗時(shí) 用用R0寄存器存放循環(huán)次數(shù),賦值寄存器存放循環(huán)次數(shù),賦值200, 循環(huán)次數(shù)修改判斷指令循環(huán)次數(shù)修改判斷指令DJNZ執(zhí)行執(zhí)行1次耗時(shí)次耗時(shí) 2us,則循環(huán)體應(yīng)安排三個(gè),則循環(huán)體應(yīng)安排三個(gè)NOP指令,執(zhí)指令,執(zhí) 行一次循環(huán)耗時(shí)行一次循環(huán)耗時(shí)3us,則,則每

10、次循環(huán)耗時(shí)每次循環(huán)耗時(shí)2+ 3=5us,5200=1000us,實(shí)現(xiàn)了實(shí)現(xiàn)了1ms的的 延時(shí)。延時(shí)。 匯編語言源程序匯編語言源程序DELAY1msDELAY1ms:MOV MOV R0,#200R0,#200 ; ;設(shè)置循環(huán)次數(shù)及初值(設(shè)置循環(huán)次數(shù)及初值(1us1us) LP1:LP1: NOP NOP ; ;循環(huán)體,執(zhí)行三次循環(huán)體,執(zhí)行三次NOPNOP(3us3us) NOPNOP NOP NOP DJNZ R0,LP1 DJNZ R0,LP1 ; ;循環(huán)次數(shù)減循環(huán)次數(shù)減1 1,不為,不為0 0循環(huán),為循環(huán),為0 0退出循環(huán)退出循環(huán)2us2us循環(huán)體執(zhí)行循環(huán)體執(zhí)行200次次循環(huán)次數(shù)修改及循環(huán)

11、次數(shù)修改及判斷,執(zhí)行判斷,執(zhí)行200次次耗時(shí)耗時(shí)1ms 關(guān)鍵指令說明關(guān)鍵指令說明 DJNZDJNZ R0,LP1 R0,LP1 該指令為一條件跳轉(zhuǎn)指令,雙機(jī)器周期指令,執(zhí)行時(shí)間為該指令為一條件跳轉(zhuǎn)指令,雙機(jī)器周期指令,執(zhí)行時(shí)間為2us2us,CPUCPU執(zhí)行該指令將完執(zhí)行該指令將完成以下操作:成以下操作:(1 1)R0=R0-1R0=R0-1,即將,即將R0R0的內(nèi)容減的內(nèi)容減1 1(2 2)減)減1 1后判斷后判斷R0R0是否為是否為0 0,不為,不為0 0則跳到標(biāo)號(hào)則跳到標(biāo)號(hào)LP1LP1處執(zhí)行循環(huán)程序,否則執(zhí)行處執(zhí)行循環(huán)程序,否則執(zhí)行DJNZDJNZ下下一條指令(退出循環(huán))。一條指令(退出

12、循環(huán))。 從而我們看出,利用這一條指令便實(shí)現(xiàn)了循環(huán)次數(shù)修改、條件判斷的功能,以后的從而我們看出,利用這一條指令便實(shí)現(xiàn)了循環(huán)次數(shù)修改、條件判斷的功能,以后的循環(huán)程序中會(huì)經(jīng)常使用這條指令。循環(huán)程序中會(huì)經(jīng)常使用這條指令。各指令的執(zhí)行時(shí)間可查閱指令表。各指令的執(zhí)行時(shí)間可查閱指令表。寄存器尋址寄存器尋址 將操作數(shù)存放在寄存器中,寄將操作數(shù)存放在寄存器中,寄存器包括存器包括R0R7、A、B等。等。 立即數(shù)尋址立即數(shù)尋址 十進(jìn)制數(shù)十進(jìn)制數(shù)200送入送入R0直接尋址直接尋址 LP1代表代表ROM的單元地址的單元地址R0不為不為0精確執(zhí)行時(shí)間為多少?精確執(zhí)行時(shí)間為多少?33.3.程序調(diào)試仿真程序調(diào)試仿真(1)單

13、步調(diào)試)單步調(diào)試 利用利用keil軟件建立項(xiàng)目,編譯后進(jìn)入調(diào)試界面,單步執(zhí)行程序,可以觀察軟件建立項(xiàng)目,編譯后進(jìn)入調(diào)試界面,單步執(zhí)行程序,可以觀察R0和和sec的變的變化情況化情況 。演示鏈接演示鏈接(2)斷點(diǎn)調(diào)試)斷點(diǎn)調(diào)試 使用單步調(diào)試工具可以逐條執(zhí)行程序語句并觀察運(yùn)行結(jié)果,而使用單步調(diào)試工具可以逐條執(zhí)行程序語句并觀察運(yùn)行結(jié)果,而利用斷點(diǎn)調(diào)試工具可以利用斷點(diǎn)調(diào)試工具可以調(diào)試某個(gè)程序塊調(diào)試某個(gè)程序塊。按下列步驟調(diào)試按下列步驟調(diào)試 :演示鏈接演示鏈接 a. 斷點(diǎn)設(shè)置斷點(diǎn)設(shè)置,雙擊,雙擊LJMP $語句前的程序執(zhí)行箭頭處,顯示一紅色圓點(diǎn)即表語句前的程序執(zhí)行箭頭處,顯示一紅色圓點(diǎn)即表示在該語句處設(shè)置

14、了一個(gè)斷點(diǎn),再雙擊則取消斷點(diǎn);示在該語句處設(shè)置了一個(gè)斷點(diǎn),再雙擊則取消斷點(diǎn); b.運(yùn)行程序運(yùn)行程序,斷點(diǎn)設(shè)好后,點(diǎn)擊全速運(yùn)行按鈕,程序?qū)⒈粓?zhí)行到斷點(diǎn)處,并,斷點(diǎn)設(shè)好后,點(diǎn)擊全速運(yùn)行按鈕,程序?qū)⒈粓?zhí)行到斷點(diǎn)處,并在個(gè)窗口顯示相關(guān)信息;在個(gè)窗口顯示相關(guān)信息; c.查看運(yùn)行結(jié)果查看運(yùn)行結(jié)果,sec顯示為顯示為0.00100100s,表示該程序段執(zhí)行了,表示該程序段執(zhí)行了0.00100100秒秒(即(即1001us)滿足延時(shí)要求。否則修改源程序,直到調(diào)試通過。)滿足延時(shí)要求。否則修改源程序,直到調(diào)試通過。Step 3 Step 3 多重循環(huán)軟件延時(shí)多重循環(huán)軟件延時(shí)1s1s程序設(shè)計(jì)程序設(shè)計(jì) 1.1.算法

15、確定及流程圖算法確定及流程圖 前面的程序中使用了寄存器前面的程序中使用了寄存器R0存放循環(huán)次數(shù),存放循環(huán)次數(shù),賦值賦值200,延時(shí),延時(shí)1ms,以此類推,如果給,以此類推,如果給R0賦值賦值200000就可以實(shí)現(xiàn)就可以實(shí)現(xiàn)1s的延時(shí)。但由于的延時(shí)。但由于AT89S51為為8位單片位單片機(jī),除機(jī),除PC和和DPTR外,其余都是外,其余都是8位存儲(chǔ)器位存儲(chǔ)器單元,單元,最最大存儲(chǔ)數(shù)據(jù)為大存儲(chǔ)數(shù)據(jù)為255,因此,要實(shí)現(xiàn)更長(zhǎng)時(shí)間的軟件延,因此,要實(shí)現(xiàn)更長(zhǎng)時(shí)間的軟件延遲,考慮采用多重循環(huán)。遲,考慮采用多重循環(huán)。 延時(shí)延時(shí)1s1s需循環(huán)執(zhí)行需循環(huán)執(zhí)行1ms1ms軟件延時(shí)軟件延時(shí)10001000次,由于次,

16、由于寄存器位數(shù)受限,寄存器位數(shù)受限,將將10001000拆分為拆分為1001001010,即先設(shè),即先設(shè)計(jì)計(jì)10ms10ms延時(shí)程序,再循環(huán)調(diào)用延時(shí)程序,再循環(huán)調(diào)用10ms10ms延時(shí)程序延時(shí)程序100100次次即可,分別采用即可,分別采用R0R0R2R2存放循環(huán)次數(shù),流程圖如圖存放循環(huán)次數(shù),流程圖如圖所示。所示。2.2.匯編語言源程序匯編語言源程序DELAY1s:DELAY1s:MOVMOVR2,#100 R2,#100 ;1us;1usDELAY10ms:DELAY10ms:MOVMOVR1,#10 R1,#10 ;1us;1usDELAY1mDELAY1ms:s:MOVMOVR0,#20

17、0R0,#200 ;1us;1usLP1:LP1:NOPNOP ;1us;1usNOPNOP ;1us;1usNOPNOP ;1us;1usDJNZDJNZR0,LP1R0,LP1 ;2us;2usDJNZDJNZR1,DELAY1ms R1,DELAY1ms ;2us;2usDJNZDJNZR2,DELAY10ms R2,DELAY10ms ;2us;2usSJMPSJMP$ $ ; ;死循環(huán),防止程序跑飛死循環(huán),防止程序跑飛ENDEND ; ;程序結(jié)束程序結(jié)束1ms1ms內(nèi)循環(huán)內(nèi)循環(huán)10ms10ms二重循環(huán)二重循環(huán)1s1s外循環(huán)外循環(huán)100 (10 (200 (32) 1 2) 1 2)

18、1 1003301ts 3. 3. 軟件仿真調(diào)試軟件仿真調(diào)試 1s程序仿真結(jié)果程序仿真結(jié)果 保存源文件,建立項(xiàng)目,添加源文件,編譯后進(jìn)入仿真調(diào)試狀態(tài),設(shè)置斷點(diǎn)并運(yùn)行,保存源文件,建立項(xiàng)目,添加源文件,編譯后進(jìn)入仿真調(diào)試狀態(tài),設(shè)置斷點(diǎn)并運(yùn)行,顯示結(jié)果如圖顯示結(jié)果如圖3-5所示,結(jié)果符合設(shè)計(jì)預(yù)期。所示,結(jié)果符合設(shè)計(jì)預(yù)期。演示鏈接。演示鏈接。返回返回任務(wù)1-2-2:軟件延時(shí)實(shí)現(xiàn)燈的閃爍及流動(dòng)軟件延時(shí)實(shí)現(xiàn)燈的閃爍及流動(dòng) 任務(wù)要求任務(wù)要求:利用利用1s1s軟件延時(shí)程序?qū)崿F(xiàn)燈的閃爍及流動(dòng)顯示軟件延時(shí)程序?qū)崿F(xiàn)燈的閃爍及流動(dòng)顯示延時(shí)子程序延時(shí)子程序?qū)崿F(xiàn)實(shí)現(xiàn)燈的流動(dòng)燈的流動(dòng)帶參數(shù)帶參數(shù)延時(shí)子程序延時(shí)子程序?qū)崿F(xiàn)閃

19、爍實(shí)現(xiàn)閃爍速度控制速度控制延時(shí)子程序延時(shí)子程序?qū)崿F(xiàn)燈實(shí)現(xiàn)燈的閃爍的閃爍 軟件延時(shí)軟件延時(shí)實(shí)現(xiàn)實(shí)現(xiàn)LEDLED閃爍閃爍 Step 1Step 2Step 3任務(wù)實(shí)施步驟任務(wù)實(shí)施步驟知識(shí)點(diǎn)小結(jié)知識(shí)點(diǎn)小結(jié)Step 4Step 1 Step 1 軟件延時(shí)實(shí)現(xiàn)燈的閃爍軟件延時(shí)實(shí)現(xiàn)燈的閃爍 1. 1. 系統(tǒng)功能分析及流程圖系統(tǒng)功能分析及流程圖 此系統(tǒng)的主要功能是利用軟件延時(shí)實(shí)現(xiàn)燈的閃爍,即控制某只燈亮此系統(tǒng)的主要功能是利用軟件延時(shí)實(shí)現(xiàn)燈的閃爍,即控制某只燈亮延時(shí)延時(shí)燈燈滅滅延時(shí)延時(shí)再亮再亮延時(shí)延時(shí)再滅再滅延時(shí)延時(shí)。因此,主程序?qū)嶋H是一個(gè)循環(huán)程序,流。因此,主程序?qū)嶋H是一個(gè)循環(huán)程序,流程圖如圖。程圖如圖。2

20、.2.匯編語言源程序匯編語言源程序 ORG0000HLJMPSTARTORG0030HSTART: CLRP1.0;P1.0=0,燈亮,燈亮; 延時(shí)延時(shí)1s;DELAY1s:MOVR2,#100 DELAY10ms:MOVR1,#10 DELAY1ms:MOVR0,#200LP1:NOPNOPNOPDJNZR0,LP1DJNZR1,DELAY1msDJNZR2,DELAY10msSETBP1.0;P1.0=1,燈滅,燈滅; 延時(shí)延時(shí)1s;DELAY1s1:MOVR2,#100 DELAY10ms1:MOVR1,#10 DELAY1ms1:MOVR0,#200LP11:NOPNOPNOPDJNZ

21、R0,LP11DJNZR1,DELAY1ms1DJNZR2,DELAY10ms1LJMPSTART;跳轉(zhuǎn)到跳轉(zhuǎn)到START處,燈亮處,燈亮ENDCLR(位置(位置0)指令格式:指令格式:CLR bit,(,(bit表某個(gè)位尋址單元,如表某個(gè)位尋址單元,如P1.0)指令功能:指令功能:將某位置將某位置0,CLR P1.0將將P1.0引腳置引腳置0, 燈亮。燈亮。SETB(位置(位置1)指令格式:指令格式:SETB bit,(,(bit表某個(gè)位尋址單元,如表某個(gè)位尋址單元,如P1.0)指令功能:指令功能:將某位置將某位置1,SETB P1.0將將P1.0引腳置引腳置1, 燈滅。燈滅。位尋址位尋址

22、僅對(duì)某位進(jìn)行操作僅對(duì)某位進(jìn)行操作,如程序中的如程序中的CLR P1.0指令,僅將指令,僅將P1寄存器中的寄存器中的P1.0位清位清0,其它位不變。,其它位不變。3.3.仿真調(diào)試仿真調(diào)試 建立項(xiàng)目并編譯完成后,進(jìn)入調(diào)試狀態(tài),調(diào)出建立項(xiàng)目并編譯完成后,進(jìn)入調(diào)試狀態(tài),調(diào)出P1P1窗口,全速執(zhí)行程序,可以發(fā)窗口,全速執(zhí)行程序,可以發(fā)現(xiàn)現(xiàn)P1.0P1.0的內(nèi)容在不停地變化。如果利用的內(nèi)容在不停地變化。如果利用ProteusProteus軟件仿真也可以看到軟件仿真也可以看到D1D1閃爍的效果。閃爍的效果。達(dá)到設(shè)計(jì)要求。達(dá)到設(shè)計(jì)要求。演示鏈接演示鏈接Step 1 Step 1 軟件延時(shí)實(shí)現(xiàn)燈的閃爍軟件延時(shí)實(shí)

23、現(xiàn)燈的閃爍 Step 2 Step 2 延時(shí)子程序?qū)崿F(xiàn)燈的閃爍延時(shí)子程序?qū)崿F(xiàn)燈的閃爍1. 1. 子程序概念子程序概念 在解決實(shí)際問題時(shí),經(jīng)常會(huì)遇到一個(gè)程序中在解決實(shí)際問題時(shí),經(jīng)常會(huì)遇到一個(gè)程序中多次使用同一個(gè)程序段多次使用同一個(gè)程序段,為了節(jié)約內(nèi)存,為了節(jié)約內(nèi)存,我們把這種具有一定功能的獨(dú)立程序段編成子程序,例如上面的延時(shí)子程序。,我們把這種具有一定功能的獨(dú)立程序段編成子程序,例如上面的延時(shí)子程序。當(dāng)需要當(dāng)需要時(shí),可以去調(diào)用這些獨(dú)立的子程序時(shí),可以去調(diào)用這些獨(dú)立的子程序,調(diào)用程序稱為主程序。,調(diào)用程序稱為主程序。 如圖為燈閃爍控制程序,由如圖為燈閃爍控制程序,由主程序和延時(shí)子程序兩部分構(gòu)成,主

24、程序和延時(shí)子程序兩部分構(gòu)成,主程序主程序需要延時(shí)需要延時(shí)時(shí)才時(shí)才轉(zhuǎn)去轉(zhuǎn)去執(zhí)行延執(zhí)行延時(shí)子程序,但,為完成系統(tǒng)功能,時(shí)子程序,但,為完成系統(tǒng)功能,延時(shí)延時(shí)子程序執(zhí)行完后還得子程序執(zhí)行完后還得返回返回主主程序程序控制燈的亮滅??刂茻舻牧翜?。2.2.子程序調(diào)用及返回子程序調(diào)用及返回 CPU執(zhí)行哪段程序取決于執(zhí)行哪段程序取決于指令指針寄存器指令指針寄存器PC的值,如圖所示,延時(shí)子程序定位在的值,如圖所示,延時(shí)子程序定位在ROM的的0100H單元,當(dāng)單元,當(dāng)PC=0100H時(shí),時(shí),CPU將執(zhí)行延時(shí)子程序。再以將執(zhí)行延時(shí)子程序。再以1次調(diào)用為例,延次調(diào)用為例,延時(shí)子程序執(zhí)行完后,使時(shí)子程序執(zhí)行完后,使PC

25、=0035H,CPU將執(zhí)行將執(zhí)行 SETB P1.0語句,使燈滅。語句,使燈滅。 LCALL為子程序調(diào)用指令,可完成為子程序調(diào)用指令,可完成PC=0100H的功能,同時(shí)進(jìn)行斷點(diǎn)地址保護(hù);的功能,同時(shí)進(jìn)行斷點(diǎn)地址保護(hù);RET為子程序返回指令,可將之前保護(hù)的為子程序返回指令,可將之前保護(hù)的斷點(diǎn)地址斷點(diǎn)地址送給送給PC(即(即PC=0035H)。)。 斷點(diǎn)地址斷點(diǎn)地址即即LCALL指令下一條指令所在指令下一條指令所在ROM地址地址,斷點(diǎn)地址保護(hù)在,斷點(diǎn)地址保護(hù)在堆棧堆棧中。中。 堆棧堆棧,存放臨時(shí)數(shù)據(jù)(如斷點(diǎn)地址)的內(nèi)存區(qū)域(,存放臨時(shí)數(shù)據(jù)(如斷點(diǎn)地址)的內(nèi)存區(qū)域(RAM中)。中)。 LCALL(子

26、程序調(diào)用指令)(子程序調(diào)用指令)指令格式:指令格式:LCALL 標(biāo)號(hào),標(biāo)號(hào)即子程序入口地址(如標(biāo)號(hào),標(biāo)號(hào)即子程序入口地址(如DELAY1s)指令功能:指令功能:CPU執(zhí)行執(zhí)行LCALL指令時(shí),依次完成以下操作:指令時(shí),依次完成以下操作:a.PC自動(dòng)加自動(dòng)加1,使,使PC指向指向SETB P1.0所在地址單元(即所在地址單元(即PC=0035H),),注注意,意,LCALL為三字節(jié)指令為三字節(jié)指令;b.保護(hù)保護(hù)PC中的斷點(diǎn)地址中的斷點(diǎn)地址0035H到到堆棧堆棧(RAM中);中);c.將子程序?qū)⒆映绦駾ELAY1s的入口地址的入口地址0100H賦給賦給PC(即(即PC=0100H);d.CPU轉(zhuǎn)向

27、轉(zhuǎn)向DELAY1Sz子程序運(yùn)行。子程序運(yùn)行。RET(子程序返回指令)(子程序返回指令) 子程序必須以子程序必須以RET指令結(jié)尾,指令結(jié)尾,CPU執(zhí)行執(zhí)行RET指令將順序完成以下操指令將順序完成以下操作:作:a.取出先前保護(hù)在取出先前保護(hù)在堆棧堆棧中的斷點(diǎn)地址中的斷點(diǎn)地址0035H賦給賦給PC;b.CPU轉(zhuǎn)向斷點(diǎn)處繼續(xù)執(zhí)行后續(xù)程序。轉(zhuǎn)向斷點(diǎn)處繼續(xù)執(zhí)行后續(xù)程序。如何調(diào)用又如何返回?如何調(diào)用又如何返回?首先明確首先明確Step 2 Step 2 延時(shí)子程序?qū)崿F(xiàn)燈的閃爍延時(shí)子程序?qū)崿F(xiàn)燈的閃爍3. 3. 延時(shí)子程序?qū)崿F(xiàn)燈的閃爍程序設(shè)計(jì)延時(shí)子程序?qū)崿F(xiàn)燈的閃爍程序設(shè)計(jì)演示鏈接演示鏈接 ;主程序主程序;ORG

28、0000HLJMPSTARTORG0030H;定位主程序起始地址為定位主程序起始地址為0030HSTART: CLRP1.0;燈亮燈亮LCALLDELAY1s;調(diào)用調(diào)用1s延時(shí)子程序延時(shí)子程序SETBP1.0;燈滅燈滅LCALLDELAY1s;調(diào)用調(diào)用1s延時(shí)子程序延時(shí)子程序LJMPSTART;跳到跳到START處,燈亮處,燈亮; 延時(shí)延時(shí)1s子程序子程序;ORG0100H;定位延時(shí)子程序起始地址為定位延時(shí)子程序起始地址為0100HDELAY1s:MOVR2,#100 DELAY10ms:MOV R1,#10 DELAY1ms:MOVR0,#200LP1:NOPNOPNOPDJNZ R0,LP

29、1DJNZ R1,DELAY1msDJNZ R2,DELAY10ms RET;子程序返回子程序返回END子程序調(diào)用子程序調(diào)用子程序返回子程序返回如何靈活調(diào)整閃爍時(shí)間?如何靈活調(diào)整閃爍時(shí)間?Step 3 Step 3 帶參數(shù)延時(shí)子程序?qū)崿F(xiàn)閃爍速度的控制帶參數(shù)延時(shí)子程序?qū)崿F(xiàn)閃爍速度的控制帶參數(shù)延時(shí)子程序?qū)崿F(xiàn)閃爍速度的控制程序設(shè)計(jì)帶參數(shù)延時(shí)子程序?qū)崿F(xiàn)閃爍速度的控制程序設(shè)計(jì)演示鏈接演示鏈接 ; 帶參數(shù)延時(shí)子程序,可靈活改變演示時(shí)間,便于控制閃爍速度帶參數(shù)延時(shí)子程序,可靈活改變演示時(shí)間,便于控制閃爍速度;ORG0000HLJMPSTARTORG0030H ;定位主程序起始地址為定位主程序起始地址為003

30、0HSTART: CLRP1.0 ;燈亮燈亮MOVR2,#200 ;給入口參數(shù)賦值,延時(shí)給入口參數(shù)賦值,延時(shí)2sLCALLDELAY10ms ;調(diào)用延時(shí)子程序調(diào)用延時(shí)子程序SETBP1.0 ;燈滅燈滅MOVR2,#50 ;給入口參數(shù)賦值,延時(shí)給入口參數(shù)賦值,延時(shí)0.5sLCALLDELAY10ms ;調(diào)用延時(shí)子程序調(diào)用延時(shí)子程序LJMPSTART ;跳到跳到START處,燈亮處,燈亮; 帶參數(shù)延時(shí)子程序,入口參數(shù)為帶參數(shù)延時(shí)子程序,入口參數(shù)為R2;ORG0100H ;定位延時(shí)子程序起始地址為定位延時(shí)子程序起始地址為0100HDELAY10ms:MOV R1,#10 DELAY1ms:MOVR0

31、,#200LP1:NOPNOPNOPDJNZ R0,LP1DJNZ R1,DELAY1msDJNZ R2,DELAY10ms ;修改循環(huán)次數(shù)并進(jìn)行循環(huán)條件判斷修改循環(huán)次數(shù)并進(jìn)行循環(huán)條件判斷 RET ;子程序返回子程序返回END利用利用R2傳遞參數(shù),傳遞參數(shù), 主程序中賦值,表示主程序中賦值,表示10ms延時(shí)程序循環(huán)次數(shù)延時(shí)程序循環(huán)次數(shù)利用利用R2傳遞參數(shù),傳遞參數(shù), 子程序中訪問子程序中訪問R2,并,并作為循環(huán)次數(shù)使用作為循環(huán)次數(shù)使用Step 3 Step 3 燈的閃爍及流動(dòng)程序設(shè)計(jì)燈的閃爍及流動(dòng)程序設(shè)計(jì) 5.5.延時(shí)子程序?qū)崿F(xiàn)燈的流動(dòng)顯示延時(shí)子程序?qū)崿F(xiàn)燈的流動(dòng)顯示功能分析功能分析 先假設(shè)一只燈向左流動(dòng)顯示,即燈亮的順序?yàn)橄燃僭O(shè)一只燈向左流動(dòng)顯示,即燈亮的順序?yàn)镈1D1D2D2D7D7D1D1D2D2 ,其實(shí)現(xiàn)方法是先將,其實(shí)現(xiàn)方法是先將P1.0P1.0置置00,其它口置,其它口置11,點(diǎn)亮,點(diǎn)亮D1D1,間隔時(shí)間到后,將,間隔時(shí)間到后,將P1.P1.1 1置置00,其它口置,其它口置11,點(diǎn)亮,點(diǎn)亮D2D2依次循環(huán)下去。依次循環(huán)下去。 由此,只要依次給由此,只要依次給P1P1口送口送11111110B11111110B11111101B11111101B1111101

溫馨提示

  • 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)論