单片机原理与应用实验指导书xixi03副本1Word下载.docx
《单片机原理与应用实验指导书xixi03副本1Word下载.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用实验指导书xixi03副本1Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
二、对同一问题的解决方法往往不是唯一的,欢迎各位指导教师在使用本实验指导书的过程中提出更完善的实验方案,指出书中的错误和不足,并希望大家反馈给我们,以便及时修改。
目录
第一章集成开发环境简介……………………………………1
第二章演示程序………………………………………………9
第三章实验项目………………………………………………15
实验一简单程序设计实验………………………………………15
实验二I/O口实验………………………………………………18
实验三定时器实验………………………………………………20
实验四A/D、D/A转换实验……………………………………21
实验五并行接口扩展实验………………………………………25
第一章集成开发环境简介
SuperICES-5180C51单片机实验仪使用当前流行的KeilC51开发软件,采用uVision2集成开发环境。
1.1KeilC51简介
KeilC51软件是德国Keil公司开发的功能完善的C51开发软件,近年来在国内得到了迅速普及。
Keil包括以下几个部分:
uVision2IDE、C51编译器、A51汇编器、LIB库管理器、BL51连接器/定位器、uVision硬件调试器、RTX51实时多任务操作系统。
Keil软件的最新版本是7.50。
用户可以向Keil公司或国内代理商购买正版软件或索取Demo版本,也可以直接到Keil公司网站()下载。
1.2uVision2集成开发环境
uVision2集成开发环境如图1-1所示,有编辑、项目、输出等3个大窗口和File、Edit、View、Project、Debug、Periherals、Tools、SVCS、Windows、Help等下拉菜单。
1.2.1创建、保存工程文件
在uVision2环境下,使用工程来管理各个文件。
为了开始新的工程,选择“Project/NewProjiect”选项,出现如图1-2所示界面。
然后选择此新工程要保存的路径,键入项目名称并保存,项目名称将会出现在集成环境的左上端,名称后缀为“.uv2”,如图1-3所示。
注意项目名称最好不要超过8个字符、尽量不采用中文,与软件编程时变量的命名习惯一致。
1.2.2MCU选择
接着系统出现“SelectDeviceforTarget”界面,要求选择目标硬件系统的MCU,如图1-4所示。
选择要开发的目标硬件系统的MCU,点击“确定”即可。
对于SuperICES-51实验仪,应选择Atlmel的AT89C51。
1.2.3添加源文件
如图1-5所示,在“Target1/SourceGroup1”上点击右键,选择“/AddFilestoGroup‘SourceGroup1’”后,出现如图1-6所示界面,添加所要的源程序。
源程序包括“*.C”、“*.ASM”、“*.LIB”、“*.A51”等。
1.2.4目标硬件系统配置
源程序添加完毕后,进行“OptionforTarget”的设定。
在菜单栏中,选择“Project/OptionforTarget…”,出现如图1-7所示界面。
点击Target选项卡,输入目标硬件系统的晶振频率,本实验仪为11.0592MHz;
点击Output选项卡,选中CrestHexFile选项,在编译时系统将会自动生成目标代码文件*.HEX;
点击Debug选项卡,如图1-8所示,选择仿真模式等。
uVision2的仿真模式分为UseSimulator(软件仿真)和Use(硬件仿真)2种。
其中UseSimulator选项是将uVision2调试器设置成软件模拟仿真模式,在此模式下不需要实际的目标硬件就可以模拟8051单片机的很多功能。
UseSimulator中的“LoadApplicationatStart”是装入程序的复选框,“Gotillmain()”是表示从应用程序的主函数开始执行的复选框。
除非有特殊情况,一般都同时使用这两复选框。
Use选项有高级的GDI驱动(ICES仿真器)和KeilMonitor-51驱动。
运用此功能可以把KeilC51嵌入到自己的系统中去,从而实现在目标硬件上调试程序。
实验仪选择“usekeilMonitor-51Driver”。
选择“loadApplicationatstart”,在启动时直接装载程序,选择“Gotillmain”,C51开发时,装载后直接运行到main函数。
硬件仿真模式下还需配置波特率等,点击“Settings”选项,如图1-9所示。
选择“serialinterrupt”,在前面打勾,否则装载过程中,仿真器会发出“嘀”一声长声报警,仿真结果将可能不正确。
选择正确的串口号,波特率最高为38400;
建议只选cachecode。
1.2.5程序编译、连接与下载
使用“Project”下拉菜单中的编译命令,“BuildTarget”(
)只编译和连接在项目窗口中的修改过的程序;
“RebuildallTargetFile”(
)编译和连接项目里所有的源程序文件。
编译等无误后,使用菜单栏中的“Debug”下“/start/stopDebugSession”或使用快捷方式(
)进入硬件调试系统,如图1-10所示。
“Debug”下“Step”或用快捷方式(
)进行单步(进子程序)调试;
“Debug”下“StepOver”或用快捷方式(
)进行单步(不进子程序)调试;
“Debug”下“Runtocursorline”或用快捷方式(
)进行运行到当前光标处调试;
“Debug”下“Go”或用快捷方式(
)进行全速运行,直到下一个有效断点;
“Debug”下“/start/stopDebugSession”进入、退出硬件调试系统环境。
另外,“Debug”下还有“stoprunning”、“rst”等操作。
第二章演示程序
为了更好地熟悉uVision2集成开发环境仿真开发系统的应用,本指导书提供了一个完整的程序编译、调试例子,详细说明集成环境下的各种操作。
程序内容:
将1~10十个数相加,并把其和放入内部RAM30H单元。
这个问题有好几种算法,如果单纯从算法上来说,下面所列算法并不是最优的,因为其目的在于让你熟悉仿真系统的各种操作。
算法介绍:
1.加数、被加数、和最终单元(SUM)首先设置初始值,分别为1、0、0,加法次数单元(R2)设为10;
2.每次加法所得中间结果存放在被加数单元中(累加器ACC),同时将加数单元增1;
3.做完一次加法后,加法次数单元减1,并判断是否已为0(即已做完10次加法),如果不为0,继续做下次加法,若为0,则将累加器内容赋值给和最终单元;
4.做完后,程序原地循环。
算法流程图及源程序分别如下:
源程序:
;
变量DATA_REG中的内容为加数(1-10);
ACC中的内容为被加数,同时也是每一次加法后的和中间结果存放单元;
做完10次加法后,再将ACC内容放入指定的和单元SUM中。
********************************************************
DATA_REGEQU31H;
定义加数单元
SUMEQU30H;
定义和单元
=========================================================
ORG0000H;
复位后PC指针
LJMPMAIN
---------------------------------------------------------
ORG0100H;
从程序存储空间0100H单元放程序
MAIN:
MOVSP,#70H;
堆栈指针从复位后的07H调整到70H
MOVDATA_REG,#1;
加数单元初始值为1
MOVSUM,#00H;
和单元初始值为0
MOVR2,#10;
加法循环次数为10
CLRA被加数单元初始值为0
CLRC;
进位初始值为0
ADD_LOOP:
ADDCA,DATA_REG;
被加数+加数,结果放入ACC
INCDATA_REG;
加数增1
DJNZR2,ADD_LOOP;
10次加法未做完,继续做
MOVSUM,A;
10次加法已做完,将和放入SUM单元
LJMP$;
原地循环
*********************************************************
END
2.1打开仿真环境,新建一个工程文件
按第一章介绍建立一个工程名为“test.uv2”的工程文件,选择目标硬件系统的MCU为Atlmel的AT89C51;
目标硬件系统配置选择“UseSimulator”,其余配置参考第一章介绍。
2.2输入源程序
单击菜单“File/New”,出现源程序编辑窗口,输入源程序,以“*.asm”保存,选择“/AddFilestoGroup‘SourceGroup1’”,将此源程序添加到工程中,如图2-1所示。
2.3源程序编译、连接
单击“project/rebuildalltargetfiles”菜单或者按按纽,仿真环境则对源文件进行编译连接,视程序正确与否,有两种编译结果:
若程序无误,编译通过,出现如图2-2所示的编译信息窗口,说明编译成功。
若源程序有误,则出现如下的编译连接信息窗口,说明编译错误。
可双击错误信息,则在源文件编辑窗口中自动显示出错信息所在行。
2.4程序调试
源程序编译通过并不代表程序就一定正确,这只能说明程序已经没有语法上的错误了,至于在算法、流程上是否正确,则需要对程序进行调试,如果程序运行结果符合事先设计的算法、流程,那么这才能说编写的程序是正确的。
初学者很容易犯急噪的毛病,即程序编译通过后,急着让程序连续运行,若运行通过(即结果正确),则认为程序就正确了,其实,这样做并不能说明程序完全正确,有时一个程序对于某些初始条件,可以得到正确结果,而初始条件改变后,却发现结果错