1、MCS-51单片机实验指导书 作者: 日期:2 个人收集整理 勿做商业用途MCS51单片机实验指导书主编陈永健 编者林建华 魏有法闽南理工学院实践教学中心 二0一0年九月 前 言 单片机实验是掌握编程应用的一门重要实践课程,为今后开展电子科技制作、创新设计以及研发打下坚实基础.学习本实验课程对巩固和加深课堂教学内容,提高学生实际工作技能,培养科学作风,为学习后续课程和从事实践技术工作奠定基础具有重要作用。为适应电子科学技术的迅猛发展和教学改革不断深入的需要,实验中心购置了新型单片机、微机接口一体化仿真实验箱,并编写了这本相应的实验指导书。 本书以单片机原理及应用课程教学基本要求中确定的教学实验
2、要求为基础,包括了单片机原理与接口技术课程全部实验内容.实验系统采用达爱思DAIS仿真集成开发环境、基于8032CPU的51单片机。MCS51单片机实验是基于汇编语言(助记符语言)的编程语言、是一门面向计算机的硬件的语言 ,学好本实验课程对今后学习KLC编程、VHDL、C+等高级语言打下扎实基础,为后继单片机课程的学习提供程序编程的基础. 实验内容的安排遵循由浅到深,由易到难的规律.考虑不同层次需要,既有测试、验证的内容,也有设计、研究的内容。实验只提供设计要求及程序思路(流程图),由学生自己完成方案选择、实验步骤及程序编写等,充分发挥学生的创造性和主动性。 在编写本书中,闽南理工学院实践中心
3、主任李梅审阅并提出许多宝贵意见,同时得到电子教研室林建华等老师的帮助与支持.在此表示中心感谢。 编 者:陈永健 2010年9月 MCS-51单片机实验指导本实验指导是为适应各大专、本科院校开设单片机原理与应用方面的课程设置需要而编写,供学生编程用.完成本实验指导中的实验,可使学生基本掌握MCS51单片机的结构原理、程序框图和实验步骤。免除了主讲教师和实验辅导老师为设计、准备调试实验线路和实验程序所需的工作量,节约宝贵的时间。 一、实验指导书中所列的实验程序已经固化到系统管理CPU中,在“P.”状态下,按动“0”键再按“EV/UN”键,将程序传送到以0000H为起始地址的RAM中。因实验程序中采
4、用子程序形式较多,要互相调用,所以必须把程序全部传送到实验系统中,对中断入口等地址的指令按照实验要求输入。其中MCS-51实验程序地址范围:00001FFFH,您可以通过系统自带的键盘显示输入各种命令运行系统RAM中的实验程序,显示实验结果完成各个实验项目。 二、实验接线图上的粗实线表示用户在实验时要用导线连接起来。 三、所有实验都是相互独立的,次序上也没有固定的先后关系,在使用本书进行教学时,教师可根据贵校(院)的教学要求,选择相应实验。四、对同一问题的解决办法往往不是唯一的欢迎用户在使用本书过程中提出最为优秀的实验方案,指示错误和不足,希望用户反馈给我们,以便及时修改.目 录第一部分 基础
5、性实验(软件实验)实验一清零程序1实验二 拆字与拼字程序3实验三 数据区传送子程序和数据排序实验6实验四 查找相同数个数9实验五 码型转换实验11实验六 八段数码管显示14实验七 键盘扫描显示实验18第二部分 综合设计性实验(硬件实验)实验八 P1口使用实验25实验九 中断控制实验31实验十 8255控制交通灯实验36实验十一 D/A输出方波41实验十二 A/D转换实验44实验十三 I/O口扩展实验49实验十四 外部存储器扩展实验52实验十五 步进电机实验56第三部分 附录附录一 Dais系统介绍60附录二 DaisMCS51开发软件使用说明62附录三 可编程接口芯片引脚图63 实验一 清零程
6、序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。二、实验内容把片内RAM的20H2FH的16个单元的内容清零。三、实验原理1、实验流程2、实验程序;将片内RAM的202F单元清零 org 0 clr a ;清零ACC mov r0,#0 ;计数器初值 mov r1,#20h ;RAM地址loop: mov r1,a ;将0送(R1) inc r1 inc r0 ;字节数加1 cjne r0,#16,loop;不到16个字节再清 sjmp $ end四、实验设备1、Dais-MCS51仿真开发系统2、微型计算机3、8031CPU实验板五、实验步骤及报告1、确认实验箱正常工作。2、在PC联
7、机状态下,点击“”,输入程序,并保存。3、编译、连接、装载,用连续或单步运行程序。4、运行结果检查:1)单步运行时,每走一步,可观察其运行结果,此程序单步运行时会出现问题,发现并解决它。2)连续运行状态下,应按“”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后在用相应的命令键观察与检查结果.5、记录观察片内RAM的20H2FH执行前后的结果及数据。6、记录汇编调试成功的程序并分析其设计思路,写出个人体会及收获。六、预习思考题修改程序,把片内RAM的20H2FH的内容改成0FFH.七、实验注意事项1、实验过程中禁止用手触摸集成芯片引脚或拨插芯片,未经允许不得私自更换CPU。
8、2、若有实验连线前应先关掉实验箱电源开关,待检查无误后方可通电。3、实验箱通电后打开计算机Dais-MCS51仿真开发系统并注意观察工具栏的联机图标,绿色图标代表无连接应检查通信电缆线是否接好(或在软件界面更换串口及波特率)。4、若程序汇编成功后,当前PC值未指定在第一条指令(即在第一条指令底色出现蓝色)将无法正常运行。实验二 拆字与拼字程序一、实验目的掌握汇编语言设计和调试方法.二、实验内容1、将片内RAM的20H内容拆开,高位送21H,低位送22H。2、将20H的低位、21H的低位送22H的高位、低位。三、实验原理1、实验流程2、实验程序(将程序补充完整并添加注释)拆字程序ORG 0MOV
9、 A,20h ANL A,#0FHMOV 21H,AMOV A,20HANL A, SJMP END拼字程序ORG 0MOV A,20HANL A,0FH MOV B,AMOV A,21HANL A, MOV 22H,ASJMP END 四、实验设备1、DaisMCS51仿真开发系统2、微型计算机3、8031CPU实验板五、实验步骤及报告1、确认实验箱正常工作。2、在PC联机状态下,点击“”,输入程序,并保存。3、编译、连接、装载,用连续或单步运行程序。4、运行结果检查:1)在单步运行时每走一步可观察其运行结果。2)在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用
10、户运行状态返回监控,然后再用相应的命令键观察与检查20002002h中内容变化情况。5、记录观察到的结果及数据,回答思考题。6、记录汇编调试成功的程序并分析其设计思路,写出个人体会及收获。六、预习思考题使用其它方法编程实现如用SWAP指令。七、实验注意事项1、实验过程中禁止用手触摸集成芯片引脚或拨插芯片,未经允许不得私自更换CPU。2、若有实验连线前应先关掉实验箱电源开关,待检查无误后方可通电。3、实验箱通电后打开计算机DaisMCS51仿真开发系统并注意观察工具栏的联机图标,绿色图标代表无连接应检查通信电缆线是否接好(或在软件界面更换串口及波特率)。4、若程序汇编成功后,当前PC值未指定在第
11、一条指令(即在第一条指令底色出现蓝色)将无法正常运行。实验三 数据区传送子程序和数据排序实验一、实验目的1、熟悉MCS-51指令系统,掌握程序设计方法。 2、掌握循环指令的使用,利用冒泡法进行数据处理.二、实验内容1、把片内RAM的20H起始的16逐步形成单元传送到30H地址空间. 2、编写并调试一个排序子程序,其功能为用冒泡法将内容RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。三、实验原理1、数据区传送实验流程2、数据排序流程图3、实验程序(将程序补充完整并添加注释) (1)数据区传送子程序 ORG 0MOV R0, MOV R1, MOV R7, LOOP:MOV A,R0
12、MOV ,A DJNZ R7,LOOPSJMP $END (2)数据排序实验 org 0 mov r3,50h ;起始地址start: mov a,r3 ;指针送r0 mov r0,a mov r7,#10h ;长度送r7 clr 00h ;标志位为0 mov a,r0ql2: inc r0 mov r2,a clr c mov 22h,r0 cjne a,22h,ql3 ;相等吗? setb cql3: mov a,r2 jc ql1 ;大于交换位置 setb 00h xch a,r0 dec r0 xch a,r0 inc r0 ;大于交换位置ql1: mov a,r0 djnz r7,q
13、l2 jb 00h,start ;一次循环中有交换继续 sjmp ;无交换退出 end四、实验设备1、DaisMCS51仿真开发系统2、微型计算机3、8031CPU实验板五、实验步骤及报告1、在PC联机状态下,点击“,输入程序,并保存。2、编译、连接、装载,用连续或单步运行程序。3、运行结果检查:1)在单步运行时每走一步可观察其运行结果。2)在连续运行状态下,应按“暂停图标或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查片内505Ah中内容是否按从小到大排列。4、记录实验前及实验后的结果及数据并以表格的形式列出.5、记录汇编调试成功的程序并分析其设
14、计思路,写出个人体会及收获。六、预习思考题修改程序把505Ah中内容按从小到大排列.七、实验注意事项1、实验过程中禁止用手触摸集成芯片引脚或拨插芯片,未经允许不得私自更换CPU.2、若有实验连线前应先关掉实验箱电源开关,待检查无误后方可通电。3、实验箱通电后打开计算机DaisMCS51仿真开发系统并注意观察工具栏的联机图标,绿色图标代表无连接应检查通信电缆线是否接好(或在软件界面更换串口及波特率)。4、若程序汇编成功后,当前PC值未指定在第一条指令(即在第一条指令底色出现蓝色)将无法正常运行。实验四 查找相同数个数一、实验目的熟悉汇编语言编程。二、实验内容在片内RAM的2000H200FH中查
15、出有几个字节是0,把数量放在30H中.三、实验原理1、程序流程2、实验程序(将程序补充完整并添加注释) org 0 mov r7,#16 ;查找16个字节 mov r1,00h mov r0,#20h;*;在此处填入程序;* sjmp $ end四、实验设备1、DaisMCS51仿真开发系统2、微型计算机3、8031CPU实验板五、实验步骤及报告1、在PC联机状态下,点击“”,输入程序,并保存.2、编译、连接、装载,用连续或单步运行程序。3、运行结果检查:1)单步运行时,每走一步,可观察其运行结果。2)在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回
16、监控,然后再用相应的命令键观察与检查30h中是几个单元数。六、预习思考题修改程序,查找其他内容。七、实验注意事项1、实验过程中禁止用手触摸集成芯片引脚或拨插芯片,未经允许不得私自更换CPU。2、若有实验连线前应先关掉实验箱电源开关,待检查无误后方可通电。3、实验箱通电后打开计算机DaisMCS51仿真开发系统并注意观察工具栏的联机图标,绿色图标代表无连接应检查通信电缆线是否接好(或在软件界面更换串口及波特率)。4、若程序汇编成功后,当前PC值未指定在第一条指令(即在第一条指令底色出现蓝色)将无法正常运行.实验五 码型转换实验一、实验目的1、掌握简单的数值转换算法,基本了解数值的各种表达方法。
17、2、了解BCD值和ASCII值的区别,掌握如何将BCD值转换成ASCII值,并学习如何查表进行数值转换及快速计算.二、实验内容1、将给定的一个二进制数,转换成二进制编码的十进制(BCD)码.将A的内容拆为三个BCD码,并存入CPU内部存储区20H开始的三个单元。2、将ACC的内容拆为二个ASCII码,并存入20H开始的二个单元。三、实验原理1、实验流程(1)二进制码转换到BCD码2、实验程序 (1)数制转换:二进制到BCD转换;将ACC拆为三个BCD码,并存入cup内部存储区20H开始的三个单元Result equ 20h org 0Start: mov a,123 ;置初值 call Bin
18、ToBCD sjmp $BinToBCD: mov b,100 div ab mov Result, ;除以100,得百位数 mov a,b mov b, div ab mov Result+1, ;余数除以10,得十位数 mov Result+2, ;余数为个位数 ret end(1) 数制转换:二进制到ASCII转换;将ACC拆为二个ASCII码,并存入20H开始的二个单元Result equ 20h org 0Start: mov a,1ah call BinToHex sjmp $BinToHex: mov dptr, ;暂存A swap a anl a, ;取高四位 ;查ASCII表
19、 mov Result,a mov a,b ;恢复A anl a,0fh ;取低四位 ;查ASCII表 mov Result+1, retASCIITab: ;定义数字对应的ASCII表 db 0123456789ABCDEF end四、实验设备1、Dais-MCS51仿真开发系统2、微型计算机3、8031CPU实验板五、实验步骤及报告(一)二进制到BCD转换1、在实验系统与PC联机状态下,编译、连接、下载。2、运行结果检查在单步运行时每走一步可观察其运行结果.在连续运行状态下,应按“暂停图标,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键检查存入20H开始的三个片内RAM单元。(
20、二)二进制到ASCII转换1、在实验系统与PC联机状态下,编译、连接、下载.2、运行结果检查在单步运行时每走一步可观察其运行结果。在连续运行状态下,应按“暂停图标”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键检查存入20H开始的二个片内RAM单元.六、预习思考题如何将BCD转换成二进制码?七、实验注意事项1、实验过程中禁止用手触摸集成芯片引脚或拨插芯片,未经允许不得私自更换CPU。2、单步运行时若有弹出反汇编窗口应检查通信串口。3、实验箱通电后打开计算机DaisMCS51仿真开发系统并注意观察工具栏的联机图标,绿色图标代表无连接应检查通信电缆线是否接好(或在软件界面更换串口及波
21、特率)。4、若程序汇编成功后,当前PC值未指定在第一条指令(即在第一条指令底色出现蓝色)将无法正常运行。实验六 八段数码管显示一、实验目的1、了解数码管动态显示的原理2、了解用总线方式控制数码管显示。二、实验内容熟利用实验系统提供的显示设备,动态显示一行数据。本实验系统提供了6位八段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。三、实验原理1、程序流程2、实验程序(将程序补充完整并添加注释);*;八段数码管显示程序;*cs8255 equ 0ffffh ;8255命令控制口outseg equ 0fffch ;字形控制口outbit equ 0fffdh ;字位/键扫
22、控制口LEDBuf equ 60h ;显示缓冲Num equ 70h ;显示的数据DelayT equ 75h ;延迟参数 org 0Start: mov sp,#40h mov Num,0 mov dptr,#CS8255 mov a,#88h ;命令字:A,B口输出 movx dptr,a ;8255初始化MLoop: inc Num mov a,Num mov b,a mov r0,#LEDBufFillBuf: mov a,b anl a,0fh mov dptr,LEDMap movc a,a+dptr ;数字转换成显示码 mov r0,a ;显示在码填入显示缓冲 inc r0 in
23、c b cjne r0,#LEDBuf+8,FillBuf mov DelayT,100DispAgain: call DisplayLED ;显示 djnz DelayT,DispAgain ljmp MLoopDelay: ;延时子程序 mov r7,0DelayLoop: djnz r7,DelayLoop djnz r6,DelayLoop retDisplayLED: mov r0,LEDBuf mov r1,#8 ;共8个LED八段管 mov r2,10000000b;从左边开始显示Loop: mov dptr,OUTBIT clr a movx dptr,a ;关所有八段管 mo
24、v a,r0 mov dptr,#OUTSEG movx dptr,a mov dptr,OUTBIT mov a,r2 movx dptr,a ;显示一位八段管 mov r6,01 call Delay mov a,r2 ;显示下一位 rr a mov r2,a inc r0 djnz r1,Loop mov dptr,#OUTBIT clr a movx dptr,a ;关所有八段管 retLedMap: ;八段管显示码 db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h db 080h,090h,088h,083h,0c6h,0a1h,086h,08eh
25、 end四、实验设备1、DaisMCS51仿真开发系统2、微型计算机3、8031CPU实验板五、实验步骤及报告1、在联机状态下,编译、连接、下载并用连续方式运行,利用实验系统的显示设备动态显示数据。2、按“暂停图标”,系统无条件退出该程序运行返回监控状态。3、分析数码显示原理,写出个人收获与体会。六、预习思考题画出实验电路原理图。七、实验注意事项1、实验过程中禁止用手触摸集成芯片引脚或拨插芯片,未经允许不得私自更换CPU。2、本实验只能用连续运行方式观察结果。3、实验箱通电后打开计算机DaisMCS51仿真开发系统并注意观察工具栏的联机图标,绿色图标代表无连接应检查通信电缆线是否接好(或在软件
26、界面更换串口及波特率).4、若程序汇编成功后,当前PC值未指定在第一条指令(即在第一条指令底色出现蓝色)将无法正常运行。实验七 键盘扫描显示实验一、实验目的1、掌握键盘和显示器的接口方法和编程方法。2、掌握键盘扫描和LED八段码显示器的工作原理。二、实验内容本实验系统自带一个84的键盘,在判断有键按下后,要有一定的延时,防止键盘抖动。在上一个实验的基础上,利用实验系统提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。实验程序可分成三个模块。键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。显示模块:将显示单元的内容在显示器上动态显示.
27、主程序:调用键输入模块和显示模块。三、实验原理1、程序流程图2、实验程序(将程序补充完整并添加注释);*;键盘扫描显示实验;*cs8255 equ 0ffffh ;8255命令控制口outseg equ 0fffch ;字形控制口outbit equ 0fffdh ;字位/键扫控制口in_key equ 0fffeh ;键盘读入口ledbuf equ 7eh ;显示缓冲/回车前光标位置ledbufr equ 77h ;回车后光标位置blnpnt equ 50h ;闪动指针单元 org 0ledgd: mov sp,60h mov dptr,cs8255 mov a,89h ;命令字:a,b输出
28、、c输入 movx dptr,a ;8255初始化;清显示缓冲单元ldegd: mov blnpnt,#ledbuf mov a,10h mov r0,ledbufrlegs: mov r0,a inc r0 cjne r0,#ledbuf,legs inc a ;送待令符“p。 mov r0,aledt: call xeg2 ;调闪动显示、键扫消抖子程序 cjne a,10h,leg0;比较键值leg0: jnc ldegd ;如果是功能键则返回闪动的“P.” acall xeg3 ;送当前led光标闪动单元 sjmp ledt ;完成送数操作返回显示键扫入口;刷新光标单元调正闪动指针xeg
29、3: mov r4,a ;暂存键值 mov r0,#blnpnt ;光标单元 mov a,r0 mov r1,a mov a,r4 ;恢复键值 mov r1,a mov a,#ledbufr ;回车后光标位置 cjne a,01h,xg30 ;r1 dec r1 mov a,ledbuf ;回车前光标位置 sjmp xg31xg30: dec r1 mov a,r1xg31: mov r0,a ret;闪动显示子程序xeg2: mov r6,#80hxge0: acall xgel ;显示、键扫消抖程序 jnb acc。5,xgx0 djnz r6,xge0 mov r0,blnpnt mov
30、 a,r0 mov r0,a mov a,r0 mov r7,a mov a,#10h mov r0,a mov r6,#30hxge1: acall xgel jnb acc。5,xgex1 ;显示、键扫消抖程序 djnz r6,xge1 mov a,r7 mov r0,a sjmp xeg2xgex1: mov r6,a mov a,r7 mov r0,a mov a,r6xgx0: ret;显示、键扫消抖程序xgel: call disp ;显示 call getkey ;得到键盘扫描码 mov r4,a ;键消抖处理程序 mov r1,48h mov a,r1 mov r2,a inc
31、 r1 mov a,r1 mov r3,a mov a,r4 xrl a,r3 mov r3,04h ;r4 mov r4,02h ;r2 jz xge10 mov r2,88h mov r4,88h ;键盘消抖延迟参数xge10: dec r4 mov a,r4 xrl a,82h jz xge11 mov a,r4 xrl a,0eh jz xge11 mov a,r4 jz xge12 mov r4,#20h dec r2 sjmp xge13xge12: mov r4,0fhxge11: mov r2,04h ;r4 nop nop mov r4,03h ;r3xge13: mov r
32、1,#48h mov a,r2 mov r1,a inc r1 mov a,r3 mov r1,a mov a,r4 jb acc.5,xg113 mov dptr,keycode movc a,a+dptrxg113: ret;显示子程序disp: push dpl push dph setb rs1 mov r0,#ledbuf mov r2,#80h mov dptr,#ledmapdisp2: mov a,r0 movc a,a+dptr push dpl push dph mov dptr,#outseg movx dptr,a mov a,r2 mov dptr,#outbit m
33、ovx dptr,a pop dph pop dpl mov r3,0 djnz r3, ;闪动延迟 clr c rrc a ;右移显示 mov r2,a dec r0 jnz disp2 clr rs1 pop dph pop dpl ret;键扫子程序getkey: setb rs1 mov r2,0feh mov r3,#08h mov r0,#00hlgep1: push dpl push dph mov dptr,outbit mov a,r2 movx dptr,a rl a mov r2,a mov dptr,in_key movx a,dptr pop dph pop dpl cpl a anl a,#0fh jnz lgep0 inc r0 djnz r3,lgep1xgep33: mov a,20hxgep3: mov r2,a mov a,0fh push dpl push dph mov dptr,#outbit movx dptr,a pop dph pop dpl mov a,r2 clr rs1 sjmp returnlgep0: cpl a jb acc.0,xgep0 mov a,#00h sjmp lgep
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100