X-*运行伟福汇编器汇编S1.ASMS1.ASM>行:5,错误331:操作数错:@D<S1.ASM》arese图2.12编译连接出错信息X运行伟福汇编器汇编:S1.ASM《S1.ASM>保存目标文件D:MYDOCUMEHTS\教学\实验\实验IS1.HEX(0000H-000DH)保存目标文件D:UMYDOCUMEKTS\教学\实验\实验IS1.BIH(0000H-000DH)auessa图2.13编译连接正确信息(5)单击快捷工具栏中的“跟踪”图标或按F7键启动单步跟踪调试程序,如图2.14所示。单步跟踪就是一条指令一条指令地执行,若有子程序调用,也会跟踪到子程序中去。这种方式可以观察程序每一条指令的执行的结果,光标“=》”所指的就是下次将要执行的程序指令。源程序窗口最左边的“。”代表此行为有效程序,此行在编译过程中产生了可以指行的机器指令。口区W伟福600D软件模拟器(8031/32)[D:MYDOCUMENTS\教学\实验实验S1.PRJ】文件)编验)提索(项目)执行()审口)外设)仿真器)帮助)区XeO·eeO四国日SI.ASM1Blockequ6000h起始地址dptr,#Biockmovmovr0.#256:清256字节mova,#0Loop:movxedptrra指向下一个地址incdptrdinz记数减一ro,Loop13mpend一H3:1InsertPC:0003HD:MYDOCUNEKIS\教学(实验|实验IS1.ASM就绪执行时间:4,000.0usDPTR:6000HFC:0003H图2.14启动单步调试程序跟踪调试执行速度较慢,也可以采用单步调试(快捷图标为此时若有子程序15
图 2.12 编译连接出错信息 图 2.13 编译连接正确信息 (5) 单击快捷工具栏中的“跟踪” 图标 或按F7键启动单步跟踪调试程序,如图 2.14所示。单步跟踪就是一条指令一条指令地执行,若有子程序调用,也会跟踪到子程 序中去。这种方式可以观察程序每一条指令的执行的结果,光标“=>”所指的就是下次 将要执行的程序指令。源程序窗口最左边的“o”代表此行为有效程序,此行在编译过 程中产生了可以指行的机器指令。 图 2.14 启动单步调试程序 跟踪调试执行速度较慢,也可以采用单步调试(快捷图标为 ),此时若有子程序 15
调用,不会跟踪到子程序中去,而是将子程序一次执行完成。还可以单击快捷图标将I停止程序运行,单击快捷图标IK将复位CPU。调启动程序全速运行,单击快捷图标试时除了上迷快捷图标之外,还可以采用“执行到光标处”的功能,先将鼠标指向程序想要暂停的地方,例如程序中最后一条指令“LJMPS”,单击鼠标右键,弹出一个右键菜单,选择右键菜单中的“执行到光标处”,程序将全速执行到指定行暂停,如图2.15所示。右键菜单中还有其他一些功能,用户可以自己通过实践和阅读伟福仿真器的说明书来逐步掌握。下面介绍一下设置断点功能。将鼠标移到源程序窗口的左边灰色区,光标变成“手指圈”,单击左键设置断点,也可以用右键菜单的“设置/取消断点”功能或用Ctr1+F8组合键设置断点。如果断点有效图标为“红圆绿勾”,无效断点的图标为“红圆黄叉”。执行到光标处(C)F4设置PC添加观察项CtrI+F7编辑观察项Ctrl+F5转到指定行G).Ctrl+G转到指定地址/标号Ctrl+A转到当前PC所在行)Ctr1+P图1.15部分右键菜单断点设置好后,就可以用全速执行的功能,当程序执行到断点时,会暂停下来,这你可以观察程序中各变量的值,及各端口的状态,判断程序是否正确。在程序调试过程中单击CPU快捷图标,可以观察CPU的运行状态,此时源程序窗口将出现反汇编(Disassembly)结果,以及工作寄存器和CPU寄存器窗口,如图2.16所示。可以通过这些窗口观察程序运行时CPU内部寄存器的变化情况。请读者在对上述程序进行调试的过程中,学会观察这些窗口中不同寄存器内容的状态,从而判断程序运行是否正常。16
调用,不会跟踪到子程序中去,而是将子程序一次执行完成。还可以单击快捷图标 将 启动程序全速运行,单击快捷图标 停止程序运行,单击快捷图标 将复位CPU。调 试时除了上述快捷图标之外,还可以采用“执行到光标处”的功能,先将鼠标指向程序 想要暂停的地方,例如程序中最后一条指令“LJMP $”,单击鼠标右键,弹出一个右键 菜单,选择右键菜单中的“执行到光标处”,程序将全速执行到指定行暂停,如图2.15 所示。 右键菜单中还有其他一些功能,用户可以自己通过实践和阅读伟福仿真器的说明书 来逐步掌握。下面介绍一下设置断点功能。 将鼠标移到源程序窗口的左边灰色区,光标变成“手指圈”,单击左键设置断点, 也可以用右键菜单的“设置/取消断点”功能或用Ctrl+F8组合键设置断点。如果断点有 效图标为“红圆绿勾”,无效断点的图标为“红圆黄叉”。 图1.15 部分右键菜单 断点设置好后,就可以用全速执行的功能,当程序执行到断点时,会暂停下来,这 你可以观察程序中各变量的值,及各端口的状态,判断程序是否正确。 在程序调试过程中单击CPU快捷图标 ,可以观察CPU的运行状态,此时源程序窗 口将出现反汇编(Disassembly)结果,以及工作寄存器和CPU寄存器窗口,如图2.16所示。 可以通过这些窗口观察程序运行时CPU内部寄存器的变化情况。请读者在对上述程序进 行调试的过程中,学会观察这些窗口中不同寄存器内容的状态,从而判断程序运行是否 正常。 16
CPU快捷图标区W伴福80软件模拟器(8031/32)[D:MYDOCMEHTS\数学!实验实验1SPR)文件)编()我索)项目)执行)审口()外设()仿真器()帮助H国O5OeKO.国国国国园·园Si ASw DisassemblyDH906000MONDPTR,#6000H超始地址#B1ock0003H7800OBO1OOHmov1O,#256清256字节05H7400MOVA#OOH,#0TOV007HF0MOVXBDPTR,ABdptrraLoopmovx:指向下一个址bn008HA3INCDPTRne"dperO9HDEFCDJNZRO,0007Hdina:记数减一ro,Loop00BH02000BLJKP000BH13m0O0DOEH00HOP00O0OOFHO010H00NOP反汇编窗口NOP0011H00-InsertFC:0003HB:VTDOCUN3TS(教学\实验1实验1S1.AS3:1网名称名称鱼名称值名称值000拉100000000004BFYnO工作寄存器窗口CPU寄存器窗口0n00--D:00BA30:0)7OTHEACC:BOKT07K就诺执行时间:4,000.0usPC:0003HDPTR8000KA.0OHPSN:0OKSPOTH图2.16CPU运行状态观寨窗口伟福集成调试软件中还提供了一个DATA 快捷图标图单击该图标右边的小箭头,出现如图2.17所存储器空间选择菜单。通过该菜单可以分别观察8051单片机内部数据存储器空间(DATA)、程序存储器空间(CODE)、外部数据存储器空间(XDATA)、外部数据存储器分页空间(PDATA)以及位寻址空间(BIT)。图2.18所示为本实验程序运行后的XDATA空间数据变化的情况。CODEXXCODESFFOFFFFFFFPFFFFFFFFFFFFFFF-60000000000000000000000000:0601000000000000160200000000000DATA6030000000:00:000000VCODE6040000000000000000000000001XDATAPDATACODEXDATABIT图2.17数据空间菜单图2.18外部数据存储器XDATA空间窗口至此,已经介绍了如何应用伟福集成软件开发环境调试8051单片机汇编语言程序的基本方法,读者可以通过实际应用来加深理解,例如若要将从6000H开始的256个字17
CPU 快捷图标 反汇编窗口 工作寄存器窗口 CPU 寄存器窗口 图 2.16 CPU 运行状态观察窗口 伟福集成调试软件中还提供了一个 DATA 快捷图标 ,单击该图标右边的小箭 头,出现如图 2.17 所存储器空间选择菜单。通过该菜单可以分别观察 8051 单片机内部 数据存储器空间(DATA)、程序存储器空间(CODE)、外部数据存储器空间(XDATA)、外部 数据存储器分页空间(PDATA)以及位寻址空间(BIT)。图 2.18 所示为本实验程序运行后 的 XDATA 空间数据变化的情况。 图 2.17 数据空间菜单 图 2.18 外部数据存储器 XDATA 空间窗口 至此,已经介绍了如何应用伟福集成软件开发环境调试 8051 单片机汇编语言程序 的基本方法,读者可以通过实际应用来加深理解,例如若要将从 6000H 开始的 256 个字 17
节外部数据存储器块的内容置成11H值,请修改以上程序完成此操作,注意在程序调试过程中数据的变化情况。3.二进制数转换成二一十进制数(BCD码)程序编写程序将累加器A中一个给定的二进制数,转换成三个二一十进制数(BCD码),并存入Result开始的三个单元。程序参考流程如下:给出要转换的二进制数2将数除以100,得百位数文保存百位数+将余数再除以10,得十位数1保存十位数+余数为个位数,将其保存★结束通过本实验学习简单的数值转换算法,了解数值的各种表达方法。同时进一步熟悉伟福单片机实验系统以及集成开发软件环境的使用方法。按照前面介绍的仿真调试方法,启动伟福集成开发环境,用“执行到光标处”功能,启动程序运行到最后一条指令处,然后单击图2.17存储器空间菜单中的“DATA”选项,打开8051内部数据存储器空间,如图2.19所示,可以看到已经将A中原来的内容“123H”拆为了三个BCD码“1”“2”和“3”,并分别存入了从“Result”(20H)开始的三个单元中。区DATADATAX00000000一0000000000000000R0000001000000000000000000000000地址:0020H图2.19内部数据存储器DATA空间窗口18
节外部数据存储器块的内容置成 11H 值,请修改以上程序完成此操作,注意在程序调试 过程中数据的变化情况。 3. 二进制数转换成二 - 十进制数(BCD 码)程序 编写程序将累加器 A 中一个给定的二进制数,转换成三个二 - 十进制数(BCD 码), 并存入 Result 开始的三个单元。程序参考流程如下: 通过本实验学习简单的数值转换算法,了解数值的各种表达方法。同时进一步熟悉 伟福单片机实验系统以及集成开发软件环境的使用方法。按照前面介绍的仿真调试方 法,启动伟福集成开发环境,用“执行到光标处”功能,启动程序运行到最后一条指令 处,然后单击图 2.17 存储器空间菜单中的“DATA”选项,打开 8051 内部数据存储器空 间,如图 2.19 所示,可以看到已经将 A 中原来的内容“123H” 拆为了三个 BCD 码“1”、 “2”和“3”,并分别存入了从“Result”(20H)开始的三个单元中。 图 2.19 内部数据存储器 DATA 空间窗口 18
4.二进制数转换成ASCII码程序此实验主要让学生了解数值的二进制表示和ASCII码表示之间的区别,利用查表功能快速地进行数值转换。编写程序,将累加器A中的内容拆为二个ASCII码,并存入Result开始的二个单元。程序参考流程如下:给出要转换数BCD码1取出BCD码高四位+查表得到ASCI码+保存高位ASCI码+取出BCD码低四位+查表得到ASCI码+保存低位ASCI码+结束按照前面介绍的调试方法,启动伟福集成开发环境,用“执行到光标处”功能,启动程序运行到最后一条指令处,然后单击图2.17存储器空间菜单中的“DATA”选项,打开8051内部数据存储器空间:如图2.20所示,可以看到已经将A中原来的二进制数“01000011”拆为了2个ASCII码“34”和“33”,并分别存入了从“Result”(20H)开始的2个单元中。区DATADATAX0000000000000000一0000000000001000000010000180000000000A28000000000000000000000000000000000000000000000000地址:0020H图2.20从DATA窗口观察程序运行结果19
4. 二进制数转换成 ASCII 码程序 此实验主要让学生了解数值的二进制表示和 ASCII 码表示之间的区别,利用查表功 能快速地进行数值转换。 编写程序,将累加器 A 中的内容拆为二个 ASCII 码, 并存入 Result 开始的二个单 元。程序参考流程如下: 按照前面介绍的调试方法,启动伟福集成开发环境,用“执行到光标处”功能,启 动程序运行到最后一条指令处,然后单击图 2.17 存储器空间菜单中的“DATA”选项, 打开 8051 内部数据存储器空间,如图 2.20 所示,可以看到已经将 A 中原来的二进制数 “01000011” 拆为了 2 个 ASCII 码“34”和“33”,并分别存入了从“Result”(20H) 开始的 2 个单元中。 图 2.20 从 DATA 窗口观察程序运行结果 19