KeilC51程序调试过程Word文档格式.docx
《KeilC51程序调试过程Word文档格式.docx》由会员分享,可在线阅读,更多相关《KeilC51程序调试过程Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
选择Debug下边的
Start/Stop
DebugSession,这个选项能够翻开调试也能够封闭调试。
接下来看到的窗口就是调试窗口了:
下边详细谈谈有关子窗口的功能:
1、左边的ProjectWorkspace
Regs是片内内存的有关状况值;
Sys是系一致些累加器、计数器等。
Regs
很简单就不多说。
详细介绍一下Sys:
a累加器ACC,常常在运算前暂存一个操作数(如被加数),而运算后又保存其结果(如代数和)。
b寄存器B,主要用于乘法和除法操作。
sp
sp_max
dptr数据指针DPTR。
PC$
states履行指令的数目。
sec履行指令的时间累计(单位:
秒)。
psw程序状态标记寄存器PSW,八位寄存器,用来寄存运算结果的一些特点量,若有无进位、借位等。
p奇偶标记P。
反应累加器ACC内容的奇偶性,假如ACC中的运算结果有偶数个1(如11001100B,此中有4个1),则P为0,不然,P=1。
f1
ov溢出标记位OV。
MCS-51反应带符号数的运算结果能否有溢出,有溢出时,此位为1,不然为0。
rs
f0
ac协助进位标记AC。
又称半进位标记,它反应了两个八位数运算低四位是
否有半进位,即低四位相加(或减)有否进位(或借位),若有则AC为1状态,
不然为0。
cy进位标记CY(PSW7)。
它表示运算能否有进位(或借位)。
假如操作结果在最高位有进位(加法)或许借位(减法),则该位为1,不然为0。
因为PSW寄存程序履行中的状态,故又叫程序状态字。
运算器中还有一个按位
(bit)进行逻辑运算的逻辑办理机(又称布尔办理机)。
依据指令履行的不一样,上述值会有相应的变化,程序员能够监测这些在单片机中看不到的值而达到调试的目的。
固然软件调试没法实现硬件调试那样的信号输出,可是软件调试也能够在软件窗口监测输出信号的高低电平,以及单片机有关端口的变化,实现模拟监测输出信号的目的。
上图所示,Port0,Port1,Port2,Port3就对应于单片机的四个P0,P1,P2,P3口,共32个针脚。
这是所有翻开后的成效。
有了输出,就应当有输入的设置:
选择Interrupt这个按钮能够翻开输入预设窗口,输入值窗口以下:
选择不一样的IntSource会有不一样的SelectedInterrupt的变化,经过选择与赋
值达到模拟输入的目的。
接下来是串口的设置:
出现设置串口的窗口:
监测窗口数据还有一个窗口:
点击:
将会出现,这个窗口能够监测从串口输出的ASCII代码。
最下边还有一个准时器的设置:
3个准时器与一个看门狗,设置准时器的数目与工程选择的单片机种类有关系,假如是8051就只有2个准时器,假如是选择8052就有3个准时器了。
准时器的设置很简单:
参照的数好多,这里临时省略介绍。
下边再介绍一下一些常用的调试按钮:
就是Reset,相当于单片机的复位按钮,按下后,所有的系统状态将变为初始状态。
这是全速运转,相当于单片机的通电履行。
这个是停止全速运转的按钮。
stepinto
逐语句;
进入并单步履行。
stepover
逐过程。
stepout
跳出。
履行到断点处。
能够在代码所在窗口的最左边右击按钮插入一个断点,以以下图所示:
有了这个功能,就能够控制监控要履行到某地点时系统的状态。
最后在介绍一个很适用的功能:
这个是DisassemblyWindows,按下后能够把C51Disassembly为相应的汇编
语言,假若有汇编语言知识的话,就能够对照C51程序与汇编程序了。
因为汇编语言的效率高好多,这也能够作为查察C51履行效率的一个方法。
上图中就能够看出,C51代码是怎样被解说为汇编的。
调试还有好多的功能,这里不过介绍了一小部分,希望能起到抛砖引玉的作用,更多的细节需要你自己去挖掘与学习。
KeilC51程序调试过程
用KeilC51编写程序时,常常需要调试,假如不是常常用这个软件的话,
很简单忘掉这些调试步骤,此刻举一个例子“考证延缓函数delay()使其延缓的时间为500ms”说明。
源程序写完后,就能够调试了,依据图1所示,先进行第一步和第二步操作,使界面切换到图2的状态,能够看到在文本编写窗口中,有一个黄色箭头指向
13行的地点,说明程序从这个地点开始履行。
左上角有一些跟调试有关的按钮,
如“全速履行”、“单步进入”⋯⋯。
关于这个例子,目的是考证delay()函数的延缓时间,使其大概为500ms。
依据以下方法能够达到这个目的:
图1编译界面
图2调试界面
点击“单步跳出”按钮(或功能键F10),黄色箭头从第13行往下移一行
(14),再单击“单步跳出”,则箭头移到15行那处,表示程序从第13行履行到第15行(注:
这类方式是一步一步履行程序。
假如要同时履行几行,比方从
第13行一下子履行到15行,能够作以下操作:
先用鼠标在第15行的地点处点击两下会出现一个图2所示的红色图标;
而后点击“全速履行”按钮,则黄色的
箭头会从第13行迅速移到15行。
即:
这两行同时被履行)。
此时左边寄存器窗口中的sec有一个数值,表示程序履行的时间,即delay()函数的延缓时间。
假如延缓时间不是500ms,可改变delay()函数中x,y的数值,再点击
图1的第二步所对应的按钮切换到图1所示的编译界面,点击“从头结构所有对象文件”编译程序,而后再切换到图2的界面上来进行调试。
重复上边的步骤,直到左边寄存器窗口中的sec(单位秒)数值大概为0.50s,即可说明delay()延缓时间为500ms。
(注:
这类方法比较麻烦,并且延缓时间不会很精准,假如要精准延缓的话可采纳准时器的方式。
)
KeilC调试事例--优化致使的问题
以下是一个简单的KeilC中的小程序:
#include<
reg52.h>
voidmain()
{
unsignedchari,j;
i=0xf0;
j=0x0f;
P0=i;
P1=j;
while
(1);
}
编译OK后,进入Debugsession,按F11单步履行,发现"
i=0xf0"
和"
j=0x0f"
这两句没有履行。
以以下图:
好多初学者百思不得其解,其实,这是因为KeilC自己的8级优化致使的。
解决的方法有两种:
1、降底优化级别,以以下图,可降至级别2。
2、在局部变量i,j定义前加上Volatile,严禁KeilC优化这两个变量。
以下:
volatileunsignedchari,j;
调试OK!
KEIL-C调试点滴
问:
用KEIL写
C代码,做完此后的调试工作应当怎样展开?
只有
PC机,没有任何的
硬件设施。
2楼good02xaut(good)答复:
用自带的编译功能而后查错误。
写完代码后,F7编译,Alt+F5调试,F10单步
运转。
能够查察寄存器的值以及RAM的内容。
还能够改变P1~P3口的输入。
KEIL
就是一个开发仿真一体的。
4楼zhou_huanxi(阿周)答复:
Keil
C自己就是编译与仿真一体的。
当不要外面数据时很方便,能够使用
C自带的软件调试器(软件仿真
器),有单步运转,设置断点等功能。
当要外面输入时(比方用准时器作计数器用),有两种办理方法:
(1)做产品时最好是用硬件仿真器调试。
(2)学习时可用以下方法:
KeilC供给了几个调试输入用的窗口,可用
它们来模拟输入;
调试函数由自己依据需要按特定的格式来编写,再按KEILC
的要求调入即可。
下边给出用准时器作外面事件计数时模拟外面输入的调试函数
C调用的步骤以下:
并写出
步骤一:
编写以下信号函数:
single
voidt0_singal(void)
while
(1)
PORT3|=0x10;
//pullINT0(P3.4)highagain
PORT3&
=~0x10;
//pullINT0(P3.4)lowPORT3|=0x10;
//pullINT0(P3.4)high
andgenerate
again
interrupt
twatch(CLOCK);
//waitfor1
second
步骤二:
在
DEBUG状态下选择:
DEBUG》“FunctionEditor(OpenIniFile)"
此中的“翻开”窗口封闭;
保存“Function
这时,将弹出两个新屏幕,将Editor窗口;
步骤三:
在FunctionEditor窗口中输入上边的函数:
singlevoidt0_singal(void)
步骤四:
保存(注意:
扩展名为.ini
),编译该程序,成功后封闭
Function
Editor
窗口;
步骤五:
履行用户程序(一定连续履行);
步骤六:
在屏幕左下脚的命令窗口中,键入t0_singl()后(一定回车),KeilC即可向P3.4络绎不绝地供给脉冲信号。