1、.51系列单片机实验系统指导书目录前言第1章下载式实验系统的使用方法1.1软件安装与启动1.1.1 1.1.2文件操作1.1.3建立工程项目(汇编)1.1.4调试程序第2章软件实验2.1数据传送实验2.2清0实验2.3数据转换实验2.4拆字、拼字实验2.5散转程序实验2.6时钟实验2.7计数器实验2.8无符号十进制数加法实验2.9数据排序实验2.10单字节BCD码除法实验2.11查找相同个数实验第3章硬件实验3.1P1口彩灯控制实验3.2数码管显示实验 3.3顺序控制实验3.48031和8155接口扩展与数码管显示实验3.5键盘、数码管显示综合实验3.6A/D转换实验3.7D/A转换实验3.8
2、A/D与D/A转换综合实验第4章89C51系列实验4.1顺序控制实验4.2数码管显示实验4.3键盘、数码管显示综合实验4.4A/D转换实验4.5D/A转换实验前 言 目前,51系列单片机在我国的各行各业得到了广泛应用,各大专院校、 职业培训学校,均开设了单片机原理与应用方面的课程,这是一门技术性和实践性很强的学科,必须通过一系列的软硬件实验、理论联系实际,才能学好、学懂,取得较好的学习效果。为了适应这一学习上的要求,国外厂家开发了多种实验、开发系统,但普遍存在集成度高,严重脱离实际的情况。作者集多年理论教学、实验教学、产品开发的经验,完全摒弃了以前各种实验设备的那种思维模式,重新开发出一种实验
3、、开发系统,专从产品开发角度出发,安排各种硬件实验,并且做到每一个实验就是一个小产品,每个实验就是一个产品开发的过程,从单片机最小系统开始,逐步扩展功能,从单一功能到功能多样,从小到大,从简单到复杂,自成系统给人一种完整的学习思路,让学习者概念清晰、直观明了、易学易懂,特别是加强了硬件故障排除方法的指导,解决了学习者中普遍对硬件故障排除难的问题;其次是加强了软件调试的指导,提供了一些软件调试方法和步骤,帮助初学者很快入门,帮助熟练者更加深化。 本实验系统采用模块式设计,为各学校单片机的课程设计、学生的毕业设计、提供了硬件设备,该模块可反复使用、任意组合、方便经济,解决了各单位研究与实验经费不足
4、的问题。特别在开发产品中更加适用,一个产品谈妥后厂家往往要求几天之拿出产品样机,你可用此系统很快拼装成一个产品样机,供编程人员仿真,同时进行印制板设计。若出现问题,硬件可及时修改、添加,一切开发成功后,再作印制板,一次成功,减少经费损失,缩短了开发周期,为产品开发提供了方便。 本实验指导书分四章:第1章,下载式实验系统的使用;第2章,软件实验;第3章, 硬件实验;第4章,89C51单片机实验, 特别第4章完全讲解的是一个产品开发的全过程,力求使学习者获得更大的收益。第1章 下载式实验系统的使用方法1.1 软件安装与启动下载式实验系统,是一套既可脱离硬件仿真又可与实验系统联机仿真的实验装置,对于
5、硬件实验,只要将软件调试好后就可将程序用串行口直接在线写入芯片,再不必象以前那样要专用的编程器来固化程序。1.1.1 软件安装 1. 为使QTH调试器能够正常运行,您必须提供以下软硬件环境: 586以上的PC及兼容机;100M以上的剩余硬盘空间;分辨率为800600以上的显示器;具有SPP功能的打印机接口;使用符合 Intel 标准的汇编器、编译器和连接器。如 Franklin/Keil V3.2 或 keil V6.02 及以上版本。2.使用:单击开始/程序,在程序条中选QTH2008XS下载式单片机实验仪V2004.1或直接双击桌面上QTH2008XS快捷图标。 图11连机出错提示框如果已
6、经连接仿真器或实验仪,则直接进入QTH调试器窗口。如果没有连接仿真器,等一下屏幕上会出现图11所示的连机出错提示框:可以选择是否进入模拟调试:“是”进入调试;“否”请检查并使仿真器正常工作后,再按调试菜单上的复位钮,进入仿真调试。出现如图12所示的模拟调试器窗口:图12模拟调试器窗口1.2 系统使用方法学习单片机的最终目的是开发单片机产品或维修单片机产品,开发一个产品必须经历硬件设计和软件设计两个阶段。而实验系统是将一些简单的实用电路已设计好。再在该系统中编写程序,调试程序,编写调试程序又必须经历写程序;编译程序;调试程序三个大的过程,每一个过程又有很多步骤和方法。写程序有程序输入、程序修改、
7、程序保存。编译程序有成功与否,不成功要反复修改,成功后会自动生成列表文件(.LST)和目标文件(.OBJ),可进行调试程序,调试过程较复杂,下面分别叙述。首先在图12所示的窗口中可进行程序编写或打开已编好的程序,若编写新的程序则在主菜单中单击“文件/新建”,若打开编好的程序,则在主菜单中单击“文件/打开”,现打开一个编好的文件(P1.ASM),出现如图13所示的模拟调试器窗口:图13模拟调试器窗口在主菜单中有9项,即文件、编辑、查看、项目、调试、设置、外设、窗口、帮助下面将每一项及每一项的子菜单分别叙述,其中文件和编辑菜单容一般会用,重点讨论查看、项目、调试、设置、外设、窗口,帮助一项也可自已
8、随时使用。1.2.1 查看主菜单的“查看”下拉菜单中的容有:工具栏、状态栏、寄存器窗口、程序寄存器窗口、数据寄存器窗口、逻辑分析窗口、跟踪记录窗口、变量表、项目管理器窗口、信息窗口、观察窗口。这些窗口和工具条显示在屏幕或关闭的方法都是第一次选中且单击打开(关闭)对应的选项,第二次选中且单击关闭(打开)对应的选项。将全部打开后的屏幕窗口显示如图14所示: 号窗口为综合窗口,单击本窗口下面的标签,此窗口会变换成项目管理器窗口,特殊功能寄存器窗口,部数据存储器(00H-FFH)窗口,部位(20H-2FH围的00-7F之间共计128个位)显示窗口。随着程序的不同可以任意选择其中的一个窗口。在项目管理器
9、窗口和部数据存储器(00H-FFH)窗口中单击鼠标右键有对应的浮动菜单出现,选中且单击选项可进行对应的操作。后面的3个窗口可直接改变单元中的数值(赋值)。号窗口为信息窗口,该窗口是显示所有操作的信息容,特别是在将程序进行编译或编译连接装载后,显示程序出错与否的信息,主要看错误(ERROR)和警告(WARNING)两项,特别是错误项有一个错误就不能编译通过,调试就不能进行,有警告无错误还可通过,最好显示是“0”个错误,“0”个警告。号窗口也是一个综合窗口,单击本窗口下面的标签,此窗口会变换成代码(Code)窗口,外部程序(XData)存储器窗口,数据(Data)存储器窗口。随着程序的不同可以任意
10、选择其中的一个窗口进行观察。图14模拟调试器窗口在每一个窗口中单击鼠标右键有对应的浮动菜单出现,选中且单击选项可进行对应的操作。例如在外部程序(XData)存储器窗口中单击鼠标右键出现浮动菜单,要看指定的单元中的容,选中浮动菜单中“选择显示地址”且单击出现地址对话窗口,在窗口中输入要看的地址,对应的地址项马上出现在本窗口中,解决了查找之苦。所有窗口可直接改变单元中的数值(赋值)。号窗口为观察窗口,有时要观察的值太多,可将要观察的值选定到此窗口中进行观察,方法是:在此窗口中单击鼠标右键出现浮动菜单,选中浮动菜单中“增加观察项”且单击出现如图15所示的对话窗口,按窗口中的要求选中对应的各项,选中的
11、变量图15模拟调试器窗口马上出现在号窗口中。主窗口,程序所在的窗口,也有浮动菜单,为调试程序提供了方便。从上可见观察容很多,一个屏幕上不可能容纳这么多容, 有的时候窗口很大,就需要用窗口调整指令来调整好各个窗口位置大小。窗口整体移动的方法是用鼠标单击上边框条,上边框变蓝,将鼠标左键按住整体移动,鼠标整个窗口一起移动,放到合适位置,松开鼠标就行。窗口四边分别收缩或放大的方法是,将鼠标点击窗口边线,出现左右或上下形式的箭头(注意此箭头一晃而过要认真捕捉),马上按住鼠标左键整体移动鼠标,边线就跟着移动,移至合适位置,松开鼠标就行,有些窗口为竖式长方形,有些窗口为横式长方形,若要调整它的形状,用窗口命
12、令就行。1.2.2 项目项目菜单为解决多个程序组合或混合编程(汇编语言C语言)的问题而设置。单击主菜单中项目,出现下拉菜单,在下拉菜单中有新建项目、打开项目、关闭项目、项目属性、编译当前文件、编译连接装载、加入模块文件、加入库文件、装入调试信息。下面重点讨论几项,其他的自已照着操作不再一一叙述。1新建项目单击“项目/新建项目”,出现对话框,在框重输入文件名字,新的项目就建立了。若有原项目,只是打开就行了(但源文件修改以后,每次就在“文件”菜单中选“保存”或用保存工具图标保存文件)。2.编译文件单击“项目/编译当前文件”或 “项目/编译连接装载”(两种方式的区别在于前者只编译,后者既编译又将编译
13、后的代码下载到CPU中)将新编写的或打开的程序进行编译,编译成功的话,下面的信息窗口(Massage)会出现新创建的文件名,且在窗口中出现组装完成(ASSEMBLY COMPLETE),“0”个错误(ERROR)“0”个警告(WARNING) 。系统会自动生成列表文件和目标文件。若编译有错,信息窗口会指出错误在什么地方,反复修改,直至编译通过为止。注意:若有一项错误,目标文件和列表文件就不能自动生成。3项目属性单击“项目/项目属性”出现对话框,框中第一页如图16所示 C编译器页图16工程设置对话框SMALL、COMPACT、LARGE这些指令控制存储器模式选择。存储器模式对不同的变量定义有所影
14、响。SMALL:小模式,所有函数和过程的变量及局部数据段被定义在8051片数据存储区。COMPACT:紧凑模式,所有函数和过程的变量及局部数据段被定义在8051片外数据存储区中256字节。这种模式使用(R0、R1)访问外部数据存储器。LARGE:紧凑模式,所有函数和过程的变量及局部数据段被定义在8051片数据存储区中64K字节空间。这种模式通过数据指针(DPTR)访问外部数据存储器。CODE/NOCODE:CODE指令在列表文件后附加上一个汇编记忆表,源程序中的每个函数被表示为汇编代表。OPTIMIZE(n):括号n为一个05的十进制数,另外可选OPTIMIZE(SIZE) 和OPTIMIZE
15、(SPEED),以决定优化重点是放在代码长度上还是执行速度上。RAM(SMALL、COMPACT、LARGE)RAM指令用来决定程序存的大小,它影响跳转指令的编码。RAM(SMALL): CALL和JMP指令作为ACALL和AJMP指令的编码,最大程序空间可达2K字节,整个用户程序必须分布在这2K字节空间。ROM(COMPACT):CALL指令以LCALL编码,函数JMP指令以AJMP编码,因此函数长度不得超过2K字节,而整个程序长度不得超过64K字节,这种用法必须根据不同的目的而决定,看其是否比标准设置ROM(LARGE)效果更佳。ROM(LARGE):将CALL和JMP指令以LCALL和L
16、JMP编码。这样就允许不加限制地使用整个地址空间,用户程序最大可达64K字节。PL/M编译器页图17工程设置对话框CODE/NOCODE:CODE控制表明开始列出生成标准汇编语言格式地目标代码,这些汇编语言目标代码紧随源程序列表清单之后,NOCOD控制是在出现CODE控制之前,不列出所生成地目标代码清单。注意:NOPRINT控制不能对CODE控制有抑制作用,而且NOOBJECT中也隐含了NOCODE功能。INTVECTOR/NOINTVECTOR在INTVCTOR控制下,编译程序可为模块中每个中断过程产生一个字节入口的中断向量。对中断n,中断向量入口的绝对地址为8n3。当然,可以用ASM51单
17、独建立中断向量。在选用NOINTVECTOR控制时,编译程序将不产生任何中断向量。RAM(SMALL、MEDUIM、LARGE)RAM指令用来决定程序存的大小,它影响跳转指令的编码。RAM(SMALL): CALL和JMP指令作为ACALL和AJMP指令的编码,最大程序空间可达2K字节,整个用户程序必须分布在这2K字节空间。8051为提高编码密度,仅在2K块转移和调用,尽可能不使用3个字节的调用和转移指令。ROM(MEDUIM):将正在进行编译的模块适合INBLOCK,而其他模块(包括来自PLM51.LIB的那些模块)可以任意安放,这样就需使一些调用成为长调用(3个字节)。但是大多数的转移和大
18、部分调用,仍能保持短编码形式。 ROM(LARGE):将CALL和JMP指令以LCALL和LJMP编码。这样就允许不加限制地使用整个地址空间,用户程序最大可达64K字节。OPTIMIZE(n):括号n的可取值为一个03的十进制数,在产生目标代码中,该控制实现各种优化处理。每一优化级包含了比优化级别低的所有优化处理功能。REGISTERBANK(寄存器组控制)其中,寄存器组值为0、1、2或3。在代码生成中,REGISTERBANK控制将确定选用其四个8051寄存器组中的一个。对一个含有USING属性的控制,能够由一个过程所替代,PL/M51认为,一个过程中断总是与他所中断的过程使用不同的寄存器组
19、,因而如果在一个独立模块中为每个中断编译代码,则应在REGISTERBANK控制下编译所有非中断代码,所有的低级中断和高级中断分别处在各自寄存器组的设置下。因此,不用USING属性也能避开引起的麻烦。连接器页图18工程设置对话框该页中其它各项已介绍,下面只讲述定位控制项:BIT:起始地址/段名,定位BIT段。DATA:起始地址/段名,定位DATA段。IDATA: 起始地址/段名,定位IDATA段。STACK:段名,定位STACK段。CODE: 起始地址/段名,定位CODE段。XDATA: 起始地址/段名,定位XDATA段。PDATA: 起始地址,为PDATA类型的段定义起始地址。PRECODE
20、:起始地址,在寄存器和位存储区中定位段。1.2.3调试程序调试程序是使用该软件的最复杂、最关键的一步,在调试之前, 要进行各项操作与设置,不然下拉菜单中的各项打不开(没有从白色变成黑色)。1.装载:装入当前程序的调试信息。该命令的快捷键为Ctrl+L,工具图标见由“查看/工具栏/调试工具”打开的工具条。2.源程序调试:进入源程序调试方式。3.混合码调试:对C程序进入源与汇编码的混合状态调试方式。4.单步执行:跟踪运行程序,在反汇编窗口下执行一条指令,如果当前是调用指令,则进入所调用的子程序;如果在源程序窗口下,执行当前文本下的一条语句,如果是调用指令则进入所调用的子程序。该命令的快捷键为F8,
21、工具图标见由“查看/工具栏/调试工具”打开的工具条。5.宏单步执行:单步运行程序。反汇编窗口下如果是调用指令,则越过所调用的子程序;源程序窗口下,如果是调用语句,则越过所调用的子程序。该命令的快捷键为F10,工具图标见由“查看/工具栏/调试工具”打开的工具条。6.连续单步:连续单步操作。该命令的快捷键为Ctrl+F8。7.连续宏单步:连续宏单步操作。该命令的快捷键为Ctrl+F10。8.连续执行:全速运行,遇断点停止。该命令的快捷键为F5,工具图标见由“查看/工具栏/调试工具”打开的工具条。9.执行到光标处:全速运行到光标处。该命令的快捷键为F7,工具图标见由“查看/工具栏/调试工具”打开的工
22、具条。10.跳出子程序:当前执行在子程序处时,执行该命令跳出子程序。该命令的快捷键为Shift+F11,工具图标见由“查看/工具栏/调试工具”打开的工具条。11.设置断点:单击“调试/设置断点”出现断点设置窗口,可设置或清除断点;设置断点属性等。该命令的快捷键为F9。12. 复位:复位仿真器,该命令的快捷键为Ctrl+R。13. 屏蔽断点全速运行 该命令的快捷键为Ctrl+F5。1.2.4设置(S)1. 仿真器设置:单击“设置/仿真器设置”出现如图19所示的对话框,在该对话框中可设置仿真器的仿真模式。 8052 模式 选择 8052 仿真模式,(EA=0)。在此模式下可仿真采用 8031/80
23、32、80C31/80C32、8051/8052、78C32 单片机的应用系统。仿真程序存贮器模式选择栏中,可选择四种仿真存贮器模式之一: 程序存贮器 数据存贮器 仿真程序存贮器在仿真器上。数据存贮器也在仿真器上,该模式在无目标板时,最初调试软件用以排除软件中的故障。图19仿真模式设置对话框 程序存贮器 外数据存贮器仿真程序存贮器在仿真器上,数据存贮器及 I/O口在用户板上。一般采用该模式。通过该模式进行在线测试,可排除目标板上硬件故障,并进行软件调试。 外程序存贮器 数据存贮器程序存贮器在用户板上(EPROM),数据存贮器在仿真器上。该模式很少使用。主要用于目标板缺少数据存贮器,将仿真器上数
24、据存贮作临时使用。外程序存贮器 外数据存贮器程序存贮器在用户板(EPROM)上,数据存贮器及 I/O 口在用户板上。该模式可进行反汇编跟踪分析目标板程序,或调试目标板上 EPROM 中程序。 8752 模式当选择8752仿真模式,(EA=1)。可仿真采用 87C51/87C52 、W78E5X、AT89C5X、LG90C5X 单片机的应用系统。仿真程序存贮器模式选择栏中,可选择四种仿真存贮器模式之一: 程序存贮器 数据存贮器 例如:仿真 89C52 8K 程序存贮器,大于 8K 程序存贮器在仿真器上,扩展的外部数据存贮器在仿真器上。该模式在无目标板时调试软件,用于排除软件中的故障。 程序存贮器
25、 外数据存贮器例如:仿真89C52 8K 片程序存贮器,大于8K程序存贮器在仿真器上,扩展的外部数据存贮器及I/O口在用户板上。一般采用该模式。通过该模式进行在线测试,可排除目标板上硬件故障,并进行软件调试。 外程序存贮器 数据存贮器例如:仿真 89C52 8K 片程序存贮器,大于 8K 程序存贮器在用户板上。扩展的外部数据贮器在仿真器上。该模式很少使用。主要用于目标板缺少数据存贮器时,将仿真器上数据存贮作临时使用。 外程序存贮器 外数据存贮器例如:仿真 89C52 8K 片程序存贮器,大于 8K 程序存贮器在用户板上。扩展的外部数据存贮器及 I/O 口在用户板上。 仿真器存贮空间选择当选择
26、8752 模式时,跟据 CPU 片存贮器空间有四种选择:87C51/78E51 4K 片程序存贮器87C52/78E52 8K 片程序存贮器87C54/78E54 16K 片程序存贮器87C58/78E58 32K 片程序存贮器 主频选择主频分仿真主频及逻辑主频两类。仿真主频是指仿真器的仿真频率;逻辑主频是指带逻辑分析仪仿真器的采集频率。有四种频率选择:6MHz、12MHz、24MHz对于(QTH-8052F+ 其频率选择为:2.7648MHz、5.5296MHz、11.0592MHz)及外晶振,当选择外晶振时,由目标板或仿真头提供振荡频率(即用户自己选择的晶振)。 外复位选择该功能允许用户板
27、的复位引入仿真器仿真 CPU,可调试外部复位电路及实时仿真外部看门狗电路及自复位电路。2.设置PC值:设置当前程序计数器值。3.设置文本编辑器:单击“设置/设置文本编辑器”弹出设置文本编辑器对话框,可设置环境参数,如字体、颜色等。4.项目属性:设置源程序的编译/连,在前面已讲述1.2.5外设(O)1. 端口:端口设置窗口,显示或改变端口的状态。如图110所示。2. 定时/计数器0:定时器/计数器0模式和控制窗口,其TMOD和TCON的值,可以作为定时器0初始化的编程依据,如图110所示。图110 外设图示3. 定时/计数器1:定时器/计数器1模式和控制窗口,其TMOD和TCON的值,可图111
28、外设图示以作为定时器1初始化的编程依据。4. 定时/计数器2:定时器/计数器0模式和控制窗口,其中T2CON的值,可以作为定时器2初始化的编程依据。5. 串行口:串行口工作模式和控制窗口,其SMOD和SCON的值,可以作为串行口初始化的编程依据。如图111所示。6. 中断:中断状态窗口,包括INT0,INT1,T0,T1,T2和UART中断状态以及优先级和允许设置。设置或清除相应的标志,可以改变中断的状态,也可以通过相应的值,作为中断初始化的编程依据。如图111所示。1.2.6 QTH集成开发实验系统使用QTH集成开发环境提供了以下两种方式开发应用程序:l 不使用QTH集成开发环境项目管理方式
29、对源程序文件直接进行汇编/连接方式,兼容传统开发习惯。l 使用QTH集成开发环境项目管理方式可进行多模块、混合语言编程的方式,也同样适合单模块程序的开发。1.不使用项目管理方式开发应用程序不使用QTH集成开发环境项目管理方式,只能进行单模块方式下的应用程序开发,具有很大的局限性。以下是不使用QTH集成开发环境项目管理方式开发应用程序的步骤。 关闭当前项目单击“项目/关闭项目” 此时QTH集成开发环境关闭界面上所有的窗口。不使用QTH集成开发环境项目管理方式开发应用程序,用户必须关闭已经打开的项目,因为当打开项目文件后,QTH集成开发环境默认所有编译/汇编、产生代码的过程都是对项目或项目所包含的
30、文件进行的。 在文件菜单下打开应用程序单击“文件/新建”或“文件/打开”,出现如图112所示的对话框。单模块方式下的文件调试可以按照以下方法新建或打开文件:单击“文件/新建”,输入文件名和扩展名,新建文件单击“文件/打开”,选择文件选取框中的文件将其打开 图112 打开对话框 编译/汇编单击“项目/编译”QTH集成开发环境根据文件的扩展名,自动对当前激活的文件选择调用外部编译器或汇编器: 图113 信息框 如果当前文件的扩展名为ASM,“编译/汇编”命令调用外部汇编命令对当前文件汇编。 如果当前文件的扩展名为C,“编译/汇编”命令调用外部C编译命令对当前文件编译。执行“项目/编译”命令后产生的
31、结果显示在如图113所示的信息框中:错误信息关联QTH集成开发环境调用外部命令编译后产生的结果,显示在信息窗口中。信息窗口中,当编译发生错误时,信息窗口中的错误信息自动与源文件关联,提示出错的位置。在信息窗口中错误提示处双击鼠标左键,也可将错误信息与源文件的错误位置关联,如图114所示。图114 信息关联框l 如果编译没有错误,可进入第步操作l 如果编译出现错误,在修改文件后重复进行第步操作 产生代码并装入仿真器调试单击“项目/装入调试信息”或“调试/装入”装入调试信息或装入命令对编译连接无误后产生的OBJ文件进行连接,产生用于下载的代码。此命令自动地对修改过的源程序进行编译或汇编,对没有修改
32、过的程序将越过编译或汇编过程,然后连接所有的OBJ,LIB文件,再装载代码到仿真器,完成调试程序所需的准备工作。装载完成后,调试器窗口调试工具条所有命令钮变亮。2.使用项目管理方式开发应用程序使用QTH集成开发环境项目管理方式,可以对单模块和多模块方式应用程序进行开发。以下是使用QTH集成开发环境项目管理方式开发应用程序的步骤:l 建立一个新的项目进入第步新建项目l 打开已经存在的项目文件进入第步打开项目图115新建项目对话框 新建项目单击“项目/新建项目”出现图115所示的对话框 项目名称栏:QTH集成开发环境的项目文件是按项目名称管理的,项目管理器的项目名称不可以相同。在项目名称输入栏,项
33、目名称用户必须输入,并且项目名称不得超过8个字符,不可以使用汉字以及“-,?,*,/”等DOS文件所不可以使用的字符。图116打开对话框立即加入模块文件:选择立即加入模块文件,表示在项目建立后,会自动打开文件选取框,供用户选择文件添加到项目管理器。 加入模块文件单击“项目/加入模块文件”出现“打开”窗口,选择文件在当前新建或打开的项目中添加源程序文件。注意:必须逐个加入模块文件,并且把主模块第一个加入其中。 打开项目单击“项目/打开项目” 出现“打开”窗口。对于调试已经存在的项目,可以直接打开项目文件进入第四步操作。 设置项目属性设置当前项目的编译及连接控制属性。 编译/汇编/连接单击“项目/
34、编译连接装载”,QTH集成开发环境根据文件的扩展名,自动对激活的文件选择调用外部编译器或汇编器进行编译。l 如果当前文件的扩展名为ASM,编译/汇编命令调用外部汇编命令对当前文件汇编。l 如果当前文件的扩展名为C,编译/汇编命令调用外部C编译命令对当前文件编译。文件编译/连接的命令行参数由“项目/项目属性”确定。 错误信息关联文件经过编译/连接后的结果显示于信息窗口,出现错误后错误信息与文件关联。在信息窗口中错误之处双击鼠标左键,可将错误与文件关联: 如果没有错误,进入第步操作 如果出现错误,修改文件后重复第步操作 装入调试信息单击“项目/编译连接装载”单击“项目/装入调试信息”单击“调试/装
35、入”编译连接装载命令对经过编译/汇编无误后产生的OBJ文件进行连接产生用于下载的代码。此命令对修改过的源程序自动进行编译或汇编,否则将越过编译或汇编过程进行连接并装载代码到仿真器,完成调试文件所需的准备工作,并自动装入调试信息到仿真器。l 使用编译连接装载命令,命令管理器会自动判别文件是否需要重新编译/汇编,提高调试效率,对编译连接通过的程序自动装入调试信息到仿真器。l 使用重新装入信息或装入命令,直接装入调试信息到仿真器。1.2.7 调试举例例11:单模块汇编语言源程序(不使用项目管理方式开发应用程序)程序用已编好的文件,存于QTHASM文件夹中,文件名:P1.ASM关闭项目文件关闭当前已经
36、打开的项目,保证编译/汇编连接都是对当前激活的文件进行操作。打开文件掌握数据转换方法程序编写方法点击“文件/打开”,在文件选取框中选择文件 P1.ASM。编辑修改文件对打开后的文件进行编辑修改。 编译连接装载单击“项目/编译连接装载”命令P1.ASM文件汇编,编译/汇编后产生的结果出现在QTH集成开发环境信息窗口。如果程序存在错误,集成开发环境将自动关联到源程序的错误处,转到第步操作;如果正确,则装入调试信息到仿真器可进行第步。 装入代码到仿真器使用项目|装入调试信息命令,将产生代码装入仿真器,此时QTH集成开发环境进入调试状态。QTH集成开发环境的文件窗口P1.ASM的左侧出现了一列小圆点,
37、表示当前程序计数器PC。如图117所示。 图117 调试应用程序.经过前面操作,为QTH集成开发环境调试应用程序提供了所有准备工作。您可以开始对源程序进行调试。例12:多模块汇编语言源程序(使用项目管理方式开发应用程序)多模块程序 AMPLE1.C,SAMPLE2.ASM,假定已存于C:QTHC51和C:QTHC51目录,当建立项目时,项目文件也存放在该目录。 建立新的项目文件选择项目|新建项目命令,根据提示输入、设置以下项目:l 在项目名称框中输入SAMPLE,此时项目名称为SAMPLE。l 选择立即加入模块文件,表示在项目建立后将自动打开文件捡取框,供用户选择文件添加到项目管理器。l 在项
38、目属性项将C编译器其它选项选择“NOREGPARMS”控制项。 编辑修改文件对打开后的文件进行编辑修改。 编译连接装载使用项目|编译连接装载或热键F4命令对当前多模块文件编译/汇编,编译/汇编后产生的结果出现在QTH集成开发环境信息窗口。如果程序存在错误,集成开发环境将自动关联到源程序的错误处,转到第步操作;如果正确,则装入调试信息到仿真器可进行第步。 错误信息关联文件经过编译/汇编后的结果显示于信息窗口,出现错误后错误与文件关联。在信息窗口中错误之处双击鼠标左键,可将错误与文件关联:l 如果没有错误,可进入第步操作。l 如果出现错误,修改文件后重复进行第步操作。 调试应用程序使用项目|装入调
39、试信息命令,将产生代码装入仿真器,此时QTH集成开发环境进入调试状态。QTH集成开发环境的文件窗口的左侧出现了一列小圆点,表示当前程序的有效行,即此时存在相应的代码,键入F8跟踪运行键,程序运行到 main 函数的第一条语句,并在该行的左侧出现绿色的小手,表示当前的程序计数器PC。到此,QTH集成开发环境提供应用程序的所有准备工作。1.2.8 断点QTH集成开发环境配合QTH系列仿真器,具有强大的断点功能:可以在编辑和调试状态下设置或清除断点,并且在退出集成开发环境时自动保存断点信息。1.断点标记QTH集成开发环境的断点标记,根据系统状态和所处窗口类型,标记如下:l 在编辑或调试状态下,源程序
40、窗口绿色小手无效断点或临时断点,退出进不保存。l 在调试状态下,源程序窗口的红色小手有效地址断点,退出时保存。l 在反汇编窗口设置的断点,标记为红色光地址断点,退出时保存。2.断点变化规律在编辑或调试状态下源程序窗口没有断点处设置断点,标记为绿色小手;再次设置断点,标记被清除。在调试状态下源程序窗口有效程序执行处设置断点,标记为红色空心小手,再次设置断点,标记被清除。在调试状态下与源程序断点关联的反汇编窗口红色光带处设置断点,在反汇编窗口清除断点,同时将源程序窗口断点标记清除;再次设置断点,反汇编窗口标记为红色光带,源程序窗口的对应行再次标记为断点行。3.源程序文本上设置断点 编辑状态设置断点
41、当用户在编写源程序的过程中,根据调试需求,可以直接在源程序文本的任何地方设置或清除断点。如果设置了断点,将以绿色小手标记在源程序文本左侧的灰色状态栏,断点属性为无效断点。当编译连接装载通过后,自动转化为有效断点,对于在源程序文本上设置的无效断点,系统退出时不保存。 调试状态设置的断点在调试状态下,可以直接在源程序文本上设置断点(当文本左侧的灰色状态栏时,表示当前程序为有效行)。设置后,断点以红色小手标记在文本左侧的灰色状态栏;如果没有出现小圆点,则不可以设置有效断点。在编辑状态下设置的断点,通过编译连接后,如果预设的断点编译后是有效行,则断点标记为有效断点;如果不是有效行,则仍为无效断点。对于
42、在源程序文本上设置的断点,系统退出的全部自动保存。 在反汇编窗口设置的断点断点在反汇编窗口以红色光带表示,可以任意设置地址断点,如果设置的断点与源程序有效地址关联,则与源程序相关联的地址处设置断点,在源程序窗口出现红色小手。图118 断点设置窗口如果在源程序断点相关联的反汇编窗口红色光带处设置断点,将清除窗口的断点光带,同时清除源程序断点标记;再次设置断点,反汇编窗口标记为红色光带,源程序对应行再次标记为断点。 断点设置窗口通过断点设置可执行增加断点,删除断点等操作。设置断点属性禁止或允许断点,断点的过点次数等。1.2.9 具体调试方法 1.调试判位变量转移指令AD0: P1.3,AD0的方法
43、。 不管用单步还是全速运行,碰到此句时,若P1.30就停止执行,只有当P1. 30时,才接着向下执行,调试时没有硬件,本仿真系统提供了硬件接口,只要在主菜单View的下拉菜单中,选Hardware就弹出对话窗口,在窗口中选P1口,弹出P1口结构图,赋值使P1.30,此时再运行,程序就往下执行。 同样可调试,判位变量转移指令,AD0:JNB P1.3 AD0 ,只是赋值时,使P1.31。 2.调试外部中断程序 外部中断0(),请示端口为P3.2,中断入口地址为0003H,低电平有效。外部中断1(),请示端口为P3.3,低电平有效,中断入口地址为0013H。在编写程序时,只要在中断服务程序之前(或
44、开头)安排两条语句,ORG 0003H, AJMP INTP0就行,INTP0为中断服务子程序的标号,当P3.2为低电平时, 执行到开外部中断指令,SETB EA;SETB EX1,程序就进入中断服务子程序。若P3.2不为低电平, 程序就不进入中断服务程序,调试时使P3.2为0的方法,是在主菜单View 的下拉菜单中,选Hardware,弹出对话窗口,在窗口中选P3口,对P3.2赋值为0 就行,同样可调试外部中断1()。 3.定时器中断调试方法 51系列有两个16位的定时/计数器,当用作定时器时,由单片微机部的时钟脉冲,经12分频后,送加1 计数器, 当用作计数器时, 由外部提供计数脉冲,通过
45、引脚P3.4(T0)和P3.5(T1)端口送计数器,端口出现,由“1”(高电平)到“0”(低电平)的负跳变脉冲时,计数器则加1,计数器不断加1计数到FFFF时,16 位计数器将由全“1”回归全“0”,计数器产生回“0”溢出脉冲,置位中断系统的中断请求标志位, 请求主机进行中断处理,即溢出中断。若用外部脉冲计数,所对应的引脚应有负跳变脉冲,有一个计一个,无脉冲就停止计数。若用部时钟脉冲时, 就与外端口无关。 T0的中断入口地址是000Bh ,T1的中断入口地址是001BH。编程时,只要在中断服务程序之前或程序开头安排两条语句,ORG 000BH;AJMP CONT0 ,CONT0为中断服务子程序的标号,当程序执行SETB EA , SETB TR0 ,若有溢出时,程序就进入中断服务程序, 否则就不进入中断服务程序。若要溢出快,就将初值TL0 、TH0两单元的值设置大一些, 例如TH0的值设置为FF ,TL0的值设置为FE或FD,这样程序运行一次或两次就溢出,很好调试,若初值设置为0000,从0000到FFFF要运行65536次,若用单步运行就要很长时间。同样,可调试外部脉冲计数器。 4.下面以跳“彩灯左移”为例具体说明 单击“ 文件(File)/新建”,并编写程序,跳“彩灯左移”源程序,程序的功能是使接于P1口的8个指示灯顺次点亮,反复循环。ORG 0000H /*指