单片机实验报告.docx
《单片机实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
![单片机实验报告.docx](https://file1.bdocx.com/fileroot1/2022-11/24/cbf240c1-887f-4872-aa08-642f7ac1041c/cbf240c1-887f-4872-aa08-642f7ac1041c1.gif)
单片机实验报告
单片机与嵌入式系统
实验报告
一、软件模拟调试实验:
本部分实验内容主要为指令系统和汇编语言程序设计。
采用软件模拟调试的方法,目的在于通过这些实验使学生巩固所学知识,加深对MCS-51单片机内部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。
实验一数据传送实验
实验目的
1、熟悉软件模拟调试环境。
2、掌握汇编语言程序设计的方法,加深对指令的理解。
3、学会软件模拟调试和察看、验证结果方法。
4、印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。
实验步骤
1、进入调试软件环境,输入源程序;
2、汇编源程序;
3、用单步方式运行程序;
4、检查并记录各寄存器和存储单元内容的变化。
实验内容:
将8031内部RAM40H—4FH单元置初值A0H—AFH,然后将片内RAM40H—4FH单元中的数据传送到片内RAM50H—5FH单元。
将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。
源程序清单:
ORG0000H
RESET:
AJMPMAIN
ORG003FH
MAIN:
MOVR0,#40H
MOVR2,#10H
MOVA,#0A0H
A1:
MOV@R0,A
INCR0
INCA
DJNZR2,A1
MOVR1,#10H
MOVR0,#50H
MOVR2,#10H
A3:
MOVA,@R1
MOV@R0,A
INCR1
INCR2
DJNZR2,A3
SJMP$
END
实验结果与分析:
1、按照实验内容补全程序。
2、对源程序进行编译并查看相应程序存储器的内容,将源程序对应的机器码记录入下表,掌握ORG伪指令及汇编的过程。
ORG的作用及相关注意事项:
ORG表示之后的语句从哪里开始,有的单片机里面的固定区域是用来做堆栈或者是子程序跳转地址的入口。
程序存储区
地址
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0000
01
3F
0010
0020
0030
78
0040
40
7A
10
74
A0
F6
08
04
0A
FB
79
40
78
50
74
10
0050
E7
F6
09
08
DA
FA
80
FE
PC表示:
下一条要执行的指令
PSW表示:
程序状态字,其各位的含义为:
cy进位标志位AC辅助进位标志位
Ov溢出标志位p校验位
SP表示:
堆栈指针
R0~R7的物理位置:
0000H-0007H
3、运行机器码,查看片内数据区、CPU内寄存器的变化情况,按要求将结果记录入下表。
单片机上电复位之后,PC=0000,PSW=00H,SP=07H,则单片机用第一组工作寄存器组,R0~R7的物理位置为:
0000-0007H
用单步方式运行程序,观察实验过程中PC、A、R0、R2中内容的变化情况,程序执行结束后,将相应的RAM中各单元的内容补充完整。
CPU内部存储区
地址
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0000
81
56
59
04
0010
0020
0030
30
04
82
00
01
29
01
30
04
06
FD
01
29
01
30
04
0040
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
0050
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
实验二多字节十进制加法实验
实验目的
1、掌握数据块的传送操作和算术运算指令的应用。
2、掌握BCD码加法的使用。
实验步骤
1、进入调试软件环境,输入源程序;
2、汇编源程序;
3、用单步方式运行程序;
4、检查并记录各寄存器和存储单元内容的变化。
实验内容:
多字节十进制加法。
加数首地址由R0指出,被加数和结果的存储单元首地址由R1指出,字节数由R2指出。
将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。
源程序清单:
ORG0000H
RESET:
AJMPMAIN
ORG0100H
MAIN:
MOVSP,#60H
MOVR0,#31H
MOV@R0,#22H
DECR0
MOV@R0,#33H
MOVR1,#21H
MOV@R1,#44H
DECR1
MOV@R1,#55H
MOVR2,#02H
ACALLDACN
HERE:
AJMPHERE
DACN:
CLRC
DAL:
MOVA,@R0
ADDCA,@R1
DAA
MOV@R1,A
INCR0
INCR1
DJNZR2,DAL
CLRA
MOVACC.0,C
RET
实验结果与分析
1、按照实验内容补全程序。
2、加数单元、被加数单元和结果单元的地址和内容为?
(按十进制加法格式,高位在左,低位在右,将实验数据填入下图相应的单元中)
地址
内容
内容
地址
被加数
(20H)
55H
(21H)
44H
加数
(30H)
33H
(31H)
22H
和
(20H)
88H
(21H)
66H
此时(PSW)=0000
3、如何检查双字节相加的最高位溢出?
看PSW的CY位是否为1
4、改变加数和被加数,测试程序的执行结果。
(1)操作数改为:
5678+2345
地址
内容
内容
地址
被加数
(31H)
56H
78H
(30H)
加数
(21H)
23H
45H
(20H)
和
(31H)
80H
23H
(30H)
此时(PSW)=0000
(2)操作数改为:
5201H+8301H
地址
内容
内容
地址
被加数
(31H)
52H
01H
(30H)
加数
(21H)
83H
01H
(20H)
和
35H
02H
此时(PSW)=80H
(3)操作数改为:
7733+5888
地址
内容
内容
地址
被加数
(31H)
78
58
(30H)
加数
(21H)
33
77
(20H)
和
22
35
此时(PSW)=81
实验三数据排序实验
实验目的
1、进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。
2、掌握循环结构程序设计的方法,弄清单重及多重循环控制过程。
实验步骤
1、进入调试软件环境,输入源程序;
2、汇编源程序;
3、用单步方式运行程序;
4、检查并记录各寄存器和存储单元内容的变化。
实验内容:
将内部RAM50H—59H中的数据按从小到大的次序排列。
将程序经模拟调试通过后,运行程序,检查相应的存储单元的数据是否为排序状态。
源程序清单:
ORG0000H
RESET:
AJMPMAIN
ORG0100H
MAIN:
MOVSP,#60H
MOVR0,#50H
MOV@R0,#6FH
INCR0
MOV@R0,#6EH
INCR0
MOV@R0,#6AH
INCR0
MOV@R0,#6CH
INCR0
MOV@R0,#6DH
INCR0
MOV@R0,#5BH
INCR0
MOV@R0,#67H
INCR0
MOV@R0,#69H
INCR0
MOV@R0,#68H
INCR0
MOV@R0,#64H
ACALLQUE
HERE:
AJMPHERE
QUE:
CLR00H
MOVR7,#09H
MOVR0,#50H
MOVA,@R0
L2:
INCR0
MOVR2,A
SUBBA,@R0
MOVA,R2
JCL1
SETB00H
XCHA,@R0
DECR0
XCHA,@R0
INCR0
L1:
MOVA,@R0
DJNZR7,L2
JB00H,QUE
RET
实验结果与分析:
1、按照实验内容补全程序。
2、说明该排序算法的基本原理和过程。
先将10个数放到50~59H中,然后调用QUE进行排序。
两个数比较,前者大的则交换。
3、检查程序执行结果。
排序前
CPU内部存储区
地址
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
50
5B
64
67
68
69
6A
6C
6D
6E
6F
排序后
CPU内部存储区
地址
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
50
5B
64
67
68
69
6A
6C
6D
6E
6F
3、若对实验数据按从大到小次序排序,则需要对源程序做哪些修改?
JCL1变为JNCL1
实验结果与分析
排序前
CPU内部存储区
地址
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
50
5B
64
67
68
69
6A
6C
6D
6E
6F
排序后
CPU内部存储区
地址
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
50
6F
6E
6D
6C
6A
69
68
67
64
5B
实验四统计数的个数
实验目的
1、进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。
2、掌握分支结构程序设计的方法。
3、学会用条件转移指令、CJNE、及其配合使用来编写二分支、三分支程序。
实验内容:
片内RAM从20H单元开始存有10个带符号数,求统计出其中大于0,小于0和等于0的个数,并存放于片内RAM30H,31H,32H三个单元中。
源程序清单(补充完整):
ORG0100H
MOV30H,#00H
MOV31H,#00H
MOV32H,#00H
MOVR0,#10
MOVR1,#20H
MOV20H,#1
MOV21H,#2
MOV22H,#3
MOV23H,#-1
MOV24H,#-2
MOV25H,#0
MOV26H,#0
MOV27H,#-1
MOV28H,#-2
MOV29H,#2
LOP:
MOVA,@R1
JZL1
JBACC.7,L2
INC31H
SJMPSTOP
L2:
INC30H
SJMPSTOP
L1:
INC32H
STOP:
INCR1
DJNZR0,LOP
SJMP$
END
实验数据
CPU内部存储区
地址
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
20H
01
02
03
FF
FE
00
00
FF
FE
02
30H
04
04
02
二、硬件在线仿真实验:
实验五电子钟实验
实验目的:
1、学会用MOVC指令编写查表程序。
2、掌握MCS-51单片机中定时器的工作原理及综合应用。
3、熟悉集成软件调试环境,并掌握调试程序的方法和硬件在线仿真技术。
实验内容:
熟悉单片机在线仿真调试方法。
将仿真头插入实验板的CPU插座中,再打开电源,输入程序进行调试。
程序运行时,按下S0键,蜂鸣器发出响声,两个数码管开始从零显示时间,定时器定时时间为一分钟,定时时间到,蜂鸣器再次发出响声,重新按下S0键,重复上述过程。
源程序清单:
ORG0000H
START:
AJMPMAIN
ORG000BH
AJMPPIT0
ORG0100H
MAIN:
MOVSP,#60H
MOV50H,#00H
MOV51H,#00H
ACALLDISPLAY
MOVTMOD,#01H
MOVTL0,#0B0H
MOVTH0,#3CH
ACALLKEY
CLRP2.7
ACALLLONGDELAY
SETBP2.7
SETB00H
SETBTR0
SETBEA
SETBET0
MOV30H,#20
ML0:
ACALLDISPLAY
MOVC,00H
JCML0
CLRP2.7
ACALLLONGDELAY
SETBP2.7
CLRTR0
AJMPMAIN
PIT0:
PUSHPSW
PUSHACC
SETBPSW.3
MOVTL0,#0B0H
MOVTH0,#3CH
MOVA,30H
DECA
MOV30H,A
JNZRET0
MOV30H,#20
MOVR0,#51H
ACALLDAAD1
MOVA,R2
XRLA,#60H
JNZRET0
ACALLCLR0
CLR00H
RET0:
POPACC
POPPSW
RETI
DAAD1:
MOVA,@R0
DECR0
SWAPA
ORLA,@R0
ADDA,#01H
DAA
MOVR2,A
ANLA,#0FH
MOV@R0,A
MOVA,R2
INCR0
ANLA,#0F0H
SWAPA
MOV@R0,A
RET
CLR0:
CLRA
MOV@R0,A
DECR0
MOV@R0,A
RET
DISPLAY:
MOVA,50H
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP2,A
MOVA,51H
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
CLRP0.7
LCALLDELAY
RET
KEY:
MOVC,P3.0
JCKEY
ACALLDELAY
KEY1:
MOVC,P3.0
JNCKEY1
ACALLDELAY
RET
DELAY:
MOVR1,#250
LOOP:
DJNZR1,LOOP
RET
LONGDELAY:
MOVA,R0
PUSHACC
MOVA,R1
PUSHACC
MOVR1,#250
LOOP1:
MOVR0,#250
LOOP2:
NOP
NOP
NOP
NOP
NOP
DJNZR0,LOOP2
DJNZR1,LOOP1
POPACC
MOVR1,A
POPACC
MOVR0,A
RET
TABLE:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
实验结果与分析
1、程序中哪部分为显示程序?
DISPLAY为显示程序
2、程序中如何秒钟的实现一定时?
每次定50毫米,20次就是1秒
3、写出各段子程序的作用。
KEY:
检测按键
DELAY:
延时
LONGDELAY:
长延时
DISPLAY:
显示
DAAD1:
PIT0:
定时器0的中断处理函数
4、根据实验要求画出简要的电路连接