单片机部分实验指导书Word格式文档下载.docx
《单片机部分实验指导书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机部分实验指导书Word格式文档下载.docx(41页珍藏版)》请在冰豆网上搜索。
再单击“View”菜单,再在下拉菜单中单击“SerialWindows#1”选项,就可以看到程
序运行后的结果其结果如下图所示
至此,我们在KeilC51上做了一个完整工程的全过程。
但这只是纯软件的开发过程,如何
使用程序下载器看一看程序运行的结果呢?
10)单击“Project”菜单,再在下拉菜单中单击“
”在下图中,单击“Output”中单击“CreateHEXFile”选项,使程序编译后产生HEX代码,供下载器软件使用。
把程序下载到AT89S51单片机中。
实验二储存器块清零
一.实验目的
1.通过实验了解单片机的数据存储器写入与擦除的方法;
2.学习使用伟福软件。
二.实验内容
编程实现0030H~0039HRAM的内容清零。
三.实验步骤
1.运行KeilC51软件,新建一个工程(如clr),新建一个文件CLR.asm。
将文件添加到工程中并编译,如有错,请更改直到编译成功,如有错,请更改直到编译成功
2.点击
按钮或单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”(或者使用快捷键Ctrl+F5)进入调试模式,在调试模式下,会出现以下窗口,其中中间的窗口为存储器窗口
3.在存储器窗口中输入D:
30H,然后单步执行,查看30H~39H单元值的变化。
四.实验器材
1.电脑
2.KeilC51软件
五.实验参考程序
ORG0000H
LJMPSTART
ORG0030H
START:
MOV30H,#10H
MOV31H,#11H
MOV32H,#12H
MOV33H,#13H
MOV34H,#14H
MOV35H,#15H
MOV36H,#16H
MOV37H,#17H
MOV38H,#18H
MOV39H,#19H
MOVR0,#30H
LOOP1:
CLRA
MOV@R0,A
INCR0
CJNER0,#3AH,LOOP1
END
实验三二进制BCD码转换
1.通过实验了解十进制转二进制BCD码的方法;
把123转换成二进制BCD码再以16进制存于30H~32H中。
将文件添加到工程中并编译,如有错,请更改直到编译成功
3.在存储器窗口中输入D:
30H,然后单步执行,查看30H~32H单元值的变化内容的变化。
RESULTEQU30H
ORG00H
LJMPSTART
MOVSP,#40H
MOVA,#123
LCALLBINTOBAC
SJMP$
BINTOBAC:
MOVB,#100
DIVAB;
除以100得百位数
MOVRESULT,A
MOVA,B
MOVB,#10
余数除以10得十位数
MOVRESULT+1,A
MOVRESULT+2,B;
余数为个位数
RET
END
实验四二进制ASCII码转换
1.通过实验了解数值转二进制ASCII码的方法;
把1AH转换成二进制ASCII码再存于30H~31H中。
常用ASCII码
代码
字符
32
52
4
72
H
92
\
112
p
33
!
53
5
73
I
93
]
113
q
34
"
54
6
74
J
94
^
114
r
35
#
55
7
75
K
95
_
115
s
36
$
56
8
76
L
96
`
116
t
37
%
57
9
77
M
97
a
117
u
38
&
58
:
78
N
98
b
118
v
39
'
59
;
79
O
99
c
119
w
40
(
60
<
80
P
100
d
120
x
41
)
61
=
81
Q
101
e
121
y
42
*
62
>
82
R
102
f
122
z
43
+
63
?
83
S
103
g
123
{
44
64
@
84
T
104
h
124
|
48
-
65
A
85
U
105
i
125
}
46
.
66
B
86
V
106
j
126
~
47
/
67
C
87
W
107
k
68
D
88
X
108
l
49
1
69
E
89
Y
109
m
50
2
70
F
90
Z
110
n
51
3
71
G
91
[
111
o
在存储器窗口中输入D:
30H,然后单步执行,查看30H~31H单元值的变化
RESULTEQU30H
ORG00H
MOVA,#1AH
CALLBINTOHEX
LJMP$
BINTOHEX:
MOVDPTR,#ASCIITAB
MOVB,A;
暂存A
SWAPA
ANLA,#0FH;
取高四位
MOVCA,@A+DPTR;
查ASCII表
MOVRESULT,A
MOVA,B;
恢复A
取低四位
MOVCA,@A+DPTR;
MOVRESULT+1,A
RET
ASCIITAB:
DB48,49,50,51,52,53,54,55
DB56,57,65,66,67,68,69,70;
定义数字对应的ASCII表
实验五程序跳转表
1.通过实验理解地址偏移量的概念和程序跳转表的使用方法;
以查表的方式执行跳转指令使30H~33H显示不同的值。
30H,然后单步执行,查看30H~33H单元值的变化
ORG0000H
MOVA,#0;
设置地址偏移量
CALLFUNCENTER
MOVA,#1;
MOVA,#2;
MOVA,#3;
LJMP$
FUNCENTER:
ADDA,ACC;
AJMP为二字节指令,地址偏移量*2
MOVDPTR,#FUNCTAB;
设置基址
JMP@A+DPTR;
跳转到目标地址
FUNCTAB:
AJMPFUNC0
AJMPFUNC1
AJMPFUNC2
AJMPFUNC3
FUNC0:
MOV30H,#0
FUNC1:
MOV31H,#1
FUNC2:
MOV32H,#2
FUNC3:
MOV33H,#3
END
实验六内存块移动
1.通过实验学习对存储器的操作
把内部RAM50H~59H中的数据移到60H~69H中。
50H,然后单步执行,查看50H~59H和60H-69H单元值的变化
AJMPSTART
ORG0100H
MOV50H,#00H
MOV51H,#01H
MOV52H,#02H
MOV53H,#03H
MOV54H,#04H
MOV55H,#05H
MOV56H,#06H
MOV57H,#07H
MOV58H,#08H
MOV59H,#09H
MOVR0,#50H;
源地址
MOVR1,#60H;
目的地址
MOVR2,#10
LOOP:
MOVA,@R0
MOV@R1,A
INCR1
DJNZR2,LOOP
实验七数据排序
1.通过实验学习数据排序的编程方法;
把11个无序数据存于30H~3AH中,然后以从小到大的顺序排列在30H~3AH中。
30H,然后单步执行,查看30H~3AH单元值的变化
ORG0000H
LJMPSTART
ORG0100H
MOV50H,#30H
MOV51H,#11H
MOV52H,#18H
MOV53H,#09H
MOV54H,#01H
MOV55H,#2AH
MOV56H,#36H
MOV57H,#17H
MOV58H,#28H
MOV59H,#79H
MOV5AH,#0A9H
MOVR3,#50H
QUE1:
MOVA,R3;
指针送R0
MOVR0,A
MOVR7,#0AH;
长度送R7
CLR00H;
清标志位
MOVA,@R0
QL2:
INCR0
MOVR2,A
CLRC
MOV22H,@R0
CJNEA,22H,QL3;
相等吗?
SETBC
QL3:
MOVA,R2
JCQL1;
大于交换位置
SETB00H
XCHA,@R0
DECR0
INCR0;
QL1:
DJNZR7,QL2
JB00H,QUE1;
一次循环中有交换继续
硬件实验部分
实验一I/0口输入输出实验
通过实验学会使用51系列单片机I/O口的基本输入输出功能。
向P3.2口送数据,单片机从P0口输入的状态数据后,再从P1.2口将该数据输出至发光二极管显示。
三.实验器材
1.主控屏+5V电源
2.DCP-001RS触发电路线路板
3.DCP-002单片机89S51电路
4.DCP-006功率输出电路
5.电脑及KeilC51软件
6.若没有2.4项则用数电试验箱中数据开关及电平指示代替
四.实验步骤
1.把3块模块的电源接主控屏的+5V。
2.DCP-001上的QA接DCP-001上的P3.2,DCP-001上的P1.2接DCP-006上的IN1。
3.运行KeilC51软件,新建一个工程(如IO),新建一个文件(如IO.asm)。
将文件添加到工程中,编写程序并编译,如有错,请更改直到编译成功。
4.用编程器将生成的HEX文件烧写到单片机中;
或用仿真器来执行程序,将程序下载到仿真器中;
或用ISP在线烧写技术将生成的HEX文件烧写到S系列单片机中;
或用串口烧写技术将生成的HEX文件烧写到有此功能的单片机中。
5.运行实验程序,按下按钮AN1和AN2,观察发光二极管DS1的显示情况。
AJMPLOOP
ORG0030H
MOVA,P3
MOVP1,A
JMPLOOP
实验二定时器实验
1.通过实验学习单片机的定时器功能,学会编程实现单片机的定时功能;
2.掌握定时中断处理程序的编程方法;
3.掌握查表的编程方法。
由单片机内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。
P1口的P1.0-P1.3分别接4个发光二极管。
编写程序模拟一时序控制装置。
上电后第一秒钟L1亮,第二秒钟L2亮,第三秒钟L3亮,第四秒钟L4亮,第五秒L1,L3亮,第六秒钟L2,L4亮,第七秒钟4个二极管全亮,第八秒钟全灭,以后又从头开始,L1亮,然后L2亮......一直循环下去。
2.DCP-002单片机89S51电路
3.DCP-006功率输出电路
4.电脑及KeilC51软件
5.若没有2.4项则用数电试验箱中数据开关及电平指示代替
1.把2块模块的电源接主控屏的+5V。
2.DCP-002上的P1.0,P1.1,P1.2,P1.3,分别接到DCP-006上的IN1,IN2,IN3,IN4上。
3.运行KeilC51软件,新建一个工程,新建一个文件。
5.运行实验程序,观察实验现象,可以看到电后第一秒钟L1亮,第二秒钟L2亮,第三秒钟L3亮,第四秒钟L4亮,第五秒L1,L3亮,第六秒钟L2,L4亮,第七秒钟4个二极管全亮,第八秒钟全灭,以后又从头开始,L1亮,然后L2亮......一直循环下去。
MOVTMOD,#10H;
置T1为方式1
MOVTL1,#0B0H;
延时50mS的时间常数
MOVTH1,#3CH
SETBTR1
LP3:
MOVR0,#00H
MOVR1,#20
LP1:
JBCTF1,LP2
SJMPLP1
LP2:
DJNZR1,LP1
MOVR1,#20;
延时一秒的常数
MOVDPTR,#TABLE;
置常数表基址
MOVA,R0;
置常数表偏移量
MOVCA,@A+DPTR;
读表
MOVP1,A;
送P1口显示
CJNER0,#08,LP1
LJMPLP3
TABLE:
DB01H,02H,04H,08H,05H,0aH,0FFH,00H;
LED显示常数表
实验三计数器实验
1.通过实验掌握单片机计数编程的方法;
2.通过实验掌握8279的使用方法
编写0—9的手动计数程序,按下加1(F1)键数值加1,通过数码管显示数值,加到10数值变为0,继续从0加到9重复显示,按下复位键(F2)显示为初值0。
3.DCP-003键盘及LED数字显示电路
2.DCP-002上的P3.2接DCP-003上的/INT;
DCP-002上的ALE接DCP-003上的CLK;
DCP-003上的CS和RST接GND即可;
用扁平带连接DCP-002上的P2和DCP-003上的P1端子。
5.运行实验程序,按下加1(F1)键数值加1,按下复位键(F2)显示为初值0。
注意:
使用此程序,DCP-002上的GAL16V8要写入yyhf.jed文件
AJMPMAIN
ORG0003H
AJMPINT00;
外中断0
ORG0100H
MAIN:
MOVSP,#60H;
设置堆栈
MOVDPTR,#0b000H;
CS接地了,A0接P2.4,8279命令状态寄存器地址为0FFFFH,A0=1
MOVA,#0D1H;
总清8279
MOVX@DPTR,A
MOV30H,#0AH;
显示器送0
MOV31H,#0AH
MOV32H,#0AH
MOV33H,#0AH
MOV34H,#0AH
MOV35H,#0AH
MOV36H,#0AH
MOV37H,#00H
WAIT:
MOVXA,@DPTR;
读状态字
JBACC.7,WAIT;
Du=1循环等待
MOVA,#32H;
设置内部