Keil程序调试窗口1存储器窗口.docx

上传人:b****1 文档编号:14890912 上传时间:2023-06-28 格式:DOCX 页数:8 大小:100.22KB
下载 相关 举报
Keil程序调试窗口1存储器窗口.docx_第1页
第1页 / 共8页
Keil程序调试窗口1存储器窗口.docx_第2页
第2页 / 共8页
Keil程序调试窗口1存储器窗口.docx_第3页
第3页 / 共8页
Keil程序调试窗口1存储器窗口.docx_第4页
第4页 / 共8页
Keil程序调试窗口1存储器窗口.docx_第5页
第5页 / 共8页
Keil程序调试窗口1存储器窗口.docx_第6页
第6页 / 共8页
Keil程序调试窗口1存储器窗口.docx_第7页
第7页 / 共8页
Keil程序调试窗口1存储器窗口.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Keil程序调试窗口1存储器窗口.docx

《Keil程序调试窗口1存储器窗口.docx》由会员分享,可在线阅读,更多相关《Keil程序调试窗口1存储器窗口.docx(8页珍藏版)》请在冰点文库上搜索。

Keil程序调试窗口1存储器窗口.docx

Keil程序调试窗口1存储器窗口

Keil程序调试窗口1-存储器窗口

Keil程序调试窗口

上一讲中我们学习了几种常用的程序调试方法,这一讲中将介绍Keil提供各种窗口如输出窗口、观察窗口、存储器窗口、反汇编窗口、串行窗口等的用途,以及这些窗口的使用方法,并通过实例介绍这些窗口在调试中的使用。

一、程序调试时的常用窗口

Keil软件在调试程序时提供了多个窗口,主要包括输出窗口(OutputWindows)、观察窗口(Watch&CallStatckWindows)、存储器窗口(MemoryWindow)、反汇编窗口(DissamblyWindow)串行窗口(SerialWindow)等。

进入调试模式后,可以通过菜单View下的相应命令打开或关闭这些窗口。

图1是输出窗口、观察窗口和存储器窗口,各窗口的大小可以使用鼠标调整。

进入调试程序后,输出窗口自动切换到Command页。

该页用于输入调试命令和输出调试信息。

对于初学者,可以暂不学习调试命令的使用方法。

图1调试窗口(命令窗口、存储器窗口、观察窗口)

1、存储器窗口

存储器窗口中可以显示系统中各种内存中的值,通过在Address后的编缉框内输入“字母:

数字”即可显示相应内存值,其中字母可以是C、D、I、X,分别代表代码存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部RAM空间,数字代表想要查看的地址。

例如输入D:

0即可观察

图4工程窗口寄存器页

#include"reg51.h"

sbitP1_0=P1^0;//定义P1.0

voidmDelay(unsignedcharDelayTime)

{unsignedintj=0;

for(;DelayTime>0;DelayTime--)

{for(j=0;j<125;j++){;}}

}

voidmain()

{unsignedinti;

for(;;){mDelay(10);//延时10

毫秒

i++;

if(i==10)

{P1_0=!

P1_0;

i=0;}

}}

这个程序的工作过程是:

不断调用延时程序,每次延时10毫秒,然后将变量I加1,随后对变量I进行判断,如果I的值等于10,那么将P1.0取反,并将I清0,最终的执行效果

是P1.0每0.1S取反一次。

输入源程序并以exam2.c为文件名存盘,建立名为exam2的项目,将exam2.c加入项目,编译、连接后按Ctrl+F5进入调试,按F10单步执行。

注意观察窗口,其中有一个标签页为Locals,这一页会自动显示当前模块中的变量名及变量值。

可以看到窗口中有名为I的变量,其值随着执行的次数而逐渐加大,如果在执行到mDelay(10)行时按F11跟踪到mDelay函数内部,该窗口的变量自动变为DelayTime和j。

另外两个标签页Watch#1和Watch#2可以加入自定义的观察变量,点击“typeF2toedit”然后再按F2即可输入变量,试着在Watch#1中输入I,观察它的变化。

在程序较复杂,变量很多的场合,这两个自定义观察窗口可以筛选出我们自己感兴趣的变量加以观察。

观察窗口中变量的值不仅可以观察,还可以修改,以该程序为例,I须加10次才能到10,为快速验证是否可以正确执行到P1_0=!

P1_0行,点击

I后面的值,再按F2,该值即可修改,将I的值改到9,再次按F10单步执行,即可以很快执行到P1_0=!

P1_0程序行。

该窗口显示的变量值可以以十进制或十六进制形式显示,方法是在显示窗口点右键,在快捷菜单中选择如图5所示。

点击View->DissamblyWindow可以打开反汇编窗口,该窗口可以显示反汇编后的代码、源程序和相应反汇编代码的混合代码,可以在该窗口进行在线

汇编、利用该窗口跟踪已找行的代码、在该窗口按汇编代码的方式单步执行,这也是一个重要的窗口。

打开反汇编窗口,点击鼠标右键,出现快捷菜单,如图6所示,其中MixedMode是以混合方式显示,AssemblyMode是以反汇编码方式显示。

程序调试中常使用设置断点然后全速运行的方式,在断点处可以获得各变量值,但却无法知道程序到达断点以前究竟执行了哪些代码,而这往往是需要了解的,为此,Keil提供了跟踪功能,在运行程序之前打开调试工具条上的允许跟踪代码开关,然后全速运行程序,当程序停止运行后,点击查看跟踪代码按钮,自动切换到反汇编窗口,

图5设定观察窗的显示方式

图6反汇编窗口

如图6所示,其中前面标有“-”号的行就是中断以前执行的代码,可以按窗口边的上卷按钮向上翻查看代码执行记录。

利用工程窗口可以观察程序执行的时间,下面我们观察一下该例中延时程序的延时时间是否满足我们的要求,即是否确实延时10毫秒,展开工程窗口Regs页中的Sys目录树,其中的Sec项记录了从程序开始执行到当前程序流逝的秒数。

点击RST按钮以复位程序,Sec的值回零,按下F10键,程序窗口中的黄色箭头指向mDelay(10)行,此时,记录下Sec值为

0.00038900,然后再按F10执行完该段程序,再次查看Sec的值为0.01051200,两者相减大约是0.01秒,所以延时时间大致是正确的。

读者可以试着将延时程序中的unsignedint改为unsignedchar试试看时间是否仍正确。

注意,使用这一功能的前提是在项目设置中正确设置晶振的数值。

Keil提供了串行窗口,我们可以直接在串行窗口中键入字符,该字符虽不会被显示出来,但却能传递到仿真CPU中,如果仿真CPU通过串行口发送字符,那么这些字符会在串行窗口显示出来,用该窗口可以在没有硬件的情况下用键盘模拟串口通讯。

下面通过一个例子说

明Keil串行窗口的应用。

该程序实现一个行编缉功能,每键入一个字母,会立即回显到窗

口中。

编程的方法是通过检测RI是否等于1来判断串行口是否有字符输入,如果有字符输

入,则将其送到SBUF,这个字符就会在串行窗口中显示出来。

其中ser_init是串行口初始化程序,要使用串行口,必须首先对串行口进行初始化。

例3:

MOVSP,#5FH;堆栈初始化

CALLSER_INIT;串行口初始化

LOOP:

JBCRI,NEXT;如果串口接收到字符,转

JMPLOOP;否则等待接收字符

NEXT:

MOVA,SBUF;从SBUF中取字符

MOVSBUF,A;回送到发送SBUF中

SEND:

JBCTI,LOOP;发送完成,转LOOP

JMPSEND;否则等待发送完

SER_INIT:

;中断初始化

MOVSCON,#50HORLTMOD,#20HORLPCON,#80H

MOVTH1,#0FDH;设定波特率

SETBTR1;定时器1开始运行

SETBREN;允许接收

SETBSM2

RETEND

输入源程序,并建立项目,正确编译、连接,进入调试后,全速运行,点击串行窗口1按钮,即在原源程序窗口位置出现一个空白窗口,击键,相应的字母就会出现在该窗口中。

在窗口中击鼠标右键,出现一个弹出式菜单,选择“AsciiMode”即以Ascii码的方式显示接收到的数据;选择“HexMode”以十六进制码方式显示接收到的数据;选择“ClearWindow”可以清除窗口中显示的内容。

由于部份CPU具有双串口,故Keil提供了两个串行窗口,我们选用的89C51芯片只有一个串行口,所以Serial2串行窗口不起作用。

小技巧:

凡是鼠标单击然后按F2的地方都可以用鼠标连续单击两次(注意:

不是双击)来替代。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2