Keil实例教程(二)Keil调试,在线汇编,断点设置
keil 条件断点的设置
keil 条件断点的设置
在Keil中设置条件断点可以帮助您在特定条件满足时暂停程序执行。
以下是在Keil中设置条件断点的步骤:1. 打开Keil并打开要调试的项目。
2. 在源代码窗口中找到要设置条件断点的代码行。
3. 单击想要设置断点的行号左侧的空白区域,或者使用快捷键F9来设置断点。
4. 在弹出的断点属性对话框中,您可以设置触发断点的条件。
a. 条件:输入一个条件表达式,当这个条件为真时,断点才会触发。
b. 字符串条件:输入一个字符串,当程序执行到当前行,并且该字符串出现在指定内存位置时触发断点。
c. 数据条件:输入一个变量名和一个值,当变量的值为指定值时触发断点。
5. 单击“确定”来设置条件断点。
现在,当程序执行到设置断点的代码行,并且满足设定的条件时,程序将暂停执行,您可以使用单步调试等功能来检查程序的状态。
keil 条件断点的设置
keil 条件断点的设置摘要:1.介绍Keil 条件断点2.设置Keil 条件断点的方法3.应用实例正文:一、介绍Keil 条件断点Keil 条件断点是Keil 集成开发环境中的一种调试工具,可以帮助程序员在调试程序时,根据设定的条件来暂停程序的运行,以便于查找和解决问题。
使用条件断点可以提高调试效率,减少开发时间。
二、设置Keil 条件断点的方法设置Keil 条件断点的步骤如下:1.打开Keil 集成开发环境,新建或打开一个项目。
2.在项目中找到需要设置条件断点的代码行,选中该行代码。
3.在Keil 工具栏中,找到“调试”选项,点击下拉菜单。
4.在下拉菜单中选择“条件断点”,在弹出的对话框中,可以设置条件表达式、断点类型和是否启用断点等选项。
5.设置完成后,点击“确定”按钮,条件断点设置成功。
6.开始调试程序,当程序运行到设置条件断点的代码行时,程序将暂停运行,方便程序员进行调试。
三、应用实例假设有一个简单的C 语言程序,如下所示:```c#include <stdio.h>int main() {int a = 10, b = 20;int sum = a + b;printf("The sum of a and b is %d", sum);return 0;}```我们可以在计算和打印sum 的代码行设置一个条件断点,如下所示:```c#include <stdio.h>int main() {int a = 10, b = 20;int sum = a + b; // 设置条件断点printf("The sum of a and b is %d", sum);return 0;}```设置条件断点后,在调试程序时,当程序运行到设置条件断点的代码行时,程序将暂停运行。
此时,程序员可以查看和修改变量的值,然后继续运行程序,直到程序结束。
keil设置及调试程序的方法
断点方式调试程序举例
说明: 说明: 1) 断点方式不能调试中断程序。 断点方式不能调试中断程序 不能调试中断程序。 必须按“ 2) 断点方式调试必须按“运行”命令。 断点方式调试必须按 运行”命令。 3) PC指针停到断点处后,可以检查中间结果, PC指针停到断点处后 可以检查中间结果, 指针停到断点处后, 而后,可以继续“运行”或单步执行, 而后,可以继续“运行”或单步执行,直到程序 执行结束。 执行结束。
硬件上机调试设置与方法
设备: 设备:NXP P89C52X2
时钟: 时钟:11.0592 片外代码存储: 片外代码存储: Eprom #1 开始 0x8000 大小 0x4000 片外Idata存储: 片外Idata存储:Ram #1 开始 0xc000 大小 0x4000 存储
使用 Keil Monitor-51 Drive2
调试中断最佳方式调试中断最佳方式1光标指到要停处光标指到要停处22按运行到光标处命令按运行到光标处命令调试中断程序举例调试中断程序举例按下key1p32int0key1p32int0按钮后按钮后pcpc指针停到预置光标处指针停到预置光标处说明说明已经进入中断服务程序中断已经进入中断服务程序中断正常正常
调试中断程序举例
按下key1(p3.2/int0)按钮后, 按下key1(p3.2/int0)按钮后, key1(p3.2/int0)按钮后 PC指针停到预置光标处 指针停到预置光标处, PC指针停到预置光标处,说明 已经进入中断服务程序, 已经进入中断服务程序,中断 正常. 正常.
1) 光标放在中断服务程序的 第一条可执行指令处
2) 按“运行到光标处”命令后, 运行到光标处”命令后, 按下key1(p3.2/int0)按钮后 PC指针停 按下key1(p3.2/int0)按钮后, PC指针停 按钮后, 到预置光标处, 到预置光标处,说明已经进入中断服务程 中断正常。 序,中断正常。 3)而后,按“运行”命令,连续运行。 而后, 运行”命令,连续运行。
KeilMDK无法设置断点【worldsing】
KeilMDK⽆法设置断点【worldsing】要解决⼀个问题就怕不知道怎么搜索,或是别⼈没有遇到过:同样碰到Keil MDK Debug调试⽆法设置断点问题,⾸先来问百度,GOOGLE,⼀下是我搜索到的结果:1、keil 不能设置断点,每次点调试都出现以下对话框, 有⼏个按钮不能点。
解决办法:购买正版Keil或够找破解包,worldsing笔记⾥有(仅供学习⽤),商业请⽀持正版;2、软件能Debug, 硬件⽆法Debug, 硬件仿真Debug时提⽰:**JLink Warning: T-bit of XPSR is 0 but should be 1. Changed to 1.解决办法:仿真器有问题,Keil 与仿真器驱动不匹配,找到KEIL的安装⽬录⾥的Segger⽂件夹,⾥⾯有4个主要的⽂件:JL2CM3.dllJLink.exeJLinkARM.dllJLTAgdi.dll把这⼏个DLL换成⽼版本的。
3、部分C代码⾏不能设置断点,如第4⾏⽆法设置断点解决办法:修改C/C++编译选项,默认是Leve 0(O0) 即不做优化。
4、⽆法软件仿真,⽆法运⾏到main()解决办法:Target Options –> Output –> Debug information 勾上5、在Keil 在RAM中⽆法设置断点解决办法:6、Keil调试时提⽰:*** error 65: access violation at 0x40021008 : no 'write' permission*** error 65: access violation at 0x40021004 : no 'read' permission解决办法:选择的CPU型号与代码不符合,Target Options –> Device换个⼤容量型号的或该代码7、Keil Debug时部分C⽂件⽆法设置断点,代码能正在Flash运⾏,这个是笔者遇到的问题,没有搜到解决答案,试过以上6中⽅法都没能得到解决。
keil c 的在线调试与断点设置
Keil 的调试命令、在线汇编与断点设置上一讲中我们学习了如何建立工程、汇编、连接工程,并获得目标代码,但是做到这一步仅仅代表你的源程序没有语法错误,至于源程序中存在着的其它错误,必须通过调试才能发现并解决,事实上,除了极简单的程序以外,绝大部份的程序都要通过反复调试才能得到正确的结果,因此,调试是软件开发中重要的一个环节,这一讲将介绍常用的调试命令、利用在线汇编、各种设置断点进行程序调试的方法,并通过实例介绍这些方法的使用。
一、常用调试命令在对工程成功地进行汇编、连接以后,按Ctrl+F5 或者使用菜单Debug->Start/Stop Debug Session 即可进入调试状态,Keil 内建了一个仿真CPU 用来模拟执行程序,该仿真CPU 功能强大,可以在没有硬件和仿真机的情况下进行程序的调试,下面将要学的就是该模拟调试功能。
不过在学习之前必须明确,模拟毕竟只是模拟,与真实的硬件执行程序肯定还是有区别的,其中最明显的就是时序,软件模拟是不可能和真实的硬件具有相同的时序的,具体的表现就是程序执行的速度和各人使用的计算机有关,计算机性能越好,运行速度越快。
进入调试状态后,界面与编缉状态相比有明显的变化,Debug 菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图1 所示,Debug 菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令。
接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难以确认错误出现在哪些程序行。
单步执行是每次执行一行程序,执行完该行程序以后即停止,等待命令执行下一行程序,此时可以观察该行程序执行完以后得到的结果,是否与我们写该行程序所想要得到的结果相同,借此可以找到程序中问题所在。
keil使用技巧
keil使用技巧Keil是一种广泛应用于嵌入式系统开发的集成开发环境(IDE),它具有强大的功能和易于使用的界面。
本文将介绍一些使用Keil的技巧,帮助开发人员更高效地进行嵌入式系统的开发。
一、项目管理在Keil中,一个项目通常由多个源文件组成。
为了更好地管理项目,可以使用文件夹来组织源文件。
在Keil的工程窗口中,右键单击项目名称,选择“添加文件夹”,然后将相关的源文件拖放到文件夹中。
这样可以使项目结构更加清晰,方便管理和维护。
二、代码编辑Keil提供了强大的代码编辑功能,可以大大提高开发效率。
其中一些常用的技巧包括:1. 快捷键:Keil中有很多快捷键可以加快代码编写的速度,如Ctrl+C和Ctrl+V用于复制和粘贴代码,Ctrl+Z用于撤销操作等。
熟练掌握这些快捷键可以节省大量时间。
2. 自动完成:Keil支持自动完成代码,只需输入部分代码,然后按下Tab键即可自动补全。
这可以减少输入错误,提高代码的准确性。
3. 代码折叠:Keil可以折叠代码,只显示关键部分,隐藏其他部分。
这对于阅读和编辑大型代码文件非常有用,可以提高代码的可读性。
4. 代码提示:Keil可以根据已有的代码提示可能的选项,帮助开发人员快速选择正确的代码。
这对于初学者尤其有用,可以减少语法错误。
三、调试和仿真Keil提供了强大的调试和仿真功能,可以帮助开发人员快速发现和修复错误。
以下是一些常用的技巧:1. 断点:在调试过程中,可以在代码中设置断点,以暂停程序的执行。
这样可以逐步调试代码,找出错误所在。
2. 监视窗口:Keil的监视窗口可以显示变量的值,以帮助开发人员了解程序的状态。
可以在调试过程中监视变量的值,并对其进行修改。
3. 寄存器窗口:Keil的寄存器窗口可以显示处理器的寄存器的值。
可以在调试过程中查看和修改寄存器的值,以优化程序的性能。
4. 仿真器配置:Keil支持多种仿真器,可以根据需要选择合适的仿真器。
在调试之前,需要正确配置仿真器,以确保能够正常进行调试。
keil2教程2
Keil 软件实例教程(三)Keil 程序调试窗口上一讲中我们学习了几种常用的程序调试方法,这一讲中将介绍Keil提供各种窗口如输出窗口、观察窗口、存储器窗口、反汇编窗口、串行窗口等的用途,以及这些窗口的使用方法,并通过实例介绍这些窗口在调试中的使用。
一、程序调试时的常用窗口Keil软件在调试程序时提供了多个窗口,主要包括输出窗口(Output Windows)、观察窗口(Watch&Call Statck Windows)、存储器窗口(Memory Window)、反汇编窗口(Dissambly Window)串行窗口(Serial Window)等。
进入调试模式后,可以通过菜单View下的相应命令打开或关闭这些窗口。
图1是输出窗口、观察窗口和存储器窗口,各窗口的大小可以使用鼠标调整。
进入调试程序后,输出窗口自动切换到Command页。
该页用于输入调试命令和输出调试信息。
对于初学者,可以暂不学习调试命令的使用方法。
1、存储器窗口存储器窗口中可以显示系统中各种内存中的值,通过在Address后的编缉框内输入“字母:数字”即可显示相应内存值,其中字母可以是C、D、I、X,分别代表代码存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部RAM空间,数字代表想要查看的地址。
例如输入D:0即可观察到地址0开始的片内RAM单元值、键入C:0即可显示从0开始的ROM单元中的值,即查看程序的二进制代码。
该窗口的显示值可以以各种形式显示,如十进制、十六进制、字符型等,改变显示方式的方法是点鼠标右键,在弹出的快捷菜单中选择,该菜单用分隔条分成三部份,其中第一部份与第二部份的三个选项为同一级别,选中第一部份的任一选项,内容将以整数形式显示,而选中第二部份的Ascii项则将以字符型式显示,选中Float项将相邻四字节组成的浮点数形式显示、选中Double项则将相邻8字节组成双精度形式显示。
第一部份又有多个选择项,其中Decimal项是一个开关,如果选中该项,则窗口中的值将以十进制的形式显示,否则按默认的十六进制方式显示。
keil调试 汇编语言
keil调试汇编语言(实用版)目录1.概述2.Keil 调试汇编语言的基本步骤3.Keil 调试汇编语言的优点4.应用实例5.总结正文1.概述汇编语言是一种低级编程语言,它使用计算机处理器能够理解的指令集。
尽管汇编语言在编写程序时具有很高的灵活性和控制能力,但它的语法较为复杂,编写难度较大。
Keil 是一款集成开发环境 (IDE),能够帮助程序员更轻松地编写、调试和运行汇编语言程序。
2.Keil 调试汇编语言的基本步骤使用 Keil 调试汇编语言程序可以分为以下几个基本步骤:(1) 创建一个新的 Keil 工程,并将汇编语言源代码文件添加到工程中。
(2) 使用 Keil 的编辑功能,编写或修改汇编语言代码。
(3) 在 Keil 中配置调试器,以适应目标处理器和硬件平台。
(4) 使用 Keil 的调试功能运行程序,并观察程序的执行过程和结果。
(5) 根据需要,修改汇编语言代码,并重复执行上述步骤,直到程序运行正确。
3.Keil 调试汇编语言的优点使用 Keil 调试汇编语言程序具有以下几个优点:(1)Keil 的集成开发环境提供了方便的编辑、调试和运行功能,使得编写和调试汇编语言程序变得更加简单和高效。
(2)Keil 支持多种处理器和硬件平台,使得其适用于不同的应用场景和需求。
(3)Keil 的调试功能可以实时观察程序的执行过程和结果,便于程序员发现和定位问题。
4.应用实例假设我们要使用汇编语言编写一个简单的程序,该程序在屏幕上显示“Hello, World!”。
我们可以按照以下步骤使用 Keil 调试汇编语言程序:(1) 创建一个新的 Keil 工程,并将汇编语言源代码文件添加到工程中。
(2) 使用 Keil 的编辑功能,编写汇编语言代码如下:```ORG 00hMOV AH, 09hMOV DX, OFFSET HelloWorldINT 21hHelloWorld DB "Hello, World!$"```(3) 在 Keil 中配置调试器,以适应目标处理器和硬件平台。
第2章 keil软件使用说明
第2章Keil软件使用说明2.1 Keil工程的建立2.2 工程的设置2.3 编译和链接2.4 调试2.1 Keil1)进入Keil界面单击自己安装的Keilμvision2的图标。
进入Keil后,屏幕显示如图2-2所示。
图2-2 起动Keil软件时的界面2)建立一个工程选择菜单【Project】│【New Project】,界面如图2-3所示。
图2-3 新建工程文件界面3)保存工程选择工程要保存的路径,输入工程名。
例如,建立的文件夹名为“流水灯”,工程名也命名为“流水灯”,然后单击“保存”按钮。
此时,该工程已经建立,扩展名为.uv2,即项目名为“流水灯.uv2”,如图2-4所示。
图2-4 “保存新工程”对话框4)选择系统要用的单片机保存文件后弹出对话框,如图2-5所示,要求选择所设计系统要用的单片机,在此选择AT89C51单片机。
图2-5 “选择单片机”对话框4)选择系统要用的单片机在选择某个单片机,单击“确定”后,弹出如图2-6所示的对话框。
图2-6 “添加启动文件”对话框上述任务完成后,显示2-7所示的界面。
5)建立文件图2-8 新建文件界面选择菜单【File】│【New】,出现如图2-8界面。
在光标所在的窗口输入编写的源程序。
6)文件保存待录入源程序后,选择【File】│【Save】,保存文件为“流水灯.c”,和原来建立的项目放在同一个文件夹下。
如果源文件为汇编语言编写的,则扩展名为“.ASM”。
7)添加文件图2-9 添加文件中出现的菜单在项目窗口下,单击“Target1”前面的“+”,然后在“Source Group 1”选项上单击右键,弹出如图2-9所示对话框。
7)添加文件图2-10 “添加文件”对话框选择“Add Files to Group ‘Source Group 1’”选项,弹出要求添加进本项目的对话框。
如图2-10所示。
7)添加文件图2-11 添加了文件后的窗口将刚建立的“流水灯.c”选中,单击“Add”按钮或鼠标左键双击即可将本文件添加进本项目。
Keil断点进阶用法,不看后悔
01前序作为一名攻城狮,你是否也经常遇到过这种情况,程序正运行着,突然某个变量就被莫名修改了,导致系统就不能按预期的方向继续运行。
此时将进行灵魂的拷问。
•变量何时改变的?•变量被改变了多少次才出现的问题?•当这个变量被设置成某个数据后,我想让程序暂停下来继续分析,该怎么办?•我不想让程序停下来,又没有串口重定位,又想输出一些额外信息,又该怎么办?以上问题的答案都可以这篇文章中找到答案。
02断点简介BreakSet命令为指定的表达式( exp )设置断点。
断点是程序地址或表达式,当它们为真时,会停止目标程序的执行或执行指定的命令(“cmd”)断点的相关参数释义如下:01exp是执行期间的一个地址或者一个表达式。
02cnt是一个表达式,用于确定在目标程序停止或执行指定命令之前满足断点条件的次数。
默认计数值为1。
第一个断点触发后,计数被忽略。
03cmd是在断点触发时执行的µVision 命令字符串。
程序执行不会停止。
用户定义函数可用于命令表达式。
在函数中,您可以将系统变量_break_设置为 1 以停止程序执行。
未指定命令时,程序执行停止。
03表达式(exp)在表达式中,常用到的就是程序变量(符号),程序变量是程序的变量。
它们通常被称为符号或符号名称。
表达式只支持简单的操作符,&, &&, <, , >=, ==, and !=。
符号名称的一般形式是如下。
[\\ExecName][[\[Path/]Module][\Identifier]]01ExecName表示在Target-Output-Name of Executable字段选项中定义的应用程序名称,必须以双反斜杠(\\) 开头。
02Path表示源代码文件的路径。
用斜杠(/) 将文件夹与子文件夹分开。
必须以斜杠(/) 结尾。
路径可以有绝对或相对符号。
03Module表示源模块的名称(*.c、*.cpp)。
在keiluvision(RVMDK)下使用stlink断点调试教程
在keiluvision(RVMDK)下使⽤stlink断点调试教程楼猪本来是⽤JTAG⽤来下载和调试stm32的程序的,由于JTAG是D版(你懂的),官⽅有升级时⼿贱点了升级,JTAG就变砖了。
后来发现⽤于STM8下载调试⽤的STLink还可以⽤来调试stm32,楼猪买的是20多块钱的STLINK,X宝买的,号称可以使⽤官⽅固件,于是就有了这篇⽂章:⾸先声明,楼猪⽤的是win 10 64位,keil uvision是4.74版1、当然是安装stlink的驱动,楼猪的stlink虽然号称是V2版,但实际上应该不是V2版,因为不能使⽤JTAG模式来调试,只能使⽤SW模式插⼊硬件后设备管理器会有stlink显⽰2、keil uvision中的设置4.7版本已经不需要将tools.ini覆盖了,设置如下图就可以了,下载器列表有两个st link的话,选择设置选项较多的⼀个吧;另外⼀个据说是D版专⽤的3、stlink如何接⼊JTAG接⼝说明:stlink接⼊stm32只要接⼊三根线就可以了SWCLK SWDAT GND接线如下图所⽰:图中J1的左侧就是有JTAG硬件接⼝中有缺⼝的位置4、如果做完上述步骤还不能进⾏调试(例如可以下载,但程序不能断点调试,不能跑进main函数等问题),你就要留意stm32的Boot0和Boot1管脚了在每个STM32的芯⽚上都有两个管脚BOOT0和BOOT1,这两个管脚在芯⽚复位时的电平状态决定了芯⽚复位后从哪个区域开始执⾏程序,见下表:BOOT1=x BOOT0=0 从⽤户闪存启动,这是正常的⼯作模式。
BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由⼚家设置。
BOOT1=1 BOOT0=1 从内置SRAM启动,这种模式可以⽤于调试。
也就是说,如果要调试,要将BOOT1接地,BOOT0上拉,但楼猪⾃⼰测试的情况是只要将BOOT0上拉就⾏,如下图:如果以上步骤做完还是不⾏,那可能是楼猪使⽤的硬件,或者keil uvision的⽣成设置与你的不⼀致造成的,请⼤家再继续钻研了。
KeilC软件使用(调试汇编程序)_图文.
Keil C软件使用(汇编语言山东交通学院杨福广 2011.09目录1简介 (3)2 建立一个新工程 (4)(1建立工程框架 (4)(2建立文件 (5)(3在工程中添加文件 (7)(4编辑工程中文件 (8)3 进行软件调试 (10)4 关于软件的设置 (11)1简介Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译, 仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。
下面介绍 Keil C51软件的使用方法进入Keil C51 后,屏幕如下图所示。
几秒钟后出现编辑界启动 Keil C51时的屏幕进入 Keil C51后的编辑界面简单程序的调试学习程序设计语言、学习某种程序软件, 最好的方法是直接操作实践。
下面通过简单的编程、调试, 引导大家学习汇编语言编程的基本使用方法和基本的调试技巧。
2 建立一个新工程 (1建立工程框架单击 Project 菜单,在弹出的下拉菜单中选中 New Project选项然后选择你要保存的路径,输入工程文件的名字,比如保存到 asm 目录里,工程文件的名字为test2。
如下图所示,然后点击保存.这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51几乎支持所有的 51核的单片机,我这里还是以大家用的比较多的Atmel 的 89C51来说明,如下图所示,选择 89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.完成上一步骤后,屏幕如下图所示(2建立文件到现在为止, 我们还没有编写一句程序, 下面开始编写我们的第一个程序。
在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项新建文件后屏幕如下图所示此时光标在编辑窗口里闪烁, 这时可以键入用户的应用程序了, 但笔者建议首先保存该空白的文件, 单击菜单上的“File”, 在下拉菜单中选中“Save As” 选项单击, 屏幕如下图所示, 在“文件名”栏右侧的编辑框中, 键入欲使用的文件名,同时,必须键入正确的扩展名。
Keil教程1-2-3-4
Keil教程(1)Keil工程文件的建立、设置与目标文件的获得单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51 单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil 软件是目前最流行开发MCS-51 系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil 即可看出。
Keil 提供了包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行Keil 软件需要Pentium 或以上的CPU,16MB 或更多RAM、20M 以上空闲的硬盘空间、WIN98、N T、WIN2000、WINXP 等操作系统。
掌握这一软件的使用对于使用51 系列单片机的爱好者来说是十分必要的,如果你使用C 语言编程,那么Keil 几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C 语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
我们将通过一些实例来学习Keil 软件的使用,在这一部份我们将学习如何输入源程序,建立工程、对工程进行详细的设置,以及如何将源程序变为目标代码。
图1 所示电路图使用89C51 单片机作为主芯片,这种单片机性属于MCS-51 系列,其内部有4K 的FLASH ROM,可以反复擦写,非常适于做实验。
89C51 的P1 引脚上接8 个发光二极管,P3.2~ P3.4 引脚上接4 个按钮开关,我们的第一个任务是让接在P1 引脚上的发光二极管依次循环点亮。
一、Keil工程的建立首先启动Keil 软件的集成开发环境,这里假设读者已正确安装了该软件,可以从桌面上直接双击uVision 的图标以启动该软件。
Keil 的调试命令、在线汇编与断点设置
Keil 的调试命令、在线汇编与断点设置上一讲中我们学习了如何建立工程、汇编、连接工程,并获得目标代码,但是做到这一步仅仅代表你的源程序没有语法错误,至于源程序中存在着的其它错误,必须通过调试才能发现并解决,事实上,除了极简单的程序以外,绝大部份的程序都要通过反复调试才能得到正确的结果,因此,调试是软件开发中重要的一个环节,这一讲将介绍常用的调试命令、利用在线汇编、各种设置断点进行程序调试的方法,并通过实例介绍这些方法的使用。
一、常用调试命令在对工程成功地进行汇编、连接以后,按Ctrl+F5 或者使用菜单Debug->Start/Stop Debug Session 即可进入调试状态,Keil 内建了一个仿真CPU 用来模拟执行程序,该仿真CPU 功能强大,可以在没有硬件和仿真机的情况下进行程序的调试,下面将要学的就是该模拟调试功能。
不过在学习之前必须明确,模拟毕竟只是模拟,与真实的硬件执行程序肯定还是有区别的,其中最明显的就是时序,软件模拟是不可能和真实的硬件具有相同的时序的,具体的表现就是程序执行的速度和各人使用的计算机有关,计算机性能越好,运行速度越快。
进入调试状态后,界面与编缉状态相比有明显的变化,Debug 菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图 1 所示,Debug 菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令。
? 图1 调试工具条学习程序调试,必须明确两个重要的概念,即单步执行与全速运行。
全速执行是指一行程序执行完以后紧接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难以确认错误出现在哪些程序行。
Keil C51编程调试教程
Keil C51集成开发环境编程与调试教程山东师大传媒学院刘新阳编一、Keil中进行C语言编程的基本步骤同VC之类的通用C语言集成开发环境(IDE)一样,Keil也采用“工程”(Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组成的大型程序开发提供了方便。
不管是最简单的C51程序,还是复杂的多文件程序都需要以下步骤:1)先建立新的工程文件;2)在工程中新建源代码文件,或是将已经存在的源代码文件加入工程;3)编译;4)调试,修正错误再编译;5)将生成的二进制文件*.hex烧入单片机。
本教程重点介绍上述前4个步骤。
二、Keil中新建工程的步骤1. 单击菜单“Project——New uVision Project……”出现新建工程对话框:在此对话框中选择存放工程各类文件的路径和文件夹,然后为工程的主文件取个名字,以后单击该主文件即可打开这个工程项目。
2. 选择单片机型号上个窗口关闭后,马上会呈现下面这个窗口,在这里我们要选择所使用的单片机型号。
具体到这里,我们选择Atmel文件夹下的AT89C51。
(也可以选择下面的AT89C52、AT89S51或AT89S52)注意:单击OK后会出现下面这个提示信息:这里一定要选“否”,即:不需要自动添加起始代码。
完成后,即可看到Keil主界面:此时可以看到屏幕左侧的“Project”窗口(工程文件管理器)中,Target1下面的Source Group1(源代码文件组1)为空,即现在新建的工程中还不包含任何源代码文件。
所以,接下来要做的就是新建源代码文件。
3. 新建源代码文件单击菜单“File——New……”之后,即可在编辑区看到新建了一个名为text1的文本文件。
单击工具栏上的“保存”(图标为磁盘)按钮,可以在保存文件对话框中选择这个文本文件的保存位置(一般和工程文件保存在同一级文件夹)和文件的主名及扩展名。
如果只有一个源代码文件,一般主名命名为工程名,若是C语言源代码,扩展名设置为.c即可。
Keil使用教程详细教程PPT课件
工程管理窗口内容及分布,与Windows 的资源管理器相似。
3 Keil C应用
图4-7 Keil C51的 工程管理器
3 Keil C应用
一、项目的建立
1、建立项目
选择Project菜单下的New Project命令, 创建新工程,在对话框中设定新工程的位 置,输入新工程名字保存即可。
1
• 要求 掌握使用KEIL进行程序创建,运行。
C51集成开发软件Keil C
主要内容
1 Keil C集成开发工具 简介
2 Keil C操作界面 3 Keil C的使用 4 项目的运行调试
C51集成开发软件Keil C
Keil C:是德国KEIL公司开发的单片机C 语言编译器。其前身是FRANKLIN C51,功 能相当强大。
这些库是按规定格式排列的目标模块, 可在以后被链接器所使用。
1 KeilC集成工具简介
三、模拟调试器
Keil C有三个模拟调试器。
1、软件模拟调试器dScope51
(1)模拟程序运行与调试,包括C、汇编、 宏汇编程序; (2)模拟CPU及其外围器 件,如串行口、定时器/计数器、I/O口等。
2、硬件调试器tScope51
19)Function Editor…: 编辑调试函数和调试配
置文件
2 Keil C操作界面
六、片内外设(Peripheral)菜 单
1)Reset CPU:复位CPU 2)Interrupt:设置/观察中断(触发方式、
优先级、使能等) 3)I/O Ports:设置/观察各个I/O口 4)Serial:设置/观察串行口 5)Timer:设置/观察各个定时器/计数器 6)A/D Converter:设置/观察A/D转换器 7)D/A Converter:设置/观察D/A转换器
keil调试 汇编语言
keil调试汇编语言(最新版)目录1.汇编语言与 Keil 调试器的简介2.Keil 调试器在汇编语言编程中的作用3.如何使用 Keil 调试器进行汇编语言调试4.总结正文一、汇编语言与 Keil 调试器的简介汇编语言是一种低级编程语言,它使用计算机处理器能够理解的指令集。
这种语言与高级编程语言相比,更接近计算机硬件,因此具有更高的执行效率。
然而,汇编语言编写难度较大,调试过程也相对复杂。
Keil 调试器是一款功能强大的调试工具,它支持汇编语言等多种编程语言。
通过 Keil 调试器,程序员可以轻松地进行代码调试,提高编程效率。
二、Keil 调试器在汇编语言编程中的作用在汇编语言编程过程中,Keil 调试器具有以下作用:1.语法高亮与代码自动补全:Keil 调试器提供语法高亮功能,使程序员更容易阅读和理解代码。
此外,它还支持代码自动补全,方便程序员快速编写代码。
2.实时调试:Keil 调试器支持实时调试,程序员可以在程序运行过程中观察寄存器和内存的变化,找出程序的错误所在。
3.单步执行与断点设置:Keil 调试器允许程序员设置断点,并在程序执行过程中单步跳过这些断点,以便观察程序状态。
4.程序分析与优化:Keil 调试器提供多种分析工具,如反汇编、代码统计等,帮助程序员分析代码性能并进行优化。
三、如何使用 Keil 调试器进行汇编语言调试使用 Keil 调试器进行汇编语言调试的基本步骤如下:1.打开 Keil 软件,创建一个新项目,并将汇编语言代码粘贴到项目中。
2.配置调试器:在 Keil 调试器中,选择“Project”菜单下的“Properties”,在弹出的对话框中选择“Debug”选项卡。
在这里,可以设置调试器的一些参数,如调试模式、断点等。
3.编译与下载:在 Keil 调试器中,选择“Build”菜单下的“Build Project”,编译代码并将其下载到目标硬件。
4.调试:连接目标硬件,并在 Keil 调试器中选择“Run”菜单下的“Start Debugging”。
keil 汇编方法
Keil软件的使用有关“Keil uVision2”软件的使用:开发单片机的第一步就是用Keil软件编写汇编程序,并形成最终的“*.hex”目标文件,然后用编程器将该文件烧写到单片机中就行了,最后将烧写好的单片机插到电路板上,一接通电源就可以工作了。
下面以编写小灯闪烁的程序为例介绍KILL软件的使用方法:1、双击桌面上的图标,打开以下窗口:点“工程”,新建工程:给工程起一个名字,我用“xiaodeng”就是小灯的意思,然后点保存:选择你使用的芯片型号,我用的是Atmel公司生产的89s51,双击Atmel:在下面找到At89S51后,点击它,然后确定:点击确定后,接下来再为你的工程新建一个文件弹出以下窗口:在弹出的窗口里面写入你的汇编程序:然后点文件,另存为:为你的文件起一个名字,我这里名字为“xiaodeng.asm”。
注意文件的扩展名不能省略,而且必须是“.asm”:点击保存,出现以下界面:将左边Target 1前面的“+”号展开,在它下面的字符“Source Group 1”上点击鼠标右键,再点击增加文件到组:在文件类型中点击asm源文件:在文件中找到你刚才新建的xiaodeng.asm文件,然后点击Add加入:只需要加入一次就够了,如果再次加入,将出现以下画面,不要紧,点确定就好了:这时候,左边的文件夹“Source Group 1”前面就有了一个“+”号:点击该“+”号展开后,下面就出现了一个名为“Xiakdeng.asm”的文件,说明已经将文件加进来了。
接下来将鼠标移到“Target 1”上,点击右键,再点击“目标‘Target 1’属性”:弹出以下窗口:点“输出”,在新弹出的窗口中,一定要确保“E生成 HEX文件”前面的小方格内有一个勾“√”,即选中该项,然后再点击“确定”:最后点击下面的符号:即“构造所有目标文件夹”,当出现以下画面时,说明目标文件“xiaodeng.hex”文件已经生成了:这个“xiaodeng.hex”文件就是往单片机89s51里面写的文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Keil 的调试命令、在线汇编与断点设置上一讲中我们学习了如何建立工程、汇编、连接工程,并获得目标代码,但是做到这一步仅仅代表你的源程序没有语法错误,至于源程序中存在着的其它错误,必须通过调试才能发现并解决,事实上,除了极简单的程序以外,绝大部份的程序都要通过反复调试才能得到正确的结果,因此,调试是软件开发中重要的一个环节,这一讲将介绍常用的调试命令、利用在线汇编、各种设置断点进行程序调试的方法,并通过实例介绍这些方法的使用。
一、常用调试命令 在对工程成功地进行汇编、连接以后,按Ctrl+F5或者使用菜单Debug->Start/Stop DebugSession 即可进入调试状态,Keil 内建了一个仿真CPU 用来模拟执行程序,该仿真CPU 功能强大,可以在没有硬件和仿真机的情况下进行程序的调试,下面将要学的就是该模拟调试功能。
不过在学习之前必须明确,模拟毕竟只是模拟,与真实的硬件执行程序肯定还是有区别的,其中最明显的就是时序,软件模拟是不可能和真实的硬件具有相同的时序的,具体的表现就是程序执行的速度和各人使用的计算机有关,计算机性能越好,运行速度越快。
进入调试状态后,界面与编缉状态相比有明显的变化,Debug 菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图1所示,Debug 菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令。
学习程序调试,必须明确两个重要的概念,即单步执行与全速运行。
全速执行是指一行程序执行完以后紧接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难以确认错误出现在哪些程序行。
单步执行是每次执行一行程序,执行完该行程序以后即停止,等待命令执行下一行程序,此时可以观察该行程序执行完以后得到的结果,是否与我们写该行程序所想要得到的结果相同,借此可以找到程序中问题所在。
程序调试中,这两种运行方式都要用到。
使用菜单STEP 或相应的命令按钮或使用快捷键F11可以单步执行程序,使用菜单STEP OVER 或功能键F10可以以过程单步形式执行命令,所谓过程单步,是指将汇编语言中的子程序或高级语言中的函数作为一个语句来全速执行。
按下F11键,可以看到源程序窗口的左边出现了一个黄色调试箭头,指向源程序的第一行,如图2所示。
每按一次F11,即执行该箭头所指程序行,然后箭头指向下一行,当箭头指向LCALL DELAY 行时,再次按下F11,会发现,箭头指向了延时子程序DELAY 的第一行。
不断按F11键,即可逐步执行延时子程序。
通过单步执行程序,可以找出一些问题的所在,但是仅依靠单步执行来查错有时是困难的,或虽能查出错误但效率很低,为此必须辅之以其它的方法,如本例中的延时程序是通过图1 调试工具条图2 调试窗口1.进入Debug 状态。
2.F10:过程单步3.F11:单步。
将D2: DJNZ R6,D2这一行程序执行六万多次来达到延时的目的,如果用按F11六万多次的方法来执行完该程序行,显然不合适,为此,可以采取以下一些方法,第一,用鼠标在子程序的最后一行(ret )点一下,把光标定位于该行,然后用菜单Debug->Run to Cursor line (执行到光标所在行),即可全速执行完黄色箭头与光标之间的程序行。
第二,在进入该子程序后,使用菜单Debug->Step Out of Current Function (单步执行到该函数外),使用该命令后,即全速执行完调试光标所在的子程序或子函数并指向主程序中的下一行程序(这里是JMP LOOP 行)。
第三种方法,在开始调试的,按F10而非F11,程序也将单步执行,不同的是,执行到lcall delay 行时,按下F10键,调试光标不进入子程序的内部,而是全速执行完该子程序,然后直接指向下一行“JMP LOOP ”。
灵活应用这几种方法,可以大大提高查错的效率。
二、在线汇编 在进入Keil 的调试环境以后,如果发现程序有错,可以直接对源程序进行修改,但是要使修改后的代码起作用,必须先退出调试环境,重新进行编译、连接后再次进入调试,如果只是需要对某些程序行进行测试,或仅需对源程序进行临时的修改,这样的过程未免有些麻烦,为此Keil 软件提供了在线汇编的能力,将光标定位于需要修改的程序行上,用菜单Debug->Inline Assambly…即可出现如图3的对话框,在Enter New 后面的编缉框内直接输入需更改的程序语句,输入完后键入回车将自动指向下一条语句,可以继续修改,如果不再需要修改,可以点击右上角的关闭按钮关闭窗口。
三、断点设置程序调试时,一些程序行必须满足一定的条件才能被执行到(如程序中某变量达到一定的值、按键被按下、串口接收到数据、有中断产生等),这些条件往往是异步发生或难以预先设定的,这类问题使用单步执行的方法是很难调试的,这时就要使用到程序调试中的另一种非常重要的方法——断点设置。
断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此观察有关变量值,以确定问题所在。
在程序行设置/移除断点的方法是将光标定位于需要设置断点的程序行,使用菜单Debug->Insert/Remove BreakPoint 设置或移除断点(也可以用鼠标在该行双击实现同样的功能);Debug->Enable/Disable Breakpoint 是开启或暂停光标所在行的断点功能;Debug->Disable All Breakpoint 暂停所有断点;Debug->Kill All BreakPoint 清除所有的断点设置。
这些功能也可以用工具条上的快捷按钮进行设置。
除了在某程序行设置断点这一基本方法以外,Keil 软件还提供了多种设置断点的方法,按Debug->Breakpoints…即出现一个对话框,该对话框用于对断点进行详细的设置,如图4所示。
图4中Expression 后的编缉框内用于输入表达式,该表达式用于确定程序停止运行的条件,这里表达式的定义功能非常强大,涉及到Keil 内置的一套调试语法,这里不作详细说明,仅举若干实例,希望读者可以举一反三。
1) 在Experssion 中键入a==0xf7,再点击Define 即定义了一个断点, 注意,a 后有两个等号,意即相等。
该表达式的含义是:如果a 的值到达0xf7则停止程序运行。
除图3 在线汇编窗口 断点设置1:当变量满足某条件时,停止。
使用相等符号之外,还可以使用>,>=,<,<=,!=(不等于),&(两值按位与),&&(两值相与)等运算符号。
2) 在Experssion 后中键入Delay 再点击Define ,其含义是如果执行标号为Delay 的行则中断。
3) 在Experssion 后中键入Delay ,按Count 后的微调按钮,将值调到3,其意义是当第三次执行到Delay 时才停止程序运行。
4) 在Experssion 后键入Delay ,在Command 后键入printf(“SubRoutine ‘Delay’ has been Called\n”)主程序每次调用Delay 程序时并不停止运行,但会在输出窗口Command 页输出一行字符,即SubRoutine ‘Delay’ has been Called 。
其中“\n ”的用途是回车换行,使窗口输出的字符整齐。
5) 设置断点前先在输出窗口的Command 页中键入DEFINE int I ,然后在断点设置时同4),但是Command 后键入printf(“SubRoutine ‘Delay’ has been Called %dtimes\n”,++I),则主程序每次调用Delay 时将会在Command 窗口输出该字符及被调用的次数,如SubRoutine ‘Delay’ has been Called 10 times 。
对于使用C 源程序语言的调试,表达式中可以直接使用变量名,但必须要注意,设置时只能使用全局变量名和调试箭头所指模块中的局部变量名。
四、实例调试为进行程序的调试,我们首先给源程序制造一个错误,将延时子程序的第三行“DJNZ R6,$”后的$改为D1,然后重新编译,由于程序中并无语法错误,所以编译时不会有任何出错提示,但由于转移目的地出错,所以子程序将陷入无限循环中。
进入调试状态后,按F10以过程单步的形式执行程序,当执行到LCALL DELAY 行时,程序不能继续往下执行,同时发现调试工具条上的Halt 按钮变成了红色,说明程序在此不断地执行着,而我们预期这一行程序执行完后将停止,这个结果与预期不同,可以看出所调用的子程序出了差错。
为查明出错原因,按Halt 按钮使程序停止执行,然后按RST 按钮使程序复位,再次按下F10单步执行,但在执行到LCALL DELAY 行时,改按F11键跟踪到子程序内部(如果按下F11键没有反应,请在源程序窗口中用鼠标点一下),单步执行程序,可以发现在执行到“DJNZ R6,D1”行时,程序不断地从这一行转移到上一行,同时观察左侧的寄存器的值,会发现R6的值始终在FFH 和FEH 之间变化,不会减小,而我们的预期是R6的值不断减小,减到0后往下执行,因此这个结果与预期不符,通过这样的观察,不难发现问题是因为标号写错而产生的,发现问题即可以修改,为了验证即将进行的修改是否正确,可以先使用在线汇编功能测试一下。
把光标定位于程序行“DJNZ R6,D1”,打开在线汇编的对话框,将程序改为“DJNZ R7,0EH ”,即转回本条指令所在行继续执行,其中0EH 是本条指令在程序存储器中的位置,这个值可以通过在线汇编窗口看到,如图3所示。
然后关闭窗口,再进行调试,发现程序能够正确地执行了,这说明修改是正确的。
注意,这时候的源程序并没有修改,此时应该退出调试程序,将源程序更改过来,并重新编译连接,以获得正确的目标代码。
图4 断点设置对话框 断点设置2:当运行至某行时,停止。
断点设置3:子程序运行某次时,停止。
断点设置4:运行某处时,在Command 页显示设定的字符,不停止。
断点设置5:显示运行至某行的次数。