用WAVE6000编辑、调试、仿真单片机程序

🏠 首页 《无线电》杂志 2005年 🔗 第10期 🔗 第42页 分类:电脑·单片机·通信 🔗 黄有全 🔗, 李桂平 🔗

Wave6000是一款功能强大的优秀的单片机程序编辑、调试、仿真中文Windows软件。该软件可以配合硬件进行单片机的硬件仿真,也可以单独进行单片机的软件仿真。利用该软件进行单片机软件的编辑调试和模拟仿真,结合一台写码器,就可进行低投入的单片机的开发工作。本文结合笔者的使用经验和指导学生使用过程中常见的问题谈谈Wave6000在编辑调试程序和软件仿真时的使用技巧。


1. 软件特点

图1
图1 🔍原图 (534×429)

(1)Wave6000 及Keil uVision 双平台:Wave6000集成开发环境的中/英文界面可任选,用户源程序的大小没有任何限制。有丰富的窗口显示方式,多方位、动态地展示仿真的各种过程,使用极为便利。仿真器同时还可以直接工作于Keil uVision 调试环境下,适应不同的用户操作习惯。

(2) 两种工作模式 :软件模拟仿真(不用仿真器也能模拟运行用户程序)和硬件仿真。

(3) 真正集成调试环境 :集成了编辑器、编译器、调试器,源程序的编辑、编译、下载、调试全部可以在一个环境下完成,见图1。多种仿真器、各种CPU 仿真全部集成在一个环境下。可仿真MCS51 系列、MCS196 系列、Microchip PIC 系列CPU。

(4) 多语言多模块混合调试 :支持ASM(汇编)、PLM 、C 语言多模块混合源程序调试,在线直接修改、编译、调试源程序。如果源程序有错,可直接定位错误所在行。

(5) 功能强大的变量观察 :可直接点击屏幕观察变量,在源程序窗口,点击变量就可以观察此变量的值,方便快捷。支持C 语言的复杂类型,树状结构显示变量,强大的书签、断点管理功能,书签、断点功能可快速定位程序,为编写、查找、比较程序提供帮助。

(6) 外设管理功能 :外设管理可以让您在调试程序时,观察到端口、定时器、串行口中断、外部中断相关的寄存器的状态, 更可以完成这些外设的初始化程序,包括C 语言和汇编语言,而您所做的只是填表,定义外设所要完成的功能。

(7)独特的反汇编功能:控制文件方式的反汇编功能, 可以将机器码反汇编成工整的汇编语言,通过控制文件可以定义程序中数据区、程序区、无用数据区,还可将一些数据、地址定义成符号,便于阅读。丢了源程序,它可帮你迅速恢复。


2. 编辑单片机程序时的常见问题及其解决办法

图2
图2 🔍原图 (454×325)

(1)编辑调试单片机汇编程序的步骤

图3
图3 🔍原图 (212×296)

● 建立新程序 :选择菜单[文件 | 新建文件]功能,出现一个文件名为NONAME1 的源程序窗口,在此窗口中输入程序。

● 保存程序:选择菜单[文件 | 保存文件]或[文件 | 另存为]功能,给出文件所要保存的位置,输入文件名,注意文件的后缀必须为ASM。

● 建立新的项目:选择菜单[文件 | 新建项目]功能,加入模块文件,加入包含文件,保存项目。

● 设置项目:选择菜单[设置 | 仿真器设置]功能或按“仿真器设置”快捷图标或双击项目窗口的第一行来打开“仿真器设置”对话框,在“仿真器”栏中选择仿真器类型和配置的仿真头以及所要仿真的单片机,见图2。设置好“语言” 栏,如果你的程序是C 语言或INTEL 格式的汇编语言,可根据你安装的Keil 编译器版本选择“Keil C (V4 或更低)”还是“Keil C (V5 或更高)”。按“好”确定。当仿真器设置好后,可再次保存项目。

● 编译程序:选择菜单[项目 | 编译]功能或按编译快捷图标或F9 键,编译你的项目。在编译过程中,如果有错,可以在信息窗口中显示出来,并给出错误类型和错误代码以及错误所在的行号,双击错误信息,可以在源程序中定位所在行。纠正错误后,再次编译直到没有错误。在编译之前,软件会自动将项目和程序存盘。编译程序过程只能发现和解决程序中的语法错误。在编译没有语法错误之后,就可调试程序了。


(2)常见的语法错误及解决办法

图4
图4 🔍原图 (275×267)

● 操作码错误,错误代码330。原因是输入了非法的指令或仿真器的CPU设置错误。当输入了非法的指令,如将MOV输入成MON或MQV,只要修改指令即可。当仿真器设置错误时,如调试PIC单片机程序而仿真器设置成MCS-8031(默认设置),此时应打开仿真器设置对话框(图2),重新设置仿真器。

● 操作数错误,错误代码331。指令中的操作数与指令要求不符,如指令“MOV R0, R1”中的数据与数据传送指令MOV的要求不符,要改为符合要求的数据类型。这要求使用者必须熟悉每条指令及其数据类型。

● 重复定义错误,错误代码334。程序中在两个及两个以上地方定义了同一个符号常数或标号。修改符号或标号的名称,注意,使用这些标号的位置也要作相应修改。

● 符号未定义错误,错误代码353。程序中使用的符号常数或标号未经定义或与定义的有差别,可以在任何位置重新定义所使用的符号和标号。

● 数据格式错误,错误代码353,当使用十六进制数据最高位大于9时,如果不在前面加0,编译系统就会将该数据看成是标号,如“B8H”要写成“0B8H”。

● 跳转出范围错误,错误代码347。相对跳转指令的跳转范围与本指令地址相距-128~127字节,当跳转目标地址标号超过范围时,就出现跳转出范围错误。解决办法是先跳转到范围内的位置,在该位置上再用长跳转指令跳转到超出范围的目标地址。


3. 单片机程序的软件调试和仿真

(1)软件调试、仿真前,将数据存储器、寄存器和各种外设模块的窗口调出来。数据存储器和寄存器见图2的左边,调试程序时可以观察RAM单元和各寄存器中的内容是否与要求一致。端口是重要的外设,见图3,调试过程中可观察输出数据和控制信号输出是否正确,也可用鼠标点击某个端口模拟数据输入或按键的按下和松开。程序中一般都会用到定时器,将定时器窗口(图4)打开,可以观察定时器的运行情况。如果用到串行口和中断则可以打开串行口窗口(图5)和中断窗口(图6),以便在调试程序时观察这些模块的变化情况。

(2)单步调试程序。选择[执行 | 跟踪]功能或按跟踪快捷图标或按F7进行单步跟踪调试程序。单步跟踪就是逐条指令地执行程序,若有子程序调用,也会跟踪到子程序中去。你可以观察程序每步执行的结果,“=>”所指的就是下次将要执行的程序指令。单步执行过程较慢,便于详细分析程序的逻辑结构和数据变化过程。

(3)“执行到光标处”的功能。将光标移到程序想要暂停的地方,选择菜单[执行| 执行到光标处]功能或F4 键或选择弹出菜单的“执行到光标处”功能。程序全速执行到光标所在行。

(4)设置断点。将光标移至此行源程序窗口左边的灰色区,光标变成“手指圈”,单击左键设置断点,也可以用弹出菜单的“设置/取消断点”功能或用Ctrl+F8 组合键设置断点。如果断点有效图标为“红圆绿勾”,无效断点的图标为“红圆黄叉”。断点设置好后,就可以用全速执行的功能, 全速执行程序,当程序执行到断点时,会暂停下来,这时你可以观察程序中各变量的值, 及各端口的状态,判断程序是否正确。

调试仿真过程中,如果RAM、寄存器和各外设模块的内容与程序逻辑要求不一致,则要从程序逻辑结构方面查找原因,修改程序结构和语句,直到符合要求,完成软件模拟仿真。

用写码器将软件模拟调试和仿真好的程序的机器码(与所编辑的程序同名同路径,扩展名为HEX)写入芯片中,只要硬件电路没有错误,插入写好程序的芯片后,一般目标板都能正常工作。

Wave6000可以从网站http//www.wave-cn.com上免费下载。

文/黄有全 李桂平