在KEIL C中调试程序

合集下载

keil调试程序方法

keil调试程序方法

keil调试程序方法
一、Keil调试程序方法
1、打开Keil,新建工程,在工程目录下,右键选择“添加新建文件”,然后选择“源文件”。

这时会弹出“新建文件对话框”,在文件类型中选择“C文件”。

2、编写C代码,调试程序,为了方便调试,先在程序里加上调试的操作,如“printf”,“getchar”等。

3、如果添加多个C文件时,也可以选择“添加新建文件”,然后选择“工程文件”,在弹出的对话框里输入文件名,然后点击“确定”。

4、编译源代码,编译完成后,查看是否有编译错误,如果没有编译错误,就可以继续下一步。

5、点击编译器的“调试”按钮,它会自动加载要调试的程序,然后就可以进行调试了。

6、在Keil的调试界面上,可以使用鼠标画“断点”,程序运行时,就能自动地停在“断点”处。

7、当一段程序运行完成,可以按F11快捷键,让程序自动运行,或者按“运行”按钮,让程序在断点处暂停,然后再单步执行一行一行调试。

8、Keil调试界面可以编辑程序,也可以查看程序的运行结果,从而可以及时发现程序中的bug。

9、在Keil的调试界面上,可以编辑程序,也可以给变量赋值,从而方便快速地调试程序。

10、当完成调试后,可以按“重新编译”按钮,重新编译整个程序,再查看编译结果,最后保存这个工程,保存文件名为*.uv2文件。

实验一 Keil C51集成开发环境的使用练习、仿真与调试

实验一 Keil C51集成开发环境的使用练习、仿真与调试

实验一Keil C51集成开发环境的使用练习、仿真与调试一、实验目的1、熟悉Keil C51集成开发环境的使用方法2、熟悉Keil C51集成开发环境调试功能的使用和DP-51PROC单片机综合仿真实验仪的使用。

二、实验设备及器件IBM PC机一台DP-51PROC单片机综合仿真实验仪一台三、实验内容1、进行Keil C51集成开发环境的安装和使用练习。

然后按照以下内容建立文件并编译产生HEX文件。

ORG 0000HLJMP MainORG 00F0HMain:MOV R7, #0Loop:MOV R6, #0DJNZ R6, $DJNZ R6, $DJNZ R6, $DJNZ R6, $DJNZ R7, LoopCPL P1.0 ; P 1 .0 取反CPL P1.1 ; P 1 .1 取反CPL P1.2 ; P 1 .2 取反CPL P1.3 ; P 1 .3 取反CPL P1.4 ; P 1 .4 取反CPL P1.5 ; P 1 .5 取反CPL P1.6 ; P 1 .6 取反CPL P1.7 ; P 1 .7 取反SJMP Main;END2、进行Keil C51集成开发环境的仿真调试练习。

然后按照以下内容建立文件并编译仿真调试。

ORG 8000HLJMP MainORG 80F0HMain:MOV R7, #0Loop:MOV R6, #0DJNZ R6, $DJNZ R6, $DJNZ R6, $DJNZ R6, $DJNZ R7, LoopCPL P1.0 ; P 1 .0 取反CPL P1.1 ; P 1 .1 取反CPL P1.2 ; P 1 .2 取反CPL P1.3 ; P 1 .3 取反CPL P1.4 ; P 1 .4 取反CPL P1.5 ; P 1 .5 取反CPL P1.6 ; P 1 .6 取反CPL P1.7 ; P 1 .7 取反SJMP MainEND四、实验要求1、熟练掌握Keil C51集成开发环境的工程建立、编辑与编译功能。

keil 编译c++程序

keil 编译c++程序

Keil uVision是一个集成开发环境(IDE),通常用于编译和调试C和C++程序,特别是针对嵌入式系统编程。

以下是一个基本的步骤说明,如何使用Keil来编译C++程序:1. **启动Keil uVision**:首先,打开Keil uVision。

2. **创建新项目**:在文件菜单中,选择"New" -> "Project..."。

然后在弹出的对话框中,输入你的项目名称,并选择你的项目位置。

3. **选择设备**:在设备选择列表中,选择你的目标设备的型号。

这将帮助Keil生成特定于该设备的代码。

4. **添加源文件**:在项目管理器中,右键单击你的项目名-> "Add" -> "New Item..."。

在弹出的对话框中,选择"Source File",然后输入源文件的名称。

重复此步骤,添加你所有的源文件。

5. **添加或创建头文件**:你可以通过右键单击项目名-> "Add" -> "New Item...",然后选择"Header File",来添加新的头文件。

你还可以通过这个方式来创建其他的文件类型,如源文件(.cpp)或汇编文件(.s)。

6. **编写代码**:现在,你可以开始在你的源文件中编写代码了。

如果你正在编写C++代码,确保你的文件扩展名是.cpp。

7. **编译代码**:在工具栏上,点击"Build"按钮或按F7键来编译你的代码。

如果编译成功,你应该能在输出窗口看到一些消息,告诉你哪些文件已经成功编译了。

8. **调试代码**:你可以使用Keil uVision的调试器来调试你的代码。

你可以设置断点,单步执行代码,查看变量值等等。

要开始调试,你只需要在工具栏上点击"Debug"按钮即可。

keil调试 汇编语言

keil调试 汇编语言

keil调试汇编语言首先要介绍一下Keil,Keil是一种专门用于嵌入式系统中的集成开发环境,它可以用来编译,调试和仿真嵌入式系统中的C和汇编程序。

在Keil中调试汇编语言需要掌握几个方面:1. Keil中的窗口在Keil中,有许多窗口可以用来查看或编辑代码,例如Project 窗口、Command窗口、Disassembly窗口等。

其中比较重要的是Debug 窗口,它可以用来监视程序的执行,包括CPU寄存器值、内存地址和指令执行情况等。

同时,它也可以用来设置断点、单步执行程序等调试操作。

2.调试命令在Keil中,有许多调试命令可以用来操作程序的执行。

例如,Step Over可以用来执行当前指令,并移动到下一条指令,Step Into 可以用来进入当前指令所调用的子程序中执行,而Step Out则可以用来退出当前子程序的执行。

除此之外,还有一些命令可以用来设置断点、修改寄存器值等调试操作。

3.汇编指令在调试汇编语言程序时,需要熟悉各种汇编指令的用途和语法。

例如,MOV可以用来将一个值从一个寄存器移动到另一个寄存器中,ADD可以用来将两个值相加并将结果存储到一个寄存器中等等。

同时,还需要了解一些特殊的汇编指令,例如INT可以用来触发中断,JMP可以用来跳转到指定的地址等。

4.内存映像调试汇编语言程序时,可以通过内存映像来查看程序在内存中的执行情况。

在Keil中,可以用Memory窗口来查看各个地址中的值,并根据需要修改它们。

同时,也可以使用Watch窗口来监视某个变量或内存地址的变化,并在程序执行时实时显示它们的值。

总体来说,调试汇编语言程序需要先熟悉Keil中的窗口和调试命令,同时还需要了解汇编指令的语法和用途,并能够使用内存映像来查看程序在内存中的执行情况。

此外,还需要有耐心和细心,仔细观察程序的执行情况,并通过断点和单步执行等操作来排查程序中的问题。

单片机实验报告-KeilC的使用与汇编语言上机操作参考模板

单片机实验报告-KeilC的使用与汇编语言上机操作参考模板

《微机实验》报告实验名称 KeilC的使用与汇编语言上机操作指导教师专业班级姓名学号序号联系方式一、任务要求实验目的:熟悉KeilC环境,通过在KeilC环境下调试字节拆分、合并程序、数据块清零程序、加法程序,掌握汇编语言程序的调试方法,加深对BCD码、ASCII码、堆栈、寄存器、数据指针、汇编语言指令、机器码等基本概念的理解,为后续程序编制和调试打下基础。

实验内容:1.掌握KeilC环境的使用1)字节拆分、合并:调试e421.asm程序,观察相关寄存器和单元的内容。

2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。

2. 编写两个十六位数的加法程序。

有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。

二、设计思路1.掌握KeilC环境的使用1)字节拆分、合并:字节拆分要将BCD码转换为2字节ASCII,需将BCD码拆为两部分,分别加30H。

具体先用XCHD语句将BCD码与00H交换低位,“高位”需先用SWAP语句将高低位交换,再加30H;“低位”直接加30H。

字节合并同理,需减30H再合并。

2)数据块填充:指针在7000H,利于循环语句递增填充,A寄存器中存放要填充的数据,DPTR数据指针指向片外,R0计数。

用CJNE构成循环,循环中A、DPTR、R0都加12.编写两个十六位数的加法程序两数低位分别存于20H、30H,高位存于21H、31H。

用ADD语句将低位相加,存于R4;用ADDC语句将高位和进位Cy相加,存于R3;存进位需先将A寄存器清零,再用ADDC语句将A、00H和Cy相加,存于R2。

三、资源分配本程序数据均存于片内RAM中,有两个十六位无符号数,低位分别存于20H、30H中,高位分别存于21H、31H中。

高八位和存于R3中,低八位和存于R4中,进位位存于R2中。

四、流程图五、源代码ORG 0000HMAIN: MOV R0,#20H ;设置第一个数地址指针 MOV R1,#30H ;设置第二个数地址指针MOV A,@R0 ;取低位ADD A,@R1 ;两数低位相加MOV R4,A ;存“和”低位INC R0INC R1MOV A,@R0 ;取高位ADDC A,@R1 ;两数高位相加MOV R3,A ;存“和”高位CLR AADDC A,#0MOV R2,A ;存进位HERE: SJMP HERE ;踏步END ;结束Program Size: data=8.0 xdata=0 code=18精简后ORG 0000HMAIN:MOV A,20H ; 取低位ADD A,30H ; 两数低位相加MOV R4,A ; 存“和”低位MOV A,21H ; 取高位ADDC A,31H ; 两数高位相加MOV R3,A ;´存“和”高位CLR AADDC A,#0MOV R2,A ; 存进位HERE: SJMP HERE ; 踏步ENDProgram Size: data=8.0 xdata=0 code=16六、程序测试方法与结果、软件性能分析1.1字节拆分、合并调试拆分时,如图31H、32H中内容为34和39,正常合并时,如图33H中内容又变为了491.2数据块填充调试执行完改程序后片外7000H到70FFH中的数据如下图3.两个十六位数的加法程序测试方法:修改片上RAM中20H、21H、30H、31H数据,查看R2、R3、R4数据。

keil c 的在线调试与断点设置

keil c 的在线调试与断点设置

Keil 的调试命令、在线汇编与断点设置上一讲中我们学习了如何建立工程、汇编、连接工程,并获得目标代码,但是做到这一步仅仅代表你的源程序没有语法错误,至于源程序中存在着的其它错误,必须通过调试才能发现并解决,事实上,除了极简单的程序以外,绝大部份的程序都要通过反复调试才能得到正确的结果,因此,调试是软件开发中重要的一个环节,这一讲将介绍常用的调试命令、利用在线汇编、各种设置断点进行程序调试的方法,并通过实例介绍这些方法的使用。

一、常用调试命令在对工程成功地进行汇编、连接以后,按Ctrl+F5 或者使用菜单Debug->Start/Stop Debug Session 即可进入调试状态,Keil 内建了一个仿真CPU 用来模拟执行程序,该仿真CPU 功能强大,可以在没有硬件和仿真机的情况下进行程序的调试,下面将要学的就是该模拟调试功能。

不过在学习之前必须明确,模拟毕竟只是模拟,与真实的硬件执行程序肯定还是有区别的,其中最明显的就是时序,软件模拟是不可能和真实的硬件具有相同的时序的,具体的表现就是程序执行的速度和各人使用的计算机有关,计算机性能越好,运行速度越快。

进入调试状态后,界面与编缉状态相比有明显的变化,Debug 菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图1 所示,Debug 菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令。

接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难以确认错误出现在哪些程序行。

单步执行是每次执行一行程序,执行完该行程序以后即停止,等待命令执行下一行程序,此时可以观察该行程序执行完以后得到的结果,是否与我们写该行程序所想要得到的结果相同,借此可以找到程序中问题所在。

(完整版)Keil C与Proteus连接调试的经典教程

(完整版)Keil C与Proteus连接调试的经典教程

hing at a time and All things in their being are good for somethin
4、单击“Project菜单/Options for Target”选项或者点击工具栏的“option for ta rget”按钮 ,弹出窗口,点击“Debug”按钮,出现如图所示页面。
在出现的对话框里在右栏上部的下拉菜单里选中“Proteus VSM Monitor一51 Driver”。 并且还要点击一下“Use”前面表明选中的小圆点。
再点击“Setting”按钮,设置通信接口,在“Host”后面添上“127.0.0.1”,如果使用 的不是同一台电脑,则需要在这里添上另一台电脑的IP地址(另一台电脑也应安装Proteus)。 在“Port”后面添加“8000”。设置好的情形如图所示,点击“OK”按钮即可。最后将工 程编译,进入调试状态,并运行。
P2=0; P1=LED_CODES[i]; P2=Select[i]; for(j=3000;j>0;j--); //该 LED 模型靠脉冲点亮,第 i 位靠脉冲点亮后,会自动
熄来头。 //修改循环次数,改变点亮下一位之前的延时,可得到不同的 显示效果。 i++; if time and All things in their being are good for somethin
proteus 7.12 与 keil 8.0 的联调方法 对于 proteus 6.9 以后的版本,在安装盘里或 LABCENTER 公司有 vdmagdi 插
件,安装该插件即可实现与 KEIL 的联调。 首先安装 vdmagdi 软件,然后再进行以下设置:
{ 0xc0,0xF9,0xA4,0xB0,0x99,//0-4 0x92,0x82,0xF8,0x80,0x90,//5-9 0x88,0x83,0xC6,0xA1,0x86,//A,b,C,d,E 0x8E,0xFF,0x0C,0x89,0x7F,0xBF//F,空格,P,H,.,- };

keil调试 汇编语言

keil调试 汇编语言

keil调试汇编语言Keil是一款广泛用于嵌入式系统开发的集成开发环境(IDE),它支持多种编程语言,包括C语言和汇编语言。

在Keil中进行汇编语言的调试需要编写汇编代码以及在IDE中配置相关设置,接下来我将详细介绍如何在Keil中调试汇编语言。

首先,要在Keil中调试汇编语言,我们需要创建一个新的Keil 项目或者打开一个已有的项目。

在创建新项目或打开项目后,我们可以在项目中添加一个汇编文件,用于编写我们的汇编代码。

在Keil中,汇编文件的后缀通常为.asm,我们可以通过右键点击项目中的文件夹,选择添加→新建文件(或者通过快捷键Ctrl+N)来创建一个新的汇编文件。

创建好汇编文件后,我们可以在文件中编写我们的汇编代码。

在编写汇编代码时,我们需要注意汇编语言的语法和指令格式。

汇编语言的语法因不同的体系结构而异,比如x86汇编语言与ARM汇编语言的语法就有所不同。

因此,在编写汇编代码前,我们需要先了解目标平台的体系结构和相应的汇编语法标准。

在汇编代码中,我们可以使用一系列的汇编指令来进行数据的移动、运算和控制流的操作。

例如,通过MOV指令可以实现数据的移动,通过ADD指令可以实现数据的加法运算,通过CMP指令可以实现数据的比较等。

汇编指令的具体使用方法和参数取决于具体的体系结构和处理器指令集。

编写完汇编代码后,我们需要在Keil中配置一些相关设置,以便能够进行调试。

首先,我们需要在项目属性中设置汇编语言的编译器和链接器选项。

在Keil的项目目录视图中,右键点击项目名称,选择选项,并在弹出的对话框中选择正确的编译器和链接器。

其次,我们需要在Keil的启动文件(startup file)中设置相应的中断向量表和启动代码。

启动文件位于项目文件夹的"startup"子文件夹中,可以通过将文件拖放到Keil编辑器中打开。

在启动文件中,我们需要找到中断向量表和启动代码的位置,并将其修改为适用于我们的汇编代码的中断向量表和启动代码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
接下来弹出一个如下图的对话框。该对话框提示你是否要把标准8051的启动代码添加到工程中去。如用C语言写程序,一般选“否”,但是,如果用到了某些增强功能需要初始化配置时,则可选“是”。在这里,我们选“否”,即不添加启动代码。
新建文件。
在[File\New]建一个文件,将程序写入。这里以一个00-99秒计时器程序为例。程序如下
调试:编译通过后就进行调试。可选择工具栏上的调试按键也可选[Debug\satr\stop Debug Scssion]。
运行:运行可选择全速运行、单步进入等运行方式。可以利用工具栏上的快捷键也可在[Debug]菜单中选择。
其中:
单步进入与单步跳过运行的区别在于:
当调用子程序时,单步进入会进入子程序运行,而单步跳过不进入子程序。
单击KEIL C51
工具栏的“ ”图标,弹出名为“Options for Target „Target1‟”的对话框。单击“Output”标签页,选中“Create HEX File”项,然后“确定”。如下图所示。
编译:可选译工具栏上的编译“ ”也可选[Project\Rebuild all target files]。如编译有错误会在最下面的Build窗口中显示出来,通过双击出错的信息可到出错的那一行。
如在程序中定义了数组,则它的值就是一个地址,要观察它的值,可打开“存储窗口”,在存储窗口中输入该数组的地址,观察它的值,也可直接单击它前面的“+”,即可看到它的值。
在“存储窗口”中观察时,选[View|Memory windows]即可打开。打开后,输入变量存放的地址,即可观察该变量的值。如下图所示要观察数组”table”的值。从观察窗口中看到它的地址为“C:0x006D”,则在“存储窗口”的“Address”后输入“C:0x006D”,则可观察它的值。
在KEIL C中调试程序
首先建立工程。选[Project\New Project],选择工程保存的路径,及为工程命名。例如将其存放在D:\新建文件夹(2),命名为123。输入完工程名后会打开一个如下图所示的对话框,在这里我们选择CPU的型号,根据我们选用的CPU芯片的不同,这里的设置不同。在这里我们选用Atmel\AT89C51。
等窗口中将要观察的量输入。如此窗口没打开时,可选[View\Watch & Call stack window]打开观察窗口。输入变量的方法是,选中窗口中的“type F2 to edit“,按F2,即可输入,它后面就是该变量的值。变量的值也是可以手动改的,同样的方法,选要改的值,按F2,输入想设的值即可。
例如上面的程序,当选择单步进入运行方式,则在调用显示子程序时,它会进入子程序内部运行,此时我们就可以看到执行时P0、P2的变化。
当选择单步跳过运行方式时,我们则只能它到它运行完子程序后的结果。即P0、P2最后运行的值。
全速运行,则程序一直运行,直至按下停止为止。
运行方式的选择可以用工具栏中的快捷键也可在[Debug]菜单下设置。
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(51.H>
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90}; //共阳数码管段0-9
unsigned char Second;
delay10ms() //延时10毫秒
在进行程序调试时,有时需要用到外部端口、定时器溢出或产生外部中断,则可打开“Peripherals”菜单,找到你想要的器件,对它进行手动设置。
如下图所示,我们改变P0口的某个位:
打开[Peripherals|I/O—Ports\Ports 0],则打开了P0口,此时我们就可以手动的设置它的位,打勾为1,没勾则为0。
如果将这个程序的延时部分改为采用定时器0来计时,那么你就必须手动的对定时器0进行溢出设置,达到延时1秒的效果。
步骤如下:打开[Peripherals|Timer|Timer 0],设置它的溢出标志位TF0=1,即把它前面的勾打上即可实现定时器0的溢出。用这种办法即可实现脱机状态下程序的调试。
{ 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选通状态
遇到延时程序时,跟踪太慢可以让它“运行到光标处”。
在遇到复杂程序时,可以设断点。在要设断点的地方运用工具栏上“设断点”的快捷键即可设置断点。程序每运行到断点处,就会停下来。这时你就可以看程序运行到此处的值。取消断点可用工具栏上“取消断点”键。
在程序运行时可能需要观察某个量的值,可在窗口下面的“Watch #1”或“Watch #2”
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加载到工程。只有经过这一步才能对程序进行下面的编译及调试。
如下图所示,观察变量“Second”的值。选中“type F2 to edit“,按F2输入“Second”回车,即可看到该变量此时的值。当要改变它的值时,则选中“0x00”,按F2后输入想要的值即可。在程序运行时,当有FOR循环,如循环次数太多,可用这种方法改变它的当前循环次数。以便进行下面程序的调试。
相关文档
最新文档