单片机实验总汇1.docx
- 文档编号:18414873
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:62
- 大小:395.95KB
单片机实验总汇1.docx
《单片机实验总汇1.docx》由会员分享,可在线阅读,更多相关《单片机实验总汇1.docx(62页珍藏版)》请在冰点文库上搜索。
单片机实验总汇1
软件实验
实验一数据传送(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
如果读者使用星研集成环境软件,请考虑以下问题:
1、运行程序前,打开变量窗、二个存贮器窗(一个选择片内数据;一个选择片外数据,起始地址选择1000H),每个存贮器窗有四个标签,有何好处?
;
2、使用单步进入命令,运行到第十四行后,运行过程中变量窗有何变化?
将鼠标停留在A、SP、@R0、@DPTR上一秒后,出现什么?
它与变量窗使用场合的区别?
3、将光标移到第十四行上,使用运行到光标处命令,观察运行结果,体会它与单步进入命令的不同处。
4、在二十行上,设置一个断点,使用全速断点命令运行几次,观察运行结果,它与运行到光标处命令有何区别?
5、使用全速运行命令,稍后,点击工具条上停止运行命令按钮,当前执行箭头停在哪一行?
运行结果是否正确?
它与全速断点运行命令有何区别?
6、观察寄存器,有哪几种方法?
1)在工作区窗的通用寄存器标签视中;
2)变量窗
3)鼠标停留在寄存器上
4)观察窗5)寄存器窗
7、查看CPU内部数据RAM、CPU片外数据RAM:
1)存贮器窗2)变量窗
3)鼠标停留在CPU内部数据RAM、CPU片外数据RAM的地址、@R0、@DPTR上
六、思考题
编写一个程序,将外部数据RAM中的数据传送到内部数据RAM中。
实验二双字节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
实验三冒泡排序
一、实验目的
熟悉使用MCS51指令,掌握汇编语言的设计和调试方法,了解如何使用高效方法对数据排序。
二、实验内容
编写并调试一个排序程序,要求使用冒泡法将一组数据从小到大重新排列。
三、程序框图
四、实验步骤
使用断点方式调试程序,检查内部RAM30H~3FH中数据是否按从小到大的顺序排列。
五、程序清单
bSort
BIT
F0
ORG
0000H
LJMP
STAR
ORG
0100H
STAR:
MOV
SP,#60H
;堆栈
MOV
R0,#30H
;存放待排序数据的首地址
MOV
R7,#16
;数据个数
MOV
DPTR,#TAB_1
STAR1:
CLR
A
MOVC
A,@A+DPTR
MOV
@R0,A
;将数据移入内部RAM中
INC
R0
INC
DPTR
DJNZ
R7,STAR1
MOV
R7,#16-1
;存放比较次数
STAR2:
PUSH
07H
MOV
R0,#30H
;存放启始地址
CLR
bSort
MOV
R1,00H
INC
R1
MOV
A,@R0
STAR3:
MOV
B,A
MOV
A,@R1
CJNE
A,B,$+3
JNC
STAR5
XCH
A,@R0
MOV
@R1,A
SETB
bSort
STAR5:
INC
R0
INC
R1
DJNZ
R7,STAR3
POP
07H
JNB
bSort,Exit
DEC
R7
SJMP
STAR2
Exit:
SJMP
$
TAB_1:
DB0H,5H,6H,3H,8H,92H,04H,57H,46H,01H,0FFH,0A0H,45H,99H,55H,66H
END
六、思考题
你还知道哪些排序方法?
另外编写一个排序子程序。
(数据结构方面的教材上有十几种排序方法)。
实验四电子钟(定时器、中断综合实验)
一、实验目的
熟悉MCS51类CPU的定时器、中断系统编程方法,了解定时器的应用、实时程序的设计和调试技巧。
二、实验内容
编写一个时钟程序,产生一个50ms的定时中断,对定时中断计数,将时、分、秒显示在数码管上。
三、程序框图
四、实验步骤
1、连线说明:
D3区:
CLK
——
B2区:
2M
D3区:
CS
——
A3区:
CS5
D3区:
A0
——
A3区:
A0
2、时间显示在数码管上
五、程序清单
ms50
DATA
31H
;存放多少个50ms
sec
DATA
32H
;秒
min
DATA
33H
;分
hour
DATA
34H
;时
buffer
DATA
35H
;显示缓冲区
EXTRN
CODE(Display8)
ORG
0000H
LJMP
STAR
ORG
000BH
;定时器T0中断处理入口地址
LJMP
INT_Timer0
ORG
0100H
STAR:
MOV
SP,#60H
;堆栈
MOV
ms50,A
;清零ms50
MOV
hour,#12
;设定初值:
12:
59:
50
MOV
min,#59
MOV
sec,#50
MOV
TH0,#60
;定时中断计数器初值
MOV
TL0,#176
;定时50ms
MOV
TMOD,#1
;定时器0:
方式一
MOV
IE,#82H
;允许定时器0中断
SETB
TR0
;开定时器T0
STAR1:
LCALL
Display
;调用显示
JNB
F0,$
CLR
F0
SJMP
STAR1
;需要重新显示时间
;中断服务程序
INT_Timer0:
MOV
TL0,#176-5
MOV
TH0,#60
PUSH
01H
MOV
R1,#ms50
INC
@R1
;50ms单元加1
CJNE
@R1,#20,ExitInt
MOV
@R1,#0
;恢复初值
INC
R1
INC
@R1
;秒加1
CJNE
@R1,#60,ExitInt1
MOV
@R1,#0
INC
R1
INC
@R1
;分加1
CJNE
@R1,#60,ExitInt1
MOV
@R1,#0
INC
R1
INC
@R1
;时加1
CJNE
@R1,#24,ExitInt1
MOV
@R1,#0
ExitInt1:
SETB
F0
ExitInt:
POP
01H
RETI
HexToBCD:
MOV
B,#10
DIV
AB
MOV
@R0,B
INC
R0
MOV
@R0,A
INC
R0
RET
Display:
MOV
R0,#buffer
MOV
A,sec
ACALL
HexToBCD
MOV
@R0,#10H
;第三位不显示
INC
R0
MOV
A,min
ACALL
HexToBCD
MOV
@R0,#10H
;第六位不显示
INC
R0
MOV
A,hour
ACALL
HexToBCD
MOV
R0,#buffer
LCALL
Display8
RET
END
六、思考题
1、电子钟走时精度与哪些有关系?
中断程序中给TL0赋值为什么与初始化程序中不一样?
2、使用定时器方式二,重新编写程序。
实验五频率计(定时器、计数器、中断综合实验)
一、实验目的
熟悉MCS51类CPU的定时器、计数器、中断系统编程方法,了解定时器、计数器的应用、实时程序的设计和调试技巧。
二、实验内容
使用定时器0产生定时,使用计数器1计数外部脉冲,用P3.5测量信号频率(最大不能超过0.5MHZ),将频率值显示在数码管上。
三、程序框图
四、实验步骤
1、连线说明:
D3区:
CLK
——
B2区:
2M
D3区:
CS
——
A3区:
CS5
D3区:
A0
——
A3区:
A0
2、将导线的一头插入A3区的T1(P3.5)
3、打开实验仪的电源
4、将导线的另一头与B2区的500K~1953的信号相连,对应的频率值显示在数码管上
五、程序清单
;程序名称:
频率计(P3.5计数1秒处理一次)
Count50ms
DATA
30H
PulseCount
DATA
31H
;脉冲计数第三个字节
buffer
DATA
32H
;8个字节显示缓冲区
EXTRN
CODE(Display8)
ORG
0000H
LJMP
STAR
ORG
000BH
LJMP
TimerT0
;T0计时中断处理入口
ORG
001BH
LJMP
CounterT1
;T1计数中断处理入口
ORG
0100H
STAR:
MOV
SP,#60H
MOV
TMOD,#01010001B
;T0定时,T1计数,方式1
MOV
TH0,#03CH
;50ms定时
MOV
TL0,#0B0H
MOV
Count50ms,#20
;20*50ms=1s
MOV
TH1,#00H;计数
MOV
TL1,#00H
MOV
PulseCount,#0
SETB
EA
SETB
ET1
SETB
ET0
SETB
TR0
SETB
TR1
STAR1:
JB
TR0,$
SETB
TR0
;刷新显示
SETB
TR1
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
STAR1
TimerT0:
MOV
TH0,#03CH
;50ms定时
MOV
TL0,#0B0H
DJNZ
Count50ms,TimerT0_exit
MOV
Count50ms,#20
CLR
TR0
CLR
TR1
MOV
R1,PulseCount
MOV
R2,TH1
MOV
R3,TL1
MOV
PulseCount,#0
MOV
TH1,#0
MOV
TL1,#0
TimerT0_exit:
RETI
CounterT1:
INC
PulseCount
RETI
;B4toD4子程序请参阅实验四、B1toB2、BlackDisplay子程序请参阅实验二
END
六、思考题
1、为什么测试较高频率信号时,数码管上显示的数据一直在变化?
2、为什么频率信号不能超过0.5MHZ?
硬件实验
实验一跑马灯实验
一、实验目的与要求
熟悉星研集成环境软件或熟悉KeilC51集成环境软件的使用方法。
熟悉MCS51汇编指令,能自己编写简单的程序,控制硬件。
二、实验设备
STAR系列实验仪一套、PC机一台
三、实验内容
1、熟悉星研集成环境软件或熟悉KeilC51集成环境软件的安装和使用方法。
2、照接线图编写程序:
使用P1口控制F5区的8个指示灯,循环点亮,瞬间只有一个灯亮。
2、观察实验结果,验证程序是否正确。
四、实验原理图
五、实验步骤
1、连线说明:
A3区:
JP51
——
F5区:
JP65
2、编写程序或运行参考程序。
3、实验结果:
通过F5区的LED指示灯(8个指示灯轮流点亮),观察实验的输出结果是否正确。
六、演示程序
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
SP,#60H
MOV
A,#0FFH
CLR
C
START1:
RLC
A
MOV
P1,A
ACALL
Delay
SJMP
START1
Delay:
MOV
R5,#2
;延时
Delay1:
MOV
R6,#0
Delay2:
MOV
R7,#0
DJNZ
R7,$
DJNZ
R6,Delay2
DJNZ
R5,Delay1
RET
END
如果读者使用星研集成环境软件,请考虑以下问题?
1、运行程序前,打开变量窗;
2、使用单步进入命令,运行到第六行后,运行过程中变量窗有何变化?
将鼠标停留在A、SP上一秒后,出现什么?
它与变量窗使用场合的区别?
3、第九行是调用延时子程序,如何进入延时子程序(使用单步进入命令)?
如何将延时子程序一下子运行完毕(使用单步命令;也可以将光标移到下一行,使用运行到光标处命令;)?
单步进入命令与单步命令有何区别?
4、运行几次后,在第十行设置一个断点,使用全速断点命令运行几次,观察运行结果,它与运行到光标处命令有何区别?
5、Delay是一个延时子程序,改变延时常数,使用全速运行命令,显示发生了什么变化?
6、观察寄存器,有哪几种方法?
1)在工作区窗的通用寄存器标签视中;
2)变量窗
3)鼠标停留在寄存器上
4)观察窗
5)寄存器窗
实验二74HC138译码器实验
一、实验目的与要求
1、掌握74HC138译码器的工作原理,熟悉74HC138译码器的具体运用连接方法,了解74HC138是如何译码的。
2、认真预习本节实验内容,尝试自行编写程序,填写实验报告
二、实验设备
STAR系列实验仪一套、PC机一台
三、实验内容
1、编写程序:
使用单片机的P1.0、P1.1、P1.2控制74HC138的数据输入端,通过译码产生8选1个选通信号,轮流点亮8个LED指示灯。
2、运行程序,验证译码的正确性。
四、实验原理图
五、实验步骤
1、连线说明:
C2区:
A、B、C
——
A3区:
P1.0、P1.1、P1.2
C2区:
G1、G2A、G2B
——
C1区:
VCC、GND、GND
C2区:
JP36
——
F5区:
JP65(LED指示灯)
2、调试程序,查看运行结果是否正确。
六、演示程序
;138译码器实验(跑马灯),P1.0--A,P1.1---B,P1.2--C,/G2B--GND,/G2A--GND
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
SP,#60H
CLR
A
;初值,第一次0位LED亮
START1:
MOV
P1,A
ACALL
DLTIME
INC
A
CLR
ACC.3
;A的值在0..7之间
SJMP
START1
DLTIME:
MOV
R5,#20
DLTIME1:
MOV
R6,#100
DLTIME2:
MOV
R7,#100
DJNZ
R7,$
DJNZ
R6,DLTIME2
DJNZ
R5,DLTIME1
RET
END
七、实验扩展及思考
在单片机系统中,74HC138通常用来产生片选信号,请读者考虑一下,应如何处理?
实验三8255控制交通灯实验
一、实验目的与要求
1、了解8255芯片的工作原理,熟悉其初始化编程方法以及输入、输出程序设计技巧。
学会使用8255并行接口芯片实现各种控制功能,如本实验(控制交通灯)等。
2、熟悉8255内部结构和与单片机的接口逻辑,熟悉8255芯片的3种工作方式以及控制字格式。
3、认真预习本节实验内
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 总汇
![提示](https://static.bingdoc.com/images/bang_tan.gif)