單片機第二次試驗報告——分支程序設(shè)計匯總_第1頁
單片機第二次試驗報告——分支程序設(shè)計匯總_第2頁
單片機第二次試驗報告——分支程序設(shè)計匯總_第3頁
單片機第二次試驗報告——分支程序設(shè)計匯總_第4頁
單片機第二次試驗報告——分支程序設(shè)計匯總_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上 微機實驗報告實驗名稱 分支程序設(shè)計實驗 專業(yè)班級 姓名 學(xué)號 序號 聯(lián)系方式 一、任務(wù)要求 熟練掌握KeilC環(huán)境下匯編語言程序的調(diào)試方法,加深對匯編語言指令、機器碼、尋址方式等基本內(nèi)容的理解,掌握分支程序和簡單程序的設(shè)計與調(diào)試方法,了解并行IO口的使用。 1. 設(shè)有8bits符號數(shù)X存于外部RAM單元,按以下方式計算后的結(jié)果Y也存于外部RAM單元,請按要求編寫程序。 2. 利用51系列單片機設(shè)計一個24小時制電子時鐘,電子時鐘的時、分、秒數(shù)值分別通過P0、P1、P2端口輸出(以壓縮BCD碼的形式)。P3.0為低電平時開始計時,為高電平時停止計時。 提高部分(選做)

2、:a. 實現(xiàn)4位十進制加、減1計數(shù),千位、百位由P1口輸出;十位、個位由P2口輸出。利用P3.7狀態(tài)選擇加、減計數(shù)方式。b. 利用P3口低四位狀態(tài)控制開始和停止計數(shù),控制方式自定。二、設(shè)計思路 1.分段函數(shù)設(shè)計 對于第一個任務(wù),相當于設(shè)計一個分段函數(shù)程序,根據(jù)變量X的值所處的區(qū)間進行相應(yīng)的計算。由學(xué)過的知識知道,可利用比較轉(zhuǎn)移指令CJNE來判斷X是否等于臨界值20,40,若不等,再根據(jù)執(zhí)行CJNE指令后的進位位CY的值來判斷X與臨界值的的大小關(guān)系,易知CY=0則X大于臨界值,CY=1則X小于臨界值;如此,再進行相應(yīng)的計算。另外,除法計算中可能產(chǎn)生余數(shù),商和余數(shù)應(yīng)該分開存儲,若乘方運算結(jié)果大于2

3、55,高八位與低八位應(yīng)分開存儲。 2. 24小時制時鐘程序 本程序須可以構(gòu)建兩部分循環(huán)。首先構(gòu)建一個三重循環(huán)實現(xiàn)“一秒延時”,循環(huán)體利用NOP指令(單字節(jié)指令,1µs)經(jīng)多次循環(huán)達到延時一秒的效果。再利用已經(jīng)構(gòu)建好的“一秒延時”部分,設(shè)計計時系統(tǒng)的三重循環(huán),秒(0-59)、分(0-59)、時(0-23)。需要注意的是,在小時、分、秒達到59時,下一次應(yīng)該為零。程序運行時修改P3.0的值可以實現(xiàn)暫停和繼續(xù)的功能。 3.加一減一程序 先初始化P1和P2,然后當P3低四位均為0作為開始計數(shù)的標志,每次計數(shù)中插一個延時程序。P3.7為0時進行加1計數(shù):先把低2位從P2中取出至A,對A進行AD

4、D加一計數(shù)并進行十進制修正,然后存進P2;再把高2位從P1取出至A,對A進行ADDC的加進位操作并十進行進制修正,然后存進P1。P3.7為1時進行減一計數(shù):只需改用ADD指令加上1的補碼即可,高2位在第二位為99時進行同樣的操作,最后分別用P1和P2輸出高2位和低2位。即可實現(xiàn)所需功能。三、資源分配 1.分段函數(shù) 根據(jù)題目的條件,首先,設(shè)該8位無符號數(shù)為30H,把片外地址4000H分配給它,把片外地址4001H和4002H分配給經(jīng)分段函數(shù)計算得到的結(jié)果Y。按位取反計算結(jié)果存于4001H單元,而除法計算結(jié)果的商與余數(shù)和乘方計算中結(jié)果的高、低八位分開存儲于4001H-4002H單元。用寄存器A,B

5、來存放在乘除運算中所得的中間結(jié)果。 2.二十四小時制時鐘 工作寄存器R0、R1、R2分別用于秒、分、時循環(huán)次數(shù)的設(shè)定,R3、R4分別用于分與時的循環(huán)計數(shù),R5-R7用于“一秒延時”中三重循環(huán)的循環(huán)次數(shù)設(shè)定。秒、分、時數(shù)值分別由P2、P1、P0端口輸出。 3.加、減1計數(shù)程序:      將十進制數(shù)的千位數(shù)和百位數(shù)存于P1,將十進制數(shù)的十位數(shù)和個位數(shù)存放于P2,P3.0至P3.3為是否進行計數(shù)的4個控制位,P3.7為選擇加一或減一的計數(shù)方式的控制位 ;R3,R4,R5為計數(shù)中的延時程序指定循環(huán)次數(shù)。   &

6、#160;      4、 流程圖 1.分段函數(shù) (DPTR)A 存X于片外RAM 設(shè)置數(shù)據(jù)指針 X賦值 AX 開始 A20 N Y Y=/XCY1? N(4001H)A CY0 YY=X/2CY1?A40? N Y Y=X² Y N (4001H)A (4002H)B 結(jié)束2. 時鐘程序 開始 PO0 P10 P20 P30 P3.0=0 ?N Y 延時1s 秒鐘計數(shù),R0加1AR0,并轉(zhuǎn)換成BCD碼 P2A R0=60H ?Y N R00 P20 分鐘計數(shù),R1加1AR1, 并轉(zhuǎn)換為BCD碼NR1=60H ? P1A R

7、10 P10 Y 時鐘計數(shù),R2加1AR2,并轉(zhuǎn)換為BCDR20 P00 P0A R2=24 ? N Y 5 源代碼1.分段函數(shù) ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV A, #30H ;將8位無符號數(shù)賦給A MOV DPTR, #4000H ;定義數(shù)據(jù)指針 MOVX DPTR, A ;將X存于片外RAM CLR C ;將進位位清零KIND1:CJNE A, #14H, KIND2 ;將A與14H比較,若不等于14H,跳轉(zhuǎn)至KIND2OUT1: CPL A ;對A中內(nèi)容取反 MOV DPTR, #4001H ;定義數(shù)據(jù)指針 MOVX DPTR, A ;將計

8、算結(jié)果存于片外地址4001H SJMP DONEKIND2:JNC KIND3 ;判斷進位位CY是否為0,若為0,跳轉(zhuǎn)至KIND3 SJMP OUT1 ;否則跳轉(zhuǎn)至OUT1KIND3:CLR C ;將進位位清零 CJNE A,#28H, KIND4 ;將A中內(nèi)容與28H比較,若不等于28H,跳轉(zhuǎn)至KIND4OUT2: MOV B,A ;將A中內(nèi)容賦給B MUL AB ;計算X的平方,將結(jié)果高八位存于B,低八位存于A MOV DPTR, #4001H ;定義數(shù)據(jù)指針 MOVX DPTR,A ;將結(jié)果低八位存于片外地址4001H INC DPTR ;數(shù)據(jù)指針加一 MOV A,B ;將B中內(nèi)容賦給A

9、 MOVX DPTR,A ;將結(jié)果高八位存于片外地址4002H SJMP DONEKIND4:JNC OUT2 ;判斷進位位是否為0,若為0,跳轉(zhuǎn)至OUT2 SJMP OUT3 ;否則跳轉(zhuǎn)至OUT3OUT3: MOV B,#02H DIV AB ;計算X/2,將商存于A,余數(shù)存于B MOV DPTR,#4001H ;定義數(shù)據(jù)指針 MOVX DPTR,A ;將商存于片外地址4001H INC DPTR ;數(shù)據(jù)指針加1 MOV A,B MOVX DPTR,A ;將余數(shù)存于片外地址4002H SJMP DONEDONE: SJMP $ END2. 時鐘程序 ORG 0000H LJMP MAIN O

10、RG 0100HMAIN:MOV R0,#00HMOV P0,#00H ;時鐘位清零MOV P1,#00H ;分鐘位清零MOV P2,#00H ;秒鐘位清零START:JB P3.0,START ;P3.0為低電平開始計數(shù),高電平停止計數(shù) MOV R2,P2 ;P2的值存入R2 CJNE R2,#60H,DEL ;秒鐘達到60繼續(xù),不足60跳轉(zhuǎn) MOV P2,#00H ;秒鐘清零MOV A,P1ADD A,#01H ;分鐘位加1 DA A ;分鐘位改為BCD碼 MOV P1,A MOV R1,P1 ;P1的值存入寄存器R1 CJNE R1,#60H,DEL;分鐘達到60繼續(xù),不足60跳轉(zhuǎn) MO

11、V P1,#00H;分鐘清零 MOV A,R0 ADD A,#01H;時鐘位加1 DA A;時鐘位改為BCD碼 MOV R0,A MOV P0,A CJNE R0,#24H,DEL;時鐘達到24繼續(xù),不足24跳轉(zhuǎn) MOV P0,#00H ;時鐘位清零 MOV R0,#00HDEL: MOV R7,#24 ;延時程序LOOP1: MOV R6,#61LOOP2: MOV R5,#170LOOP3: NOP NOP DJNZ R5,LOOP3 DJNZ R6,LOOP2 DJNZ R7,LOOP1 MOV A,P2 ADD A,#01H;秒鐘位加1 DA A MOV P2,A SJMP START

12、END3. 加一減一程序 ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV P1,#00H ;P1端口置零MOV P2,#00H;P2端口置零MOV P3,#7FH ;P3端口置#7FHSTART:JB P3.0,STARTJB P3.1,STARTJB P3.2,STARTJB P3.3,START;判斷是否開始計時LJMP DELAY;跳轉(zhuǎn)到延時子程序DELAY:MOV R7,#24DEL1: MOV R6,#61DEL2: MOV R5,#170DEL3: NOP NOP DJNZ R5,DEL3 DJNZ R6,DEL2 DJNZ R7,DEL1;延時1秒J

13、B P3.7 ,DOWN;P3.7為0時,加1計數(shù);P3.7為1時,減1計數(shù)LJMP UP DOWN:MOV A,P2CLR CSUBB A,#01HMOV R1,AANL A,#0FHMOV R7,AMOV A,R1ANL A,#0F0HMOV R1,AMOVA,P1SUBB A,#00HMOV R0,AANLA,#0FHMOV R6,AMOV A,R0ANL A,#0F0HMOV R0,ACJNE R7,#0FH,LOOP1MOV R7,#09HLOOP1:CJNE R1,#0F0H,LOOP2MOV R1,#90HLOOP2:CJNE R6,#0FH,LOOP3MOV R6,#09HLO

14、OP3:CJNE R0,#0F0H,LOOP4MOV R0,#90HLOOP4:MOV A,R1ADD A,R7DA AMOV P2,AMOV A,R0ADD A,R6DA AMOV P1,ALJMP DELAY ;減1計數(shù)子程序UP:MOV A,P2ADD A,#01HDA AMOV P2,AMOV A,P1ADDC A,#00HDA AMOV P1,ALJMP DELAY ;加1計數(shù)子程序END6、 程序測試方法與結(jié)果、軟件性能分析1.分段函數(shù)對于分段函數(shù)的問題,可以將X設(shè)為某一值,運行程序,觀察各個寄存器及有關(guān)地址中內(nèi)容,進行驗證。截圖如下: (1)X=30H (2)X=0AH (3)X

15、=18H經(jīng)驗證,所有結(jié)果正確,且運行程序過程中并未出現(xiàn)任何問題,故源程序正確 2.24小時時鐘程序 附加:思考題 1實現(xiàn)多分支結(jié)構(gòu)程序的主要方法有哪些?舉例說明。 2在編程上,十進制加1計數(shù)器與十六進制加1計數(shù)器的區(qū)別是什么?怎樣用十進制加法指令實現(xiàn)減1計數(shù)?答:1.一是利用條件轉(zhuǎn)移指令實現(xiàn),如DJNZ,JNC等等 例如:例如,判斷兩個單字節(jié)無符號數(shù)的大?。ǚ謩e存于片內(nèi) RAM 的 40H 和 41H 單元)并把大數(shù)存入 42H 單元??梢杂门袛?CY 的轉(zhuǎn)移指令 JNC 來實現(xiàn),程序如下:JUDGE:MOV A,40H CLR C SUBB A,41H JNC LP MOV 42H,41H

16、RETLP: MOV 42H,40H RET 二是利用分支表來實現(xiàn),如分支地址表、轉(zhuǎn)移指令表、地址偏移量表。例如:根據(jù) R3 的值控制轉(zhuǎn)向 8 個分支程序。采用分支地址表實現(xiàn):MOV DPTR,#BRATAB ;取表首地址MOV A,R3ADD A,R3 ;AR3×2JNC NADDINC DPH ;R3×2 進位加到 DPHNADD:MOV A,R4 ;暫存 AMOVC A,A+DPTR ;取分支地址高 8 位XCH A,R4INC AMOVC A,A+DPTR ;取分支地址低 8 位MOV DPL,A ;分支地址低 8 位送 DPLMOV DPH,R4 ;分支地址高 8 位送 DPHCLR AJMP A+DPTR ;轉(zhuǎn)相應(yīng)分支程序BRATAB: DW SUBR0 ;分支地址表DW SUBRDW

溫馨提示

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

評論

0/150

提交評論