<meta name="keywords" content="必胜时时彩开户,keywords" /> Keil教程(3) 联系我们

Keil教程(3)

Keil  法式模范模范调试窗口

上一讲中我们学习了几种经常应用的法式模范模范调试措施,这一讲中将简介 Keil  供应种种窗口如 输入窗口、不雅不雅察窗口、存储器窗口、反汇编窗口、串行窗口等的用处,和这些窗口的应用 措施,并经由历程实例简介这些窗口在调试中的应用。

一、法式模范模范调试时的经常应用窗口

Keil 软件在调试法式模范模范时供应了多个窗口,主要网罗输入窗口(Output  Windows)、不雅不雅察 窗口(Watch&Call Statck Windows)、存储器窗口(Memory Window)、反汇编窗口(Dissambly Window)串行窗口(Serial Window)等。进入调试形式后,可以经由历程菜单 View 下的响应命 令掀开或关闭这些窗口。

图 1 是输入窗口、不雅不雅察窗口和存储器窗口,各窗口的年夜小可以应用鼠标调剂。进入调试 法式模范模范后,输入窗口自动切换到 Command 页。该页用于输入调试敕令和输入调试信息。关于 初学者,可以暂不学习调试敕令的应用措施。

图 1  调试窗口(敕令窗口、存储器窗口、不雅不雅察窗口)

1、存储器窗口

?
存储器窗口中可以显示系统中种种内存中的值,经由历程在 Address 后的主笔框内输入“字 母:数字”便可显示照顾内存值,其中字母可以是 C、D、I、X,划分代表代码存储空间、 直接寻址的片内存储空间、直接寻址的片内存储空间、扩年夜的外部 RAM 空间,数字代表想 要检查的地址。例如输入 D:0 便可不雅不雅察到地址 0 泉源的片内 RAM 单元值、键入 C:0 即 可显示从 0 泉源的 ROM 单元中的值,即检查法式模范模范的二进制代码。该窗口的显示值可以以各 种形式显示,如十进制、十六进制、字符型等,改变显示要领的措施是点鼠标右键,在弹出 的快捷菜单被选择,该菜单用脱离条分红三部门,其中第一部门与第二部门的三个选项为同 一级别,选中第一部门的任一选项,内容将以整数形式显示,而选中第二部门 的  Ascii  项则将以字符型式显示,选中 Float  项将相邻四字节组成的浮点数形 式显示、选中 Double 项则将相邻 8 字节 组成双精度形式显示。第一部门又有多 个选择项,其中 Decimal 项是一个开关, 假定选中该项,则窗口中的值将以十进 制的形式显示,否则按默许的十六进制

要领显示。Unsigned 和 Signed 后划分有

存储器数值种种要领显示选择

三个选项:Char、Int、Long,划分代表以单字节要领显示、将相邻双字节组成整型数要领


显示、将相邻四字节构生长整型要领显示,而 Unsigned 和 Signed 则划分代表无符号形式和

有符号形式,现实从哪个单元泉源的相邻单元则与你的设置有关,以整型为例,假定你输 入的是 I:0,那么 00H 和 01H 单元的内容将会组成一个整型数,而假定你输入的是 I:1,01H和 02H 单元的内容全组成一个整型数,以此类推。有关数据名堂与 C 语言划定类似,请参

考  C  语言书籍,默许以无符号单字节要领显 示。第三部门的 Modify Memory at X:xx 用于 更改鼠标处的内存单元值,选中该项即泛起如 图 3 所示的对话框,可以在对话框内输入要修 改的内容。

2、工程窗口存放器页


图 3 存储器的值的修改

图 4 是工程窗口存放器页的内容,存放器页网罗了以后的使命存放器组和系统存放器,

系统存放器组有一些是现实存在的存放器如 A、B、DPTR、SP、PSW 等,有一些是现实中 着实不存在或虽然存在却不克不及对其操作的如  PC、Status  等。每当法式模范模范中推行到对某存放器的 操作时,该存放器会以反色(蓝底白字)显示,用鼠标单击然后按下 F2 键,便可修改该值。

3、不雅不雅察窗口

?
不雅不雅察窗口是很主要的一个窗口,工程窗口中仅可以不雅不雅察就职务存放器和无限的存放器如 A、B、DPTR 等,假定须要不雅不雅 察其它的存放器的值或许在高等语言编程时须要直接不雅不雅察变 量,就要借助于不雅不雅察窗口了。

其它窗口将在以下的实例中简介。 浅易情形下,我们仅在单步推行时才对变量的值的变换感兴趣,全速运转时,变量的值是稳固的,只需在法式模范模范停上去之 后,才会将这些值最新的变换反映出来,但是,在一些特殊场 合下我们也能够或许须要在全速运转时不雅不雅察变量的变换,此时可以 点击 View->Periodic Window Updata(周期更新窗口),确认该 项处于被选中状态,便可在全速运转时静态地不雅不雅察有关值的变 化。但是,选中该项,将会使法式模范模范模拟推行的速率变慢。

二、种种窗口在法式模范模范调试中的用处

以下经由历程一个高等语言法式模范模范来诠释这些窗口的应用。例 2:

图 4  工程窗口存放器页


#include "reg51.h"

sbit P1_0=P1^0;                       //界说 P1.0

void mDelay(unsigned char DelayTime)

{     unsigned int j=0;

for(;DelayTime>0;DelayTime--)

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

}

void main()


{     unsigned int i;

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 可以加 入自界说的不雅不雅察变量,点击“type F2 to edit”然后再按 F2 便可输入变量,试着在 Watch #1 中输入 I,不雅不雅察它的变换。在法式模范模范较严重年夜,变量许多的场所,这两个自界说不雅不雅察窗口可以筛 选出我们自己感兴趣的变量加以不雅不雅察。不雅不雅察窗口中变量的值不只可以不雅不雅察,还可以修改,以 该法式模范模范为例,I 须加 10 次才干到 10,为快速验证能否可以准确推行到 P1_0=!P1_0 行,点击

I 前面的值,再按 F2,该值便可修改,将 I 的值改到 9,再次按 F10 单步推行,便可以很快 推行到 P1_0=!P1_0 法式模范模范行。该窗口显示的变量值可以以十进制或十六进制形式显示,措施 是在显示窗口点右键,在快捷菜单被选择如图 5 所示。

?
点击  View->Dissambly  Window  可 以掀开反汇编窗口,该窗口可以显示反 汇编后的代码、源法式模范模范和照顾反汇编代 码的混淆代码,可以在该窗口阻拦在线


汇编、应用该窗口跟踪已找行的代码、 在该窗口按汇编代码的要领单步推行, 这也是一个主要的窗口。掀开反汇编窗口,点击 鼠标右键,泛起快捷菜单,如图 6 所示,其中 Mixed Mode 是以混淆要领显示,Assembly Mode 是以反 汇编码要领显示。

法式模范模范调试中常应用设置断点然后全速运转的 要领,在断点处可以取得各变量值,但却没法知 道法式模范模范到达断点之前现实推行了哪些代码,而这 经常是须要明确的,为此,Keil 供应了跟踪功效, 在运转法式模范模范之前掀开调试工具条上的允许跟踪代 码开关,然后全速运转法式模范模范,当法式模范模范阻拦运转后, 点击检查跟踪代码按钮,自动切换到反汇编窗口,


图 5  设定不雅不雅察窗的显示要领

图 6  反汇编窗口

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

应用工程窗口可以不雅不雅察法式模范模范推行的时间,下面我们不雅不雅察一下该例中延时法式模范模范的延不时间 能否知足我们的请求,即能否确切延时 10 毫秒,睁开工程窗口 Regs 页中的 Sys 目录树,其 中的 Sec 项纪录了从法式模范模范泉源推行到以后法式模范模范流逝的秒数。点击 RST 按钮以复位法式模范模范,Sec 的值回零,按下 F10 键,法式模范模范窗口中的黄色箭头指向 mDelay(10)行,此时,纪录下 Sec 值为

0.00038900,然后再按 F10 推行完该段法式模范模范,再次检查 Sec 的值为 0.01051200,二者相减年夜 约是 0.01 秒,以是延不时间年夜致是准确的。读者可以试着将延时法式模范模范中的 unsigned int 改成 unsigned char 尝尝看时间能否仍准确。重视,应用这一功效的条件是在项目设置中准确设置 晶振的数值。

Keil 供应了串行窗口,我们可以直接在串行窗口中键入字符,该字符虽不会被显示出来, 但却能转到达仿真 CPU 中,假定仿真 CPU 经由历程串行口发送字符,那么这些字符会在串行窗 口显示出来,用该窗口可以在没有硬件的情形下用键盘模拟串口通讯。下面经由历程一个例子说

明 Keil  串行窗口的应用。该法式模范模范完成一个行主笔功效,每键入一个字母,会急速回显到窗

口中。编程的措施是经由历程检测 RI 能否即是 1 来断定串行口能否有字符输入,假定有字符输

入,则将其送到 SBUF,这个字符就会在串行窗口中显示出来。其中 ser_init 是串行口初始 化法式模范模范,要应用串行口,必须首先对串行口阻拦初始化。例 3:

MOV                SP,#5FH               ;客栈初始化

CALL            SER_INIT ;串行口初始化

LOOP:

JBC      RI,NEXT  ; 假定串口吸收到字 符,转

JMP              LOOP                ;否则期待吸收字符

NEXT:

MOV            A,SBUF                ;从 SBUF 中取字符

MOV            SBUF,A    ;回送到发送 SBUF 中

SEND:

JBC           TI,LOOP                ;发送完成,转 LOOP


JMP           SEND                    ;否则期待发送完

SER_INIT:                                             ;中止初始化

MOV        SCON,#50H ORL         TMOD,#20H ORL          PCON,#80H

MOV         TH1,#0FDH ;设定波特率

SETB                    TR1              ;准时器 1 泉源运转

SETB                    REN            ;允许吸收

SETB       SM2

RET END

输入源法式模范模范,并培植项目,准确编译、毗连,进入调试后,全速运转,点击串行窗口 1 按钮,即在原源法式模范模范窗口职位泛起一个空缺窗口,击键,照顾的字母就会涌现在该窗口中。 在窗口中击鼠标右键,泛起一个弹出式菜单,选择“Ascii  Mode”即以 Ascii 码的要领显示 吸收到的数据;选择“Hex Mode”以十六进制码要领显示吸收到的数据;选择“Clear Window” 可以扫除窗口中显示的内容。

由于部门 CPU 具有双串口,故 Keil 供应了两个串行窗口,我们选用的 89C51 芯片只需 一个串行口,以是 Serial 2 串行窗口不起作用。

小手艺:凡是鼠标单击然后按 F2 的地方都可以用鼠标一连单击两次(重视:不是双击) 来替换。