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