②号窗口为信息窗口,该窗口是显示所有操作的信息内容,特别是在将程序进行编 译或编译连接装载后,显示程序出错与否的信息,主要看错误(EROR)和警告( WARNING) 两项,特别是错误项有一个错误就不能编译通过,调试就不能进行,有警告无错误还可 通过,最好显示是“0”个错误,“0”个警告。 ③号窗口也是一个综合窗口,单击本窗口下面的标签,此窗口会变换成代码(Code) 窗口,外部程序( XData)存储器窗口,数据(Data)存储器窗口。随着程序的不同可以任意 选择其中的一个窗口进行观察 巴模拟调试器-[F!sn 回区 文件()信()查着项目)调式0设置()外设)窗口)帮助 09H RG 0030H RIGHT R,#8H 可员叫盛n 习。5 小2回时下cx如…人D/ 如需帮助,请按键 执行局期0时间000n1.ca1=0082模式团 图1-4模拟调试器窗口 在每一个窗口中单击鼠标右键有对应的浮动菜单出现,选中且单击选项可进行对应 的操作。例如在外部程序( XData)存储器窗口中单击鼠标右键出现浮动菜单,要看指定的 单元中的内容,选中浮动菜单中“选择显示地址”且单击出现地址对话窗口,在窗口中 输入要看的地址,对应的地址项马上出现在本窗口中,解决了查找之苦。所有窗口可直 接改变单元中的数值(赋值)。 ④号窗口为观察窗口,有时要观察的值太多,可将要观察的值选定到此窗口中进行 观察,方法是:在此窗口中单击鼠标右键出现浮动菜单,选中浮动菜单中“増加观察项 且单击出现如图1-5所示的对话窗口,按窗口中的要求选中对应的各项,选中的变量
6 ②号窗口为信息窗口,该窗口是显示所有操作的信息内容,特别是在将程序进行编 译或编译连接装载后,显示程序出错与否的信息,主要看错误(ERROR)和警告(WARNING) 两项,特别是错误项有一个错误就不能编译通过,调试就不能进行,有警告无错误还可 通过,最好显示是“0”个错误,“0”个警告。 ③号窗口也是一个综合窗口,单击本窗口下面的标签,此窗口会变换成代码(Code) 窗口,外部程序(XData)存储器窗口,数据(Data)存储器窗口。随着程序的不同可以任意 选择其中的一个窗口进行观察。 图 1-4 模拟调试器窗口 在每一个窗口中单击鼠标右键有对应的浮动菜单出现,选中且单击选项可进行对应 的操作。例如在外部程序(XData)存储器窗口中单击鼠标右键出现浮动菜单,要看指定的 单元中的内容,选中浮动菜单中“选择显示地址”且单击出现地址对话窗口,在窗口中 输入要看的地址,对应的地址项马上出现在本窗口中,解决了查找之苦。所有窗口可直 接改变单元中的数值(赋值)。 ④号窗口为观察窗口,有时要观察的值太多,可将要观察的值选定到此窗口中进行 观察,方法是:在此窗口中单击鼠标右键出现浮动菜单,选中浮动菜单中“增加观察项” 且单击出现如图 1-5 所示的对话窗口,按窗口中的要求选中对应的各项,选中的变量
Fm观察变量输入对话框 变量选择 程序模块名 C Watch C Watch 青选择要观察的变量或地址 C Watchs 返回 图1-5模拟调试器窗口 马上出现在④号窗口中 ⑤主窗口,程序所在的窗口,也有浮动菜单,为调试程序提供了方便。 从上可见观察内容很多,一个屏幕上不可能容纳这么多内容,有的时候窗口很大, 就需要用窗口调整指令来调整好各个窗口位置大小。窗口整体移动的方法是用鼠标单击 上边框条,上边框变蓝,将鼠标左键按住整体移动,鼠标整个窗口一起移动,放到合适 位置,松开鼠标就行。窗口四边分别收缩或放大的方法是,将鼠标点击窗口边线,出现 左右或上下形式的箭头(注意此箭头一晃而过要认真捕捉),马上按住鼠标左键整体移动 鼠标,边线就跟着移动,移至合适位置,松开鼠标就行,有些窗口为竖式长方形,有些窗 口为横式长方形,若要调整它的形状,用窗口命令就行。 1.2.2项目 项目菜单为解决多个程序组合或混合编程(汇编语言C语言)的问题而设置。单击 主菜单中项目,出现下拉菜单,在下拉菜单中有新建项目、打开项目、关闭项目、项目 属性、编译当前文件、编译连接装载、加入模块文件、加入库文件、装入调试信息。下 面重点讨论几项,其他的自己照着操作不再一一叙述。 1.新建项目 单击“项目/新建项目”,出现对话框,在框重输入文件名字,新的项目就建立了 若有原项目,只是打开就行了(但源文件修改以后,每次就在“文件”菜单中选“保存” 或用保存工具图标保存文件) 2.编译文件 单击“项目/编译当前文件”或“项目/编译连接装载”(两种方式的区别在于前者 只编译,后者既编译又将编译后的代码下载到CPU中)将新编写的或打开的程序进行编 译,编译成功的话,下面的信息窗口( Massage)会出现新创建的文件名,且在窗口中出现 组装完成( ASSEMBLY COMPLETE),“0”个错误( ERROR)“0”个警告( WARNING)。系统 会自动生成列表文件和目标文件。若编译有错,信息窗口会指出错误在什么地方,反复 修改,直至编译通过为止 注意:若有一项错误,目标文件和列表文件就不能自动生成 3.项目属性
7 图 1-5 模拟调试器窗口 马上出现在④号窗口中。 ⑤主窗口,程序所在的窗口,也有浮动菜单,为调试程序提供了方便。 从上可见观察内容很多,一个屏幕上不可能容纳这么多内容, 有的时候窗口很大, 就需要用窗口调整指令来调整好各个窗口位置大小。窗口整体移动的方法是用鼠标单击 上边框条,上边框变蓝,将鼠标左键按住整体移动,鼠标整个窗口一起移动,放到合适 位置,松开鼠标就行。窗口四边分别收缩或放大的方法是,将鼠标点击窗口边线,出现 左右或上下形式的箭头(注意此箭头一晃而过要认真捕捉),马上按住鼠标左键整体移动 鼠标,边线就跟着移动,移至合适位置,松开鼠标就行,有些窗口为竖式长方形,有些窗 口为横式长方形,若要调整它的形状,用窗口命令就行。 1.2.2 项目 项目菜单为解决多个程序组合或混合编程(汇编语言 C 语言)的问题而设置。单击 主菜单中项目,出现下拉菜单,在下拉菜单中有新建项目、打开项目、关闭项目、项目 属性、编译当前文件、编译连接装载、加入模块文件、加入库文件、装入调试信息。下 面重点讨论几项,其他的自已照着操作不再一一叙述。 1.新建项目 单击“项目/新建项目”,出现对话框,在框重输入文件名字,新的项目就建立了。 若有原项目,只是打开就行了(但源文件修改以后,每次就在“文件”菜单中选“保存” 或用保存工具图标保存文件)。 2.编译文件 单击“项目/编译当前文件”或 “项目/编译连接装载”(两种方式的区别在于前者 只编译,后者既编译又将编译后的代码下载到 CPU 中)将新编写的或打开的程序进行编 译,编译成功的话,下面的信息窗口(Massage)会出现新创建的文件名,且在窗口中出现 组装完成(ASSEMBLY COMPLETE),“0”个错误(ERROR)“0”个警告(WARNING) 。系统 会自动生成列表文件和目标文件。若编译有错,信息窗口会指出错误在什么地方,反复 修改,直至编译通过为止。 注意:若有一项错误,目标文件和列表文件就不能自动生成。 3.项目属性
单击“项目/项目属性”出现对话框,框中第一页如图1-6所示 (1)C编译器页 工程设 ⑨c编译器|PLM编译器连接器 选择C編译器类型 cKei1编译器 C Franklin编译器 存储器模式 RM大小 小模式 (SMALL C小模式MAIL C紧凑模式〔 MPACT C中模式 MPACT C大模式 CARGE C大模式 LARGE 优化等级 其它选项 寄存器組 缺省值 编译控制项 缺省值 确 X取 图1-6工程设置对话框 SMAL、 COMPACT、LARE这些指令控制存储器模式选择。存储器模式对不同的变量定 义有所影响。 SMAL:小模式,所有函数和过程的变量及局部数据段被定义在8051片内数据存储 COMPACT:紧凑模式,所有函数和过程的变量及局部数据段被定义在8051片外数据存 储区中256字节。这种模式使用(eR0、@R1)访问外部数据存储器。 LARGE:紧凑模式,所有函数和过程的变量及局部数据段被定义在8051片内数据存储 区中64K字节空间。这种模式通过数据指针(DPTR)访问外部数据存储器。 CODE/ NOCODE:CODE指令在列表文件后附加上一个汇编记忆表,源程序中的每个函数 被表示为汇编代表。 OPTIMIZE(n):括号内n为一个0-5的十进制数,另外可选 OPTIMIZE(SIZE)和 OPTIMIZE( SPEED,以决定优化重点是放在代码长度上还是执行速度上。 RAM( SMALL、 COMPACT、 LARGE) RAM指令用来决定程序内存的大小,它影响跳转指令的编码。 RAM( SMALL):CALL和JM指令作为 ACALL和AJM指令的编码,最大程序空间可达2K 字节,整个用户程序必须分布在这2K字节空间内。 RoM( COMPACT):CAL指令以LCAL编码,函数内JMP指令以AJM编码,因此函数长
8 单击“项目/项目属性”出现对话框,框中第一页如图 1-6 所示 ⑴ C 编译器页 图 1-6 工程设置对话框 SMALL、COMPACT、LARGE 这些指令控制存储器模式选择。存储器模式对不同的变量定 义有所影响。 SMALL:小模式,所有函数和过程的变量及局部数据段被定义在 8051 片内数据存储 区。 COMPACT:紧凑模式,所有函数和过程的变量及局部数据段被定义在 8051 片外数据存 储区中 256 字节。这种模式使用(@R0、@R1)访问外部数据存储器。 LARGE:紧凑模式,所有函数和过程的变量及局部数据段被定义在 8051 片内数据存储 区中 64K 字节空间。这种模式通过数据指针(DPTR)访问外部数据存储器。 CODE/NOCODE:CODE 指令在列表文件后附加上一个汇编记忆表,源程序中的每个函数 被表示为汇编代表。 OPTIMIZE(n):括号内 n 为一个 0-5 的十进制数,另外可选 OPTIMIZE(SIZE) 和 OPTIMIZE(SPEED),以决定优化重点是放在代码长度上还是执行速度上。 RAM(SMALL、COMPACT、LARGE) RAM 指令用来决定程序内存的大小,它影响跳转指令的编码。 RAM(SMALL): CALL 和 JMP 指令作为 ACALL 和 AJMP 指令的编码,最大程序空间可达 2K 字节,整个用户程序必须分布在这 2K 字节空间内。 ROM(COMPACT):CALL 指令以 LCALL 编码,函数内 JMP 指令以 AJMP 编码,因此函数长
度不得超过2K字节,而整个程序长度不得超过64字节,这种用法必须根据不同的目的 而决定,看其是否比标准设置ROM( LARGE)效果更佳 ROM( LARGE):将CALL和JMP指令以LCAL和LJP编码。这样就允许不加限制地使 用整个地址空间,用户程序最大可达64K字节。 (2)PLM编译器页 工程设置 ⑨c编译器PL编译器|》连接器 忧化等级 RM大小 ]C小模式MAL 寄存器组 C中模式MEDI〕 C大模式LAGE 编译控制项 缺省值 缺省值 确认 x取消 图1—7工程设置对话框 oODE/ NOCODE:o0E控制表明开始列出生成标准汇编语言格式地目标代码,这些汇编 语言目标代码紧随源程序列表清单之后, NOCOD控制是在出现CODE控制之前,不列出所 生成地目标代码清单。注意: NOPRINT控制不能对CODE控制有抑制作用,而且 NOOBJECT 中也隐含了 NOCODE功能 INTVECTOR/NOINTVECTOR 在 INTVCTOR控制下,编译程序可为模块中每个中断过程产生一个字节入口的中断向 量。对中断n,中断向量入口的绝对地址为8n+3。当然,可以用ASM51单独建立中断向 量。在选用 NOINTVECTOR控制时,编译程序将不产生任何中断向量。 RAM( SMALL、 MEDUIM、 LARGE) RAM指令用来决定程序内存的大小,它影响跳转指令的编码。 RAM(SMAL):CAL和J指令作为ACAL和AJMP指令的编码,最大程序空间可达2K 字节,整个用户程序必须分布在这硎K字节空间内。8051为提高编码密度,仅在2K块内 转移和调用,尽可能不使用3个字节的调用和转移指令。 RoM( MEDUIM):将正在进行编译的模块适合 INBLOCK,而其他模块(包括来自PLM51.LIB
9 度不得超过 2K 字节,而整个程序长度不得超过 64K 字节,这种用法必须根据不同的目的 而决定,看其是否比标准设置 ROM(LARGE)效果更佳。 ROM(LARGE):将 CALL 和 JMP 指令以 LCALL 和 LJMP 编码。这样就允许不加限制地使 用整个地址空间,用户程序最大可达 64K 字节。 ⑵PL/M 编译器页 图 1-7 工程设置对话框 CODE/NOCODE:CODE 控制表明开始列出生成标准汇编语言格式地目标代码,这些汇编 语言目标代码紧随源程序列表清单之后,NOCOD 控制是在出现 CODE 控制之前,不列出所 生成地目标代码清单。注意:NOPRINT 控制不能对 CODE 控制有抑制作用,而且 NOOBJECT 中也隐含了 NOCODE 功能。 INTVECTOR/NOINTVECTOR 在 INTVCTOR 控制下,编译程序可为模块中每个中断过程产生一个字节入口的中断向 量。对中断 n,中断向量入口的绝对地址为 8n+3。当然,可以用 ASM51 单独建立中断向 量。在选用 NOINTVECTOR 控制时,编译程序将不产生任何中断向量。 RAM(SMALL、MEDUIM、LARGE) RAM 指令用来决定程序内存的大小,它影响跳转指令的编码。 RAM(SMALL): CALL 和 JMP 指令作为 ACALL 和 AJMP 指令的编码,最大程序空间可达 2K 字节,整个用户程序必须分布在这 2K 字节空间内。8051 为提高编码密度,仅在 2K 块内 转移和调用,尽可能不使用 3 个字节的调用和转移指令。 ROM(MEDUIM):将正在进行编译的模块适合INBLOCK,而其他模块(包括来自PLM51.LIB
的那些模块)可以任意安放,这样就需使一些调用成为长调用(3个字节)。但是大多数 的转移和大部分调用,仍能保持短编码形式。 RoM( LARGE):将CALL和JP指令以 LCALL和LJMP编码。这样就允许不加限制地使 用整个地址空间,用户程序最大可达64K字节。 OPTIMIZE(n):括号内n的可取值为一个0-3的十进制数,在产生目标代码中,该 控制实现各种优化处理。每一优化级包含了比优化级别低的所有优化处理功能。 REGISTERBANK(寄存器组控制) 其中,寄存器组值为0、1、2或3。在代码生成中, REGISTERBANK控制将确定选用 其四个8051寄存器组中的一个。对一个含有 USING属性的控制,能够由一个过程所替代 PL/M51认为,一个过程中断总是与他所中断的过程使用不同的寄存器组,因而如果在 个独立模块中为每个中断编译代码,则应在 REGISTERBANK控制下编译所有非中断代码 所有的低级中断和高级中断分别处在各自寄存器组的设置下。因此,不用 USING属性也 能避开引起的麻烦 (3)连接器页 编译器非L编译器连接器 库模式 小模式 (SMALL RAM大小 紫凑模式 (COMPACT)其它选项 C大模式 LARGE 「缺省值 定位控制 ode xdata Idata Pdata Stack Precede 主接控制项 缺省值确认×取消 图1—8工程设置对话框 该页中其它各项已介绍,下面只讲述定位控制项: 起始地址/段名,定位BIT段 DATA:起始地址/段名,定位DATA段 IDATA:起始地址/段名,定位 IDATA段。 STACK:段名,定位 STACK段。 CODE:起始地址/段名,定位CODE段
10 的那些模块)可以任意安放,这样就需使一些调用成为长调用(3 个字节)。但是大多数 的转移和大部分调用,仍能保持短编码形式。 ROM(LARGE):将 CALL 和 JMP 指令以 LCALL 和 LJMP 编码。这样就允许不加限制地使 用整个地址空间,用户程序最大可达 64K 字节。 OPTIMIZE(n):括号内 n 的可取值为一个 0-3 的十进制数,在产生目标代码中,该 控制实现各种优化处理。每一优化级包含了比优化级别低的所有优化处理功能。 REGISTERBANK(寄存器组控制) 其中,寄存器组值为 0、1、2 或 3。在代码生成中,REGISTERBANK 控制将确定选用 其四个 8051 寄存器组中的一个。对一个含有 USING 属性的控制,能够由一个过程所替代, PL/M51 认为,一个过程中断总是与他所中断的过程使用不同的寄存器组,因而如果在一 个独立模块中为每个中断编译代码,则应在 REGISTERBANK 控制下编译所有非中断代码, 所有的低级中断和高级中断分别处在各自寄存器组的设置下。因此,不用 USING 属性也 能避开引起的麻烦。 ⑶连接器页 图 1-8 工程设置对话框 该页中其它各项已介绍,下面只讲述定位控制项: BIT:起始地址/段名,定位 BIT 段。 DATA:起始地址/段名,定位 DATA 段。 IDATA: 起始地址/段名,定位 IDATA 段。 STACK:段名,定位 STACK 段。 CODE: 起始地址/段名,定位 CODE 段