购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1.3 Keil程序调试与分析

前面讲述了如何在Keil中建立、编译、连接项目,并获得目标代码,但是做到这一步仅代表源程序没有语法错误,而源程序中存在的其他错误,必须通过调试才能发现并解决。事实上,除了极简单的源程序外,绝大多数的源程序都要经过反复调试才能得到正确的结果,因此,调试是软件开发中的一个重要环节。

1.寄存器和存储器窗口分析

进入调试状态后,执行菜单命令 “Debug” → “Run”,或者单击图标 ,全速运行源程序;执行菜单命令 “Debug” → “Step”,或者单击图标 ,单步运行源程序。在源程序运行过程中,项目工作区 (Project Workspace) 的 “Registers” 选项卡中将显示相关寄存器当前的内容。若在调试状态下未显示此窗口,可执行菜单命令 “View” → “Project Window” 将其打开。

在源程序运行过程中,可以通过存储器窗口 (Memory Window) 来查看存储区中的数据。在存储器窗口的上部,有供用户输入存储器类型的起始地址的 “Address” 栏,用于设置关注对象所在的存储区域和起始地址,如 “D:0x30”。其中,前缀表示存储区域,冒号后为要观察的存储单元的起始地址。常用的存储区前缀有 “d” 或 “D” (表示内部RAM的直接寻址区)、“i” 或 “I” (表示内部RAM的间接寻址区)、“x” 或 “X” (表示外部RAM区)、“c” 或 “C” (表示ROM区)。由于P0端口属于特殊功能寄存器 (SFR),片内RAM字节地址为80H,所以在存储器窗口的 “Address” 栏中输入 “d:80h” 时,可以看到P0端口的当前运行状态为FE,如图1-12所示。

图1-12 存储器窗口

2.延时子程序的调试与分析

在源程序编辑状态下,执行菜单命令 “Project” → “Options for Target'Target 1'”,或者在工具栏中单击图标 ,在弹出的对话框中选择 “Target” 选项卡,在 “Xtal(MHz)” 栏中输入12,即设置单片机的晶振频率为12MHz。然后在工具栏中单击图标 ,再次对源程序进行编译。

执行菜单命令 “Debug” → “Start/Stop Debug Session”,或者在工具栏中单击图标 ,进入调试状态。在调试状态下,单击图标 ,使光标首次指向 “LCALL DELAY” 所在行后,项目工作区 “Registers” 选项卡中 “Sys” 项的sec值为0.00000400,表示进入首次运行到 “LCALL DELAY” 所在行时花费了0.00000400s,如图1-13所示。

图1-13 光标首次指向 “LCALL DELAY” 所在行

再次单击图标 ,光标指向 “RL A” 所在行,“Sys” 项的sec 值为0.79846900,如图1-14所示。因此,DELAY的延时时间为二者之差,即0.79846500s,也就是说延时约为0.8s。

3.P0端口运行模拟分析

执行菜单命令 “Debug” → “Start/Stop Debug Session”,或者在工具栏中单击图标 ,进入调试状态。

执行菜单命令 “P eripherals” → “I/O P orts” → “P ort 0”,弹出 “P arallel P ort 0” 窗口。“Parallel Port 0” 窗口的初始状态如图1-15 (a) 所示,表示P0端口的初始值为0xFF,即FFH。单击图标 或多次单击图标 后,“P arallel P ort 0” 窗口的状态将会发生变化,如图1-15 (b) 所示,表示P0端口当前为0xFB,即FBH。

图1-14 光标首次指向 “RL A”

图1-15 P0端口状态 wPeybvx+ceIn7742PCMsZg4O1IqHdpQEXaLx8Vd/KMxhpJpXqs+1bnU6dG4uqx7z

点击中间区域
呼出菜单
上一章
目录
下一章
×