复习课件单片机实验报告docx.docx
《复习课件单片机实验报告docx.docx》由会员分享,可在线阅读,更多相关《复习课件单片机实验报告docx.docx(44页珍藏版)》请在冰豆网上搜索。
复习课件单片机实验报告docx
单片机实验报告
实验一数据传送(RAM–>XRAM)
一、实验目的
熟悉星研集成环境软件或熟悉KeilC51集成环境软件的使用方法。
熟悉MCS51汇编指令,能自己编写简单的程序,掌握数据传输的方法。
二、实验内容
1、熟悉星研集成环境软件或熟悉KeilC51集成环境软件的安装和使用方法。
2、编写程序,实现内外部数据段的传送、校验。
三、程序框图
四、实验步骤
在内部RAM30H~3FH中输入数据;使用单步、断点方式调试程序,检测外部数据RAM的1000H~100FH中的内容。
熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
五、程序清单
;将内部RAMAddress1开始的16个字节送到外部RAM从Address2开始的单元里,再作比较。
Address1
DATA
30H
Address2
XDATA
1000H
ORG
0000H
LJMP
STAR
ORG
0100H
STAR:
MOV
SP,#60H
MOV
R0,#Address1
MOV
DPTR,#Address2
MOV
R7,#10H
STAR1:
MOV
A,@R0
;传送
MOVX
@DPTR,A
INC
R0
INC
DPTR
DJNZ
R7,STAR1
MOV
R0,#Address1
MOV
DPTR,#Address2
MOV
R7,#10H
STAR2:
MOV
B,@R0
;比较
MOVX
A,@DPTR
CJNE
A,B,STAR3
INC
R0
INC
DPTR
DJNZ
R7,STAR2
SJMP
$
;传送正确
STAR3:
SJMP
$
;传送错误
END
实验二双字节BCD码(十进制数)加法
一、实验目的
熟悉51汇编指令,学会使用星研集成环境软件,能自己编写简单的程序,熟悉BCD码,了解如何调用系统提供的子程序。
二、实验内容
从键盘上输入4位被加数、加数,实现双字节BCD码(四位数)的加法,结果显示在数码管上;熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
三、实验框图
四、实验步骤
1、连线说明:
D3区:
CLK
——
B2区:
2M
D3区:
CS
——
A3区:
CS5
D3区:
A0
——
A3区:
A0
2、在F4区的键盘上输入4位被加数、加数
3、结果显示在F4区的数码管上
五、程序清单
EXTRN
CODE(Display8,GetBCDKey)
Buffer
DATA
30H
;8字节显示缓冲区
F1
BIT
0D1H
;PSW.1
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
SP,#60H
CLR
F1
;先清除显示,再接收键输入
START1:
MOV
R0,#buffer
MOV
A,#4
;按键次数
LCALL
GetBCDKey
;得到双字节十进制数(被加数)
SETB
F1
;接收到第一个键,才清除显示
MOV
R0,#buffer+4
MOV
A,#4
;按键次数
LCALL
GetBCDKey
;得到双字节十进制数(加数)
MOV
A,buffer+1
ADD
A,buffer+5
DA
A
MOV
buffer+5,A
MOV
A,buffer
ADDC
A,buffer+4
DA
A
MOV
buffer+4,A
CLR
A
RLC
A
Display:
PUSH
ACC
;显示结果
MOV
R0,#buffer
MOV
A,buffer+5
;低位
ACALL
B1toB2
;压缩BCD码转换成非压缩BCD码
MOV
A,buffer+4
;高位
ACALL
B1toB2
POP
ACC
;进位
ACALL
B1toB2
MOV
@R0,#10H
;最高二位消隐
INC
R0
MOV
@R0,#10H
MOV
R0,#buffer+5
MOV
R7,#5
ACALL
BlackDisplay
;将高位0消隐
MOV
R0,#buffer
LCALL
Display8
SJMP
START1
;将一个字节压缩BCD码转换成二个字节非压缩BCD码
B1toB2:
PUSH
ACC
ANL
A,#0FH
MOV
@R0,A
INC
R0
POP
ACC
ANL
A,#0F0H
SWAP
A
MOV
@R0,A
INC
R0
RET
BlackDisplay:
MOV
A,@R0
;将高位0消隐
JNZ
Exit
MOV
A,#10H
MOV
@R0,A
DEC
R0
DJNZ
R7,BlackDisplay
Exit:
RET
END
实验三双字节BCD码(十进制数)减法
一、实验目的
熟悉51汇编指令,学会使用星研集成环境软件,掌握汇编语言的设计和调试方法。
能看懂程序流程框图,能自己设计程序,熟悉BCD码、补码,了解如何调用系统提供的子程序。
二、实验内容
从键盘上输入4位被减数、减数,实现双字节BCD码(四位数)的减法,结果显示在数码管上;进一步熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
三、程序框图
四、实验步骤
1、连线说明:
D3区:
CLK
——
B2区:
2M
D3区:
CS
——
A3区:
CS5
D3区:
A0
——
A3区:
A0
2、在F4区的键盘上输入4位被减数、减数
3、结果显示在F4区的数码管上
五、程序清单
EXTRN
CODE(Display8,GetBCDKey)
Buffer
DATA
30H
;8字节显示缓冲区
F1
BIT
0D1H
;PSW.1
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
SP,#60H
CLR
F1
;先清除显示,再接收键输入
START1:
MOV
R0,#buffer
MOV
A,#4
;按键次数
LCALL
GetBCDKey
;得到双字节十进制数(被减数)
SETB
F1
;接收到第一个键,才清除显示
MOV
R0,#buffer+4
MOV
A,#4
;按键次数
LCALL
GetBCDKey
;得到双字节十进制数(减数)
MOV
A,#9AH
CLR
C
SUBB
A,buffer+5
MOV
buffer+5,A
MOV
A,#99H
CLR
C
SUBB
A,buffer+4
MOV
buffer+4,A
;减数取补
MOV
A,buffer+1
ADD
A,buffer+5
DA
A
MOV
buffer+5,A
MOV
A,buffer
ADDC
A,buffer+4
DA
A
MOV
buffer+4,A
MOV
F0,C
;借位标志
JC
Display
MOV
A,#9AH
SUBB
A,buffer+5
MOV
buffer+5,A
MOV
A,#99H
SUBB
A,buffer+4
XCH
A,buffer+5
ADD
A,#00H
DA
A
XCH
A,buffer+5
ADDC
A,#00H
DA
A
MOV
buffer+4,A
Display:
MOV
R0,#buffer
;显示结果
MOV
A,buffer+5
;低位
ACALL
B1toB2
;压缩BCD码转换成非压缩BCD码
MOV
A,buffer+4
;高位
ACALL
B1toB2
MOV
@R0,#10H
;最高四位消隐
INC
R0
MOV
@R0,#10H
INC
R0
MOV
@R0,#10H
INC
R0
MOV
@R0,#10H
MOV
R0,#buffer+3
MOV
R7,#3
ACALL
BlackDisplay
;将高位0消隐
MOV
R0,#buffer
LCALL
Display8
SJMP
START1
BlackDisplay:
MOV
A,@R0
;将高位0消隐
JNZ
Exit
MOV
A,#10H
MOV
@R0,A
DEC
R0
DJNZ
R7,BlackDisplay
Exit:
JB
F0,Exit1
INC
R0
MOV
@R0,#11H
;负数标志
Exit1:
RET
B1toB2:
PUSH
ACC
ANL
A,#0FH
MOV
@R0,A
INC
R0
POP
ACC
ANL
A,#0F0H
SWAP
A
MOV
@R0,A
INC
R0
RET
BlackDisplay:
MOV
A,@R0
JNZ
Exit
MOV
A,#10H
MOV
@R0,A
DEC
R0
DJNZ
R7,BlackDisplay
Exit:
RET
END
实验四四字节十六进制数转十进制数
一、实验目的
进一步熟悉51汇编指令,了解十六进制数转十进制数的方法。
二、实验内容
从键盘上输入8位十六进制数,实现四字节十六进制数转8位十进制数,并在数码管上显示。
注意输入数据必须在00000000H~05F00000H范围,否则,结果超出8位十进制数,无法正确显示。
三、程序框图
四、实验步骤
1、连线说明:
D3区:
CLK
——
B2区:
2M
D3区:
CS
——
A3区:
CS5
D3区:
A0
——
A3区:
A0
2、在F4区的键盘上输入8位十六进制数
3、结果显示在F4区的数码管上
五、程序清单
EXTRN
CODE(Display8,GetKey)
Buffer
DATA
30H
;8字节显示缓冲区
F1
BIT
0D1H
;PSW.1
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
SP,#60H
CLR
F1
;先清除显示,再接收键输入
START1:
MOV
R0,#buffer
MOV
A,#8
;按键次数
LCALL
GetKey
;得到4字节十六进制数
SETB
F1
;接收到第一个键后,才清除显示
MOV
R0,buffer
MOV
R1,buffer+1
MOV
R2,buffer+2
MOV
R3,buffer+3
ACALL
B4toD4
;转换成十进制数
Display:
MOV
R0,#buffer
;显示结果
MOV
A,R7
;低位
ACALL
B1toB2
;压缩BCD码转换成非压缩BCD码
MOV
A,R6
ACALL
B1toB2
MOV
A,R5
ACALL
B1toB2
MOV
A,R4
;高位
ACALL
B1toB2
MOV
R0,#buffer+7
MOV
R7,#7
ACALL
BlackDisplay
;将高位0消隐
MOV
R0,#buffer
LCALL
Display8
SJMP
START1
;四字节十六进制数转十进制数:
R0R1R2R3为十六进制,R4R5R6R7为压缩BCD码
B4toD4:
CLR
A
MOV
R4,A
MOV
R5,A
MOV
R6,A
MOV
R7,A
MOV
B,#32
LOOP:
CLR
C
MOV
A,R3
RLC
A
MOV
R3,A
MOV
A,R2
RLC
A
MOV
R2,A
MOV
A,R1
RLC
A
MOV
R1,A
MOV
A,R0
RLC
A
MOV
R0,A
MOV
A,R7
ADDC
A,R7
DA
A
MOV
R7,A
MOV
A,R6
ADDC
A,R6
DA
A
MOV
R6,A
MOV
A,R5
ADDC
A,R5
DA
A
MOV
R5,A
MOV
A,R4
ADDC
A,R4
DA
A
MOV
R4,A
DJNZ
B,LOOP
RET
B1toB2:
PUSH
ACC
ANL
A,#0FH
MOV
@R0,A
INC
R0
POP
ACC
ANL
A,#0F0H
SWAP
A
MOV
@R0,A
INC
R0
RET
BlackDisplay:
MOV
A,@R0
;将高位0消隐
JNZ
Exit
MOV
A,#10H
MOV
@R0,A
DEC
R0
DJNZ
R7,BlackDisplay
Exit:
RET
END
实验五双字节BCD码(十进制数)乘法
一、实验目的
进一步熟悉51汇编指令,掌握汇编语言的设计和调试方法。
根据程序流程图,自己设计程序,了解如何调用系统提供的子程序。
二、实验内容
从键盘上输入4位被乘数、乘数,实现四位十进制数的乘法,结果显示在数码管上。
三、程序框图
四、实验步骤
1、连线说明:
D3区:
CLK
——
B2区:
2M
D3区:
CS
——
A3区:
CS5
D3区:
A0
——
A3区:
A0
2、在F4区的键盘上输入4位被乘数、乘数
3、结果显示在F4区的数码管上
五、程序清单
EXTRN
CODE(Display8,GetBCDKey)
Buffer
DATA
30H
;8字节显示缓冲区
F1
BIT
0D1H
;PSW.1
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
SP,#60H
CLR
F1
;先清除显示,再接收键输入
START1:
MOV
R0,#buffer
MOV
A,#4
;按键次数
LCALL
GetBCDKey
;得到双字节十进制数(被乘数)
MOV
R0,#buffer
ACALL
D4toB2
;转换成二进制数
PUSH
02H
PUSH
03H
SETB
F1
;接收到第一个键,才清除显示
MOV
R0,#buffer
MOV
A,#4
;按键次数
LCALL
GetBCDKey
;得到双字节十进制数(乘数)
MOV
R0,#buffer
ACALL
D4toB2
;转换成二进制数
POP
01H
POP
00H
ACALL
WordMul
;(R0R1)*(R2R3)=R0R1R2R3
ACALL
B4toD4
;转换成十进制数
Display:
MOV
R0,#buffer
;显示结果
MOV
A,R7
;低位
ACALL
B1toB2
;压缩BCD码转换成非压缩BCD码
MOV
A,R6
ACALL
B1toB2
MOV
A,R5
ACALL
B1toB2
MOV
A,R4
;高位
ACALL
B1toB2
MOV
R0,#buffer+7
MOV
R7,#7
ACALL
BlackDisplay
;将高位0消隐
MOV
R0,#buffer
LCALL
Display8
SJMP
START1
;双字节十六进制数乘以双字节十六进制数子程序
WordMul:
MOV
A,R3
;(R0)(R1)
MOV
B,R1
;×(R2)(R3)
MUL
AB
;---------------------------
XCH
A,R3
;(R3R1H)(R3R1L)
MOV
R7,B
;(R3R0H)(R3R0L)
MOV
B,R0
;(R2R1H)(R2R1L)
MUL
AB
;(R2R0H)(R2R0L)
ADD
A,R7
;--------------------------------
MOV
R7,A
;R0R1R2R3
CLR
A
ADDC
A,B
XCH
A,R1
MOV
B,R2
MUL
AB
ADD
A,R7
XCH
A,R2
PUSH
ACC
MOV
A,B
ADDC
A,R1
MOV
R1,A
CLR
A
RLC
A
XCH
A,R0
POP
B
MUL
AB
ADD
A,R1
MOV
R1,A
MOV
A,R0
ADDC
A,B
MOV
R0,A
RET
;双字节十进制数转二进制数,R0--指向双字节十进制数,结果在R2R3中
D4toB2:
MOV
A,@R0
ANL
A,#0FH
XCH
A,@R0
ANL
A,#0F0H
SWAP
A
MOV
B,#10
MUL
AB
ADD
A,@R0
INC
R0
MOV
B,#10
MUL
AB
MOV
R2,B
MOV
R3,A
MOV
A,@R0
ANL
A,#0FH
XCH
A,@R0
ANL
A,#0F0H
SWAP
A
ADD
A,R3
XCH
A,R2
ADDC
A,#0
MOV
B,#10
MUL
AB
XCH
A,R2
MOV
B,#10
MUL
AB
ADD
A,@R0
MOV
R3,A
MOV
A,R2
ADDC
A,B
MOV
R2,A
RET
B1toB2:
PUSH
ACC
ANL
A,#0FH
MOV
@R0,A
INC
R0
POP
ACC
ANL
A,#0F0H
SWAP
A
MOV
@R0,A
INC
R0
RET
BlackDisplay:
MOV
A,@R0
;将高位0消隐
JNZ
Exit
MOV
A,#10H
MOV
@R0,A
DEC
R0
DJNZ
R7,BlackDisplay
B4toD4:
CLR
A
MOV
R4,A
MOV
R5,A
MOV
R6,A
MOV
R7,A
MOV
B,#32