計(jì)算機(jī)硬件技術(shù)基礎(chǔ)軟件實(shí)驗(yàn)講義北辰_第1頁
計(jì)算機(jī)硬件技術(shù)基礎(chǔ)軟件實(shí)驗(yàn)講義北辰_第2頁
計(jì)算機(jī)硬件技術(shù)基礎(chǔ)軟件實(shí)驗(yàn)講義北辰_第3頁
計(jì)算機(jī)硬件技術(shù)基礎(chǔ)軟件實(shí)驗(yàn)講義北辰_第4頁
計(jì)算機(jī)硬件技術(shù)基礎(chǔ)軟件實(shí)驗(yàn)講義北辰_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章 指令系統(tǒng)和匯編語言程序設(shè)計(jì)實(shí)驗(yàn) 本章實(shí)驗(yàn)主要包括指令系統(tǒng)和匯編語言程序設(shè)計(jì)兩部分。采用軟件模擬調(diào)試的方法,目的在于通過這些實(shí)驗(yàn)可以使學(xué)生鞏固所學(xué)知識(shí),加深對(duì)MCS-51單片機(jī)內(nèi)部結(jié)構(gòu)、指令系統(tǒng)的理解,更進(jìn)一步掌握匯編語言程序設(shè)計(jì)的方法和技巧。3.0 實(shí)驗(yàn)操作說明Keil 軟件調(diào)試方式分為:軟件仿真方式和硬件調(diào)試兩種。實(shí)驗(yàn)一到實(shí)驗(yàn)十為軟件仿真實(shí)驗(yàn);實(shí)驗(yàn)十一到實(shí)驗(yàn)十四為硬件仿真實(shí)驗(yàn)。 軟件仿真實(shí)驗(yàn)上機(jī)操作步驟1、進(jìn)入Keil,點(diǎn)擊桌面上“Keil Version 3”圖標(biāo),進(jìn)入Keil系統(tǒng)窗口;2、新建工程: 1)打開“工程”菜單中的新建,在彈出的對(duì)話框中,鍵入自己定義的工程名; 2)在進(jìn)

2、一步打開的對(duì)話框中,選擇CPU的類型,為Intel公司的8032AH,確定。3、打開“視圖”菜單中的“工程窗口”;4、在“工程窗口”中,右擊“目標(biāo)1”,為工程設(shè)置參數(shù); 1)在彈出的快捷菜單中選擇“為目標(biāo)“目標(biāo)1”設(shè)置選項(xiàng)”; 2)在彈出的對(duì)話框中選擇“項(xiàng)目”選項(xiàng)卡,設(shè)置時(shí)鐘為“12Mhz”; 3)選擇“調(diào)試”選項(xiàng)卡,在單選框選擇“軟件仿真方式”; 4)確定,即完成了“軟件仿真方式”的設(shè)置。5、新建文件 1)打開“文件”菜單,選擇“新建”; 2)系統(tǒng)打開一個(gè)文本窗口,你可在窗口的編輯區(qū)輸入要調(diào)試的匯編語言源程序; 3)存盤,命名文件名和擴(kuò)展名,文件名任起,擴(kuò)展名必須是.asm,存盤;例如:a.

3、asm。6、將剛建的新文件添入當(dāng)前的工程中 1)在“工程窗口”中,“目標(biāo)1”的+號(hào)處打開,顯示“源代碼組1”; 2)右擊“源代碼組1”,在快捷菜單中選擇“為“源代碼組1”添加文件”,彈出一個(gè)對(duì)話框; 3)在對(duì)話框中選擇“文件類型”為*.*; 4) 選擇文件所在路徑,同時(shí)找到剛鍵入的a.asm文件,點(diǎn)擊“add”按鈕,然后點(diǎn)擊“close”按鈕; 5) 在“工程窗口”點(diǎn)擊“源代碼組1”左側(cè)的+號(hào),顯示添加的a.asm文件,添加成功。7、匯編 1)在“工程窗口”點(diǎn)擊“源代碼組1”的a.asm文件; 2)打開“a.asm”文件編輯窗口; 3)點(diǎn)擊工具按鈕中的“重建所有的目標(biāo)文件”,進(jìn)行匯編; 4)在

4、“輸出窗口”顯示匯編是否有錯(cuò),無措,進(jìn)入調(diào)試; 有錯(cuò),在編輯窗口修改程序,改后,再次匯編,直至無措后進(jìn)入調(diào)試;8、調(diào)試程序 1)點(diǎn)擊“開始/停止調(diào)試”按鈕,進(jìn)入調(diào)試界面; 2)在程序窗口中有一個(gè)黃箭頭指向程序的第一條可執(zhí)行指令的開頭; 3)選擇調(diào)試方式進(jìn)行調(diào)試; 在“調(diào)試”菜單中選擇:跟蹤、單步、運(yùn)行、斷點(diǎn)等方式; 或按單步或跟蹤命令按鈕,按一次單步,執(zhí)行一條指令,pc指針指向下一條要被執(zhí)行的指令; 檢查運(yùn)行結(jié)果 打開“視圖”菜單,選擇“存儲(chǔ)器窗口”,彈出存儲(chǔ)器對(duì)話框; 在存儲(chǔ)器對(duì)話框的下方選擇memory1在地址欄中鍵入“C:0X0000”回車,建立程序存儲(chǔ)器的觀察窗口; 選擇memory2

5、在地址欄中鍵入“D:0X00”回車,建立內(nèi)部數(shù)據(jù)存儲(chǔ)器的觀察窗口; 選擇memory3在地址欄中鍵入“X:0X0000”回車,建立外部數(shù)據(jù)存儲(chǔ)器的觀察窗口; 在“project workspace”窗口中觀察r0-r7,a,pc,dptr,psw,要觀察各個(gè)標(biāo)志位,打開psw左側(cè)的+號(hào); 9、設(shè)置PC指針 當(dāng)程序的首地址不是0000H時(shí),匯編結(jié)束后,PC指針仍然指向0000H的地方,在調(diào)試程序前,一定要將PC設(shè)置到你的程序首地址處,方法為:1)將光標(biāo)移到程序的第一條指令處,擊鼠標(biāo)右鍵;2)在快捷菜單中選擇“Set Program Counter”命令,PC指針即可指向程序的第一條指令。3.0.

6、2 硬件仿真實(shí)驗(yàn)上機(jī)操作步驟1、調(diào)試前硬件的連接v 用串口通信電纜連接TKSMonitor仿真器和計(jì)算機(jī)的串口v 用電源線連接TKSMonitor仿真器電源插口和實(shí)驗(yàn)儀電源輸出插口v 用仿真電纜(40灰色排線)連接TKSMonitor仿真器和實(shí)驗(yàn)儀MCU鎖緊插座v 檢查連接,連接正確后,打開實(shí)驗(yàn)儀電源。 1)220V電源線2)電源開關(guān)3)電源指示燈2、連接仿真器,TKSMonitor仿真器1)40線仿真電纜,紅線朝上2)仿真器電源插口3)RS-232C串口,連接計(jì)算機(jī)的COM1/COM24)仿真器復(fù)位按鈕5)仿真方式 LOAD/RUN,選擇RUN6)仿真器狀態(tài)指示燈 POW/RUN/MON3、

7、實(shí)驗(yàn)儀連接1)MCU鎖緊座,仿真頭插入,紅線朝上,按下鎖緊桿鎖緊2)實(shí)驗(yàn)儀電源輸出插口3)實(shí)驗(yàn)儀復(fù)位按鈕4、TKSMonitor仿真器狀態(tài)v LOAD:下載方式暫不使用。v RUN:在Keil的UV3集成開發(fā)環(huán)境下, TKSMonitor仿真器即作為Keil的MON51調(diào)試器。5、調(diào)試狀態(tài)下的存儲(chǔ)器模型v 內(nèi)部MON51監(jiān)控程序:00007FFFHv 用戶程序區(qū): 8000H0BFFFHv 用戶數(shù)據(jù)區(qū): 0C000H0FFFFHv 外部I/O區(qū): 0000H7FFFH 注意:在調(diào)試狀態(tài)下,定時(shí)器T2、串行口UART已被MON51監(jiān)控程序占用,用戶不能使用。6、工程設(shè)置1)設(shè)備選擇單片機(jī)選擇 N

8、XP-P89C52X22) 項(xiàng)目設(shè)置設(shè)置系統(tǒng)時(shí)鐘頻率:11.0592MHz設(shè)置片外代碼存儲(chǔ)Eprom #1 開始:0x8000,大?。?x4000設(shè)置片外Xdata存儲(chǔ) Ram #1 開始:0xC000,大?。?x40003)調(diào)試設(shè)置選擇 使用“Keil Monitor-51 Driver”;目標(biāo)系統(tǒng)設(shè)置:設(shè)置串行口為:COM1或COM2;4)按“確定” 按鈕,保存設(shè)置并結(jié)束設(shè)置。3.1 指令系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)一 熟悉鍵盤操作及數(shù)傳指令編程設(shè)計(jì)一、 實(shí)驗(yàn)?zāi)康? 熟悉軟件模擬調(diào)試的環(huán)境及鍵盤操作。2 掌握匯編語言程序設(shè)計(jì)的方法,加深對(duì)指令的理解。3 學(xué)會(huì)軟件模擬調(diào)試和察看修改觀察項(xiàng)的方法。二、 實(shí)驗(yàn)內(nèi)

9、容印證數(shù)據(jù)傳送指令的功能、尋址方式以及PC指針、SP指針、DPTR指針、Ri指針分別對(duì)代碼段、堆棧段、外擴(kuò)數(shù)據(jù)存儲(chǔ)器段、位尋址區(qū)等不同存儲(chǔ)器的訪問方式。 三、實(shí)驗(yàn)步驟1 進(jìn)入調(diào)試軟件環(huán)境,輸入源程序;2 匯編源程序;3 用單步方式運(yùn)行程序;4 檢查并記錄各寄存器和存儲(chǔ)單元內(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 SJM

10、P $ END2. 外部數(shù)據(jù)傳送需要查看的數(shù)據(jù)有外部數(shù)據(jù)存儲(chǔ)器單元2000H,外部程序存儲(chǔ)器單元2001H。ORG 0000H MOV 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)可用于保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場的程序ORG 0000H MOV SP,#5FHMOV 50H,#3BHMOV 51H,#2FHM

11、OV A,#12H PUSH 50H PUSH 51H PUSH ACCPOP 0E0H POP 51H POP 50H SJMP $ 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ù)交換 記錄每條指令運(yùn)行后的結(jié)果,從而加深對(duì)各種不同的交換指令的理解。 ORG 0000H MOV A,#58H SWAP A MOV 40H,A MOV A,#30H MOV R0,#30H MOV R0,#09H XCHD A,R0 MOV

12、50H,#1 MOV A,#89H XCH A,50H MOV R7,#3 XCH A,R7 XCH A,R0 SJMP $ END五、 思考題1 寄存器尋址與寄存器間接尋址有什么區(qū)別?2 PC指針與SP指針有什么區(qū)別?3 DPTR指針與Ri(R0,R1)指針有什么區(qū)別?4 立即尋址與直接尋址有什么區(qū)別?4. 同一個(gè)特殊功能寄存器不同表達(dá)形式。實(shí)驗(yàn)二 數(shù)傳指令和算數(shù)運(yùn)算指令編程設(shè)計(jì)一、 實(shí)驗(yàn)?zāi)康? 掌握數(shù)據(jù)塊的傳送操作和算術(shù)運(yùn)算指令的應(yīng)用。2 進(jìn)一步掌握匯編語言設(shè)計(jì)和調(diào)試方法。3 掌握觀察窗口的使用方法。4 學(xué)會(huì)給存儲(chǔ)單元賦初值的方法。二、 實(shí)驗(yàn)內(nèi)容1 數(shù)據(jù)區(qū)傳送(1)把內(nèi)部RAM 40H4F

13、H置初值0A0H0AFH;(2)而后把40H4FH內(nèi)容傳送到外部RAM 9800H980FH中;(3)再把 9800H980FH內(nèi)容傳送到 50H5FH中。 2多字節(jié)十進(jìn)制加法加數(shù)放在30H開始的單元中(最低位放在30H,按從小到大的順序存放),被加數(shù)和結(jié)果存放在20H開始的單元(最低位在20H中),字節(jié)數(shù)放在2FH中,最高進(jìn)位位放在位地址7FH單元中。三、 實(shí)驗(yàn)步驟1 分別用單步和連續(xù)運(yùn)行方式,調(diào)試上述兩個(gè)程序;2 在執(zhí)行第二個(gè)程序之前,給被加數(shù)和加數(shù)單元賦初值;3 在觀察窗口中觀察結(jié)果。四、 實(shí)驗(yàn)程序清單1 數(shù)據(jù)塊傳送程序: ORG 0000H MAIN: MOV R0,#40H MOV

14、R2,#10H MOV A,#0A0H A1: MOV R0, A INC R0 INC A DJNZ R2, A1 MOV R0, #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é)十進(jìn)制加法: ORG 0000HMAIN: MOV R0,

15、 #30H MOV R1, #20H MOV 2FH,#04H CLR C DA1: MOV A,R0ADDC A, R1 DA A MOV R1, A INC R0 INC R1 DJNZ 2FH, DA1 MOV 7FH, C SJMP $ END 五、 思考題1 若兩個(gè)數(shù)據(jù)塊都在外部數(shù)據(jù)存儲(chǔ)器中,如何實(shí)現(xiàn)數(shù)據(jù)塊的傳送?2 在調(diào)試第一個(gè)程序時(shí),若不用程序給40H4FH賦初值,而用鍵盤在CPU DATA區(qū)給40H4FH單元預(yù)賦初值,如何做?3 若把第二個(gè)程序改為無符號(hào)數(shù)的減法,怎樣修改程序?4 在第二個(gè)程序中,若兩數(shù)的和存放到從40H開始的單元,如何修改程序?實(shí)驗(yàn)三 邏輯運(yùn)算及位操作指令編程

16、設(shè)計(jì)一、 實(shí)驗(yàn)?zāi)康?1) 熟悉字節(jié)邏輯運(yùn)算指令功能。(2) 熟悉位操作指令運(yùn)算功能。 (3)從而更深入的掌握匯編語言程序設(shè)計(jì)。 (4)學(xué)會(huì)觀察CPU窗口中BIT區(qū)的變化。二、 實(shí)驗(yàn)內(nèi)容1 字節(jié)邏輯運(yùn)算程序在片內(nèi)RAM的FIRST和SECOND單元中各有一符號(hào)數(shù)X和Y,要求按下列條件算出Z,存入RESULT單元中(設(shè)運(yùn)算結(jié)果仍為8位數(shù))。X + Y X為正奇數(shù)XY X為正偶數(shù)XY X為負(fù)奇數(shù)Z=XY X為負(fù)偶數(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, N

17、EG MOV B, #2 DIV AB MOV A, B JZ TEMP1 MOV A,R0 ADD A, SECOND SJMP RES 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

18、BIT 03H ORG 0000H START: MOV C, Z ANL C, /Y MOV F, C MOV C, Y ANL C, /Z ORL C, F MOV F, C MOV C, X ANL C, Y ORL C, /F MOV F, C SJMP $ END 3拆字程序把外部數(shù)據(jù)存儲(chǔ)器2000H單元的內(nèi)容拆開,其高四位送2001H低四位,低四位送2002H低四位,2001H、2002H高四位清零。 需要檢查2000H、 2001H和2002H單元的內(nèi)容。程序清單ORG 0000HMOV DPTR,#2000HMOVX A,DPTRMOV B,ASWAP AANL A,#0FHI

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

20、 AMOV B,AINC DPTRMOVX A,DPTRANL A,#0FHORL A,BINC DPTRMOVX DPTR,ASJMP $END5自選程序設(shè)計(jì) 三、 思考題1 字節(jié)與位邏輯運(yùn)算指令在編程上什么區(qū)別?應(yīng)注意什么?2 若把兩位十六進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼,應(yīng)如何編寫程序?3 采用其它方法設(shè)計(jì)第一個(gè)程序。4 如何用斷點(diǎn)方式調(diào)試本程序?實(shí)驗(yàn)四 代碼轉(zhuǎn)換一、實(shí)驗(yàn)?zāi)康?掌握各種代碼轉(zhuǎn)換的算法,加深對(duì)各種數(shù)據(jù)編碼的理解。2學(xué)會(huì)軟件模擬調(diào)試和察看修改觀察項(xiàng)的方法來觀察轉(zhuǎn)換結(jié)果。三、 實(shí)驗(yàn)內(nèi)容1分析清楚個(gè)程序的功能。2調(diào)試各種代碼轉(zhuǎn)換的程序。三、實(shí)驗(yàn)步驟1進(jìn)入調(diào)試軟件環(huán)境,輸入源程序;2

21、匯編源程序;3用單步或全速方式運(yùn)行程序;4查看最終結(jié)果。四、程序清單1十六進(jìn)制數(shù) ASCII碼 將十六進(jìn)制數(shù)據(jù)08H,0CH轉(zhuǎn)換成ASCII碼,轉(zhuǎn)換結(jié)果存入30H,31H兩個(gè)單元中,再將30H,31H兩個(gè)單元中的數(shù)據(jù)分別增1,然后轉(zhuǎn)換成十六進(jìn)制數(shù)存入40H,41H兩個(gè)單元中。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 $EN

22、D2二進(jìn)制數(shù) BCD碼將二進(jìn)制數(shù)10011011B轉(zhuǎn)換成BCD碼數(shù),存入30H和31H單元中;再將30H單元中的數(shù)據(jù)加16H后,轉(zhuǎn)換成二進(jìn)制數(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 $

23、END3BCD碼 ASCII碼 將20H單元中壓縮的BCD碼數(shù)78H轉(zhuǎn)換成ASCII碼,轉(zhuǎn)換結(jié)果存入30H,31H兩個(gè)單元中,再將30H,31H兩個(gè)單元中的數(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

24、 ORL A,R2 MOV 21H,A SJMP $ END5 自選程序設(shè)計(jì)六、 思考題1. 如何查看上面三個(gè)程序的結(jié)果。2. 在程序1中,如果十六進(jìn)制數(shù)未指定是否包含AF數(shù)碼,程序應(yīng)如何修改?3. 在程序2中,如果要轉(zhuǎn)換的二進(jìn)制數(shù)是十六位的,程序應(yīng)如何編寫?4. 十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼與BCD碼數(shù)轉(zhuǎn)換成ASCII碼有何區(qū)別?實(shí)驗(yàn)五 移位操作一、 實(shí)驗(yàn)?zāi)康模赫莆找莆徊僮鞯姆椒?,并理解左移或右移與乘除法運(yùn)算的關(guān)系。二、 實(shí)驗(yàn)內(nèi)容:1雙字節(jié)二進(jìn)制數(shù)左移一位將兩個(gè)內(nèi)部RAM 31H和30H單元中的內(nèi)容組成的雙字節(jié)數(shù)通過Cy左移一位。功能示意圖Cy31H30H程序清單 ORG 0000HCLR

25、CMOV A ,30HRLC AMOV 30H, AMOV A,31HRLC AMOV 31H, ASJMP$END2多字節(jié)二進(jìn)制數(shù)右移一位將三個(gè)內(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 多于三個(gè)字節(jié)的移位操作如何進(jìn)行?2 如果不通過Cy如何移位?實(shí)現(xiàn)的功能有何不同?3.2匯編語言程序設(shè)計(jì)實(shí)驗(yàn)實(shí)驗(yàn)六 分支程序設(shè)計(jì)一、 實(shí)

26、驗(yàn)?zāi)康?. 進(jìn)一步熟悉MCS-51指令系統(tǒng),了解匯編語言程序設(shè)計(jì)的基本結(jié)構(gòu)。2. 掌握分支結(jié)構(gòu)程序設(shè)計(jì)的方法。3. 學(xué)會(huì)用條件轉(zhuǎn)移指令、CJNE、JMP及其配合使用來編寫二分支、三分支和多分支程序。二、 實(shí)驗(yàn)內(nèi)容 1. 二分支的條件轉(zhuǎn)移程序設(shè)變量X存放于R0,函數(shù)值Y存放在R1,其中X、Y均為二進(jìn)制數(shù)。試按照下式的要求給Y賦值:Y=1X00X=0-1X 0?(A) = 0?A(R0)(A) = -1(A) = 1(A)(R1)結(jié)束 N圖2-1 二、三分支結(jié)構(gòu)程序流程圖2. 自選題目設(shè)計(jì) 三、實(shí)驗(yàn)步驟1 根據(jù)實(shí)驗(yàn)內(nèi)容和參考程序流程圖,編出相應(yīng)的分支結(jié)構(gòu)程序。2 輸入程序,匯編成功;3 用F4(執(zhí)

27、行到光標(biāo)處)、F7(跟蹤執(zhí)行)、F8(單步執(zhí)行)或斷點(diǎn)運(yùn)行等方式調(diào)試程序;4 觀察程序的流程,記錄運(yùn)行結(jié)果。四、思考題1 CJNE指令對(duì)CY 有影響嗎?用CJNE 和JC/JNC指令配合應(yīng)注意什么?在用JMP 指令前,若變址255怎么辦? 2用什么指令可以實(shí)現(xiàn)多分支之間的隔離?五、實(shí)驗(yàn)報(bào)告要求寫出題目運(yù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

28、, A SJMP $ END 2)用三分支結(jié)構(gòu)程序?qū)崿F(xiàn): 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) MP3: SJMP $ END實(shí)驗(yàn)七 循環(huán)程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康? 進(jìn)一步熟悉MCS-51指令系統(tǒng),了解匯

29、編語言程序設(shè)計(jì)的基本結(jié)構(gòu)。2 掌握循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的方法,弄清單重及多重循環(huán)控制過程。3 通過設(shè)計(jì)軟件延時(shí)程序,學(xué)會(huì)計(jì)算內(nèi)外循環(huán)次數(shù)以及循環(huán)體的循環(huán)時(shí)間。二、 實(shí)驗(yàn)內(nèi)容1 設(shè)計(jì)一個(gè)循環(huán)程序具體要求:將內(nèi)部RAM中30H至32H的內(nèi)容右移四位,程序流程圖如圖2-3所示。2 設(shè)計(jì)循環(huán)程序:冒泡法排序。具體要求:設(shè)單片機(jī)8031外部RAM從3600H單元開始存放10個(gè)無符號(hào)數(shù),試編寫程序能使它們按從大到小的順序排列(最大數(shù)存放在3600H單元)。程序流程圖如圖2-4所示。 3 自選題目設(shè)計(jì)。三、 實(shí)驗(yàn)步驟1 輸入預(yù)先編好的程序,匯編成功;2 用自動(dòng)單步方式執(zhí)行程序,觀察循環(huán)計(jì)數(shù)器的變化情況。3 用斷

30、點(diǎn)運(yùn)行方式調(diào)試排序程序,記錄排序過程。四、實(shí)驗(yàn)報(bào)告要求1 編出相應(yīng)的循環(huán)結(jié)構(gòu)程序,列出程序清單,并且會(huì)計(jì)算循環(huán)體的循環(huán)時(shí)間。2 寫出自選題目的設(shè)計(jì)內(nèi)容、程序清單及運(yùn)行結(jié)果。五、思考題1 程序中循環(huán)時(shí)間由什么來控制?2 若用DJNZ或CJNE指令來控制循環(huán),編寫程序有什么不同?六、參考流程圖開始 4(R7) 3(R6) 0CY 30H(R0) (R0)(A) 右移(A) 一次 (A)(R0) (R0)+1(R0) N (R6)-1=0? Y N (R7)-1=0? Y 結(jié)束圖2-3 循環(huán)結(jié)構(gòu)程序流程圖七、循環(huán)結(jié)構(gòu)程序參考清單: 1三個(gè)字節(jié)右移四位: ORG 0000H MOV R7,#4 RR3

31、0: 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 LOOP1: MOVX A,R0 MOV 30H,A MOVX A,R1 CJNE A,30H,LOOP2 SJMP L1 LOOP2: JC L1 MOVX R0,A XCH A,3

32、0H MOVX R1,A SETB 7FH L1: INC R0 INC R1 DJNZ R3,LOOP1 JNB 7FH,LOOP3 DJNZ R2,LOOP0 LOOP3: SJMP $ END開始置地址指針,置外循環(huán)計(jì)數(shù)器置內(nèi)循環(huán)地址指針,置內(nèi)循環(huán)計(jì)數(shù)器 清零交換標(biāo)志位(7FH)0取兩操作數(shù)前數(shù)后數(shù)交換兩數(shù),置1交換標(biāo)志位(7FH)1內(nèi)循環(huán)結(jié)束(7FH)=1?外循環(huán)結(jié)束結(jié)束 Y N N N Y N Y N Y圖2-4 循環(huán)結(jié)構(gòu)程序流程圖實(shí)驗(yàn)八 查表程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?進(jìn)一步熟悉MCS-51指令系統(tǒng)和匯編語言程序設(shè)計(jì)。2學(xué)會(huì)用MOVC指令編寫查表程序。 二、實(shí)驗(yàn)內(nèi)容 1設(shè)計(jì)并調(diào)試一個(gè)查平

33、方表的程序,其功能為應(yīng)用查表指令MOVC A,A+PC,求累加器A中數(shù)的平方值,結(jié)果平方值送A。要求待查的(A)15。2設(shè)計(jì)并調(diào)試一個(gè)根據(jù)電壓值查與其對(duì)應(yīng)的溫度值的查表程序,其功能為應(yīng)用查表指令MOVC A,A+DPTR,求(A)中電壓值對(duì)應(yīng)的溫度值,將溫度值送R2R3(溫度值為二字節(jié)的壓縮BCD碼),電壓值的范圍為(A)0FFH。實(shí)驗(yàn)程序參考框圖如2-5所示。三、 實(shí)驗(yàn)步驟 1 敲入程序和預(yù)定表后;2 通過修改自變量參數(shù)啟動(dòng)并調(diào)試程序,直至正確為止。3 邊調(diào)試邊體會(huì)用PC或DPTR作指針查表的區(qū)別。開始 表首地址(DPTR)(A)+(A)+(DPTR)(DPTR) 0(A) 查表取第一個(gè)字節(jié)

34、(R2) 0(A)(DPTR)+1(DPTR)查表取第二個(gè)字節(jié)(R3) 結(jié)束 圖2-5 查表程序框圖四、 實(shí)驗(yàn)報(bào)告要求根據(jù)實(shí)驗(yàn)內(nèi)容和程序參考流程,編出所需查表程序,列出實(shí)驗(yàn)程序清單。五、思考題1 當(dāng)表的長度255個(gè)字節(jié)時(shí)應(yīng)選哪一條指令查表?2 用PC指針查表編程時(shí)應(yīng)注意什么? 六、參考程序清單1 求平方值查表程序: ORG 0000HADD 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

35、DPL,ACLR AADDC A,DPHMOV C,F(xiàn)0ADDC A,#0MOV DPH,ACLR AMOVC A,A+DPTR ; 查第一個(gè)字節(jié)MOV R2,ACLR AINC DPTRMOVC A,A+DPTR ; 查第二個(gè)字節(jié)MOV R3,ASJMP $TAB:DW ;溫度表值(自己設(shè)定一組數(shù)) END實(shí)驗(yàn)九 散轉(zhuǎn)程序設(shè)計(jì)一、 實(shí)驗(yàn)?zāi)康?進(jìn)一步熟悉MCS-51指令系統(tǒng)和匯編語言程序設(shè)計(jì)。 2學(xué)會(huì)用三種不同的方法設(shè)計(jì)散轉(zhuǎn)程序,并掌握它們的區(qū)別。 二、 實(shí)驗(yàn)內(nèi)容設(shè)計(jì)并調(diào)試一個(gè)程序,其功能為根據(jù)(20H)的值i (i7)取相應(yīng)的處理程序Pi的入口地址并轉(zhuǎn)移到程序Pi ,Pi的處理程序的功能為(Ri)+1(Ri),(20H)+17(20H),再重復(fù)地根據(jù)(20H)散轉(zhuǎn)。參考程序框圖如圖2-6所示:三、實(shí)驗(yàn)步驟1 輸入編好的程序,匯編成功;2調(diào)試程序,使用修改寄存器的方法,使R0R7

溫馨提示

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