微機原理與接口技術單片機軟件報告.doc
實驗報告課程名稱:_微機原理與接口技術_指導老師:_成績:_實驗名稱:_ 單片機軟件實驗 _一、實驗目的和要求(必填)二、實驗內(nèi)容和原理(必填)三、主要儀器設備(必填)四、操作方法和實驗步驟五、實驗數(shù)據(jù)記錄和處理六、實驗結(jié)果與分析(必填)七、討論、心得裝 訂 線實驗一、內(nèi)存操作一、 實驗目的a) 掌握數(shù)據(jù)傳送指令;b) 掌握各種數(shù)據(jù)傳送指令的尋址方式;c) 熟練運用keil 環(huán)境對匯編程序進行調(diào)試;d) 掌握數(shù)據(jù)傳送、復制等程序的設計與調(diào)試方法。二、 實驗內(nèi)容基礎型實驗內(nèi)容1、 下列程序的功能是給外部RAM800080FFH的256個單元的內(nèi)容賦值,賦值的內(nèi)容取決于程序中A的賦值。在Keil環(huán)境運行該程序,并觀察寄存器及內(nèi)存單元的變化2、 下列程序?qū)?000H起始的256個字節(jié)存儲塊移動到4000H起始的256個字節(jié)存儲塊,在Keil環(huán)境運行如下程序,觀察寄存器及存儲單元的變化。設計型實驗內(nèi)容1、 在keil環(huán)境修改內(nèi)部RAM 30H 3FH的內(nèi)容分別為#00H-#0FH,設計程序?qū)崿F(xiàn)將內(nèi)部RAM30H-3FH到40H-4FH的數(shù)據(jù)塊拷貝。2、 在keil環(huán)境修改內(nèi)部RAM 30H 3FH的內(nèi)容分別為#00H-#0FH,設計程序?qū)崿F(xiàn)將片內(nèi)30H3FH單元的內(nèi)容復制到片外1030H103FH中。3、 在keil環(huán)境修改內(nèi)部RAM 30H 3FH的內(nèi)容分別為#00H-#0FH,設計程序?qū)崿F(xiàn)將內(nèi)部RAM30H 3FH內(nèi)容逆序拷貝到外部數(shù)據(jù)XRAM:0000H 000FH中。使用單步、斷點方式調(diào)試程序,查看特殊功能寄存器、內(nèi)部數(shù)據(jù)RAM、外部數(shù)據(jù)空間的變化。三、 實驗設備計算機一臺四、 實驗代碼基礎型1、ORG 0000HSTART EQU 8000HMAIN: MOV DPTR, #START ;起始地址 MOV R0,#0 ;設置256字節(jié)計數(shù)值 MOV A,#1HLoop: MOVX DPTR,A INC DPTR ;指向下一個地址 DJNZ R0,Loop ;計數(shù)值減一 NOP SJMP $ END2、ORG 0000H MOV DPTR,#3000H MOV A,#01H MOV R5,#0 ;設置256字節(jié)計數(shù)值LOOP: MOVX DPTR,A INC DPTR DJNZ R5,LOOP MOV R0,#30H MOV R1,#00H MOV R2,#40H MOV R3,#00H MOV R7,#0LOOP1: MOV DPH,R0 MOV DPL,R1 ;外部地址 MOVX A,DPTR MOV DPH,R2 MOV DPL,R3 MOVX DPTR,A INC R1 INC R3 DJNZ R7,LOOP1 SJMP $ END設計型1、ORG 0000HMAIN:MOVR2,#10H ;循環(huán)次數(shù)賦值MOV A,#00HMOVR1,#30HLOOP1:MOVR1,AINC R1INC ADJNZ R2,LOOP1 ;計數(shù)值減1MOV R2,#10H ;循環(huán)次數(shù)重新賦值MOVR1,#30HMOV R0,#40H ;賦值完成LOOP2:MOV A,R1MOVR0,AINC R1INC R0DJNZR2,LOOP2 ;拷貝完成LJMP 1000HEND2、ORG 1000HMAIN:MOV R2,#10H ;循環(huán)次數(shù)賦值MOV A,#00HMOV R1,#30HLOOP3:MOV R1,AINC R1INC ADJNZ R2,LOOP3 ;計數(shù)值減1MOV R2,#10H ;循環(huán)次數(shù)重新賦值MOV DPTR,#1030HMOV R1,#30H ;賦值完成LOOP4:MOV A,R1MOVX DPTR,AINC R1INC DPTRDJNZ R2,LOOP4 ;拷貝完成LJMP 2000HEND3、ORG 2000HMAIN:MOV R2,#10H ;循環(huán)次數(shù)賦值MOV A,#00HMOV R1,#30HLOOP5:MOV R1,A INC R1INC ADJNZ R2,LOOP5 ;計數(shù)值減1MOV R2,#10H ;循環(huán)次數(shù)重新賦值MOV R1,#3FHMOV DPTR,#0000HCLR C LOOP6:MOV A,R1MOVX DPTR,ADEC R1 ;減一,實現(xiàn)逆序INC DPTRDJNZ R2,LOOP6SJMP $END五、 實驗結(jié)果基礎型1、2、X:3000HX:4000H設計型1、2、3、六、 討論心得這次實驗主要熟悉了keil環(huán)境的使用,簡單練習了循環(huán)語句、賦值語句、對外部存儲器的讀取與賦值等,比較基礎,主要積累經(jīng)驗。開始認識到代碼規(guī)范、注釋的重要性,以后注意。實驗二、數(shù)制與代碼轉(zhuǎn)換一、 實驗目的a) 了解微機系統(tǒng)中的數(shù)制與代碼表示方法;b) 掌握計算機中使用的各種代碼轉(zhuǎn)換方法;c) 掌握實現(xiàn)分支、循環(huán)的指令及其程序的編寫方法;二、 實驗內(nèi)容基礎型實驗內(nèi)容1、 以下程序完成單字節(jié)的ASCII碼到十六進制數(shù)轉(zhuǎn)換,完成空白處程序填寫,并在Keil環(huán)境運行程序,觀察寄存器及內(nèi)存單元的變化。2、 以下程序完成單字節(jié)的BCD碼到十六進制數(shù)轉(zhuǎn)換,,在Keil環(huán)境運行程序,觀察寄存器及內(nèi)存單元的變化。3、 以下程序?qū)巫止?jié)十六進制數(shù)A的值轉(zhuǎn)換為十進制數(shù),存放在30H32H中,完成空白處程序填寫,并在Keil環(huán)境運行程序,觀察寄存器及內(nèi)存單元的變化。設計型實驗內(nèi)容1、 設一串字母的ASCII存于30H起始的單元中,設計程序判斷字母是否為大寫字母,是則將大寫字母的ASCII字符轉(zhuǎn)換成小寫字母的ASCII字符,為小寫則不轉(zhuǎn)換。2、 將單字節(jié)十六進制數(shù)D8H轉(zhuǎn)換為十進制數(shù),存放在30H33H中。,3、 設計程序,將十六進制數(shù)614EH轉(zhuǎn)換成ASCII碼,使用單步、斷點方式調(diào)試程序,查看結(jié)果。三、 實驗設備計算機一臺四、 實驗代碼基礎型1、RESULT EQU 30HORG 0000HMOV A,#41H;“A”的ASCII碼CLR CSUBB A, #37H ; 轉(zhuǎn)換為十六進制 AMOV RESULT,A LJMP 1000HEND2、RESULT EQU 30H ORG 1000H MOV A,#23HMOV R0,AANL A,#0F0HSWAP A MOV B,#0AH MUL AB MOV RESULT,A ;轉(zhuǎn)換高位 MOV A,R0 MOV B,#0FHANL A,BADD A,RESULT MOV RESULT,A ; 轉(zhuǎn)換低位 LJMP 2000HEND3、RESULT EQU 30H ORG 2000H MOV A,#7BH MOV B,#64H DIV AB MOV RESULT,A ;除以100得百位數(shù) MOV A,B MOV B,#0AH DIV AB MOV RESULT+1,A ;除以10得十位數(shù) MOV RESULT+2,B ;余數(shù)為個位數(shù) SJMP $END設計型1、ORG 0000HMOV R0,#30HMOV 30H,#41HMOV 31H,#42HMOV 32H,#43HMOV 33H,#61HMOV 34H,#62HMOV 35H,#63HL0:CJNE R0,#0,SUB1LJMP 1000HSUB1: ACALL HASC1INC R0LJMP L0ORG 0200H;子程序:將大寫字母ASCII碼轉(zhuǎn)換為小寫字母ASCII碼HASC1: CJNE R0,#41H,L1 ;與A的ASCII碼比較MOV R0,#61HRETL1: JC L2CJNE R0,#56H,L3 ;與Z的ASCII碼比較MOV R0,#75HRETL2:RETL3:JC L4RETL4:MOV A,R0 ;A與Z之間則轉(zhuǎn)換為小寫ADD A,#20HMOV R0,ARETEND2、RESULT EQU 30H ORG 1000H MOV A,#0D8H MOV B,#64H DIV AB MOV RESULT+1,A ;除以100得百位數(shù) MOV A,B MOV B,#0AH DIV AB MOV RESULT+2,A ;除以10得十位數(shù) MOV RESULT+3,B ;余數(shù)為個位數(shù) LJMP 2000HEND3、 ORG 2000HMOV 30H,#61HMOV 31H,#4EHMOV R1,#40HMOV R0,#30HMOV R2,#2L5:MOV A,R0MOV B,#0F0HANL A,BSWAP AACALL HASC2INC R1MOV A,R0MOV B,#0FHANL A,BACALL HASC2;調(diào)用子程序:將十六進制數(shù)轉(zhuǎn)換為ASCII碼INC R1INC R0DJNZ R2,L5SJMP $HASC2: CJNE A,#0AH,L6 ;與A的十六進制數(shù)比較MOV R1,#41HRETL6:JC L7ADD A,#37H ;09的數(shù)字加#37HMOV R1,ARETL7: ADD A,#30H ;AF的數(shù)字加#30HMOV R1,ARETEND五、 實驗結(jié)果基礎型1、ASCII碼41H為十六進制數(shù)0AH3、 BCD碼為23H的十六進制數(shù)為17H3、十六進制數(shù)7BH轉(zhuǎn)換為十進制數(shù)為123設計型1、給30H及之后的地址賦值ABCabc的ASCII碼將大寫字母轉(zhuǎn)換為小寫字母2、將單字節(jié)十六進制數(shù) D8H 轉(zhuǎn)換為十進制數(shù),存放在 30H33H 中3、十六進制數(shù) 614EH存放在30H、31H,轉(zhuǎn)換后的ASCII碼在40H到43H六、 討論心得這次實驗學習的內(nèi)容主要是十六進制數(shù)、十進制BCD碼、ASCII碼之間的轉(zhuǎn)換,以及子程序的書寫與調(diào)用。對于判斷是否為十六進制數(shù)、大小寫字母,主要使用CJNE然后根據(jù)C的大小來判斷比給定數(shù)大還是小,對于判斷是否在一個區(qū)間需要使用兩個CJNE來進行。