单片机实验步骤汇编及C.docx
《单片机实验步骤汇编及C.docx》由会员分享,可在线阅读,更多相关《单片机实验步骤汇编及C.docx(28页珍藏版)》请在冰豆网上搜索。
单片机实验步骤汇编及C
第一部分ProteusISIS集成环境
一、启动
双击桌面上的ISIS6Professional图标或者单击屏幕左下方的“开始”→“程序”→“Proteus6Professional”→“ISIS6Professional”,便可进入ProteusISIS集成环境。
二、工作界面
ProteusISIS的工作界面是一种标准的Windows界面。
包括:
标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口(元件列表窗口)、图形编辑窗口。
如图1所示。
图1-1工作界面
1.图形编辑窗口
该窗口是用来绘制电路原理图的。
这个窗口是没有滚动条的,你可用预览窗口来改变原理图的可视范围。
正确的操作是:
中键或F6、F7缩放原理图;左键放置元件;右键选择元件;双击右键删除元件;先右键后左键编辑元件属性;先右键后左键拖动元件;连线用左键,删除用右键。
2.预览窗口
预览窗口可显示整张原理图的缩略图。
另外当你在元件列表中选中一个元件时,预览窗口会显示该元件的预览图。
如图2所示。
图2图形编辑窗口与预览窗口
3.绘图工具栏
绘图工具栏分为主要模型、配件及2D图形三部分。
(1)主要模型(MainModes)如图3所示
主要模型有以下工具:
*选择元件(components)(默认选择的)
*放置连接点(Junctiondot)
*标签(Wirelable)(用总线时用到)
*文本(Textscript)
*用于绘制总线(Bus)
*用于放置子电路(Sub-cricuit)
*用于即时编辑元件(Instanteditmode)
(左击任意元器件即可编辑该元器件的属性)
(2)配件(Gadgets)如图4所示
*终端接口(terminals),有VCC、地、输出、输入等接口
*器件引脚
*仿真图表(graph)
*录音机
*信号发生器(generators)
*电压探针
*电流探针
*虚拟仪表,有示波器等
4.对象选择器窗口(元件列表窗口)
用于挑选元件(components)、终端接口(terminals)、信号发生器(generators)等。
在某些状态下(如当选择“components”),对象选择器有一个“P”按钮(即Pick切换按钮),单击该按钮会弹出库元件选择对话框。
通过该对话框可选择元件并置入元件列表窗口,以后在绘图时要用该元件时,只需在元件列表中选择即可。
例:
要将AT89C51放置到元件列表窗口。
(1)单击“P”按钮,出现元件选择对话框。
(2)在对话框的KEYWORDS文本框中输入89C51,选择AT89C51,单击OK,关闭对话框,这时元件列表中列出AT89C51。
如图8所示。
5.对象方位控制按钮
许多类型的对象可以调整其方向,可旋转0,90,270,360,也可做x轴或y轴镜象。
如图9所示。
旋转:
旋转角度只能是90的整数倍。
翻转:
完成水平翻转和垂直翻转。
可对原理图或预览窗口中的对象进行旋转或翻转。
方法是先选择元件,再左击相应的旋转图标。
6.仿真进程控制按钮如图10所示。
*运行
*单步运行
*暂停
*停止
三、文件操作
1.ISIS的文件类型
主要使用的是扩展名为.DSN的文件(称为设计文件,DesignFiles),该文件包含一个电路的所有信息。
2.常用文件命令(File主菜单)
(1)开始一个新的设计(NewDesign)
命令将清除所有原有的设计数据,选择图幅(A0-A4)后开始新的设计,新设计的缺省名字为UNTITLED.DSN。
若设计文件要改变当前页的大小,可用System菜单的SetSheetSizes命令即可。
(2)保存设计(SaveDesign或SaveDesignAs)
(3)装入设计(LoadingDesign)
(4)退出ISIS(Exit)
四、基本的编辑操作
1.对象放置的步骤:
(1)选择对象
∙对一般对象(如:
线、文本等):
在绘图工具栏中选择相应的图标即可;
∙对元件:
先将元件从库中调到元件列表窗口,再在元件列表窗口中选择要的元件。
(2)若对象是有方向的,可以通过点击旋转和镜象图标来调整对象的朝向。
(3)最后将鼠标指向编辑窗口并点击鼠标左键放置对象。
2.选中对象
∙要选中一个对象,用鼠标指向对象并点击右键即可选中该对象。
∙要选中一组对象,可以通过依次右击每个对象的方式,也可通过右键拖出一个选择框的方式,但只有完全位于选择框内的对象才可以被选中。
∙选中对象时,该对象上的所有连线同时被选中,并以高亮显示。
对象被选中后就可以对对象进行编辑、删除、拖动等操作。
∙在空白处点击鼠标右键可以取消所有对象的选择。
3.编辑对象
许多对象具有图形或文本属性,这些属性可以通过一个对话框进行编辑。
编辑单个对象的步骤:
先选中对象,再用鼠标左键点击对象。
4.删除对象
∙要删除一个对象,用鼠标指向选中的对象并点击右键可以删除该对象,同时该对象的所有连线也一起被删除。
∙要删除一组对象,选中需要删除的对象,按键盘的Delete键。
5.拖动对象
用鼠标指向选中的对象并用左键拖曳可以拖动该对象。
该方式不仅对整个对象有效,而且对对象中单独的labels也有效。
6.调整对象大小
图表、线、框和圆及子电路是可以调整大小的。
当你选中这些对象时,对象周围会出现黑色小方块叫做“手柄”,通过拖动这些“手柄”即可调整对象的大小。
7.电路图的缩放
电路图可进行缩放,缩放的方法主要有两种:
一种是利用F6键、F7键和F8键,按F6键可以放大电路图(连续按会不断放大直到最大),按F7键可以缩小电路图(类似的连续按会不断缩小直到最小),按F8键可以把一整张图缩放到完全显出来。
另一种缩放电路图的方法是滚动鼠标中间的滑轮。
8.拷贝所选中的对象
拷贝一整块电路的步骤:
先选中需要的对象,然后利用复制和粘贴工具即可。
当一组元件被拷贝后,他们的标注自动重置为随机态,用来为下一步的自动标注做准备,防止出现重复的元件标注。
9.移动所选中的对象
移动一整块电路的步骤:
先选中需要的对象,然后利用剪切和粘贴工具即可。
10.拖动对象标签
许多类型的对象有一个或多个属性标签附着。
例如,每个元件有一个“reference”标签和一个“value”标签。
可以很容易地移动这些标签使你的电路图看起来更美观。
移动标签的步骤为:
先选中对象,再用鼠标指向标签并用左键拖曳该标签。
11.画线
没有画线的图标按钮。
在两个对象间连线:
(1)左击第一个对象连接点。
(2)如果你想让ISIS自动定出走线路径,只需左击另一个连接点。
另一方面,如果你想自己决定走线路径,只需在想要拐点处点击鼠标左键。
第二部分汇编程序在Proteus中的仿真
用户可以直接在ISIS环境中直接编辑、编译源代码,并且当源程序修改后很快就能看到对仿真结果的影响。
步骤如下:
进入ProteusISIS
1.绘制原理图
2.创建源文件
1)选择Source主菜单中的Add/RemoveSourcefiles命令,出现如图12所示对话框。
2)ISIS软件有自带编译器,有ASM的、PIC的、AVR的汇编器等,所以先选择编译器。
单击CodeGenerationTool下方的下三角按钮,将出现系统已定义的编译器,选择其中的ASEM51。
如图13所示。
图13编译器的选择
3)单击对话框中的NEW按钮,会弹出一个对话框,要求输入源文件名(.ASM),并选择保存路径,输入完毕后单击“打开”按钮,则新建好了一个ASM源文件。
3.编辑源文件
打开Source主菜单,选择上一步中新建的ASM源文件,如图15所示,即可打开源文件窗口,在源文件窗口中输入程序。
4.编译连接
选择Source主菜单中的BuildAll命令,对源文件进行编译连接,生成目标代码。
同时弹出BUILDLOG日志输出窗口,该窗口会显示程序是否有错。
若有错,需修改源程序后重新编译,直到没错为止。
如图16所示。
5.源代码调试
(1)添加目标代码文件
编辑原理图中8051单片机的属性,会打开一对话框,将前面编译连接后生成的目标代码文件(.HEX文件)加载到ProgramFile项中。
如图17所示。
(2)仿真调试
选择Debug主菜单项中的Start/RestartDebugging命令或按CTRL+F12进入调试模式。
这时系统会自动打开一个源代码窗口,你的汇编源程序及执行情况就显示在该窗口中。
点击仿真控制按钮中的运行按钮
,即可开始全速运行程序。
若要停止运行,点击仿真控制按钮中的停止按钮
即可。
6.调试工具
程序开始仿真调试后,ISIS软件提供了一些很有用的调试工具,下面简单加以介绍。
(1)Debug主菜单中的调试工具(如图18所示)
Execute(F12):
全速运行;
StepOver(F10):
单步运行;
StepInto(F11):
跟踪运行,即可跳入子程序或函数执行;
SimulationLog:
显示和模拟调试有关的信息;
8051CPURegisters:
打开寄存器窗口,可观察8051各寄存器的值的变化;
8051CPUSFRMemory:
打开特殊功能寄存器(SFR)窗口;
8051CPUInternal(IDATA)Memory:
打开数据寄存器窗口,可观察8051内部RAM的值的变化;
WatchWindow:
可将常用的寄存器及程序中需要观察的寄存器添加到观察窗口。
可发现无论在单步调试状态还是在全速调试状态,WatchWindow的内容都会随着寄存器的变化而变化,这点是很有用的。
(2)断点的使用
断点对发现程序中存在的问题是非常有用的。
通常可在存在问题的子程序的起始点设置断点,然后开始运行程序。
当程序运行到断点处,会暂停,此后可对程序进行单步调试,观测各寄存器及存储单元的值。
当选择了Debug主菜单项中的Start/RestartDebugging命令或是进人单步调试状态,系统都会自动打开一个源代码窗口,在这个窗口中,我们可以设置断点。
方法有两种,一种是:
鼠标先点击要设置的断点处(某程序语句),此时该语句变为黑色,再点击鼠标右键,会出现一个下拉菜单,选择其中的Toggle(Set/Clear)Breakpoint菜单项,即在相应的语句处设置了断点,第二种:
鼠标先点击要设置的断点处,再按F9即可。
若要清除断点可用相同的方法,也可用Ctrl+F9清除所有断点。
第三部分Keilc51与Proteus的联调
Keil是一个51单片机开发软件平台。
Keil的μVision2中包含了一个高效的源程序编辑器、一个项目管理器和一个源程序调试器。
μVision2可以进行纯粹的软件仿真(仿真软件程序,不接硬件电路),也可利用硬件仿真器,搭接上单片机硬件系统,在仿真器中载入项目程序后进行实时仿真;还可使用μVision2的内嵌模块KeilMonitor-51在不需要额外硬件仿真器的条件下,搭接单片机硬件系统对项目进行实时仿真。
由于proteus不支持C51,可以在keil中调用proteus进行单片机的仿真。
步骤如下:
1.启动proteus,画出相应电路图,并在Debug主菜单中选中UseRemoteDebugMonitor选项。
2.启动keilμVision2,创建项目
具体步骤如下:
(1)新建一个源文件
新建一个源文件可通过单击工具栏中的
按钮或选择File主菜单项中的New菜单项即可打开一个新的文本窗口,在该窗口中可进行C源程序或汇编源程序等的编辑,编辑完毕后保存即可。
注意:
保存源文件时必须加上扩展名,如C源程序要存成.c,汇编源程序要存成.a*等。
(2)创建一个项目文件
源文件编辑好后,需要进行编译、连接,而keilC51软件不能对单一的源程序进行编译、连接,只能对项目文件进行编译、连接等操作。
keilμVision2集成环境提供了强大的项目管理功能,通过项目文件可以方便地进行应用程序的开发。
一个项目中可以包含各种文件,如源程序文件、头文件和说明文件等。
因此当源文件编辑好后,要为源文件建立项目文件,方法如下:
a.选择Project主菜单项中的NewProjec命令,此时会弹出一个对话框,要求输入项目文件名(不需要扩展名)并选择保存路径,输入完毕后单击“保存”按钮,就新建好了一个project文件(项目文件),如图20所示。
图20在keil中新建一个项目
b.项目文件名保存完毕后,系统会弹出一个对话框,要求对CPU进行设定,这里可选择Atmel公司的At89C51,如图21所示。
图21选择CPU
(3)将源程序文件添加到项目文件中
创建一个新项目后,需将源程序文件添加到项目文件中。
方法为:
将光标指向项目窗口中的SourceGroup1,并点击鼠标右键,会弹出一快捷菜单,选择其中的AddFilestoGroup‘SourceGroup1’选项,将刚才新建的源文件添加进去即可。
如图22所示。
图22项目窗口的快捷菜单
3.项目的设置
(1)选中项目工作区的Target1,再选择Project主菜单项中的OptionforTarget'Target1'命令,出现如图23所示的对话框,点中Output选项卡,勾上CreateHEXFi。
图23Option选项中的Output选项卡
(2)在上述对话框中选择DEBUG选项卡,在右上部的下拉菜选中ProteusVSMMonitor-51Driver,再进入seting进行设置。
如果是同一台机,IP设为127.0.0.1,若不是同一台机则填另一台的IP地址。
端口号一定为8000。
注意:
可以在一台机器上运行keil,另一台中运行proteus进行远程仿真。
如图24所示。
图24Option选项中的DEBUG选项卡
4.项目的编译、连接
选择Project主菜单项中的Buildtarget菜单项,系统将按OptionforTarget对话框内的各种选项设置对当前项目中所有源程序进行编译、连接,若编译、连接有错,则改错,直到正确为止。
5.项目的调试运行
选择Debug主菜单项中的Start/StopDebugSession命令,即进入仿真调试状态,同时在proteusISIS中查看直观的结果。
在此状态下的项目窗口自动转换到Regs标签页,显示调试过程中单片机内部工作寄存器R0~R7、累加器A、堆栈指针SP、数据指针DPTR、程序计数器PC以及程序状态字PSW等的值。
如图25所示。
图25keil仿真调试状态窗口
在仿真调试状态下,选择Debug主菜单项中的Go命令,即可启动程序全速运行。
若要终止程序运行,先选择Debug主菜单项中的StopRunning命令,再选择Debug主菜单项中的Start/StopDebugSession命令。
6.调试工具
keilμVision2还提供了多种调试工具可供使用,下面详细介绍。
(1)Debug菜单(如图26所示)
Start/StopDebugSession(Ctrl+F5):
进入/停止仿真调试;
Go(F5):
全速运行;
Step(F11):
跟踪运行,能进入到被调函数或子程序执行;
StepOver(F10):
单步运行;
StepOutofcurrentFunction:
跳出当前函数;
RuntoCursorline:
运行到光标所在行;
StopRunning:
停止运行;
Inset/RemoveBreakpoint:
插入/删除断点。
可通过该菜单项在编辑窗口当前光标所在行上设置/去除一个断点(在该行双击也实现同样的功能);
Enable/DisableBreakpoint:
激活/禁止当前光标所指向的一个断点;
DisableAllBreakpoints:
禁止所有已经设置的断点;
KillAllBreakpoints:
去除所有已经设置的断点。
断点对发现程序中存在的问题是非常有用的。
通常可在存在问题的子程序的起始点设置断点,然后开始运行程序。
当程序运行到断点处,会暂停,此后可对程序进行单步调试,观测各变量及寄存器存储单元的值。
(2)模拟仿真调试窗口
keil在对程序进行调试时提供了多个模拟仿真窗口,主要包括主调试窗口、存储器窗口(MemoryWindows)、反汇编窗口(DissamblyWindows)、观测窗口(Watch&CallStackWindows)等。
进入调试模式后,单击View菜单中的相应选项,就可以方便地打开/关闭相应的调试窗口,View菜单如图27所示所示。
a.存储器窗口(MemoryWindows)
单击View菜单中的MemoryWindows选项就可以打开存储器窗口。
该窗口用来显示程序调试过程中单片机系统的各类存储器中的值,在Address文本框内键入存储器地址(“字母:
数字”),即可显示对应存储空间的内容。
其中:
字母表示要查看的存储器的类型,可以是C、D、I、X等,“C”表示程序存储空间(即ROM空间);“D”表示直接寻址的片内RAM空间;“I”表示间接寻址的片内RAM空间;“X”表示扩展的外部RAM空间。
数字表示要查看的地址值。
如:
键入D:
05H,可查看地址从05H开始的片内RAM单元中的内容;键
图27调试状态下的View菜单
入C:
0000H,可查看地址从0000H开始的ROM单元中的内容,即查看程序的二进制代码。
如图28所示。
存储器窗口的显示值可以是十进制、十六进制和字符型等多种形式。
若需改变显示的形式只需在存储器窗口单击鼠标右键,通过设置弹出的快捷菜单中相应的选项即可。
图28存储器窗口
b.观测窗口(Watch&CallStackWindows)
观测窗口也是调试程序时用到的一个重要窗口。
在Regs页面中仅可观察到工作寄存器和若干有限的寄存器,如:
A、SP、DPTR、PSW等(参见图25),若要观察其它SFR或某些变量的值时,就需要借助于观测窗口。
单击View菜单中的Watch&CallStackWindows选项就可以打开观测窗口。
观测窗口有四个标签页,分别是局部变量(Locals)、观测1(Watch#1)、观测2(Watch#2)及调用堆栈(CallStack)标签页。
Locals页可显示程序调试过程中当前局部变量的值。
在Locals页中单击鼠标右键可设置显示值按十进制或十六进制形式显示,如图29所示。
Watch页显示用户程序中已经设置了的观测点在调试中的当前值。
CallStack页显示程序执行过程中对子程序的调用情况。
图29观测窗口的局部变量Locals页
实验一P1口实验
一、实验题目
(1)P1口做输出口,接八只发光二极管,编程使发光管循环点亮;
(2)P1口做输入、输出口,P1.0~P1.3做输入口,接四个开关;P1.4~P1.7做输出口,接四只发光管。
编程读取开关的状态,将此状态在发光管上显示出来。
二、实验目的
1.学习P1口的使用方法;
2.学习延时子程序的编写和使用。
三、实验元件
AT89C51、LED-YELLOW、SW-SPDT等
注:
地用左侧绘图工具栏中Inter-sheetTerminal中的GROUND
实验二外中断实验
(含救护车的交通灯控制问题)
一、实验题目
以P1口作为输出口,控制六个发光二极管燃灭,模拟交通灯管理。
二、实验目的
1。
学习外部中断技术的基本使用方法;
2。
学习中断处理程序的编程方法。
三、实验说明
1.端口分配:
设东西和南北方向均有红、黄、绿三盏灯,用P1口的六位分别控制两方向的各三盏灯,如:
东西方向--P10绿灯,P11黄灯,P12红灯
南北方向--P13绿灯,P14黄灯,P15红灯
2.正常情况下的交通灯控制规则
(1)南北方向绿灯亮
东西方向红灯亮
保持6秒
(2)南北方向黄灯亮
东西方向红灯亮
保持3秒
(3)南北方向红灯亮
东西方向绿灯亮
保持6秒
(4)南北方向红灯亮
东西方向黄灯亮
保持3秒
(5)返回
(1)进行循环。
主程序的大体框架如下:
第1步:
输出
(1)状态/*movP1,#xxx……*/
延时6秒
第2步:
输出
(2)状态
延时3秒
第3步:
输出(3)状态
延时6秒
第4步:
输出(4)状态
延时3秒
第5步:
再执行第1步
3.增加有救护车通过的情况
在前面基础上,当有救护车通过时,两个方向均亮红灯,救护车通过后,恢复原来状态。
此时有救护车通过这一外部事件可作为外中断的中断源。
外部中断有两种触发方式:
(1)边沿触发
P32(INT0)接一单脉冲,以此作为中断申请,表示有救护车通过,且设通过时间为5秒,5秒过后返回原先状态。
(注意:
设置IT0或IT1)
中断子程序:
先保存两路口的原状态/*movxx,P1*/
后两路口红灯亮/*P1=……*/
延时5秒
再恢复两路口的原状态/*P1=xx*/
(2)电平触发
P32(INT0)接一手动开关,开关初始状态打在上面(高),路口处于正常状态。
当有救护车通过时,将开关拨到下面(低),则进入中断服务函数(使两个方向红灯亮,等开关再打在上面,则恢复P1口原状态。
)
voidint0_srv(void)interrupt0using2
{
先保存两路口的原状态
两路口红灯亮
while(!
INT0);/*等待开关拨上*/
再恢复两路口的原状态
}
四、实验电路
AT89C51,TRAFFICLIGHTS,SW-SPDT,
实验三定时计数器实验
一、实验题目
从8031的P3.4引脚输入一外部脉冲。
编程对该外部脉冲个数进行计数,并将计数值按二进制数在P1口驱动发光二极管显示出来,计到15秒再从0开始计。
二、实验目的
1.学习8031内部定时/计数器的使用及编程方法;
2.进一步掌握中断处理程序的编写方法。
三、实验说明
8031内部有两个定时/计数器T0与T1。
本实验中T1做定时器,产生15秒定时,T0做计数器,对从P3.4引脚引入的外部脉冲进行计数。
对定时器来说,最大的定时时间与定时器的工作方式相关,所以要根据定时时间来确定定时器的工作方式。
对计数器而言,8031在每个机器周期采样一次从外部输入的波形,如有跳变,则计数值自动加1,因此单片机至少需两个机器周期才能检测到一次跳变。
这就要求输入脉冲的频率不能超过机器周期的频率,在设置外部单脉冲时,要注意其频率。
四、实验元件
外部脉冲PULSE的频率为1Hz,幅度为5V,占空比50%
脉冲输出端接P3.4(T0),P1.0~P1.7分别接LED-GREEN。
实验四串行通信实验
一、实验题目
利用虚拟终端,实现上位机与下位机的通信。
上位机发出指定字符,下位机收到后返回原