单片机原理与应用实验指导书(202203)-图文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理与应用实验指导书(202203)-图文实验指导书
南通大学电气工程学院
自动化系
2022年3月
前言
单片机目前已广泛应用在智能仪表、工业控制、家用电器等各个领域,成为现代电子系统的一个极其重要的组成部分,对于电类专业学生来说,
掌握单片机知识,具备基本应用技能,才能符合当前社会对专业人才的要求。
单片机是一门应用性极强的课程,学生在掌握基本理论知识的基础上,更要通过实验训练,提高其调试动手能力,学会解决具体问题的思路和手段,具备初步的系统设计和调试能力。
因此,为了更好地做好单片机课程的软硬件实验,特编写本实验指导书,书中叙述了各实验的目的、要求,对于设计性实验,给出了列出了接
线图、程序结构框图和清单。
学生按要求完成本实验指导书中的实验,可
基本掌握MCS-51单片机的结构原理、接口技术以及程序设计技巧。
另外:
一、所有实验都是相互独立的,次序上也没有固定的先后关系,在使
用本书进行教学时,教师可根据教学要求,选择相应实验。
二、对同一问题的解决方法往往不是唯一的,欢迎各位指导教师在使
用本实验指导书的过程中提出更完善的实验方案,指出书中的错误和不足,并希望大家反馈给我们,以便及时修改。
I
目录
第一章集成开发环境简介..........................................1第二章演示程序......................................................9第三章实验项目 (15)
实验一简单程序设计实验.............................................15实验二I/O 口实验......................................................18实验三定时器实验......................................................20实验四A/D、D/A转换实验..........................................21实验五并行接口扩展实验 (25)
II
第一章集成开发环境简介
SuperICES-5180C51单片机实验仪使用当前流行的KeilC51开发软件,采用uViion2集成开发环境。
1.1KeilC51简介
uViion2集成开发环境如图1-1所示,有编辑、项目、输出等3个大
窗口
和File、Edit、View、Project、Debug、Periheral、Tool、SVCS、Window、Help等下拉菜单。
项目名称栏
工具菜单栏
快捷图标
工程项目窗口编辑区输出信息窗变量观察区存储器观察
图1-1uViion2集成开发环境
1.2.1创建、保存工程文件
在uViion2环境下,使用工程来管理各个文件。
为了开始新的工程,选择“Project/NewProjiect”选项,出现如图1-2所示界面。
图1-2创建新工程
然后选择此新工程要保存的路径,键入项目名称并保存,项目名称将会出现在集成环境的左上端,名称后缀为“.uv2”,如图1-3所示。
注意项目名称最好不要超过8个字符、尽量不采用中文,与软件编程时变量的命名习惯一致。
图1-3保存新工程
2
1.2.2MCU选择
接着系统出现“SelectDeviceforTarget”界面,要求选择目标硬件系统的MCU,如图1-4所示。
选择要开发的目标硬件系统的MCU,点击“确定”即可。
对于SuperICES-51实验仪,应选择Atlmel的AT89C51。
1.2.3添加源文件
如图1-5所示,在“Target1/SourceGroup1”上点击右键,选择“/AddFiletoGroupSourceGroup1”后,出现如图1-6所示界面,添加所要的源程序。
源程序包括“某.C”、“某.ASM”、“某.LIB”、“某.A51”等。
3
图1-4MCU选择
图1-5添加源文件
图1-6选择待添加的源文件
4
1.2.4目标硬件系统配置
源程序添加完毕后,进行“OptionforTarget”的设定。
在菜单栏中,选择“Project/OptionforTarget…”,出现如图1-7所示界面。
点击Target选项卡,输入目标硬件系统的晶振频率,本实验仪为
11.0592MHz;
点击Output选项卡,选中CretHe某File选项,在编译时系统将会
自动生成目标代码文件某.HE某;
点击Debug选项卡,如图1-8所示,选择仿真模式等。
图1-7目标硬件系统配置
5
图1-8debug配置
uViion2的仿真模式分为UeSimulator(软件仿真)和Ue(硬件仿真)2种。
其中UeSimulator选项是将uViion2调试器设置成软件模拟仿真模式,在此模式下不需要实际的目标硬件就可以模拟8051单片机的很多功能。
UeSimulator中的“LoadApplicationatStart”是装入程序的复选框,
“Gotillmain()”是表示从应用程序的主函数开始执行的复选框。
除非有
特殊情况,一般都同时使用这两复选框。
Ue选项有高级的GDI驱动(ICES仿真器)和KeilMonitor-51驱动。
运用此功能可以把KeilC51嵌入到自己的系统中去,从而实现在目标硬件
上调试程序。
实验仪选择“uekeilMonitor-51Driver”。
选择“loadApplicationattart”,在启动时直接装载程序,选择“Gotillmain”,C51开发时,装载后直接运行到main函数。
6
硬件仿真模式下还需配置波特率等,点击“Setting”选项,如图1-
9所示。
选择“erialinterrupt”,在前面打勾,否则装载过程中,仿真器会
发出“嘀”一声长声报警,仿真结果将可能不正确。
选择正确的串口号,波特率最高为38400;建议只选cachecode。
使用“Project”下拉菜单中的编译命令,“BuildTarget”(在项目
窗口中的修改过的程序;“RebuildallTargetFile”(所有的源程序文件。
)只编译和连接
图1-9串口等配置
)编译和连接项目里
7
编译等无误后,使用菜单栏中的“Debug”下“/tart/topDebugSeion”或使用快捷方式(
图1-10硬件调试系统界面
)进入硬件调试系统,如图1-10所示。
“Debug”下“Step”或用快捷方式()进行单步(进子程序)调试;
)进行单步(不进子程序)调试;
)进行运行到当前光标处
“Debug”下“StepOver”或用快捷方式(
“Debug”下“Runtocurorline”或用快捷方式(调试;
“Debug”下“Go”或用快捷方式(
)进行全速运行,直到下一个有效断点;
“Debug”下“/tart/topDebugSeion”进入、退出硬件调试系统环境。
另外,“Debug”下还有“toprunning”、“rt”等操作。
8
第二章演示程序
为了更好地熟悉uViion2集成开发环境仿真开发系统的应用,本指导
书提供了一个完整的程序编译、调试例子,详细说明集成环境下的各种操作。
程序内容:将1~10十个数相加,并把其和放入内部RAM30H单元。
这个问题有好几种算法,如果单纯从算法上来说,下面所列算法并不
是最优的,因为其目的在于让你熟悉仿真系统的各种操作。
算法介绍:
1.加数、被加数、和最终单元(SUM)首先设置初始值,分别为1、0、0,加法次数单元(R2)设为10;
2.每次加法所得中间结果存放在被加数单元中(累加器ACC),同时将加数单元增1;
3.做完一次加法后,加法次数单元减1,并判断是否已为0(即已做完10次加法),如果不为0,继续做下次加法,若为0,则将累加器内容赋值给和最终单元;
4.做完后,程序原地循环。
算法流程图及源程序分别如下:
9
结果放入和最终单元N已做完10次加法?Y加数增1被加数+加数,结果放在被加数(和中间结果)单元加数、被加数(和中间结果)、和最终结果单元、加法次数单元初始化堆栈初始化10
源程序:
;变量DATA_REG中的内容为加数(1-10);
;ACC中的内容为被加数,同时也是每一次加法后的和中间结果存放单元;;做完10次加法后,再将ACC内容放入指定的和单元SUM中。
;某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某DATA_REGSUM EQUEQU
31H30H
;定义加数单元;定义和单元
;========================================================= ORG
0000H
;复位后PC指针
LJMPMAINORG
0100H
;从程序存储空间0100H单元放程序
;---------------------------------------------------------MAIN:
MOVDATA_REG,#1MOVSUM,#00HMOVR2,#10CLRCLR
AC
;被加数+加数,结果放入ACC;加数增1
;10次加法未做完,继续做
;10次加法已做完,将和放入SUM单元;原地循环
;加数单元初始值为1;和单元初始值为0;加法循环次数为10被加数单元初始值为0;进位初始值为0
MOVSP,#70H
;堆栈指针从复位后的07H调整到70H
ADD_LOOP:
ADDCA,DATA_REGINC
DATA_REG
DJNZR2,ADD_LOOPMOVSUM,ALJMP$
;某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某END
11
2.1打开仿真环境,新建一个工程文件
按第一章介绍建立一个工程名为“tet.uv2”的工程文件,选择目标硬件系统的MCU为Atlmel的AT89C51;目标硬件系统配置选择“UeSimulator”,其余配置参考第一章介绍。
2.2输入源程序
单击菜单“File/New”,出现源程序编辑窗口,输入源程序,以“某.am”保存,选择“/AddFiletoGroupSourceGroup1”,将此源程序添加到工程中,如图2-1所示。
2.3源程序编译、连接
单击“project/rebuildalltargetfile”菜单或者按按纽,仿真环境则对源文件进行编译连接,视程序正确与否,有两种编译结果:若程序无误,编译通过,出现如图2-2所示的编译信息窗口,说明编译成功。
图2-1包含源程序的工程界面
12
图2-2编译成功的信息窗口
若源程序有误,则出现如下的编译连接信息窗口,说明编译错误。
可
双击错误信息,则在源文件编辑窗口中自动显示出错信息所在行。
2.4程序调试
图2-3编译不成功的信息窗口
源程序编译通过并不代表程序就一定正确,这只能说明程序已经没有
语法上的错误了,至于在算法、流程上是否正确,则需要对程序进行调试,如果程序运行结果符合事先设计的算法、流程,那么这才能说编写的程序
是正确的。
初学者很容易犯急噪的毛病,即程序编译通过后,急着让程序连续运行,若运行通过(即结果正确),则认为程序就正确了,其实,这样做并
不能说明程序完全正确,有时一个程序对于某些初始条件,可以得到正确
结果,而初始条件改变后,却发现结果错误。
程序调试的一般做法是:
编译、连接通过后,不要急于让程序连续运行,而是先进行手动的单
步调试,随时观察各个变量、RAM单元、流程跳转等是否符合算法规定,
排除各种非语法性错误,直至程序完全正确;
对于复杂程序,必须设计成模块化结构,调试时一个一个模块单独调试,每个模块均正确后,再进行整个程序的调试。
在调试过程中,充分利用断点、变量窗口、寄存器窗口、内部RAM窗
口等各种工具,提高程序调试效率。
13
编译通过后,使用菜单栏中的“Debug”下“/tart/topDebugSeion”
或使用快捷方式(
为了观察每一次加法过程的变化,可通过“View/MemoryWindow”打
开存储器观察窗口,在“Addre”栏中输入“D:某某H”(某某为地址),观察内部RAM各单元变化情况。
“Addre”栏中输入“D”表示内部RAM,“某”表示外部RAM,“C”
表示程序存储空间。
可以用“Debug”选项下各种调试手段调试程序,如单步(进子程序)、单步(不进子程序)、运行到当前光标处、断点运行、全速运行等,以及停止、复位等等,以便进一步熟悉仿真系统的各种操作。
图2-4程序调试界面
)进入硬件调试系统,如图2-4所示。
14
第三章实验项目
实验一简单程序设计实验
一、实验目的
掌握uViion2IDE单片机集成开发软件的应用,熟悉单片机仿真开发
环境,掌握基本的单片机软件调试方法,为后续实验做好准备。
掌握单片机内部RAM之间、内外RAM之间、外部RAM之间的数据传送
操作;掌握MCS-51汇编语言程序设计方法。
二、实验内容
1、置数程序
把2000H~20FFH的内容全部置成55H。
(1)实验程序框图(2)实验步骤
用连续或单步方式运行程序,
检查2000~20FF单元中程序执行前后的内容变化。
(3)思考
假使把2000H~20FFH中的内容改成FFH,如何修改程序。
DPTR+1,R0+1开始R0=0055H送2000HR0=FFHY结束N15
2、拆字程序
把2000H的内容拆开,高位送2001H低位,低位送2002H低位,
2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。
(1)实验程序框图
(2)实验步骤
用连续或单步方式运行程序,检查2000H~2002H单元中内容变化情况。
(3)思考
如何用断点方式调试本程序。
结束2000H内容送A高低位交换,屏蔽高位后送2001H2000H内容送A屏
蔽高位后送2002H开始16
3、内部、外部RAM数据传送程序
按以下要求自行设计程序流程图,编写、调试程序。
(1)内部RAM之
间数据传送;
将内部RAM40H~4FH单元内容传送到内部RAM60H~6FH单元中。
源数据(首址存放在R2单元中);目的数据(首址存放在R4单元中);数据字
节数存放在R6单元中。
(2)内外RAM之间数据传送;
将内部RAM40H~4FH单元内容传送到外部RAM2040H~204FH单元中。
源
数据(首址存放在R2单元中);目的数据(首址存放在DPTR0中);数
据字节数存放在R6单元中。
(3)外RAM之间数据传送;
将外部RAM1000H~1111H单元内容传送到外部RAM2000H~2111H单元中。
源数据(首址存放在DPTR0中);目的数据(首址存放在DPTR1中);数据字节数存放在R6.R7单元中。
17。