基于Proteus和Keil C51的单片机设计与仿真
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.9 调试

编译成功,只能说明程序没有语法错误,但并不能说明程序没有逻辑错误,要经过调试,不断发现和排除逻辑错误,这样才能使程序逐渐实现预期的功能。执行菜单命令“De-bug”→“Start/Stop Debug Session”,或按组合键“Ctrl+F5”,即可进入调试状态。如果用的是评估版软件,就会弹出如图1-26所示的提示框,提示限制代码大小为2KB,单击“确定”按钮,提示框消失,进入调试状态。

图1-26 评估版软件提示框

进入调试状态后的界面与编辑状态相比有明显的变化,“Debug”菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图1-27所示。这些命令从左至右依次是“复位”、“运行”、“暂停”、“单步”、“过程单步”、“单步执行到函数外”、“运行到光标所在行”、“下一状态”、“打开跟踪”、“观察跟踪”、“反汇编窗口”、“观察窗口”、“代码作用范围分析”、“1#串行窗口”、“内存窗口”、“性能分析窗口”、“逻辑分析窗口”、“符号窗口”和“工具按钮”。

图1-27 调试状态下的工具条

调试程序就是执行程序,执行程序有多种方式,分为单步执行、过程单步执行、单步执行到函数外、运行到光标所在行和全速执行。单步执行是每按一下执行一个指令,若遇到函数(子程序),则跳入该函数,同样一步一步执行函数里的语句;过程单步执行也是每按一下执行一个指令,若遇到函数(子程序),如汇编语言中的子程序或C语言中的函数,就将该函数(或子程序)作为一个语句来全速执行;单步执行到函数外是先完成当时所执行的函数,然后跳出该函数,返回主程序;运行到光标所在行这一条最有用,程序从当前PC所在位置,全速执行到光标所在行;全速执行是指一行程序执行完后马上执行下一条,一直到执行完为止,中间不停止。一个程序只有全速执行能通过,才算调试通过。执行这些调试命令除了使用上述工具条外,还可以从“Debug”菜单中选择,或者采用快捷键。总之,每一个命令都可以用3种方法实现。在调试状态下,如果发现程序有错,可以直接修改源程序,但是,要使修改后的代码起作用,必须先退出调试环境,重新进行编译、链接后,再次进入调试。

调试程序中有一个非常重要的调试手段,称为断点设置。断点设置的方法有多种,常用的是在某一程序行设置断点。设置好断点后就可全速运行程序,程序一旦执行到该行就会停止,可在此观察有关变量值,以确定问题所在。

执行菜单命令“Debug”→“Insert/Remove Breakpoint”,可以设置或删除断点(也可以用鼠标在该行双击实现同样的功能);执行菜单命令“Debug”→“Enable/Disable Break-point”,可以开启或暂停光标所在行的断点;执行菜单命令“Debug”→“Disable All Break-point”,可以暂停所有的断点;执行菜单命令“Debug”→“Kill All Breakpoint”,可以清除所有的断点。

如图1-28所示,程序断点设置在第62行,当全速运行程序时,程序会在断点处(第62行)停下来。因为程序任务是对单片机P0和P1的操作,使P0和P1的每一位输出高/低的电平。打开外围设备窗口(Peripherals),选择I/O-Ports中的Port0和Port1,即P0和P1口。这时,会看到P0和P1口的每位输出电位与程序设计要求是一致的。

图1-28 调试状态——程序在断点处停下

至此,一个完整的工程项目建立、设置、编译、调试的全过程已经完成。其中,曾提到一些功能快捷键的使用,在实际的开发应用中运用快捷键可以大大提高工作效率,建议用户多使用。关于快捷键的更多、更详细的介绍,请查看Keil软件中的帮助文件。