新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机Keil软件仿真与调试技巧

单片机Keil软件仿真与调试技巧

作者:时间:2012-08-21来源:网络收藏

5.程序

源程序编译通过,表明语法正确,却并不能保证该程序能够正确运行。还需要对其逻辑功能进行具有很强的功能。

鼠标左击主菜单Debug一>Sta№top DebugSession子菜单或/编辑模式切换按钮。进入调试程序工作模式,窗口如图5所示。重复点击该按钮可以实现在编辑模式和调试模式之间进行切换。

图5程序调试运行
图5程序调试运行。

调试程序时的程序运行控制按钮从左到右依次为复位、连续运行,暂停、单步、过程单步、执行完当前子程序、运行到光标当前行。复位按钮模拟芯片的复位,它将使程序回到最开头处执行。当程序处于停止状态时复位才有效,程序处于运行状态时停止按钮才有效。

①为了方便观察程序调试过程中各变量和RAM单元的中间结果。点击主菜单View一>WatchCall Stack Window和View一>Memory Window打开观察变量窗13和存储器窗1:3进行显示。由于本例还要观察P1 13的输出变化,可以点击主菜单Peripherals一>I/O-Ports一>Port 1打开I/O 13 P1的观察窗13.

②程序调试。

程序可以单步执行或连续执行。连续执行是指一条指令执行完后接着连续立即执行下一条,中间不停止。这样程序执行的速度很快。可以看到程序执行的总体效果。即最终结果是正确或错误。但如果程序有错,则难以确认具体出错地方。例如本例中点击连续运行按钮后。P1口输出01H后便始终保持不变。这显然与花样彩灯程序的循环显示要求不符。程序运行出错,如图6所示。

图6程序调试时的连续运行
图6程序调试时的连续运行。

单步执行指每执行完一条指令后即停止。等待命令执行下一行程序,此时可以观察该条指令执行后得到的实际结果。对比分析是否与预期结果一致。

借此可以找到程序中的错误原因所在。这种方式的缺点是需要时间长,排查错误效率很低。尤其当程序很大时。

因此,对于用户确认没有错误的程序段可以采用连续运行。对怀疑出错或容易出错的地方则单步执行。对比排查错误。这样调试的效率将会高一些。

本例通过单步执行。发现程序运行过程中循环变量R3的值总在250和249之间变化,而且R1、R2、R7均始终无变化,如图7所示。对比程序分析,发现出现了死循环。原因在于第1条DJNZR3,DEL2的转移目的地址为DEL2,应该改为DEL3.

图7程序调试时的连续运行
图7程序调试时的连续运行。

回到编辑状态,修改为DJNZ R3,DEL3,编译后再次进入调试工作模式时,发现故障已经排除。



评论


相关推荐

技术专区

关闭