計算機硬件技術(shù)基礎(chǔ)軟件實驗講義_第1頁
計算機硬件技術(shù)基礎(chǔ)軟件實驗講義_第2頁
計算機硬件技術(shù)基礎(chǔ)軟件實驗講義_第3頁
計算機硬件技術(shù)基礎(chǔ)軟件實驗講義_第4頁
計算機硬件技術(shù)基礎(chǔ)軟件實驗講義_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第二章 指令系統(tǒng)和匯編語言程序設(shè)計實驗 本章實驗主要包括指令系統(tǒng)和匯編語言程序設(shè)計兩部分。采用軟件模擬調(diào)試的方法,目的在于通過這些實驗可以使學生鞏固所學知識,加深對MCS-51單片機內(nèi)部結(jié)構(gòu)、指令系統(tǒng)的理解,更進一步掌握匯編語言程序設(shè)計的方法和技巧。第一節(jié) 指令系統(tǒng)實驗實驗一 熟悉鍵盤操作及數(shù)傳指令編程設(shè)計一、 實驗目的1 熟悉軟件模擬調(diào)試的環(huán)境及鍵盤操作。2 掌握匯編語言程序設(shè)計的方法,加深對指令的理解。3 學會軟件模擬調(diào)試和察看修改觀察項的方法。二、 實驗內(nèi)容印證數(shù)據(jù)傳送指令的功能、尋址方式以及PC指針、SP指針、DPTR指針、Ri指針分別對代碼段、堆棧段、外擴數(shù)據(jù)存儲器段、位尋址區(qū)等不同

2、存儲器的訪問方式。 三、實驗步驟1 進入調(diào)試軟件環(huán)境,輸入源程序;2 匯編源程序;3 用單步方式運行程序;4 檢查并記錄各寄存器和存儲單元內(nèi)容的變化。四、程序清單1. 內(nèi)部RAM數(shù)據(jù)傳送需要查看的數(shù)據(jù)有30H,31H,A,R0等。ORG 0000H MOV R0,#30HMOV 30H,#45H MOV 31H,#46H MOV R2,30H MOV 02H,31H MOV A,#87H MOV 0E0H,30H MOV 30H,A MOV 31H,R0 SJMP $ END2. 外部數(shù)據(jù)傳送需要查看的數(shù)據(jù)有外部數(shù)據(jù)存儲器單元2000H,外部程序存儲器單元2001H。ORG 0000H MOV

3、 A,#89H MOV DPTR,#2000H MOVX DPTR,A INC DPTRCLR A MOVC A,A+DPTR SJMP $ ORG 2000H DB 44H DB 78H DB 67H END3. 堆棧操作需要查看的數(shù)據(jù)有50H、51H、A及SP指針和堆棧區(qū)中數(shù)據(jù)隨PUSH和POP指令執(zhí)行后的變化情況和數(shù)據(jù)的存放次序等。1)可用于保護現(xiàn)場和恢復現(xiàn)場的程序ORG 0000H MOV SP,#5FHMOV 50H,#3BHMOV 51H,#2FHMOV A,#12H PUSH 50H PUSH 51H PUSH ACCPOP 0E0H POP 51H POP 50H SJMP $

4、 END 2)可用于數(shù)據(jù)交換的程序ORG 0100H MOV SP,#6FHMOV 50H,#3BHMOV 51H,#2FH PUSH 50H PUSH 51H POP 50H POP 51H SJMP $ END4.數(shù)據(jù)交換 記錄每條指令運行后的結(jié)果,從而加深對各種不同的交換指令的理解。 ORG 0000H MOV A,#58H SWAP A MOV 40H,A MOV A,#30H MOV R0,#30H MOV R0,#09H XCHD A,R0 MOV 50H,#1 MOV A,#89H XCH A,50H MOV R7,#3 XCH A,R7 XCH A,R0 SJMP $ END五

5、、 思考題1 寄存器尋址與寄存器間接尋址有什么區(qū)別?2 PC指針與SP指針有什么區(qū)別?3 DPTR指針與Ri(R0,R1)指針有什么區(qū)別?4 立即尋址與直接尋址有什么區(qū)別?4. 同一個特殊功能寄存器不同表達形式。實驗二 數(shù)傳指令和算數(shù)運算指令編程設(shè)計一、 實驗目的1 掌握數(shù)據(jù)塊的傳送操作和算術(shù)運算指令的應(yīng)用。2 進一步掌握匯編語言設(shè)計和調(diào)試方法。3 掌握觀察窗口的使用方法。4 學會給存儲單元賦初值的方法。二、 實驗內(nèi)容1 數(shù)據(jù)區(qū)傳送(1)把內(nèi)部RAM 40H4FH置初值0A0H0AFH;(2)而后把40H4FH內(nèi)容傳送到外部RAM 9800H980FH中;(3)再把 9800H980FH內(nèi)容傳

6、送到 50H5FH中。 2多字節(jié)十進制加法加數(shù)放在30H開始的單元中(最低位放在30H,按從小到大的順序存放),被加數(shù)和結(jié)果存放在20H開始的單元(最低位在20H中),字節(jié)數(shù)放在2FH中,最高進位位放在位地址7FH單元中。三、 實驗步驟1 分別用單步和連續(xù)運行方式,調(diào)試上述兩個程序;2 在執(zhí)行第二個程序之前,給被加數(shù)和加數(shù)單元賦初值;3 在觀察窗口中觀察結(jié)果。四、 實驗程序清單1 數(shù)據(jù)塊傳送程序: ORG 0000H MAIN: MOV R0,#40H MOV R2,#10H MOV A,#0A0H A1: MOV R0, A INC R0 INC A DJNZ R2, A1 MOV R0,

7、#40H MOV DPTR, #9800H MOV R2, #10H A2: MOV A, R0 MOVX DPTR, A INC R0 INC DPTR DJNZ R2, A2 MOV R0, #50H MOV DPTR, #9800H MOV R2, #10H A3: MOVX A, DPTR MOV R0, A INC DPTR INC R0 DJNZ R2, A3 SJMP $ END 2 多字節(jié)十進制加法: ORG 0000HMAIN: MOV R0, #30H MOV R1, #20H MOV 2FH,#04H CLR C DA1: MOV A,R0ADDC A, R1 DA A

8、MOV R1, A INC R0 INC R1 DJNZ 2FH, DA1 MOV 7FH, C SJMP $ END 五、 思考題1 若兩個數(shù)據(jù)塊都在外部數(shù)據(jù)存儲器中,如何實現(xiàn)數(shù)據(jù)塊的傳送?2 在調(diào)試第一個程序時,若不用程序給40H4FH賦初值,而用鍵盤在CPU DATA區(qū)給40H4FH單元預賦初值,如何做?3 若把第二個程序改為無符號數(shù)的減法,怎樣修改程序?4 在第二個程序中,若兩數(shù)的和存放到從40H開始的單元,如何修改程序?實驗三 邏輯運算及位操作指令編程設(shè)計一、 實驗目的(1) 熟悉字節(jié)邏輯運算指令功能。(2) 熟悉位操作指令運算功能。 (3)從而更深入的掌握匯編語言程序設(shè)計。 (4)

9、學會觀察CPU窗口中BIT區(qū)的變化。二、 實驗內(nèi)容1 字節(jié)邏輯運算程序在片內(nèi)RAM的FIRST和SECOND單元中各有一符號數(shù)X和Y,要求按下列條件算出Z,存入RESULT單元中(設(shè)運算結(jié)果仍為8位數(shù))。X + Y X為正奇數(shù)XY X為正偶數(shù)XY X為負奇數(shù)Z=XY X為負偶數(shù)FIRST EQU 30H SECOND EQU 31H RESULT EQU 32H ORG 0000H START:MOV R0,F(xiàn)IRST MOV A, R0 JB ACC.7, NEG MOV B, #2 DIV AB MOV A, B JZ TEMP1 MOV A,R0 ADD A, SECOND SJMP R

10、ES TEMP1: MOV A, R0 ANL A, SECOND SJMP RES NEG: CPL ACC.7 MOV B, #2 DIV AB MOV A, B JZ TEMP2 MOV A, R0 ORL A, SECOND SJMP RES TEMP2: MOV A, R0 XRL A, SECOND RES: MOV RESULT, ASJMP $END 2位操作程序 布爾電路圖如下: X BIT 00H Y BIT 01H Z BIT 02H F BIT 03H ORG 0000H START: MOV C, Z ANL C, /Y MOV F, C MOV C, Y ANL C

11、, /Z ORL C, F MOV F, C MOV C, X ANL C, Y ORL C, /F MOV F, C SJMP $ END 3拆字程序把外部數(shù)據(jù)存儲器2000H單元的內(nèi)容拆開,其高四位送2001H低四位,低四位送2002H低四位,2001H、2002H高四位清零。 需要檢查2000H、 2001H和2002H單元的內(nèi)容。程序清單ORG 0000HMOV DPTR,#2000HMOVX A,DPTRMOV B,ASWAP AANL A,#0FHINC DPTRMOVX DPTR,AINC DPTRMOV A,BANL A,#0FHMOVX DPTR,ASJMP $END開 始結(jié)

12、 束2000H內(nèi)容送A高低位交換,屏蔽高位后送2001H2000H內(nèi)容送A屏蔽高位后送2002H程序框圖 4拼字程序2001H內(nèi)容送A,屏蔽高位開 始結(jié) 束高低位交換,送BA和B或后送2002H2000H內(nèi)容送A,屏蔽高位把外部數(shù)據(jù)存儲器2000H、2001H單元的低四位分別送2002H高低四位。需要察看2000H、2001H和2002H單元內(nèi)容。程序框圖:程序清單ORG 0000HMOV DPTR,#2000HMOVX A,DPTRANL A,#0FHSWAP AMOV B,AINC DPTRMOVX A,DPTRANL A,#0FHORL A,BINC DPTRMOVX DPTR,ASJM

13、P $END5自選程序設(shè)計 三、 思考題1 字節(jié)與位邏輯運算指令在編程上什么區(qū)別?應(yīng)注意什么?2 若把兩位十六進制數(shù)轉(zhuǎn)換成對應(yīng)的ASCII碼,應(yīng)如何編寫程序?3 采用其它方法設(shè)計第一個程序。4 如何用斷點方式調(diào)試本程序?實驗四 代碼轉(zhuǎn)換一、實驗目的1掌握各種代碼轉(zhuǎn)換的算法,加深對各種數(shù)據(jù)編碼的理解。2學會軟件模擬調(diào)試和察看修改觀察項的方法來觀察轉(zhuǎn)換結(jié)果。三、 實驗內(nèi)容1分析清楚個程序的功能。2調(diào)試各種代碼轉(zhuǎn)換的程序。三、實驗步驟1進入調(diào)試軟件環(huán)境,輸入源程序;2匯編源程序;3用單步或全速方式運行程序;4查看最終結(jié)果。四、程序清單1十六進制數(shù) ASCII碼 將十六進制數(shù)據(jù)08H,0CH轉(zhuǎn)換成AS

14、CII碼,轉(zhuǎn)換結(jié)果存入30H,31H兩個單元中,再將30H,31H兩個單元中的數(shù)據(jù)分別增1,然后轉(zhuǎn)換成十六進制數(shù)存入40H,41H兩個單元中。ORG 0000HMOV SP,#2FHMOV A,#08HADD A,#30HPUSH ACCMOV A,#0CHADD A,#37HPUSH ACCMOV A,30HINC ACLR CSUBB A,#30HMOV 40H,APOP ACCINC ASUBB A,#37HMOV 41H,APOP ACCSJMP $END2二進制數(shù) BCD碼將二進制數(shù)10011011B轉(zhuǎn)換成BCD碼數(shù),存入30H和31H單元中;再將30H單元中的數(shù)據(jù)加16H后,轉(zhuǎn)換成

15、二進制數(shù)據(jù),存入40H單元中。ORG 0000HMOV A,#10011011BMOV B,#100DIV ABMOV 30H,AMOV A,BMOV B,#10DIV ABSWAP AORL A,BMOV 31H,AMOV A,30HADD A,#16HDA APUSH ACCANL A,#00001111BMOV 40H,APOP ACCANL A,#11110000BSWAP AMOV B,#10MUL ABADD A,40HMOV 40H,ASJMP $END3BCD碼 ASCII碼 將20H單元中壓縮的BCD碼數(shù)78H轉(zhuǎn)換成ASCII碼,轉(zhuǎn)換結(jié)果存入30H,31H兩個單元中,再將30

16、H,31H兩個單元中的數(shù)據(jù)分別增1,然后轉(zhuǎn)換成壓縮BCD碼數(shù)存入21H單元中。 ORG 0000H MOV A,20H ANL A,#00001111B ADD A,#30H MOV 30H,A PUSH ACC MOV A,20H ANL A,#11110000B SWAP A ADD A,#30H MOV 31H,A INC A CLR C SUBB A,#30H MOV R2,A POP ACC INC A CLR C SUBB A,#30H SWAP A ORL A,R2 MOV 21H,A SJMP $ END5 自選程序設(shè)計六、 思考題1. 如何查看上面三個程序的結(jié)果。2. 在程序

17、1中,如果十六進制數(shù)未指定是否包含AF數(shù)碼,程序應(yīng)如何修改?3. 在程序2中,如果要轉(zhuǎn)換的二進制數(shù)是十六位的,程序應(yīng)如何編寫?4. 十六進制數(shù)轉(zhuǎn)換成ASCII碼與BCD碼數(shù)轉(zhuǎn)換成ASCII碼有何區(qū)別?實驗五 移位操作一、 實驗目的:掌握移位操作的方法,并理解左移或右移與乘除法運算的關(guān)系。二、 實驗內(nèi)容:1雙字節(jié)二進制數(shù)左移一位將兩個內(nèi)部RAM 31H和30H單元中的內(nèi)容組成的雙字節(jié)數(shù)通過Cy左移一位。功能示意圖Cy31H30H程序清單 ORG 0000HCLR CMOV A ,30HRLC AMOV 30H, AMOV A,31HRLC AMOV 31H, ASJMP$END2多字節(jié)二進制數(shù)右

18、移一位將三個內(nèi)部RAM 32H、31H和30H單元中的內(nèi)容組成的三字節(jié)數(shù)通過Cy右移一位。功能示意圖32H31HCy30H程序清單 ORG 0000HCLR CMOV A,32HRRC AMOV 32H,AMOV A,31HRRC AMOV 31H,AMOV A,30HRRC AMOV 30H,ASJMP $END三、 思考題1 多于三個字節(jié)的移位操作如何進行?2 如果不通過Cy如何移位?實現(xiàn)的功能有何不同?第二節(jié) 匯編語言程序設(shè)計實驗實驗六 分支程序設(shè)計一、 實驗目的1. 進一步熟悉MCS-51指令系統(tǒng),了解匯編語言程序設(shè)計的基本結(jié)構(gòu)。2. 掌握分支結(jié)構(gòu)程序設(shè)計的方法。3. 學會用條件轉(zhuǎn)移指

19、令、CJNE、JMP及其配合使用來編寫二分支、三分支和多分支程序。二、 實驗內(nèi)容 1. 二分支的條件轉(zhuǎn)移程序設(shè)變量X存放于R0,函數(shù)值Y存放在R1,其中X、Y均為二進制數(shù)。試按照下式的要求給Y賦值:Y=1X>00X=0-1X<0程序框圖2-1如下:NNYY開始(A) > 0?(A) = 0?A(R0)(A) = -1(A) = 1(A)(R1)結(jié)束 N圖2-1 二、三分支結(jié)構(gòu)程序流程圖2. 自選題目設(shè)計 三、實驗步驟1 根據(jù)實驗內(nèi)容和參考程序流程圖,編出相應(yīng)的分支結(jié)構(gòu)程序。2 輸入程序,匯編成功;3 用F4(執(zhí)行到光標處)、F7(跟蹤執(zhí)行)、F8(單步執(zhí)行)或斷點運行等方式調(diào)

20、試程序;4 觀察程序的流程,記錄運行結(jié)果。四、思考題1 CJNE指令對CY 有影響嗎?用CJNE 和JC/JNC指令配合應(yīng)注意什么?在用JMP 指令前,若變址>255怎么辦? 2用什么指令可以實現(xiàn)多分支之間的隔離?五、實驗報告要求寫出題目運行結(jié)果。六、參考程序清單1、二分支的條件轉(zhuǎn)移程序1) 用二分支結(jié)構(gòu)程序?qū)崿F(xiàn):ORG 0000H MOV A, R0 JZ LOAD ;等于零轉(zhuǎn)LOAD JNB ACC.7,GO ;大于零轉(zhuǎn)GO MOV A, #0FFH SJMP LOAD GO: MOV A, #01H LOAD: MOV R1, A SJMP $ END 2)用三分支結(jié)構(gòu)程序?qū)崿F(xiàn):

21、ORG 0000H MOV A, R0 JNZ COMP ;不等于零轉(zhuǎn)COMP MOV R1,#00H ;等于零,則0 à(R1) SJMP MP3 COMP: CJNE R0,#80H,MP1 ;(R0)中數(shù)與80H比較,不相等則轉(zhuǎn)移到MP1 MOV R1,#0FFH ;若比較相等,則-1 à(R1) LJMP MP3 MP1: JC MP2 ;兩數(shù)不相等,(R0)> 0轉(zhuǎn)MP2 MOV R1,#0FFH ;(R0) < 0,-1 à(R1) LJMP MP3 MP2: MOV R1,#01H ;(R0)>0,1 à(R1) MP3:

22、 SJMP $ END實驗七 循環(huán)程序設(shè)計 一、實驗目的1 進一步熟悉MCS-51指令系統(tǒng),了解匯編語言程序設(shè)計的基本結(jié)構(gòu)。2 掌握循環(huán)結(jié)構(gòu)程序設(shè)計的方法,弄清單重及多重循環(huán)控制過程。3 通過設(shè)計軟件延時程序,學會計算內(nèi)外循環(huán)次數(shù)以及循環(huán)體的循環(huán)時間。二、 實驗內(nèi)容1 設(shè)計一個循環(huán)程序具體要求:將內(nèi)部RAM中30H至32H的內(nèi)容右移四位,程序流程圖如圖2-3所示。2 設(shè)計循環(huán)程序:冒泡法排序。具體要求:設(shè)單片機8031外部RAM從3600H單元開始存放10個無符號數(shù),試編寫程序能使它們按從大到小的順序排列(最大數(shù)存放在3600H單元)。程序流程圖如圖2-4所示。 3 自選題目設(shè)計。三、 實驗步

23、驟1 輸入預先編好的程序,匯編成功;2 用自動單步方式執(zhí)行程序,觀察循環(huán)計數(shù)器的變化情況。3 用斷點運行方式調(diào)試排序程序,記錄排序過程。四、實驗報告要求1 編出相應(yīng)的循環(huán)結(jié)構(gòu)程序,列出程序清單,并且會計算循環(huán)體的循環(huán)時間。2 寫出自選題目的設(shè)計內(nèi)容、程序清單及運行結(jié)果。五、思考題1 程序中循環(huán)時間由什么來控制?2 若用DJNZ或CJNE指令來控制循環(huán),編寫程序有什么不同?六、參考流程圖開始 4®(R7) 3®(R6) 0®CY 30H®(R0) (R0)®(A) 右移(A) 一次 (A)®(R0) (R0)+1®(R0) N

24、 (R6)-1=0? Y N (R7)-1=0? Y 結(jié)束圖2-3 循環(huán)結(jié)構(gòu)程序流程圖七、循環(huán)結(jié)構(gòu)程序參考清單: 1三個字節(jié)右移四位: ORG 0000H MOV R7,#4 RR30: MOV R6,#3 CLR C MOV R0,#30H RR31: MOV A,R0 RRC A MOV R0,A INC R0 DJNZ R6,RR31 DJNZ R7,RR30 SJMP $ END2. 冒泡法排序:ORG 0000HMOV PSW,#00HMOV P2,#36HMOV R2,#10-1 LOOP0: MOV R0,#00H MOV R1,#01H MOV 03H,R2 CLR 7FH L

25、OOP1: MOVX A,R0 MOV 30H,A MOVX A,R1 CJNE A,30H,LOOP2 SJMP L1 LOOP2: JC L1 MOVX R0,A XCH A,30H MOVX R1,A SETB 7FH L1: INC R0 INC R1 DJNZ R3,LOOP1 JNB 7FH,LOOP3 DJNZ R2,LOOP0 LOOP3: SJMP $ END開始置地址指針,置外循環(huán)計數(shù)器置內(nèi)循環(huán)地址指針,置內(nèi)循環(huán)計數(shù)器 清零交換標志位(7FH)0取兩操作數(shù)前數(shù)后數(shù)交換兩數(shù),置1交換標志位(7FH)1內(nèi)循環(huán)結(jié)束(7FH)=1?外循環(huán)結(jié)束結(jié)束 Y N N N Y N Y N Y

26、圖2-4 循環(huán)結(jié)構(gòu)程序流程圖實驗八 查表程序設(shè)計一、實驗目的1進一步熟悉MCS-51指令系統(tǒng)和匯編語言程序設(shè)計。2學會用MOVC指令編寫查表程序。 二、實驗內(nèi)容 1設(shè)計并調(diào)試一個查平方表的程序,其功能為應(yīng)用查表指令MOVC A,A+PC,求累加器A中數(shù)的平方值,結(jié)果平方值送A。要求待查的(A)15。2設(shè)計并調(diào)試一個根據(jù)電壓值查與其對應(yīng)的溫度值的查表程序,其功能為應(yīng)用查表指令MOVC A,A+DPTR,求(A)中電壓值對應(yīng)的溫度值,將溫度值送R2R3(溫度值為二字節(jié)的壓縮BCD碼),電壓值的范圍為(A)0FFH。實驗程序參考框圖如2-5所示。三、 實驗步驟 1 敲入程序和預定表后;2 通過修改自

27、變量參數(shù)啟動并調(diào)試程序,直至正確為止。3 邊調(diào)試邊體會用PC或DPTR作指針查表的區(qū)別。開始 表首地址®(DPTR)(A)+(A)+(DPTR)®(DPTR) 0®(A) 查表取第一個字節(jié)®(R2) 0®(A)(DPTR)+1®(DPTR)查表取第二個字節(jié)®(R3) 結(jié)束 圖2-5 查表程序框圖四、 實驗報告要求根據(jù)實驗內(nèi)容和程序參考流程,編出所需查表程序,列出實驗程序清單。五、思考題1 當表的長度255個字節(jié)時應(yīng)選哪一條指令查表?2 用PC指針查表編程時應(yīng)注意什么? 六、參考程序清單1 求平方值查表程序: ORG 0000

28、HADD A,#02H MOVC A,A+PCSJMP $DB 0,1,4,9,16,25DB 36 ······ 225END2 測量溫度查表程序: ORG 0000HMOV DPTR,#TABCLR CMOV R0,AADD A,R0MOV F0,CADD A,DPLMOV DPL,ACLR AADDC A,DPHMOV C,F(xiàn)0ADDC A,#0MOV DPH,ACLR AMOVC A,A+DPTR ; 查第一個字節(jié)MOV R2,ACLR AINC DPTRMOVC A,A+DPTR ; 查第二個字節(jié)MOV R3,ASJMP $

29、TAB:DW ;溫度表值(自己設(shè)定一組數(shù)) END實驗九 散轉(zhuǎn)程序設(shè)計一、 實驗目的1進一步熟悉MCS-51指令系統(tǒng)和匯編語言程序設(shè)計。 2學會用三種不同的方法設(shè)計散轉(zhuǎn)程序,并掌握它們的區(qū)別。 二、 實驗內(nèi)容設(shè)計并調(diào)試一個程序,其功能為根據(jù)(20H)的值i (i7)取相應(yīng)的處理程序Pi的入口地址并轉(zhuǎn)移到程序Pi ,Pi的處理程序的功能為(Ri)+1(Ri),(20H)+17®(20H),再重復地根據(jù)(20H)散轉(zhuǎn)。參考程序框圖如圖2-6所示:三、實驗步驟1 輸入編好的程序,匯編成功;2調(diào)試程序,使用修改寄存器的方法,使R0R7初值為0,然后啟動系統(tǒng),帶斷點運行,運行一個循環(huán)后檢查運行

30、結(jié)果,觀察R0R7是否依次計數(shù),排除程序中錯誤,直至R0R7同步計數(shù)為止。四、實驗報告要求1 列出根據(jù)流程圖編寫的程序清單,寫出程序執(zhí)行的結(jié)果。2 采用另外兩種不同的方法編寫程序,列出調(diào)試通過的程序清單。0 ( 2 0H)根據(jù)(20H)查轉(zhuǎn)移地址 (DPTR)0(A)( (A)( 根據(jù)(DPTR)散轉(zhuǎn)(20H)+1 (20H)(20H)7 (20H)(R0)+1(R0)(R7)+1(R7)(R1)+1(R1) 開始 0 1 7 圖2-6 散轉(zhuǎn)程序框圖五、參考程序清單散轉(zhuǎn)程序清單:請將程序補充完整后運行。 ORG 0000H MOV 20H,#00H TB0: MOV DPTR,#TABL MO

31、V A, #00H JMP A+DPTR TABL: PR0: INC R0 LJMP PR PR1: INC R1 LJMP PR PR2: INC R2 LJMP PR PR3: INC R3 LJMP PR PR4: INC R4 LJMP PR PR5: INC R5 LJMP PR PR6: INC R6 LJMP PR PR7: INC R7 PR: MOV A, 20H INC A ANL A,# 07H MOV 20H,A LJMP TB0 SJMP $ END實驗十 子程序設(shè)計一、實驗目的 1進一步熟悉MCS-51指令系統(tǒng)和匯編語言程序設(shè)計。 2掌握子程序設(shè)計及參數(shù)傳遞的方法

32、。 3掌握子程序調(diào)用與返回時堆棧的變化與作用。二、實驗內(nèi)容 1根據(jù)參考流程框圖2-7,使用工作寄存器或累加器來傳遞參數(shù)的方法把入口參數(shù)放到累加器A中,然后將累加器中的一個十六進制數(shù)的ASC字符轉(zhuǎn)換為一位十六進制數(shù)存放于A。 2用指針寄存器來傳遞參數(shù),將(R0)和(R1)指出的內(nèi)部RAM兩個3字節(jié)無符號整數(shù)相加,結(jié)果送(R0)指出的內(nèi)部RAM中,入口時,(R0)(R1)分別指向加數(shù)和被加數(shù)的低位字節(jié),出口時(R0)指向結(jié)果的高位字節(jié)。 3用堆棧傳遞參數(shù),把一位十六進制數(shù)轉(zhuǎn)化為ASC碼子程序(主程序用PUSH指令,已把參數(shù)壓入堆棧)。參考程序框圖如2-7圖所示: 開始 0®C (A)30

33、H®(A) (A)<10? Y N (A)7®(A) 返回 圖2-7 ASCII碼字符轉(zhuǎn)換為十六進制數(shù)框圖四、實驗報告要求 畫出實驗內(nèi)容中2和3的程序流程圖,并列出三個題目的主子程序清單。五、思考題1、使不同種參數(shù)傳遞方法實現(xiàn)子程序調(diào)用的異同是什么?2、ACALL和LCALL指令有什么區(qū)別?使用時應(yīng)注意什么?3、RET指令的功能是什么?六、參考程序清單1用累加器和工作寄存器傳遞參數(shù)子程序清單: ASCH: CLR C SUBB A,#30H ;入口參數(shù)放在ACC中 CJNE A,#10,$+3 JC AH10 SUBB A,#07H A10: RET2用指針寄存器來傳遞參數(shù)子程序清單: NADD: MOV R7,#3 ;用R0、R1傳遞參數(shù) CLR C NADD1: MOV A,R0 ADDC A,R1 MOV R0,A DEC R0 DEC R1 DJNZ R7,NADD1 INC R0 RET3用堆傳遞參數(shù)子程序清單: HASC: MOV R0 , SP DEC R0 DEC R0 XCH A,R0 ANL A,#0FH ADD A,#2 MOVC A,A+PC XCH A,R0 RET DB 0123456789 DB ABCDEF END實驗十一 P1口及外部中斷一、 實驗目的1 掌握利用MCS-51單片機P1口實現(xiàn)I/O的三種傳送方式。2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論