单片机实训手册.docx
《单片机实训手册.docx》由会员分享,可在线阅读,更多相关《单片机实训手册.docx(74页珍藏版)》请在冰豆网上搜索。
单片机实训手册
目录
实验一储存器块清零3
实验二二进制BCD码转换5
实验三二进制ASCII码转换7
实验四程序跳转表9
实验五内存块移动11
实验六数据排序13
实验七I/0口输入输出实验15
实验八定时器实验16
实验九计数器实验18
实验十A/D转换电路实验21
实验十一D/A转换电路实验24
实验十二数字显示电路27
实验十三单片机与PC机的RS232串行通信实验30
运动小车平台实验32
实验一逻辑电路控制的定速往复运动32
实验二逻辑电路控制的变速往复运动34
实验三逻辑电路控制的位置闭环控制实验37
实验四逻辑电路控制的速度闭环控制实验39
水箱液位对象实验40
实验一逻辑电路实现水箱温度的开关控制实验40
实验二水箱加热系统及温度测试实验42
实验三逻辑电路实现水箱液位的开关电路实验44
电子秤实验46
数控直流稳压电源实验50
数字语音系统实验51
密码电子锁电路实验70
实验一储存器块清零
一.实验目的
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码的方法。
2.学习使用伟福软件。
二.实验内容
把123转换成二进制BCD码再以16进制存于30H~32H中。
三.实验步骤
1.运行KeilC51软件,新建一个工程(如clr),新建一个文件CLR.asm。
将文件添加到工程中并编译,如有错,请更改直到编译成功。
2.点击
按钮或单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”(或者使用快捷键Ctrl+F5)进入调试模式,在调试模式下,会出现以下窗口,其中中间的窗口为存储器窗口。
3.在存储器窗口中输入D:
30H,然后单步执行,查看30H~32H单元值的变化内容的变化。
四.实验器材
1.电脑;
2.KeilC51软件。
五.实验参考程序
RESULTEQU30H
ORG00H
LJMPSTART
START:
MOVSP,#40H
MOVA,#123
LCALLBINTOBAC
SJMP$
BINTOBAC:
MOVB,#100
DIVAB;除以100得百位数
MOVRESULT,A
MOVA,B
MOVB,#10
DIVAB;余数除以10得十位数
MOVRESULT+1,A
MOVRESULT+2,B;余数为个位数
RET
END
实验三二进制ASCII码转换
一.实验目的
1.通过实验了解数值转二进制ASCII码的方法。
2.学习使用伟福软件。
二.实验内容
把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
48
0
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
三.实验步骤
1.运行KeilC51软件,新建一个工程(如clr),新建一个文件CLR.asm。
将文件添加到工程中并编译,如有错,请更改直到编译成功
2.点击
按钮或单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”(或者使用快捷键Ctrl+F5)进入调试模式,在调试模式下,会出现以下窗口,其中中间的窗口为存储器窗口。
在存储器窗口中输入D:
30H,然后单步执行,查看30H~31H单元值的变化。
四.实验器材
1.电脑;
2.KeilC51软件。
五.实验参考程序
RESULTEQU30H
ORG00H
START:
MOVA,#1AH
CALLBINTOHEX
LJMP$
BINTOHEX:
MOVDPTR,#ASCIITAB
MOVB,A;暂存A
SWAPA
ANLA,#0FH;取高四位
MOVCA,@A+DPTR;查ASCII表
MOVRESULT,A
MOVA,B;恢复A
ANLA,#0FH;取低四位
MOVCA,@A+DPTR;查ASCII表
MOVRESULT+1,A
RET
ASCIITAB:
DB48,49,50,51,52,53,54,55
DB56,57,65,66,67,68,69,70;定义数字对应的ASCII表
END
实验四程序跳转表
一.实验目的
1.通过实验理解地址偏移量的概念和程序跳转表的使用方法。
2.学习使用伟福软件。
二.实验内容
以查表的方式执行跳转指令使30H~33H显示不同的值。
三.实验步骤
1.运行KeilC51软件,新建一个工程(如clr),新建一个文件CLR.asm。
将文件添加到工程中并编译,如有错,请更改直到编译成功
2.点击
按钮或单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”(或者使用快捷键Ctrl+F5)进入调试模式,在调试模式下,会出现以下窗口,其中中间的窗口为存储器窗口
3.在存储器窗口中输入D:
30H,然后单步执行,查看30H~33H单元值的变化
四.实验器材
1.电脑;
2.KeilC51软件。
五.实验参考程序
ORG0000H
START:
MOVA,#0;设置地址偏移量
CALLFUNCENTER
MOVA,#1;设置地址偏移量
CALLFUNCENTER
MOVA,#2;设置地址偏移量
CALLFUNCENTER
MOVA,#3;设置地址偏移量
CALLFUNCENTER
LJMP$
FUNCENTER:
ADDA,ACC;AJMP为二字节指令,地址偏移量*2
MOVDPTR,#FUNCTAB;设置基址
JMP@A+DPTR;跳转到目标地址
FUNCTAB:
AJMPFUNC0
AJMPFUNC1
AJMPFUNC2
AJMPFUNC3
FUNC0:
MOV30H,#0
RET
FUNC1:
MOV31H,#1
RET
FUNC2:
MOV32H,#2
RET
FUNC3:
MOV33H,#3
RET
END
实验五内存块移动
一.实验目的
1.通过实验学习对存储器的操作。
2.学习使用伟福软件。
二.实验内容
把内部RAM50H~59H中的数据移到60H~69H中。
三.实验步骤
1.运行KeilC51软件,新建一个工程(如clr),新建一个文件CLR.asm。
将文件添加到工程中并编译,如有错,请更改直到编译成功。
2.点击
按钮或单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”(或者使用快捷键Ctrl+F5)进入调试模式,在调试模式下,会出现以下窗口,其中中间的窗口为存储器窗口。
3.在存储器窗口中输入D:
50H,然后单步执行,查看50H~59H和60H-69H单元值的变化。
四.实验器材
1.电脑;
2.KeilC51软件。
五.实验参考程序
ORG0000H
AJMPSTART
ORG0100H
START:
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
INCR0
INCR1
DJNZR2,LOOP
END
实验六数据排序
一.实验目的
1.通过实验学习数据排序的编程方法。
2.学习使用伟福软件。
二.实验内容
把11个无序数据存于30H~3AH中,然后以从小到大的顺序排列在30H~3AH中。
三.实验步骤
1.运行KeilC51软件,新建一个工程(如clr),新建一个文件CLR.asm。
将文件添加到工程中并编译,如有错,请更改直到编译成功
2.点击
按钮或单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”(或者使用快捷键Ctrl+F5)进入调试模式,在调试模式下,会出现以下窗口,其中中间的窗口为存储器窗口
3.在存储器窗口中输入D:
30H,然后单步执行,查看30H~3AH单元值的变化。
四.实验器材
1.电脑;
2.KeilC51软件。
五.实验参考程序
ORG0000H
LJMPSTART
ORG0100H
START:
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
XCHA,@R0
INCR0;大于交换位置
QL1:
MOVA,@R0
DJNZR7,QL2
JB00H,QUE1;一次循环中有交换继续
END
实验七I/0口输入输出实验
一.实验目的
通过实验学会使用51系列单片机I/O口的基本输入输出功能。
二.实验内容
向P3.2口送数据,单片机从P0口输入的状态数据后,再从P1.2口将该数据输出至发光二极管显示。
三.实验器材
1.主控屏+5V电源和±12V电源;
2.DCP-002单片机89S51电路;
3.DCP-0011DA转换电路;
4.电脑及KeilC51软件;
5.也可用数据开关及电平指示给定输入和检测输出。
四.实验步骤
1.把模块的电源接主控屏的+5V和±12V。
2.接DCP-002上的P3.1到+5或0V,DCP-002上的P1.1接DCP-0011上的D1。
3.运行KeilC51软件,新建一个工程(如IO),新建一个文件(如IO.asm)。
将文件添加到工程中,编写程序并编译,如有错,请更改直到编译成功。
4.用编程器将生成的HEX文件烧写到单片机中;或用仿真器来执行程序,将程序下载到仿真器中;或用ISP在线烧写技术将生成的HEX文件烧写到S系列单片机中;或用串口烧写技术将生成的HEX文件烧写到有此功能的单片机中。
5.运行实验程序,改变DCP-002上的P3.2电平,观察电平指示灯DS1的变化。
五.实验参考程序
ORG0000H
AJMPLOOP
ORG0030H
LOOP:
MOVA,P3
MOVP1,A
JMPLOOP
END
实验八定时器实验
一.实验目的
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亮......一直循环下去。
三.实验器材
1.主控屏+5V电源和±12V电源;
2.DCP-002单片机89S51电路;
3.DCP-0011DA转换电路;
4.电脑及KeilC51软件;
5.也可用电平指示检测输出。
四.实验步骤
1.把2块模块的电源接主控屏的+5V和±12V。
2.DCP-002上的P1.0,P1.1,P1.2,P1.3,分别接到DCP-0011上的D1~D4上。
3.运行KeilC51软件,新建一个工程,新建一个文件。
将文件添加到工程中,编写程序并编译,如有错,请更改直到编译成功。
4.用编程器将生成的HEX文件烧写到单片机中;或用仿真器来执行程序,将程序下载到仿真器中;或用ISP在线烧写技术将生成的HEX文件烧写到S系列单片机中;或用串口烧写技术将生成的HEX文件烧写到有此功能的单片机中。
5.运行实验程序,观察实验现象,可以看到电后第一秒钟L1亮,第二秒钟L2亮,第三秒钟L3亮,第四秒钟L4亮,第五秒L1,L3亮,第六秒钟L2,L4亮,第七秒钟4个二极管全亮,第八秒钟全灭,以后又从头开始,L1亮,然后L2亮......一直循环下去。
五.实验参考程序
ORG0000H
AJMPSTART
ORG0100H
START:
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口显示
INCR0
CJNER0,#08,LP1
LJMPLP3
TABLE:
DB01H,02H,04H,08H,05H,0aH,0FFH,00H;LED显示常数表
END
实验九计数器实验
一.实验目的
1.通过实验掌握单片机计数编程的方法。
2.通过实验掌握8279的使用方法。
二.实验内容
编写0—9的手动计数程序,按下加1(F1)键数值加1,通过数码管显示数值,加到10数值变为0,继续从0加到9重复显示,按下复位键(F2)显示为初值0。
三.实验器材
1.主控屏+5V电源;
2.DCP-002单片机89S51电路;
3.DCP-003键盘及LED数字显示电路;
4.电脑及KeilC51软件。
四.实验步骤
1.把模块的电源接主控屏的+5V。
2.DCP-002上的P3.2接DCP-003上的/INT;
3.DCP-002上的ALE接DCP-003上的CLK;
4.DCP-003上的CS和RST接GND即可;
5.用扁平带连接DCP-002上的P2和DCP-003上的P1端子。
6.运行KeilC51软件,新建一个工程,新建一个文件。
将文件添加到工程中,编写程序并编译,如有错,请更改直到编译成功。
7.用编程器将生成的HEX文件烧写到单片机中;或用仿真器来执行程序,将程序下载到仿真器中;或用ISP在线烧写技术将生成的HEX文件烧写到S系列单片机中;或用串口烧写技术将生成的HEX文件烧写到有此功能的单片机中。
8.运行实验程序,按下加1(F1)键数值加1,按下复位键(F2)显示为初值0。
注意:
使用此程序,DCP-002上的GAL16V8要写入yyhf.jed文件。
五.实验参考程序
ORG0000H
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;设置内部分频约为11.0592/6/100=18,CLK接ALE
MOVX@DPTR,A
MOVA,#00H;设置工作方式,左端输入,双键互锁,编码扫描
MOVX@DPTR,A
HERE:
ACALLDIR;调显示
SETBEA;开中断
SETBEX0;允许外中断0
SETBT0;外中断0边沿触发
HERE1:
SJMPHERE
DIR:
MOVDPTR,#0b000H
MOVA,#90H;向8279发出显示RAM命令
MOVX@DPTR,A
MOVR1,#08H;8位显示
MOVR0,#30H;显示缓冲区域
LED:
MOVA,@R0
MOVDPTR,#TAB;查表
MOVCA,@A+DPTR
MOVDPTR,#09000H;A0=0读写一般数据
MOVX@DPTR,A;写入显示RAM
INCR0
DJNZR1,LED
RET
;ajmpdir
TAB:
DB0F3H,60H,0B5H,0F4H;0123
DB66H,0D6H,0D7H,70H;4567
DB0F7H,0F6H,00H;89
INT00:
PUSHACC;中断处理子程序
PUSHPSW
PUSHDPH
PUSHDPL;保护现场
MOVPSW,#18H
MOVDPTR,#0b000H
MOVA,#40H;向8279发出显示RAM命令
MOVX@DPTR,A
MOVDPTR,#09000H
MOVXA,@DPTR;取出键值
CJNEA,#22H,ZZ;判断键值是否为F1键
LJMPF1
ZZ:
CJNEA,#21H,TOUT;判断键值是否为F2键
LJMPF2
TOUT:
LCALLDIR
POPDPL
POPDPH
POPPSW
POPACC
RETI
F2:
MOV37H,#00H
LJMPTOUT
F1:
MOVA,37H
CJNEA,#09H,JF
MOV37H,#00H
LJMPTOUT
JF:
INC37H
LJMPTOUT
END
实验十A/D转换电路实验
一.实验目的
1.了解A/D转换的原理。
2.掌握A/D转换的控制过程。
二.实验器材
1.主控屏+5V及正负12V电源;
2.DCP-0010A/D转换电路;
3.万用表(自备)。
三.实验原理
A/D转换电路主要由模拟信号输入、ADC0804及外围电路、数字信号输出电路组成。
模拟信号输入电路如图所示:
输入模拟电压Vin先经过由运放“U1:
A”构成的反相比例放大器反相。
可以通过调节RW1来调节输入幅度,使输入ADC0804芯片的模拟电压量小于参考电压。
再经过由运放“U1:
B”构成的反相比例放大器,再次反相。
通过RW2进行调零,使得输入ADC0804芯片的模拟电压始终为正,且与输入电压Vin同相,输入到ADC0804的Vin(+)端。
本电路的输入电阻为R1,考虑到前一级电路的带负载能力,可以取R1的阻值为10k。
管脚11~18为8位二进制数字量输出;
管脚6.7为模拟量输入;
管脚4.19,为A/D转换所需的时钟信号输入端;
管脚8,AG