評
閱
微機(jī)原理與接口技術(shù)
實驗報告一
姓名
匡越
學(xué)號
1715211016
時間
地點
實驗題目
一、實驗?zāi)康?.熟悉Keil軟件使用
2.熟悉MCS-51指令
3.學(xué)習(xí)簡單程序的調(diào)試方法
二、實驗說明
通過實驗了解單片機(jī)內(nèi)部存儲器的結(jié)構(gòu)和分配及讀寫存儲器的方法,熟悉MCS-51指令同時,學(xué)習(xí)單片機(jī)程序編程、調(diào)試方法。
三、實驗內(nèi)容及步驟
1.啟動PC機(jī),打開Keil軟件,軟件設(shè)置為模擬調(diào)試狀態(tài)。在所建的項目文件中輸入源程序1,進(jìn)行編譯,如有錯誤按提示找到該行并糾錯,重新編譯直到通過。
2.編譯無誤后,打開CPU窗口,選擇單步或跟蹤執(zhí)行方式運(yùn)行程序,觀察CPU窗口各寄存器的變化并將觀察到的結(jié)果記錄到預(yù)習(xí)報告。
3.新建另一個項目輸入源文件2,打開CPU窗口,選擇單步或跟蹤執(zhí)行方式運(yùn)行程序,觀察存儲塊數(shù)據(jù)變化情況記錄到預(yù)習(xí)報告。點擊復(fù)位按鈕,改變存儲塊數(shù)據(jù),點擊全速執(zhí)行快捷按鈕,點擊暫停按鈕,觀察存儲塊數(shù)據(jù)變化情況,記錄到預(yù)習(xí)報告。點擊復(fù)位按鈕,改變存儲塊數(shù)據(jù),分別LOOP、LOOP1設(shè)置斷點,點擊全速執(zhí)行快捷按鈕,在斷點處觀察寄存器及存儲塊數(shù)據(jù)變化情況。
WAVE軟件使用方法參考其幫助文件。
四、實驗程序流程框圖、實驗程序
1、源程序1
ORG
0000H
AJMP
MAIN
ORG
0030H
MAIN:
MOV
R0,#30H;
(R0)=
(00H)=
MOV
A,#40H;
(A)=
MOV
R6,A;
(A)=,(R6)=
MOV
A,@R0;
(R0)=
(A)=
MOV
40H,A;
(A)=
(40H)=
MOV
30H,40H;
(30H)=
(40H)=
MOV
R1,#40H;
(R1)=
MOV
@R1,#0AAH;(R1)=
(40H)=
MOV
SP,#60H;
(SP)=
PUSH
ACC;
(SP)=
(61H)=
PUSH
30H;
(SP)=
(62H)=
MOV
A,#0FFH;
(SP)=
(A)=
MOV
30H,#30H;
(SP)=
(30H)=
POP
ACC;
(SP)=
(A)=
POP
30H;
(SP)=
(30H)=
ADD
A,30H;
(30H)=
(A)=
Cy=
SUBB
A,#10;
(A)=
Cy=
MOV
R4,#00100100B;
(R4)=
H
MOV
A,#39H;
(A)
=
ADD
A,R4;
(A)
=
(R4=)
DA
A;
(A)
=
Cy=
MOV
28H,#55H;(28H)
=
Cy=
MOV
C,40H;
(PSW)
=
Cy=
MOV
26H,#00H;(26H)
=
Cy=
MOV
30H,C;
(30H)
=
(26H.1)
=
SJMP
$
j點擊project,選擇下拉式菜單中的New
project;
k選擇所要的單片機(jī),這里我們選擇常用的Ateml
公司的AT89C51;
l新建一個File,輸入源程序;
m將新建文件保存為text.asm的格式;
n鼠標(biāo)在屏幕左邊的Source
Group1
文件夾圖標(biāo)上右擊彈出菜單,在這里可以做在項目中增加減少文件等操作。選“Add
File
to
Group
‘Source
Group
1’”彈出文件窗口,選擇剛剛保存的文件;
o對程序進(jìn)行編譯運(yùn)行;
使程序一得:
ORG
0000H
AJMP
MAIN
ORG
0030H
MAIN:
MOV
R0,#30H
;
(R0)=
0x30
(00H)=
0x0000
MOV
A,#40H
;
(A)=
0x40
MOV
R6,A
;
(A)=
0x40,(R6)=
0x40
MOV
A,@R0
;
(R0)=
0x30
(A)=
0x16
MOV
40H,A
;
(A)=0x16
(40H)=
0x0040
MOV
30H,40H
;
(30H)=
0x0030
(40H)=
0x0040
MOV
R1,#40H
;
(R1)=
0x40
MOV
@R1,#0AAH;(R1)=
0x40
(40H)=
0x0040
MOV
SP,#60H;
(SP)=
0x60
PUSH
ACC;
(SP)=
0x61
(61H)=
0x0061
PUSH
30H;
(SP)=
0x62
(62H)=
0x0062
MOV
A,#0FFH;
(SP)=
0x62
(A)=
0xff
MOV
30H,#30H;
(SP)=
0x62
(30H)=
0x0030
POP
ACC;
(SP)=
0x61
(A)=
0x16
POP
30H;
(SP)=
0x60
(30H)=
0x0030
ADD
A,30H;
(30H)=
0x0030
(A)=
0x2a
Cy=
0
SUBB
A,#10;
(A)=
0x20
Cy=
0
MOV
R4,#00100100B;
(R4)=
0x24
H
MOV
A,#39H;
(A)
=
0x39
ADD
A,R4;
(A)
=
0x5d
(R4=)
0x24
DA
A;
(A)
=
0x63
Cy=
0
MOV
28H,#55H;(28H)
=
0x0028
Cy=
0
MOV
C,40H;
(PSW)
=
0x80
Cy=
MOV
26H,#00H;(26H)
=
0x0026
Cy=
MOV
30H,C;
(30H)
=
0x0030
(26H.1)
=
0
SJMP
$
2、源程序2
設(shè)(30H)=4,(31H)=1,(32H)=3,(33H)=5,(34H)=2,(35H)=6
ORG
0000H
AJMP
MAIN
ORG
0030H
MAIN:
MOV
R0,#30H;30H→R0
MOV
R2,#6;6→R2
SORT:
MOV
A,R0;30H→A
MOV
R1,A;30H→R1
MOV
A,R2;6→A
MOV
R5,A;6→R5
CLR
F0;
狀態(tài)標(biāo)志位清零
DEC
R5;寄存器R5減一
MOV
A,@R1;R1→A
LOOP:
MOV
R3,A;A→R3
INC
R1
;寄存器R1增1
CLR
C
;進(jìn)位標(biāo)志位清零
MOV
A,@R1;31H→A
SUBB
A,R3;累加器內(nèi)容減去寄存器內(nèi)容
JNC
LOOP1;僅為標(biāo)志位為1,則進(jìn)行LOOP1
;以下代碼完成數(shù)據(jù)交換
SETB
F0;狀態(tài)標(biāo)志位置1
MOV
A,@R1;31H→A
XCH
A,R3;將A于與R3的數(shù)據(jù)交換
MOV
@R1,A;將4賦值給寄存器R1(31H)
DEC
R1;寄存器減一
MOV
A,R3;1→A
MOV
@R1,A;將1賦值給寄存器R1(30H)
INC
R1;寄存器R1增一
LOOP1:
MOV
A,@R1;4→A
DJNZ
R5,LOOP;寄存器R5減一,不為零則回到LOOP
JB
F0,SORT;狀態(tài)標(biāo)志位為零,則回到SORT
SJMP
$