在KEIL C中调试程序

发布时间:2018-07-01 23:37:30   来源:文档文库   
字号:

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; //600

}

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]菜单中选择。

其中:

单步进入与单步跳过运行的区别在于:

当调用子程序时,单步进入会进入子程序运行,而单步跳过不进入子程序。

例如上面的程序,当选择单步进入运行方式,则在调用显示子程序时,它会进入子程序内部运行,此时我们就可以看到执行时P0P2的变化。

当选择单步跳过运行方式时,我们则只能它到它运行完子程序后的结果。即P0P2最后运行的值。

全速运行,则程序一直运行,直至按下停止为止。

运行方式的选择可以用工具栏中的快捷键也可在[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

《在KEIL C中调试程序.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式