在KEIL C中调试程序
首先建立工程。选[Project\New Project],选择工程保存的路径,及为工程命名。例如将其存放在D:\新建文件夹(2),命名为123。输入完工程名后会打开一个如下图所示的对话框,在这里我们选择CPU的型号,根据我们选用的CPU芯片的不同,这里的设置不同。在这里我们选用Atmel\AT89C51。
接下来弹出一个如下图的对话框。该对话框提示你是否要把标准8051的启动代码添加到工程中去。如用C语言写程序,一般选“否”,但是,如果用到了某些增强功能需要初始化配置时,则可选“是”。在这里,我们选“否”,即不添加启动代码。
新建文件。
在[File\New]建一个文件,将程序写入。这里以一个00-99秒计时器程序为例。程序如下
#include
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90}; //共阳数码管段0-9
unsigned char Second;
delay10ms() //延时10毫秒
{ unsigned int i,j;
for(i=0;i<10;i++)
for(j=0;j<120;j++);
}
leds() //显示子函数
{ 0_0=0; //选通P0_0数码管
P2=table[Second/10]; //送段值
delay10ms(); //延时
P2=0xff; //消影
P0_0=1; //消除P0_0选通状态
P0_1=0; //选通P0_0数码管
P2=table[Second%10]; //送段值
delay10ms(); //延时
P2=0xff; //消影
P0_1=1; //消除P0_0选通状态
}
void delay1s(void) //延时1秒
{
unsigned char j;
for(j=50;j>0;j--)
leds();
}
void main(void)
{
Second=0; //显示置0
while(1) //主循环
{
delay1s(); // 延时
Second++; //自加
if(Second==60) //判断是否到60
{
Second=0; //到60置0
}
leds(); //显示子程序
}
}
保存文件。选[File\Save],将其保存在刚建的工程下。这里是用的C语言编程,所以后缀名要加上”.C”。这里我们将其命名为“Text1.c“。注意扩展名“.C”不可省略。 打开工程[Project\Open Project],在左窗口中单击右键,选“Add files to Group “Source Gropu 1“,将程序Text1.c加载到工程。只有经过这一步才能对程序进行下面的编译及调试。
单击KEIL C51
工具栏的“”图标,弹出名为“Options for Target „Target1‟”的对话 框。单击“Output”标签页,选中“Create HEX File”项,然后“确定”。如下图所示。
编译: 可选译工具栏上的编译“ ”也可选 [Project\Rebuild all target files]。如编译有 错误会在最下面的Build窗口中显示出来,通过双击出错的信息可到出错的那一行。
调试: 编译通过后就进行调试。可选择工具栏上的调试按键也可选[Debug\satr\stop Debug Scssion]。
运行: 运行可选择全速运行、单步进入等运行方式。可以利用工具栏上的快捷键也可在[Debug]菜单中选择。
其中:
⏹ 单步进入与单步跳过运行的区别在于:
当调用子程序时,单步进入会进入子程序运行,而单步跳过不进入子程序。
例如上面的程序,当选择单步进入运行方式,则在调用显示子程序时,它会进入子程序内部运行,此时我们就可以看到执行时P0、P2的变化。
当选择单步跳过运行方式时,我们则只能它到它运行完子程序后的结果。即P0、P2最后运行的值。
⏹ 全速运行,则程序一直运行,直至按下停止为止。
运行方式的选择可以用工具栏中的快捷键也可在[Debug]菜单下设置。
⏹ 遇到延时程序时,跟踪太慢可以让它“运行到光标处”。
⏹ 在遇到复杂程序时,可以设断点。在要设断点的地方运用工具栏上“设断点”的快捷键即可设置断点。程序每运行到断点处,就会停下来。这时你就可以看程序运行到此处的值。取消断点可用工具栏上“取消断点”键。
在程序运行时可能需要观察某个量的值,可在窗口下面的“Watch #1”或“ Watch #2”
等窗口中将要观察的量输入。如此窗口没打开时,可选[View\Watch & Call stack window]打开观察窗口。输入变量的方法是,选中窗口中的“type F2 to edit“,按F2,即可输入,它后面就是该变量的值。变量的值也是可以手动改的,同样的方法,选要改的值,按F2,输入想设的值即可。
如下图所示,观察变量“Second”的值。选中“type F2 to edit“,按F2输入“Second”回车,即可看到该变量此时的值。当要改变它的值时,则选中“0x00”,按F2后输入想要的值即可。在程序运行时,当有FOR循环,如循环次数太多,可用这种方法改变它的当前循环次数。以便进行下面程序的调试。
如在程序中定义了数组,则它的值就是一个地址,要观察它的值,可打开“存储窗口”,在存储窗口中输入该数组的地址,观察它的值,也可直接单击它前面的“+”,即可看到它的值。
在“存储窗口”中观察时,选[View|Memory windows]即可打开。打开后,输入变量存放的地址,即可观察该变量的值。如下图所示要观察数组”table”的值。从观察窗口中看到它的地址为“C:0x006D ”,则在“存储窗口”的“Address”后输入“C:0x006D ”,则可观察它的值。
在进行程序调试时,有时需要用到外部端口、定时器溢出或产生外部中断,则可打开“ Peripherals ”菜单,找到你想要的器件,对它进行手动设置。
如下图所示,我们改变P0口的某个位:
打开[Peripherals|I/O—Ports\Ports 0],则打开了P0口,此时我们就可以手动的设置它的位,打勾为1,没勾则为0。
如果将这个程序的延时部分改为采用定时器0来计时,那么你就必须手动的对定时器0进行溢出设置,达到延时1秒的效果。
步骤如下:打开[Peripherals|Timer|Timer 0],设置它的溢出标志位TF0=1,即把它前面的勾打上即可实现定时器0的溢出。用这种办法即可实现脱机状态下程序的调试。
本文来源:https://www.2haoxitong.net/k/doc/6ceb0a87eff9aef8951e0658.html
文档为doc格式