Keil uVISION2 自学教程
Keil uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的 MCS-51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持、PLM、汇编和 C 语言的程序设计,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。 因此很多开发 51 单片机 应用的工程师或普通的单片机爱好者,都对它十分喜欢。
Keil Cx51 是一个商业的软件,分两个版本,一个是完全版,使用时对生成的机器代码空间不作任何限制,另一个是只能编译 2K 代码空间 的 DEMO 版软件,基本可以满足一 般的个人学习和小型应用的开发。废话少说,言归正传。
运行 Keil uVISION2 几秒后,出现如图 1-1 的屏幕。
一、建立工程
(1)点击 Project 菜单,选择 New Project,如图 1-3。弹出的 Windows 文件对话窗口, 在“文件名”中输入您的第一个 C 程序项目名称(只要符合 Windows 文件规则的文件名都 行),这里我们用“test”,如图 1-4。 “保存”后的文件扩展名为 uv2,这是 KEILuVision2 项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。
( 2)选择器件,根据需要选择相应型号的器件,这里我们选择常用的 Ateml 公司的AT89C51。此时屏幕如图 1-5 所示。点击确定后返回主界面。
(3)点击“Target1”前面的“+”号,出现下一层的“ Source Group1”,这时的工程还是一个空的工程,里面什么文件也没有,需要把编写好的源程序加入,点击“Source Group1”使其反白显示 , 然后,点击鼠标右键,出现如图 3 所示的下拉菜单。 选中其中的 “Add file to Group”Source Group1”,出现一个对话框,要求寻找源文件,注意,该对话框下面的“文件 类型”默认为 C source file(*.c),也就是以 C 为扩展名的文件,如为汇编文件,需要将文件 类型改掉。
(4)如需新建文件,点击图 1-7 中 1 的新建文件的快捷按钮,在 2 中出现一个新的文字编辑窗口,这个操作也可以通过菜单 File-New 或快捷键 Ctrl+N 来实现。在文件编辑窗口输入你的第一个 C 程序。完成后保存退出。
注意:文件名必须有扩展名,如 c 程序扩展名为.c,汇编程序扩展名为.asm 或.am51。
源程序可在任何文本编辑器中编写,但要注意全角与半角字符,另外 Keil Cx51 文本编 辑器对汉字支持不好。
二、工程的详细设置
工程建立好以后,还要对工程进行进一步的设置,以满足要求。首先点击左边 Project 窗口的 Target 1,然后使用菜单“Project->Option for target ‘target1’”即出现对工程设置的对话框,这个对话框可谓非常复杂,共有 8 个页面,要全部搞清可不容易,绝大部份设置项 取默认值就可以了。
Xtal (MHz)-----晶振频率值,默认值是所选目标 CPU 的最高可用频率值,根据需要进行设 置。该数值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间。正确 设置该数值可使显示时间与实际所用时间一致,一般将其设置成与你的硬件所用晶振频率 相同,如果没必要了解程序执行的时间,也可以不设。
Memory Model---选择编译模式(存储器模式)。
Small 是所有变量都在单片机的内部 RAM 中;
Compact 是可以使用一页外部扩展 RAM;
Larget 则是可以使用全部外部的扩展 RAM。
Code Model ---用于设置 ROM 空间的使用。
Small 模式,只用低于 2K 的程序空间;
Compact 模式,单个函数的代码量不能超过 2K,整个程序可以使用 64K 程序空间;
Larget 模式,可用全部 64K 空间。
Use on-chip ROM ----是否仅使用片内 ROM 选择项,注意:选中该项并不会影响最终生成的目标代码量
Operating -----是操作系统选择项。Keil 提供了两种操作系统:Rtx tiny 和 Rtx full,通常 我们不使用任何操作系统,即使用该项的默认值:None(不使用任何操作系统);
Off Chip Code memory -----用以确定系统扩展 ROM 的地址范围。
Off Chip xData memory----- 用于确定系统扩展 RAM 的地址范围
这些选择项必须根据所用硬件来决定,如果是最小应用系统,不进行任何扩展,均不重新选择,按默认值设置。
Select Folder for objects-----选择最终的目标文件所在的文件夹,默认是与工程文件在同一个文件夹中,一般不需要更改。
Name of Executable----- 用于指定最终生成的目标文件的名字,默认与工程的名字相同,一般不需要更改。
Debug information----- 将会产生调试信息。这些信息用于调试,如果需要对程序进行调试,应当选中该项。
Browse information-----是产生浏览信息。该信息可以用菜单 view->Browse 来查看,这里取默认值。
Creat Hex file-----用于生成可执行代码文件。可以用编程器写入单片机芯片的 HEX 格式文件,文件的扩展名为.HEX。
其它选默认即可
在汇编或编译完成后将产生(*.lst)的列表文件,在连接完成后也将产生(*.m51)的列表文件,该页用于对列表文件的内容和形式进行细致的调节,其中比较常用的选项是“C
Compile Listing”下的“Assamble Code”项,选中该项可以在列表文件中生成 C 语言源程序所对应的汇编代码。
C51 标签页用于对 Keil 的 C51 编译器的编译过程进行控制,其中比较常用的是“Code Optimization”组,该组中 Level 是优化等级,C51 在对源程序进行编译时,可以对代码多 至 9 级优化,默认使用第 8 级,一般不必修改,如果在编译中出现一些问题,可以降低优 化级别试一试。Emphasis (强调、重点)是选择编译优先方式,第一项是代码量优化(最终 生成的代码量小);第二项是速度优先(最终生成的代码速度快);第三项是缺省。默认的 是速度优先,可根据需要更改。
三、编译、连接
在工程中加入文件后即可进行编译连接。
本项目只学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置。在上图中,各按钮功能如下:
1 ---用于编译单个文件;
2 ---编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再 次重新编译的;
3-- 是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。
4 ---信息输出窗口,在窗口中可以看到编译的错误信息和使用的系统资源情况等。
5 ---是菜单中对应的编译选项,可依据个人习惯选用。
6---是开启\关闭调试模式的按钮,它也存在于菜单 Debug-Start\Stop Debug Session,快捷 键为 Ctrl+F5。
在 3 右边的是停止编译按钮,只有点击了前三个中的任意一个,停止按钮才会生效。 在本项目只有一个文件,按 123 中的任何一个都可以编译。
四、进入调试
(一)常用调试命令
进入调试状态,Keil 内建了一个仿真 CPU 用来模拟执行程序,该仿真 CPU 功能强大, 可以在没有硬件和仿真机的情况下进行程序的调试,下面将要学的就是该模拟调试功能。 不过在学习之前必须明确,模拟毕竟只是模拟,与真实的硬件执行程序肯定还是有区别的, 其中最明显的就是时序,软件模拟是不可能和真实的硬件具有相同的时序的,具体的表现就是程序执行的速度和各人使用的计算机有关,计算机性能越好,运行速度越快。
进入调试状态后,界面与编缉状态相比有明显的变化,Debug 菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图所示,Debug 菜单上的大部份命令可以在此找到对应的快捷按钮。,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮 等命令。
几个重要的概念:
全速执行-----是指一行程序执行完以后紧接着执行下一行程序,中间不停止,主要是看程序执行的最终结果,如果程序有错,则难以确认错误出现在哪些程序行。
单步执行-----是每次执行一行程序,执行完该行程序以后即停止,等待命令执行下一行 程序,此时可以观察该行程序执行完以后得到的结果,是否与预期结果相同,借此可以找 到程序中问题所在。
过程单步-----是指将汇编语言中的子程序或高级语言中的函数作为一个语句来全速执行。调试光标不进入子程序的内部,而是执行完该子程序,然后直接指向下一行。
运行到当前行-----全速执行当前地址行与当前光标行之间和程序。主要看一段程序运行情况,可以加快程序的调试。
执行完当前子程序-----是指进入子程序后按此按钮,子程序中其余没有执行的指令将一次全部执行完毕,加快程序的执行进度。
程序调试中,这几种运行方式都要用到。灵活应用这几种方法,可以大大提高查错的效率。
(二)断点设置
断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此观察有关变量值,以确定问题所在。 程序行设置/移除断点的方法:
(1)将光标定位于需要设置断点的程序行,使用菜单 Debug->Insert/Remove BreakPoint 设置或移除断点;
Debug->Enable/Disable Breakpoint 是开启或暂停光标所在行的断点功能;
Debug->Disable All Breakpoint 暂停所有断点;
Debug->Kill All BreakPoint 清除所有的断点设置。
(2)使用工具条
五、程序实例
输入下面程序:
#include <reg51.h> //包含寄存器头文件 #include <stdio.h> //标准输入/输出头文件 void main(void) { //main 函数 SCON = 0x52; //串口方式 1,允许接收 TMOD = 0x20; //定时器 1 定时方式 2 TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = ; TR1 = ; //启动定时器 ) { printf ("Hello World!\n"); //显示 Hello World } }
建立好工程后进入调试模式,按 4 我们可以打开 5 中的串行调试窗口,这个窗口我们
可以看到从 51 芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。 这些功能在菜单中有相应的对应。首先按 4 打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打印“HelloWorld!”。这样就完成了您的第一个 C 项目。最后 我们要停止程序运行并回到文件编辑模式,就要先按停止按钮再按开启\关闭调试模式按钮。
可以打开反汇编窗口,看 C 程序所对应的汇编代码,光标在那一个窗口,程序将按那一个窗口所对应的程序进行执行。
Keil uVISION2 自学教程的更多相关文章
- HMM 自学教程(八)总结
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在HMM 学习最佳范例,这是针对国外网站上一个 HMM 教程的翻译,作者功底很深,翻译得很精彩,且在 ...
- HMM 自学教程(七)前向后向算法
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- HMM 自学教程(六)维特比算法
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- HMM 自学教程(五)前向算法
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- HMM 自学教程(四)隐马尔科夫模型
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- HMM 自学教程(三)隐藏模式
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- HMM 自学教程(二)生成模型
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- HMM 自学教程(一)引言
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- PJ可能会考的模拟与枚举-自学教程
PJ可能会考的模拟与枚举-自学教程 文/Pleiades_Antares 之前学校里看一个小可爱复习的时候偷偷听来着XD 简单记了一下重点吧,希望能对看官您有所帮助XD 以下⬇️是几个复习时讲过的题, ...
随机推荐
- Android-Socket传输 GPRS网络
手机使用GPRS网络与server进行Socket通信,代码下载地址:http://download.csdn.net/detail/wu20093346/7768481 用UDP协议与Socket调 ...
- 关于Build Active Architecture Only属性
关于Build Active Architecture Only属性 Architecture 属性在BuildSetting里. 这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当 ...
- GNU Make----Core Automatic Variables
$@ 表示规则的目标文件名.如果目标是一个文档文件(Linux中,一般称.a 文件为 文档文件,也称为静态库文件),那么它代表这个文档的文件名.在多目标模式 规则中,它代表的是哪个触发规则被执行的目标 ...
- android SDK开发 -- TitleBar封装(一)
假设app的title 统一的都是这种左中右结构的 代码如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...
- ASPNET5 诊断
1. 配置一个错误的处理页 在ASP.NET5, 可以在Startup的Configure里配置一个错误处理页,对于开发来说,非常简单,只要增加Microsoft.AspNet.Diagnostics ...
- 【转载】逃离adapter的地狱-针对多个View type的组合实现方案
英文原文:JOE'S GREAT ADAPTER HELL ESCAPE 转载地址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015 ...
- sql - 复制表
1,复制表结构和内容 1)这个表: select * into new_table_name from old_table_name ref:SQL复制数据表及表结构
- js 去掉浏览器右击默认事件
1.整个页面所有的右击事件 document.oncontextmenu = function(){ return false; } 2.特定的区域 document.getElementById(& ...
- WBS说明
work breakdown structure(WBS) 工作分解结构 (英语:Work Breakdown Structure, WBS)是一个详尽的,层次的(从全面到细节)的树形结构,由可交付成 ...
- locate 不能使用
当需要查找一个文件,只知道文件名不知道路径,我们通常用locate,由于公司的服务器使用最小化安装的所以当locate 文件名,报错,提 示-bash: locate: command not fou ...