《單片機程序設(shè)計》PPT課件.ppt_第1頁
《單片機程序設(shè)計》PPT課件.ppt_第2頁
《單片機程序設(shè)計》PPT課件.ppt_第3頁
《單片機程序設(shè)計》PPT課件.ppt_第4頁
《單片機程序設(shè)計》PPT課件.ppt_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章 單片機程序設(shè)計,3-1 程序設(shè)計簡介 3-2 順序程序的設(shè)計 3-3 分支程序的設(shè)計 3-4 循環(huán)程序的設(shè)計 3-5 常用子程序介紹 3-6 查表程序的設(shè)計,項目引入,1.項目描述 將09這十個數(shù)循環(huán)送P1口七段LED上顯示 。 2.硬件電路與工作原理 讓學(xué)生根據(jù)任務(wù)分析硬件要求,畫出具體電路,并在實驗開發(fā)板上接線 3.程序設(shè)計(給出控制程序),8051,START: ORG 0100H MAIN: MOV R0,#00H MOV DPTR,#TABLE DISP: MOV A,R0 MOVC A,A+ADPTR MOV P1,A ACALL DELAY INC R0 CJNE R0,#0AH,DISP AJMP MAIN,DELAY: MOV R1,#0FFH LOOP0: MOV R2,#0FFH LOOP1: DJNZ R2,LOOP1 DJNZ R1,LOOP0 RET TABLE:DB 0C0H,0F9H, DB 0A4H,0B0H DB 99H, 92H DB 82H, 0F8H DB 80H, 90H END,LED顯示電路控制程序,單片機匯編語言程序設(shè)計的基本步驟如下: (1) 題意分析。熟悉并了解匯編語言指令的基本格式和主要特點,明確被控對象對軟件的要求,設(shè)計出算法等。 (2) 畫出程序流程圖。編寫較復(fù)雜的程序,畫出程序流程圖是十分必要的。程序流程圖也稱為程序框圖,是根據(jù)控制流程設(shè)計的,它可以使程序清晰,結(jié)構(gòu)合理,便于調(diào)試。 (3) 分配內(nèi)存工作區(qū)及有關(guān)端口地址。分配內(nèi)存工作區(qū),要根據(jù)程序區(qū)、數(shù)據(jù)區(qū)、暫存區(qū)、堆棧區(qū)等預(yù)計所占空間大小,對片內(nèi)外存儲區(qū)進行合理分配并確定每個區(qū)域的首地址,便于編程使用。,3-1 程序設(shè)計簡介,(4) 編制匯編源程序。 (5) 仿真、調(diào)試程序。 (6) 固化程序。 程序編寫做到:占用存儲空間少;運行時間短; 程序的編制、調(diào)試及排錯所需時間短;結(jié)構(gòu)清晰,易讀、易于移植。,按結(jié)構(gòu)化程序設(shè)計思想,任何復(fù)雜程序都可由 順序結(jié)構(gòu)、 分支結(jié)構(gòu)、 循環(huán)結(jié)構(gòu)等構(gòu)成。,簡單程序也就是順序程序,它是最簡單、最基本的程序結(jié)構(gòu),其特點是按指令的排列順序一條條地執(zhí)行,直到全部指令執(zhí)行完畢為止。不管多么復(fù)雜的程序,總是由若干順序程序段所組成的。本節(jié)通過實例介紹簡單程序的設(shè)計方法。 例3.1 4字節(jié)(雙字)加法。將內(nèi)部RAM 30H開始的4個單元中存放的4字節(jié)十六進制數(shù)和內(nèi)部RAM 40H單元開始的4個單元中存放的4字節(jié)十六進制數(shù)相加,結(jié)果存放到40H開始的單元中。,3-2 簡單順序程序的設(shè)計,(1) 題意分析。 題目的要求如圖3.1所示。,圖3.1 例3.1題意分析示意圖,ORG 0000H LJMP MAIN MAIN: ORG 0080H MOV A,30H ADD A,40H MOV 40H,A ;最低字節(jié)加法并送結(jié)果 MOV A,31H ADDC A,41H MOV 41H,A ;第二字節(jié)加法并送結(jié)果,(2) 匯編語言源程序。 按照雙字節(jié)加法的思路,實現(xiàn)4字節(jié)加法的源程序如下:,MOV A,32H ADDC A,42H MOV 42H,A ;第三字節(jié)加法并送結(jié)果 MOV A,33H ADDC A,43H MOV 43H,A ;第四字節(jié)加法并送結(jié)果,進位 SJMP $ ; 位在CY中 END,例3.2、設(shè)在外RAM的60H單元存有1個字節(jié)代碼,要求將其分解成兩個4位字段,高4位存入原單元的低4位,其低4位存入61H單元的低4位,且要求這兩個單元的高4位均為0,試編制完整程序。,ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV R0,#30H MOV R1,#40H MOV R7,#08H LOOP:MOV A,R0 MOV R1,A INC R0 INC R1 DJNZ R7,LOOP SJMP $,解: 核心指令 ANL ORG 1000H MODE:MOV R0,#60H MOVX A,R0 MOV B,A ANL A,#0F0H SWAP A MOVX R0,A MOV A,B ANL A,#0FH INC R0 MOVX R0,A SJMP $ END,一、分支結(jié)構(gòu)與分支程序設(shè)計 結(jié)構(gòu):根據(jù)不同的條件,進行相應(yīng)的處理。 通常用條件轉(zhuǎn)移指令形成簡單分支結(jié)構(gòu)。 如: 判(A) = Z 或 NZ ,轉(zhuǎn)移 判(CY)= 1 或 0 ,轉(zhuǎn)移 判(bit)=1 或 0 ,轉(zhuǎn)移 CJNE 比較不相等轉(zhuǎn)移,3-3 分支程序的設(shè)計,例3.3、設(shè)a存放在累加器A中,b存放在寄存器B中,要求按下式 計算Y值,并將結(jié)果Y存于累加器A 中,試編寫程序。 a-b (a0) Y = a+b (a 0),解:本題關(guān)鍵是判a是正數(shù),還是負數(shù);由ACC.7便知。 ORG 1000H BR: JB ACC.7,MINUS CLR C SUBB A,B SJMP DONE MINUS: ADD A,B DONE: SJMP END,分支程序?qū)嵗?1兩分支程序設(shè)計 例3.4 兩個無符號數(shù)比較(兩分支)。內(nèi)部RAM的20H單元和30H單元各存放了一個8位無符號數(shù),請比較這兩個數(shù)的大小,比較結(jié)果顯示在實驗板上: 若(20H)(30H),則P1.0管腳連接的LED發(fā)光; 若(20H)(30H),則P1.1管腳連接的LED發(fā)光。 如何讓LED發(fā)光?給該引腳送低電平即可。,(1) 題意分析。 本例是典型的分支程序,根據(jù)兩個無符號數(shù)的比較結(jié)果(判斷條件),程序可以選擇兩個流向之中的某一個,分別點亮相應(yīng)的LED。 比較兩個無符號數(shù)常用的方法是將兩個數(shù)相減,然后判斷有否借位CY。若CY=0,無借位,則XY;若CY=1,有借位,則XY。程序的流程圖如圖3.2所示。,圖3.2 兩數(shù)比較流程圖,(2) 匯編語言源程序。 X DATA 20H ;數(shù)據(jù)地址賦值偽指令DATA Y DATA 30H ORG 0080H MOV A, X ;(X) A CLR C ;CY=0 SUBB A,Y ;帶借位減法,A- (Y)-CYA JC L1 ;CY=1,轉(zhuǎn)移到 L1 CLR P1.0 ;CY=0,(20H)(30H),點亮P1.0連接的LED SJMP FINISH ;直接跳轉(zhuǎn)到結(jié)束等待 L1:CLR P1.1 ;(20H)(30H),點亮P1.1連接的LED FINISH: SJMP $,例3.5:內(nèi)部RAM30H和31H中分別存有2個8位無符號數(shù),編程找出其中的大數(shù)存入內(nèi)部32H單元中。 ORG 0040H MOV A, 30H CLR C SUBB A,31H JC L1 ;CY=1,轉(zhuǎn)移到 L1 ADD A,31H MOV 32H,A SJMP FINISH ;直接跳轉(zhuǎn)到結(jié)束等待 L1:MOV A,31H MOV 32H,A FINISH: SJMP $,(3) 執(zhí)行結(jié)果。 執(zhí)行該程序之前,利用單片機開發(fā)系統(tǒng)先往內(nèi)部RAM的20H和30H單元存放兩個無符號數(shù)(可以任意設(shè)定),執(zhí)行后觀察點亮的LED是否和存放的數(shù)據(jù)大小相一致。 可以通過偉福仿真軟件看到程序執(zhí)行的結(jié)果。必須注意:要有初始值。,循環(huán)結(jié)構(gòu)不但使程序簡練,而且大大節(jié)省存儲空間。 循環(huán)程序包含四部分: 、初始化部分 (循環(huán)計數(shù)器、地址指針初始化) 、循環(huán)處理部分(主體,需要重復(fù)執(zhí)行的部分) 、循環(huán)控制部分(修改地址指針、修改變量、檢測 循環(huán)結(jié)束條件) 、循環(huán)結(jié)束部分(對結(jié)果分析、處理,存放結(jié)果),3-4 循環(huán)程序的設(shè)計,先處理,后判斷:,先判斷,后處理:,循環(huán)有:單循環(huán)、多重循環(huán)。 循環(huán)次數(shù)已知,可用計數(shù)器控制循環(huán)次數(shù); 循環(huán)次數(shù)未知,按問題條件控制循環(huán)是否結(jié)束。,1、單循環(huán)程序 (1)循環(huán)次數(shù)是已知的程序 例3.6、已知片內(nèi)RAM的40H單元開始依次存放10個8位無符號二進制數(shù),要求找出其中的最大數(shù)存入3FH單元中,試編程。 解:先將第一個數(shù)和第二個數(shù)比較,大者送入累加器A中,然后拿累加器中A的數(shù)與第三個數(shù)比較,依次比較下去。最后累加器A中剩下的是最大數(shù)。 比較大小用減法指令,注意恢復(fù)累加器A中的原來的大數(shù)。,START:MOV R2,#09H ;循環(huán)計數(shù)初值(循環(huán)次數(shù)已知) MOV R0,#40H ;地址指針初值 MOV A,R0 ;取數(shù) LOOP:INC R0;調(diào)整地址指針 CLR C SUBB A,R0 JC NEXT1 ;CY1(后者大)轉(zhuǎn)NEXT1 ADD A,R0;恢復(fù)A中的原來大數(shù) SJMP NEXT2 NEXT1: MOV A,R0;大數(shù)送給A NEXT2: DJNZ R2,LOOP;控制循環(huán)次數(shù) MOV 3FH,A SJMP $,P101頁延時程序例子,延時50毫秒的子程序。 DEL:MOV R7,#200 DEL1:MOV R6,#123 NOP DEL2:DJNZ R6,DEL2;2001232us 49.2ms DJNZ R7,DEL1 RET,DEALY:MOV R7,#20 DEL3: MOV R6,#123 DEL2:MOV R5,#200 NOP DEL1:DJNZ R5,DEL1 DJNZ R6,DEL2 DJNZ R7,DEL3 RET,約為延時1秒子程序,START: MOV R2,#08H ;設(shè)置循環(huán)次數(shù) MOV A,#0FEH ;從P1.0P1.7使LED逐 ;個亮過去 NEXT: MOV P1,A ;點亮LED LCALL DEALY RL A DJNZ R2,NEXT ;次數(shù)減1,不為零,繼續(xù) ;點亮下一個LED SJMP START DEALY:MOV R7,#20H,P1口循環(huán)點亮發(fā)光二極管程序,3-5 常用子程序介紹,步驟: 1、確定子程序名稱,即入口標號。 2、確定子程序的輸入/輸出參數(shù)。 3、確定所用的寄存器和存儲單元,以便現(xiàn)場保護。斷點保護由指令自動完成。 4、確定子程序的算法,編寫源程序。,例3.7:多字節(jié)BCD數(shù)加法。 子程序: ADDB: PUSH PSW PUSH ACC CLR C LOOP: MOV A, R0 ADDC A, R1 DA A MOV R0, A INC R0 INC R1 DJNZ R2, LOOP POP ACC POP PSW RET,4字節(jié)BCD數(shù)相加主程序: MOV R0, #20H MOV R1, #30H MOV R2, #04H LCALL ADDB,3-6 查表程序,1、查表用指令 MOVC A, A+DPTR MOVC A, A+PC,例3.8:用查表發(fā)求(09)的平方 MOV DPTR, #TAB M

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論