微機原理與接口技術軟件實驗34——51單片機算術運算、比較和查表_第1頁
微機原理與接口技術軟件實驗34——51單片機算術運算、比較和查表_第2頁
微機原理與接口技術軟件實驗34——51單片機算術運算、比較和查表_第3頁
微機原理與接口技術軟件實驗34——51單片機算術運算、比較和查表_第4頁
微機原理與接口技術軟件實驗34——51單片機算術運算、比較和查表_第5頁
已閱讀5頁,還剩7頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、本科實驗報告課程名稱:微機原理與接口技術姓 名:陳肖葦學 院:信息與電子工程學院專 業:電子科學與技術學 號:3140104580指導教師:黃凱2016年 11 月 17 日專業:_電子科學與技術_姓名: 陳肖葦 學號: 3140104580 日期: 2016.11.17 地點:教十一400室 實驗報告課程名稱: 微機原理與接口技術 指導老師: 黃凱 成績:_實驗名稱: 單片機軟件實驗三四 實驗三 算術運算1. 基礎型實驗內容 以下程序完成單字節的BCD碼加法功能,完成空白處程序填寫,并在WAVE環境運行程序,觀察寄存器及內存單元的變化。代碼: RESULT EQU 30H ORG 0000H

2、 MOV A,#99H MOV B,#99H ADD A,B DA A ; BCD碼相加并得到BCD碼結果,即對結果進行十進制處理 MOV RESULT, A MOV A,#00H ADDC A,#00H ;加上進位 MOV RESULT+1, A ;高位處理 LJMP $ END實驗現象:30H開始的內部單元中被放入了結果,低位在前,即98 01。圖一:單字節的BCD碼加法結果,即99+99=01 98 下列程序完成多字節BCD碼加法運算。內部RAM30H開始的4字節長的BCD碼和外部RAM 1000H開始的4字節長的BCD碼相加,結果放在1100H開始的單元中(從低字節到高字節)。代碼:

3、ORG 0000H CLR C MOV R5, #04H MOV R0,#30H MOV R1,#10H MOV R2,#00H MOV R3,#11H MOV R4,#00HL0: MOV DPH,R1 MOV DPL,R2 MOV A,#15H ;1000H開始的外部RAM都寫入15H MOVX DPTR,A MOV R0,#15H ;30H開始的內部RAM都寫入15H INC R2 INC R0 DJNZ R5,L0 MOV R0,#30H ;重新初始化 MOV R2,#00H MOV R5, #04HL1: MOV DPH,R1 MOV DPL,R2 MOVX A,DPTR ADDC

4、A, R0 DA A ;十進制調整 MOV DPH,R3 MOV DPL,R4 MOVX DPTR,A INC R2 INC R4 INC R0L2: DJNZ R5, L1 JNC L3 MOV DPTR,#1104H ;有進位則結果的第五個字節置1 MOV A,#01H MOVX DPTR,A SJMP EXITL3: MOV DPTR,#1104H ;若沒有進位則置為00H MOV A,#00H MOVX DPTR,AEXIT:END 代碼分析:L0部份為我自己單獨加入的部份,原來的代碼會使FFH+00H=66H的錯誤,因為DA指令只可對BCD碼表示的數進行調整,即只能調整09,而F為1

5、6,不是十進制數,所以會產生調整錯誤。加入L0段,使加法變為15H+15H=30H(BCD碼加法)。同時,源代碼在產生進位的時候會將第1104H位置1,沒有進位的時候為FFH,所以又將L3的NOP改為了若沒有進位,則置為00H,使結果更加合理。實驗現象:外部RAM的1100H開始的連續五個單元變為30 30 30 30 0圖二:完成多字節BCD碼加法運算之后,1100H單元開始的內存單元變為30 30 30 30 00 2. 設計型實驗內容 設計程序,實現任意字節壓縮BCD碼的相加,使用單步、斷點方式調試程序,查看結果。代碼: MOV R0,#30H ;BCD碼的起點 MOV R2,#00H

6、;寫入值 MOV R1,#40H ;BCD碼的起點 MOV R3,#10H MOV R4,#0AH ;寫入次數控制L1: MOV A,R2 ;30H開始的內部RAM寫入00H09H MOV R0,A MOV A,R3 ;40H開始的內部RAM寫入10H19H MOV R1,A INC R0 INC R1 INC R2 INC R3 DJNZ R4,L1 MOV R0,#30H ;重新初始化 MOV R1,#40H MOV DPH,#10H ;求和后的結果保存點1000H MOV DPL,#00H MOV R4,#0AH ;求和次數控制 CLR CL2: MOV A,R0;開始求和 ADDC A

7、, R1 DA A ;十進制調整 MOVX DPTR,A INC R0 INC R1 INC DPL DJNZ R4,L2 ;循環求和十次 JNC L3 ;無進位則求和結果最后一位的下一個字節置0 MOV A,#01H ;有進位則求和結果最后一位的下一個字節置1 MOVX DPTR,A SJMP EXITL3: MOV A,#00H MOVX DPTR,AEXIT: END實驗現象: 外部RAM中存入了求和結果10 12 14 16 18 20 22 24 26 28 00(低位在前)圖三:初始化后內存中的BCD碼值(低位在前)圖四:求和后的結果 設計程序,實現多字節十六進制數的減法12345

8、6H005634H,使用單步、斷點方式調試程序,查看結果。代碼: ORG 0000H MIN EQU 30H;被減數 SUB EQU 40H;減數 RES EQU 50H;結果存放 MOV MIN,#12H;初始化被減數 MOV MIN+1,#34H MOV MIN+2,#56H MOV SUB,#00H;初始化減數 MOV SUB+1,#56H MOV SUB+2,#34H CLR C MOV A,MIN+2;從最后一位開始求差 SUBB A,SUB+2 MOV RES+2,A MOV A,MIN+1;開始求差 SUBB A,SUB+1 MOV RES+1,A MOV A,MIN;開始求差

9、SUBB A,SUB MOV RES,A END實驗結果:30H和40H開始的單元處被存入被減數和減數123456和005634(高位在前),50H開始存入十六進制減法結果11DE22。圖五:123456(30H)-005634(40H)=11DE22(50H)實驗四 比較和查表1. 基礎型實驗內容 以下程序完成共陰數碼管數值顯示譯碼的功能,在WAVE環境運行程序,觀察寄存器及內存單 元的變化,將變化結果注釋于右側。代碼:ORG 0000H MOV R2,#10H ;循環16次 MOV DPTR,#TBL ;將表頭地址存入DPTRL0: MOV A,#00H MOVC A,A+DPTR ;變址

10、尋址查表 INC DPTR ;DPTR自增,查找下一個 DJNZ R2,L0 ;循環16次 SJMP $TBL:DB 3FH,06H,5BH,4FH,66H,6DH ;表格 DB 7DH,07H,7FH,6FH,77H,7CH DB 58H,5EH,79H,71H,00H,40H END實驗結果:ROM區從0013H開始存入表格3FH40H。對于內部寄存器,R2循環10H之后,最終值為0;A中最終值為71H,即TBL中的第16個數。圖六:ROM區從0013H開始存入表格3FH40H圖七:對于REG,R2循環10H之后,最終值為0;A中最終值為71H,即TBL中的第16個數。 以下子程序完成一個

11、兩位十六進制數到ASCII碼的轉換,數值存放在R2中,轉換結果地位存于R2,高位存于R3。用PC做基址實現。代碼: ORG 0000H HEXA:MOV R2,#1BH ;將1BH存入R2 MOV A,R2 ANL A,#0FH ;取A的低4位 ADD A,#09H ;以PC為基址的偏移量 MOVC A,A+PC ;以PC為基址尋址 XCH A,R2 ;交換A與R2中的內容 ANL A,#0F0H ;得到A的高位 SWAP A ;將高位換到地位 ADD A,#02H ;以PC為基址的指令偏移量 MOVC A,A+PC MOV R3,A ;高位結果寫回R3 RETTAB: DB 0,1,2,3,

12、4 DB 5,6,7,8,9 DB A,B,C,D,E,F END實驗現象: 轉換后的結果存入R2、R3,其中,R2中存入低位B的ASCII碼,即42;R3中存入高位1的ASCII碼,即31圖九:R2中存入低位B的ASCII碼,即42;R3中存入高位1的ASCII碼,即31圖十:ROM中從0012H開始存入0F的ASCII碼3145 以下程序完成256字節范圍內程序散轉的功能,根據R7的內容轉向各個子程序,在WAVE環境運行程序,觀察寄存器及內存單元的變化,將變化結果注釋于右側。代碼: ORG 0000HSTART: MOV DPTR,#TAB ;將表頭地址傳給DPTR MOV A, R7 A

13、DD A, R7 ;R7*2為了與JMP A+DPTR的機器碼匹配,若TAB JMP A+DPTR ;中的AJMP 換成LJMP則R7*3 ORG 0100HTAB: AJMP PROG0 ;無條件跳轉到對應地址 AJMP PROG1 AJMP PROG2 AJMP PROG3 SJMP $PROG0: MOV A,#00H ;對應的給A賦值 SJMP REPROG1: MOV A,#01H SJMP REPROG2: MOV A,#02H SJMP REPROG3: MOV A,#03HRE: NOPEND代碼解讀:先將R7中的值賦給A,再將A中數據擴大兩倍當作指令的偏移量;DPTR作為散轉

14、表的起始地址;通過JMP A+DPTR指令,尋找到對應的指令,然后跳轉到相應指令對A賦值。整個代碼的功能是通過散轉的方法,將R7中的值寫入A。實驗現象: 代碼執行后,R7中值為00,A中數據被寫入00;修改代碼,加入一條MOV R7,#01H,則代碼執行之后,R7中值為01,A中數據被寫入01。圖十: R7中值為00,A中數據被寫入00圖十一:R7中值為01,A中數據被寫入012.設計型實驗內容 分別用近程查表指令和遠程查表指令,查找R3內容的平方值。 R3內容小于等于0FH,即平方值為單字節數據。代碼:近程查表: ORG 0000H MOV R3,#15 ;取數 MOV A,R3 ADD A

15、,#04H ;偏移量 MOVC A,A+PC ;近程查表 MOV 30H,A SJMP $TAB:DB 0,1,4,9,16 ;平方值表格構建 DB 25,36,49,64,81 DB 100,121,144,169,196,225END實驗結果:內部RAM的30H處寫入E1(即14*16+1=225,即15的平方),完成設計目標。圖十一:代碼執行后,內部RAM的30H處寫入E1遠程查表: ORG 0000H MOV R3,#10 ;取出R3中的值 MOV A,R3 MOV DPTR,#TAB ;將表頭地址寫入DPTR MOVC A,A+DPTR ;遠程查表 MOV 30H,A SJMP $T

16、AB:DB 0,1,4,9,16 ;平方值表格構建 DB 25,36,49,64,81 DB 100,121,144,169,196,225 END實驗現象:內部RAM的30H處寫入64(即6*16+4=100,即10的平方),完成設計目標。圖十二:代碼執行后,內部RAM的30H處寫入64 在外部RAM 1000H開始處有10H個帶符號數,請找出其中的最大值和最小值,分別存入內部RAM的MAX、 MIN單元。代碼: MAX EQU 30HMIN EQU 31H ORG 0000H MOV R7,#0FH ;循環次數 MOV DPTR,#1000H ;將外部RAM起始地址存入DPTR MOVX

17、A,DPTR ;將對應數據存入A ADD A,#80H ;加80H便于直接比較,將有符號數化為無符號數 MOV MAX,A ;初始化MAX(即存入第一個數) MOV MIN,A ;初始化MIN(即存入第一個數)L1: INC DPTR ;讀入下一個數 MOVX A,DPTR ADD A,#80H CLR C CJNE A,MAX,S1 ;相減比較,若不想相等則跳轉至S1 ,且若AMAX,則將C置1 SJMP NEXT ;相等則跳到NEXTS1: JC S2 ;若C=1,則說明AMAX,則跳轉至S2 MOV MAX,A ;將MAX值更新 SJMP NEXTS2: CJNE A,MIN,S3 ;相

18、減比較,若不想相等則跳轉至S2 ,且若AMIN,則轉入NEXT MOV MIN,A ;否則,將MIN更新NEXT:DJNZ R7,L1 ;判斷循環次數,若沒到0FH次,則繼續循環 MOV A,MAX SUBB A,#80H MOV MAX,A ;得到最大值 MOV A,MIN SUBB A,#80H MOV MIN,A ;得到最小值 SJMP $ END實驗結果:內部RAM30H處,即MAX處,寫入最大值7A; 31H處,即MIN處,寫入最小值00;同時,因為是有符號數,所以對含有負數的進行檢測,也符合要求,完成設計目標。 圖十三:手動修改后的外部RAM值,其中最大值為7A,最小值為00圖十四:內部

溫馨提示

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

評論

0/150

提交評論