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

下載本文檔

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

文檔簡(jiǎn)介

第三章 單片機(jī)程序設(shè)計(jì),3-1 程序設(shè)計(jì)簡(jiǎn)介 3-2 順序程序的設(shè)計(jì) 3-3 分支程序的設(shè)計(jì) 3-4 循環(huán)程序的設(shè)計(jì) 3-5 常用子程序介紹 3-6 查表程序的設(shè)計(jì),項(xiàng)目引入,1.項(xiàng)目描述 將09這十個(gè)數(shù)循環(huán)送P1口七段LED上顯示 。 2.硬件電路與工作原理 讓學(xué)生根據(jù)任務(wù)分析硬件要求,畫出具體電路,并在實(shí)驗(yàn)開發(fā)板上接線 3.程序設(shè)計(jì)(給出控制程序),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顯示電路控制程序,單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)的基本步驟如下: (1) 題意分析。熟悉并了解匯編語(yǔ)言指令的基本格式和主要特點(diǎn),明確被控對(duì)象對(duì)軟件的要求,設(shè)計(jì)出算法等。 (2) 畫出程序流程圖。編寫較復(fù)雜的程序,畫出程序流程圖是十分必要的。程序流程圖也稱為程序框圖,是根據(jù)控制流程設(shè)計(jì)的,它可以使程序清晰,結(jié)構(gòu)合理,便于調(diào)試。 (3) 分配內(nèi)存工作區(qū)及有關(guān)端口地址。分配內(nèi)存工作區(qū),要根據(jù)程序區(qū)、數(shù)據(jù)區(qū)、暫存區(qū)、堆棧區(qū)等預(yù)計(jì)所占空間大小,對(duì)片內(nèi)外存儲(chǔ)區(qū)進(jìn)行合理分配并確定每個(gè)區(qū)域的首地址,便于編程使用。,3-1 程序設(shè)計(jì)簡(jiǎn)介,(4) 編制匯編源程序。 (5) 仿真、調(diào)試程序。 (6) 固化程序。 程序編寫做到:占用存儲(chǔ)空間少;運(yùn)行時(shí)間短; 程序的編制、調(diào)試及排錯(cuò)所需時(shí)間短;結(jié)構(gòu)清晰,易讀、易于移植。,按結(jié)構(gòu)化程序設(shè)計(jì)思想,任何復(fù)雜程序都可由 順序結(jié)構(gòu)、 分支結(jié)構(gòu)、 循環(huán)結(jié)構(gòu)等構(gòu)成。,簡(jiǎn)單程序也就是順序程序,它是最簡(jiǎn)單、最基本的程序結(jié)構(gòu),其特點(diǎn)是按指令的排列順序一條條地執(zhí)行,直到全部指令執(zhí)行完畢為止。不管多么復(fù)雜的程序,總是由若干順序程序段所組成的。本節(jié)通過(guò)實(shí)例介紹簡(jiǎn)單程序的設(shè)計(jì)方法。 例3.1 4字節(jié)(雙字)加法。將內(nèi)部RAM 30H開始的4個(gè)單元中存放的4字節(jié)十六進(jìn)制數(shù)和內(nèi)部RAM 40H單元開始的4個(gè)單元中存放的4字節(jié)十六進(jìn)制數(shù)相加,結(jié)果存放到40H開始的單元中。,3-2 簡(jiǎn)單順序程序的設(shè)計(jì),(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) 匯編語(yǔ)言源程序。 按照雙字節(jié)加法的思路,實(shí)現(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é)果,進(jìn)位 SJMP $ ; 位在CY中 END,例3.2、設(shè)在外RAM的60H單元存有1個(gè)字節(jié)代碼,要求將其分解成兩個(gè)4位字段,高4位存入原單元的低4位,其低4位存入61H單元的低4位,且要求這兩個(gè)單元的高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è)計(jì) 結(jié)構(gòu):根據(jù)不同的條件,進(jìn)行相應(yīng)的處理。 通常用條件轉(zhuǎn)移指令形成簡(jiǎ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è)計(jì),例3.3、設(shè)a存放在累加器A中,b存放在寄存器B中,要求按下式 計(jì)算Y值,并將結(jié)果Y存于累加器A 中,試編寫程序。 a-b (a0) Y = a+b (a 0),解:本題關(guān)鍵是判a是正數(shù),還是負(fù)數(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è)計(jì) 例3.4 兩個(gè)無(wú)符號(hào)數(shù)比較(兩分支)。內(nèi)部RAM的20H單元和30H單元各存放了一個(gè)8位無(wú)符號(hào)數(shù),請(qǐng)比較這兩個(gè)數(shù)的大小,比較結(jié)果顯示在實(shí)驗(yàn)板上: 若(20H)(30H),則P1.0管腳連接的LED發(fā)光; 若(20H)(30H),則P1.1管腳連接的LED發(fā)光。 如何讓LED發(fā)光?給該引腳送低電平即可。,(1) 題意分析。 本例是典型的分支程序,根據(jù)兩個(gè)無(wú)符號(hào)數(shù)的比較結(jié)果(判斷條件),程序可以選擇兩個(gè)流向之中的某一個(gè),分別點(diǎn)亮相應(yīng)的LED。 比較兩個(gè)無(wú)符號(hào)數(shù)常用的方法是將兩個(gè)數(shù)相減,然后判斷有否借位CY。若CY=0,無(wú)借位,則XY;若CY=1,有借位,則XY。程序的流程圖如圖3.2所示。,圖3.2 兩數(shù)比較流程圖,(2) 匯編語(yǔ)言源程序。 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),點(diǎn)亮P1.0連接的LED SJMP FINISH ;直接跳轉(zhuǎn)到結(jié)束等待 L1:CLR P1.1 ;(20H)(30H),點(diǎn)亮P1.1連接的LED FINISH: SJMP $,例3.5:內(nèi)部RAM30H和31H中分別存有2個(gè)8位無(wú)符號(hào)數(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í)行該程序之前,利用單片機(jī)開發(fā)系統(tǒng)先往內(nèi)部RAM的20H和30H單元存放兩個(gè)無(wú)符號(hào)數(shù)(可以任意設(shè)定),執(zhí)行后觀察點(diǎn)亮的LED是否和存放的數(shù)據(jù)大小相一致。 可以通過(guò)偉福仿真軟件看到程序執(zhí)行的結(jié)果。必須注意:要有初始值。,循環(huán)結(jié)構(gòu)不但使程序簡(jiǎn)練,而且大大節(jié)省存儲(chǔ)空間。 循環(huán)程序包含四部分: 、初始化部分 (循環(huán)計(jì)數(shù)器、地址指針初始化) 、循環(huán)處理部分(主體,需要重復(fù)執(zhí)行的部分) 、循環(huán)控制部分(修改地址指針、修改變量、檢測(cè) 循環(huán)結(jié)束條件) 、循環(huán)結(jié)束部分(對(duì)結(jié)果分析、處理,存放結(jié)果),3-4 循環(huán)程序的設(shè)計(jì),先處理,后判斷:,先判斷,后處理:,循環(huán)有:?jiǎn)窝h(huán)、多重循環(huán)。 循環(huán)次數(shù)已知,可用計(jì)數(shù)器控制循環(huán)次數(shù); 循環(huán)次數(shù)未知,按問(wèn)題條件控制循環(huán)是否結(jié)束。,1、單循環(huán)程序 (1)循環(huán)次數(shù)是已知的程序 例3.6、已知片內(nèi)RAM的40H單元開始依次存放10個(gè)8位無(wú)符號(hào)二進(jìn)制數(shù),要求找出其中的最大數(shù)存入3FH單元中,試編程。 解:先將第一個(gè)數(shù)和第二個(gè)數(shù)比較,大者送入累加器A中,然后拿累加器中A的數(shù)與第三個(gè)數(shù)比較,依次比較下去。最后累加器A中剩下的是最大數(shù)。 比較大小用減法指令,注意恢復(fù)累加器A中的原來(lái)的大數(shù)。,START:MOV R2,#09H ;循環(huán)計(jì)數(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中的原來(lái)大數(shù) SJMP NEXT2 NEXT1: MOV A,R0;大數(shù)送給A NEXT2: DJNZ R2,LOOP;控制循環(huán)次數(shù) MOV 3FH,A SJMP $,P101頁(yè)延時(shí)程序例子,延時(shí)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,約為延時(shí)1秒子程序,START: MOV R2,#08H ;設(shè)置循環(huán)次數(shù) MOV A,#0FEH ;從P1.0P1.7使LED逐 ;個(gè)亮過(guò)去 NEXT: MOV P1,A ;點(diǎn)亮LED LCALL DEALY RL A DJNZ R2,NEXT ;次數(shù)減1,不為零,繼續(xù) ;點(diǎn)亮下一個(gè)LED SJMP START DEALY:MOV R7,#20H,P1口循環(huán)點(diǎn)亮發(fā)光二極管程序,3-5 常用子程序介紹,步驟: 1、確定子程序名稱,即入口標(biāo)號(hào)。 2、確定子程序的輸入/輸出參數(shù)。 3、確定所用的寄存器和存儲(chǔ)單元,以便現(xiàn)場(chǎng)保護(hù)。斷點(diǎn)保護(hù)由指令自動(dòng)完成。 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論