MCS51单片机实验指导书Word格式.docx
《MCS51单片机实验指导书Word格式.docx》由会员分享,可在线阅读,更多相关《MCS51单片机实验指导书Word格式.docx(60页珍藏版)》请在冰豆网上搜索。
实验六八段数码管显示14
实验七键盘扫描显示实验18
第二部分综合设计性实验(硬件实验)
实验八P1口使用实验25
实验九中断控制实验31
实验十8255控制交通灯实验36
实验十一D/A输出方波41
实验十二A/D转换实验44
实验十三I/O口扩展实验49
实验十四外部存储器扩展实验52
实验十五步进电机实验56
第三部分附录
附录一Dais系统介绍60
附录二DaisMCS-51开发软件使用说明62
附录三可编程接口芯片引脚图63
实验一清零程序
一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容
把片内RAM的20H~2FH的16个单元的内容清零。
Forpersonaluseonlyinstudyandresearch;
notforcommercialuse
三、实验原理
1、实验流程
2、实验程序
;
将片内RAM的20~2F单元清零
org0
clra;
清零ACC
movr0,#0;
计数器初值
movr1,#20h;
RAM地址
loop:
mov@r1,a;
将0送(R1)
incr1
incr0;
字节数加1
cjner0,#16,loop;
不到16个字节再清
sjmp$
end
四、实验设备
1、Dais-MCS51仿真开发系统
2、微型计算机
3、8031CPU实验板
五、实验步骤及报告
1、确认实验箱正常工作。
2、在PC联机状态下,点击“
”,输入程序,并保存。
3、编译、连接、装载,用连续或单步运行程序。
4、运行结果检查:
1)单步运行时,每走一步,可观察其运行结果,此程序单步运行时会出现问题,发现并解决它。
2)连续运行状态下,应按“
”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后在用相应的命令键观察与检查结果。
5、记录观察片内RAM的20H~2FH执行前后的结果及数据。
6、记录汇编调试成功的程序并分析其设计思路,写出个人体会及收获。
六、预习思考题
修改程序,把片内RAM的20H~2FH的内容改成0FFH。
七、实验注意事项
1、实验过程中禁止用手触摸集成芯片引脚或拨插芯片,未经允许不得私自更换CPU。
2、若有实验连线前应先关掉实验箱电源开关,待检查无误后方可通电。
3、实验箱通电后打开计算机Dais-MCS51仿真开发系统并注意观察工具栏的联机图标,绿色图标代表无连接应检查通信电缆线是否接好(或在软件界面更换串口及波特率)。
4、若程序汇编成功后,当前PC值未指定在第一条指令(即在第一条指令底色出现蓝色)将无法正常运行。
实验二拆字与拼字程序
一、实验目的
掌握汇编语言设计和调试方法。
1、将片内RAM的20H内容拆开,高位送21H,低位送22H。
2、将20H的低位、21H的低位送22H的高位、低位。
2、实验程序(将程序补充完整并添加注释)
拆字程序
ORG0
MOVA,20h
ANLA,#0FH
MOV21H,A
MOVA,20H
ANLA,
SJMP$
END
拼字程序
MOVA,20H
ANLA,#0FH
MOVB,A
MOVA,21H
ANLA,
MOV22H,A
1)在单步运行时每走一步可观察其运行结果。
2)在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查2000~2002h中内容变化情况。
5、记录观察到的结果及数据,回答思考题。
使用其它方法编程实现如用SWAP指令。
实验三数据区传送子程序和数据排序实验
1、熟悉MCS-51指令系统,掌握程序设计方法。
2、掌握循环指令的使用,利用冒泡法进行数据处理。
1、把片内RAM的20H起始的16逐步形成单元传送到30H地址空间。
2、编写并调试一个排序子程序,其功能为用冒泡法将内容RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。
1、数据区传送实验流程
2、数据排序流程图
3、实验程序(将程序补充完整并添加注释)
(1)数据区传送子程序
ORG0
MOVR0,
MOVR1,
MOVR7,
LOOP:
MOVA,@R0
MOV,A
DJNZR7,LOOP
(2)数据排序实验
movr3,#50h;
起始地址
start:
mova,r3;
指针送r0
movr0,a
movr7,#10h;
长度送r7
clr00h;
标志位为0
mova,@r0
ql2:
incr0
movr2,a
clrc
mov22h,@r0
cjnea,22h,ql3;
相等吗?
setbc
ql3:
mova,r2
jcql1;
大于交换位置
setb00h
xcha,@r0
decr0
ql1:
djnzr7,ql2
jb00h,start;
一次循环中有交换继续
sjmp$;
无交换退出
1、在PC联机状态下,点击“
2、编译、连接、装载,用连续或单步运行程序。
3、运行结果检查:
2)在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查片内50~5Ah中内容是否按从小到大排列。
4、记录实验前及实验后的结果及数据并以表格的形式列出。
5、记录汇编调试成功的程序并分析其设计思路,写出个人体会及收获。
修改程序把50~5Ah中内容按从小到大排列。
实验四查找相同数个数
熟悉汇编语言编程。
在片内RAM的2000H-200FH中查出有几个字节是0,把数量放在30H中。
1、程序流程
org0
movr7,#16;
查找16个字节
movr1,#00h
movr0,#20h
*************************************
在此处填入程序
1)单步运行时,每走一步,可观察其运行结果。
2)在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查30h中是几个单元数。
修改程序,查找其他内容。
实验五码型转换实验
1、掌握简单的数值转换算法,基本了解数值的各种表达方法。
2、了解BCD值和ASCII值的区别,掌握如何将BCD值转换成ASCII值,并学习如何查表进行数值转换及快速计算。
1、将给定的一个二进制数,转换成二进制编码的十进制(BCD)码。
将A的内容拆为三个BCD码,并存入CPU内部存储区20H开始的三个单元。
2、将ACC的内容拆为二个ASCII码,并存入20H开始的二个单元。
(1)二进制码转换到BCD码
(1)数制转换:
二进制到BCD转换
将ACC拆为三个BCD码,并存入cup内部存储区20H开始的三个单元
Resultequ20h
Start:
mova,#123;
置初值
callBinToBCD
BinToBCD:
movb,#100
divab
movResult,;
除以100,得百位数
mova,b
movb,
movResult+1,;
余数除以10,得十位数
movResult+2,;
余数为个位数
ret
(1)数制转换:
二进制到ASCII转换
将ACC拆为二个ASCII码,并存入20H开始的二个单元
mova,#1ah
callBinToHex
BinToHex:
movdptr,
;
暂存A
swapa
anla,;
取高四位
;
查ASCII表
movResult,a
mova,b;
恢复A
anla,#0fh;
取低四位
movResult+1,
ASCIITab:
;
定义数字对应的ASCII表
db'
09ABCDEF'
(一)二进制到BCD转换
1、在实验系统与PC联机状态下,编译、连接、下载。
2、运行结果检查
⑴在单步运行时每走一步可观察其运行结果。
⑵在连续运行状态下,应按“暂停图标”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键检查存入20H开始的三个片内RAM单元。
(二)二进制到ASCII转换
⑵在连续运行状态下,应按“暂停图标”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键检查存入20H开始的二个片内RAM单元。
如何将BCD转换成二进制码?
2、单步运行时若有弹出反汇编窗口应检查通信串口。
实验六八段数码管显示
1、了解数码管动态显示的原理
2、了解用总线方式控制数码管显示。
熟利用实验系统提供的显示设备,动态显示一行数据。
本实验系统提供了6位八段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
**********************************************
八段数码管显示程序
cs8255equ0ffffh;
8255命令控制口
outsegequ0fffch;
字形控制口
outbitequ0fffdh;
字位/键扫控制口
LEDBufequ60h;
显示缓冲
Numequ70h;
显示的数据
DelayTequ75h;
延迟参数
movsp,#40h
movNum,#0
movdptr,#CS8255
mova,#88h;
命令字:
A,B口输出
movx@dptr,a;
8255初始化
MLoop:
incNum
mova,Num
movb,a
movr0,#LEDBuf
FillBuf:
anla,#0fh
movdptr,#LEDMap
movca,@a+dptr;
数字转换成显示码
mov@r0,a;
显示在码填入显示缓冲
incb
cjner0,#LEDBuf+8,FillBuf
movDelayT,#100
DispAgain:
callDisplayLED;
显示
djnzDelayT,DispAgain
ljmpMLoop
Delay:
延时子程序
movr7,#0
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
DisplayLED:
movr1,#8;
共8个LED八段管
movr2,#b;
从左边开始显示
Loop:
movdptr,#OUTBIT
clra
关所有八段管
movdptr,#OUTSEG
movx@dptr,a
显示一位八段管
movr6,#01
callDelay
mova,r2;
显示下一位
rra
djnzr1,Loop
LedMap:
八段管显示码
db0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h
db080h,090h,088h,083h,0c6h,0a1h,086h,08eh
1、在联机状态下,编译、连接、下载并用连续方式运行,利用实验系统的显示设备动态显示数据。
2、按“暂停图标”,系统无条件退出该程序运行返回监控状态。
3、分析数码显示原理,写出个人收获与体会。
画出实验电路原理图。
2、本实验只能用连续运行方式观察结果。
实验七键盘扫描显示实验
1、掌握键盘和显示器的接口方法和编程方法。
2、掌握键盘扫描和LED八段码显示器的工作原理。
本实验系统自带一个8×
4的键盘,在判断有键按下后,要有一定的延时,防止键盘抖动。
在上一个实验的基础上,利用实验系统提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。
实验程序可分成三个模块。
①键输入模块:
扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
②显示模块:
将显示单元的内容在显示器上动态显示。
③主程序:
调用键输入模块和显示模块。
1、程序流程图
键盘扫描显示实验
in_keyequ0fffeh;
键盘读入口
ledbufequ7eh;
显示缓冲/回车前光标位置
ledbufrequ77h;
回车后光标位置
blnpntequ50h;
闪动指针单元
ledgd:
movsp,#60h
movdptr,#cs8255
mova,#89h;
a,b输出、c输入
清显示缓冲单元
ldegd:
movblnpnt,#ledbuf
mova,#10h
movr0,#ledbufr
legs:
mov@r0,a
cjner0,#ledbuf,legs
inca;
送待令符“p.”
ledt:
callxeg2;
调闪动显示、键扫消抖子程序
cjnea,#10h,leg0;
比较键值
leg0:
jncldegd;
如果是功能键则返回闪动的“P.”
acallxeg3;
送当前led光标闪动单元
sjmpledt;
完成送数操作返回显示键扫入口
刷新光标单元调正闪动指针
xeg3:
movr4,a;
暂存键值
movr0,#blnpnt;
光标单元
movr1,a
mova,r4;
恢复键值
mov@r1,a
mova,#ledbufr;
cjnea,01h,xg30;
r1
decr1
mova,#ledbuf;
回车前光标位置
sjmpxg31
xg30:
mov