购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第2章
练练我们的刀和剑:Proteus、Keil C51

作为一个剑客要有自己心爱的宝剑:白云城主叶孤城使用的是巨阙剑,西门吹雪使用的是乌鞘剑。同样,我们要在 51 单片机的世界里杀出一片天地,也要有自己应手的“兵器”。在这里我给大家介绍两件宝贝:那就是屠龙刀Proteus和倚天剑Keil C51。工欲善其事,必先利其器。下面我们就先修炼我们的刀和剑。

2.1 Proteus介绍

学习这个工具之前先对它简单了解一下吧:Proteus是英国Labcenter Electronics公司研发的EDA工具软件,是多种型号单片机系统的设计与仿真平台。我第一次接触它是 2005年前后,那时我也是在学习单片机,有同事给我介绍了这个软件,自从用了之后就爱不释手,所以今天在这里将它分享给大家。我们的目的不是要学习该软件的所有功能,而是拿它作为自己学习单片机的工具,因而我只是简单地介绍一下。

Proteus当前最新的版本是Proteus 7.9,可以到Labcenter Electronic公司的网站http://www.labcenter.com上查看最新的版本。我使用的版本是Proteus Professional V7.5 SP3,因为Proteus 6 和Proteus 7 区别较大,而每个子版本的改动比较小,而且网上有关Proteus 7.5 的资料多一些,所以我就选择了这个版本。

2.1.1 安装Proteus

Proteus的安装过程比较简单,我们仅抓几个主要界面作为安装提示。如果计算机安装有杀毒软件,安装Proteus前最好先关闭杀毒软件,否则可能会因为杀毒软件导致安装失败。安装首界面如图 2-1 所示。

安装到第 3 步的时候会让你选择“Licence Key”,我们选择“Use a locally installed Licence Key”,如图 2-2 所示。

接下来几步都按照提示默认进行,当选择安装目录的时候,我也是按照默认路径“C:\Program Files\...”安装的,如图 2-3 所示。

图 2-1 Proteus安装首界面

图 2-2 Licence Key选择界面

图 2-3 安装目录选择

接下来几步还是按照安装提示默认进行,但安装过程中如果打开杀毒软件会有如图 2-4所示的提示,因而安装前最好先关闭杀毒软件,或在这里选择“离开”。当然不同的杀毒软件可能会有不同的提示,也可能会根据杀毒软件的设置不同自动删除导致安装失败。

图 2-4 杀毒软件提示

安装完成后,系统会有如图 2-5 所示的提示。

图 2-5 安装完成

到此我们已经安装成功,可以运行Proteus看看它的真面目了。

2.1.2 运行Proteus

选择“开始”→“所有程序”→“Proteus 7 Professional”→“ISIS 7 Professional”菜单命令,如图 2-6 所示,运行Proteus ISIS集成环境。

首次运行会有如图 2-7 所示的提示。

图 2-6 Proteus开始菜单

图 2-7 软件注册提示

单击“OK”按钮,系统直接关闭。不用着急,这是因为没有注册的缘故(我们可以通过图 2-6 中的“Licence Manager”菜单完成软件的注册)。

注册成功后,再次运行“ISIS 7 Professional”,会看到如图 2-8 所示的启动界面。

图 2-8 启动界面

启动完成进入集成环境的主界面,如图 2-9 所示。

图 2-9 ISIS主界面

2.1.3 学用Proteus

既然已经运行起来了,我们就先用用吧。选择菜单栏的“File”→“Open Design…”命令,系统会提示选择打开文件,如图 2-10 所示。

图 2-10 打开文件目录

第一次使用,默认目录是“SAMPLES”目录。若不在该目录,需要根据Proteus安装的目录,找到该目录。我们选择“VSM for 8051”进入下一级目录,选择“8051 LCD Driver”进入目录内部,如图 2-11 所示。

图 2-11 进入目录内部

选择“LCDDEMO.DSN”文件,打开该文件。文件打开后,界面如图 2-12 所示。

图 2-12 Demo界面

先用 (仿真控制按钮)的 (Play)按钮,让系统运行起来,观察LCD的显示。怎么样,是不是感觉和真的电路板在运行一样?

将鼠标停留在“仿真控制按钮”上几秒钟,会出现提示信息:Play、Step、Pause、Stop字样,我们就用这几个单词代替对应按钮的称呼。在仿真过程中单击“Pause”按钮,系统会暂停下来,再单击该按钮,系统会接着运行;暂停时单击“Step”按钮,系统会单步执行,单击“Stop”按钮可以让系统停下来。这就是仿真环境的仿真调试过程。

在仿真系统暂停时,会弹出如图 2-13 所示窗口(若不出现,在暂停时选择菜单命令“Debug”→“8051 CPU Source code –U1”,该窗口就会出现),然后执行Step单步执行操作,可以看到代码的调试过程(不过样例的源代码是汇编的)。“Debug”菜单还有很多功能,可以在后面的学习过程中自己多摸索掌握。

图 2-13 调试窗口

在绘图模式(非仿真状态)下滚动鼠标中间的滚轮,会发现“图形编辑窗口”的图形会自动放大、缩小。放大图形后,用鼠标单击“预览窗口”,可以选择在“图形编辑窗口”看到的图形部分。

在“图形编辑窗口”用鼠标左键单击“8051”芯片,该芯片在图中会变为红色,如图 2-14 所示。再次单击该器件,会弹出如图 2-15 所示窗口。

在“Program File”项可以选择要加载的编译过的程序代码,在“Clock Frequency”项可以设置单片机的工作晶振,系统中用的是 1.2MHz的晶振(所以在设计仿真电路时,可以不画外部的晶振电路,在这里配置一下就可以了)。

观察样例可以发现,在“对象选择器窗口”有一列器件列表,用鼠标选择不同的器件,在“预览窗口”可以看到该器件的图形,如图 2-16 所示。

图 2-14 选择芯片

图 2-15 芯片设置窗口

图 2-16 对象选择器窗口的器件列表

单击“对象选择器窗口”的“P”按钮,会弹出器件选择窗口。

如图 2-17 所示,将样例“对象选择器列表”中的器件名称输入“Keywords”编辑框中,会看到窗口页面的变化。这就是最常用的一种添加元器件的方法。我们输入“CAP”选择添加电容,单击“OK”按钮退出器件选择窗口。在“图形编辑区”单击鼠标左键,可以发现有个电容的图形在动,选择合适的位置,再次单击左键,就可以绘制一个电容了。

图 2-17 器件选择窗口

单击新添加的电容,使其变为红色,然后拖动鼠标,可以修改其放置位置;双击左键可以修改电容属性;放置电容后,用鼠标可以将其引脚和 8051 的引脚连接起来,这样就画了一根导线;在电容上双击右键,可以删除该电容和其连线。

当然,添加新器件又不知道器件的具体名称时,我们也可以分类查找。如图 2-18 所示,先在Category列表中找到自己所选器件的分类,然后再进入子分类Sub-category列表选择,最后就可以在Results列表中查看了。不过所有元器件的名称和其分类都是英文的,添加时不太容易选择,我们在本书附录B中对此版本元件库的分类和子分类做了一个中英文对照表。

图 2-18 添加新器件

怎么样,很有趣吧,通过网络你可以了解更多有关Proteus的使用方法。我们教程的重点是讲解单片机的程序设计,所以有关Proteus的使用就先讲到这里,其他的功能用到时我们会再做介绍。

2.2 Keil C51 介绍

Keil C51 是众多单片机集成开发环境中的一种,它是德国KEIL公司开发的。具有编译时间短、可产生最少的代码量、支持浮点和长整数、重入和递归等特点,因而得到许多 51单片机开发者的青睐。

Keil C51 的版本比较多,而且根据个人爱好使用的人群对版本的选择也没有统一的原则,习惯上Keil μVision2 以上版本都可以满足 51 单片机的学习使用。这里我们选择的是Keil C51 Version 8.02 版(Keil μVision3),如果以前没有使用过该软件,最好选择同一版本的,以方便后面教程中的学习。

2.2.1 安装Keil C51

和Proteus的安装一样,在这里也是简单地抓几个画面来介绍Keil C51 的安装过程。运行安装文件会看到安装系统的首页,如图 2-19 所示。

图 2-19 Keil C51 安装首页

第二步是协议的选择,选择同意后,进入下一个页面,是安装目录的选择,默认是C:\Keil目录,如图 2-20 所示。如果操作系统安装在C盘,最好按默认目录安装,因为根据网上介绍,如果修改该目录会影响软件的注册。

后面进入第四步,要填写一些用户信息,这个简单填写一下就可以了。接下来进入文件安装过程,安装完成后会给出提示界面,如图 2-21 所示。

图 2-20 安装目录选择

图 2-21 安装完成

到此就完成了Keil C51 集成开发环境的安装过程。下面运行Keil C51,看看是怎样的。

【注意】 Keil C51 有一个小bug,就是液晶汉字显示的问题,网络上也简称“0xFD bug”,可以在网上搜索一下。

有问题,网络上就会有人给出解决办法,晓奇工作室就针对该问题给出了一个补丁文件,可以到http://www.xiao-qi.com/mcu/下载该文件,然后复制到Keil C51 的安装目录(我的目录是C:\Keil\C51\BIN),之后运行该补丁文件修改一下。我们应该感谢这些在网络上无偿奉献的人!

2.2.2 运行Keil C51

安装完成后桌面上会有“Keil μVision3”的图标,通过该图标或者开始菜单的“开始”→“Keil μVision3”可以进入Keil C51,启动界面如图 2-22 所示。

图 2-22 Keil C51 启动界面

启动Keil C51,跳过启动界面就进入集成开发环境的主界面,如图 2-23 所示。

图 2-23 Keil C51 主界面

到此还不能说完全完成了Keil C51 的安装,还记得Proteus首次使用时的情景吗?这里我们也需要先完成软件注册再使用该软件。

选择“File”→“License Management”菜单命令进入注册界面,如图 2-24 所示。

图 2-24 Keil C51 注册界面

如果不注册也不会影响我们的基本使用,但对生成可执行文件的大小会有限制,限制在2KB大小,所以我们先在这里注册该软件。

使用笔记本电脑的用户要注意,在注册的过程中Keil可能会提示“*** ERROR R208:RENEW LICENSE ID CODE (LIC)”的错误,如图 2-25 所示。

图 2-25 注册失败信息

这是因为你的电脑有多个网卡,你可以通过菜单命令“开始”→“连接到(T)”→“显示所有连接(S)”打开网络连接窗口,如图 2-26 所示。

图 2-26 “显示所有连接”菜单命令

也可以通过“控制面板”找到“网络和Internet连接”图标,如图 2-27 所示。

在该窗口单击“网络和Internet连接”图标,进入“网络和Internet连接”窗口,在该窗口找到“网络连接”图标,如图 2-28 所示。

进入“网络连接”窗口后,你会看到当前你的电脑正在使用的网络适配器,如图 2-29所示。

图 2-27 “网络和Internet连接”图标

图 2-28 “网络和Internet连接”窗口

图 2-29 “网络连接”窗口

这时可以使用右键菜单暂时停用这些网络适配器(最好全部停用),操作方法如图 2-30所示。

图 2-30 停用网络适配器

然后再次进入Keil C51 的License Management界面,进行注册操作,注册成功的界面如图 2-31 所示。

图 2-31 Keil C51 注册成功界面

完成了Keil C51 的注册工作就可以使用它开发了。在学习开发之前也像学习Proteus那样,用一个示例程序来简单了解一下Keil C51 集成开发环境。

2.2.3 学用Keil C51

我们先打开一个实例工程,选择“Project”→“Open Project”打开选择工程界面,如图 2-32 所示。

图 2-32 选择工程界面

找到Keil C51 的安装目录C:\Keil\C51 进入Examples目录,选择HELLO目录,打开HELLO.uv2 工程,如图 2-33 所示。

图 2-33 HELLO.uv2 工程

先看一下代码文件HELLO.C,上面的/*…*/注释部分是对该文件的一个说明,我们要关注的是代码行#include <REG52.H>,这一行有什么用意呢?

在#include <REG52.H>一行单击鼠标右键,如图 2-34 所示,选择“Open document<REG52.H>”菜单项。

打开REG52.H后,我们先看看该文件的位置C:\Keil\C51\INC\REG52.H,如图 2-35 所示。进入目录C:\Keil\C51\INC,会发现里面有些文件夹和头文件,仔细观察可以发现HELLO.C中引用的STDIO.H也在其中。这个目录就是Keil C51 头文件所在的位置,我们写代码时用#include < >语句引用的头文件,系统会自动到这里查找。

图 2-34 打开REG52.H

图 2-35 REG52.H文件

接下来我们分析REG52.H的内容,发现几乎都是以sfr、sbit开头的类似C语言中定义变量方式的语句,如“sfr P0 = 0x80”。其实该语句并不是变量的声明与赋值,而是一种常量的声明,其意思是将地址为 0x80 的寄存器定义为P0。sfr声明的是一个 8 位特殊功能的寄存器;而sbit的意思是对一个特殊位的声明,如“sbit RXD = P3^0”,意思是将寄存器P3 的第 0 位定义为RXD,结合前面的sfr P3 = 0xB0,进一步的解释就是将地址为 0xB0 的寄存器的第 0 位定义为RXD。

我们可以找到HELLO.C中第 29 行的SCON = 0x50;然后去REG52.H中找SCON的定义,发现在第 32 行sfr SCON = 0x98。根据上面的解释,这里的意思是将地址为 0x98 的寄存器定义为SCON,SCON代表的就是地址为 0x98 的寄存器。那么HELLO.C中的SCON =0x50,意思就是将地址为 0x98 的寄存器的值设定为 0x50。

看过这些,再看HELLO.C就容易理解多了,SCON、TMOD、TH1、TR1、TI、P1,这些在REG52.H中都可以找到,也就是说它们都是寄存器或寄存器的位,至于这些寄存器代表什么意思,我们在后面章节的学习过程中会明白的。

用同样的方法打开STDIO.H,如图 2-36 所示。

图 2-36 STDIO.H文件

观察STDIO.H头文件可以发现,该头文件主要声明了一些输入、输出函数,HELLO.C中的printf函数就在其中。

这样就基本把HELLO.C中的代码看完了,还有一点值得我们注意,在示例程序中,对main函数的定义方式void main(void)。main函数即使是参数为空、无返回的函数,定义时也要写明。我们最好也遵守这种写法,好习惯的养成有利于我们以后编写复杂的程序。

看过代码我们就来编译这个项目,用工具栏的“Rebuild all target files”按钮(如图 2-37所示)或菜单栏的“Project”→“Rebuild all target files”项编译该样例工程。

图 2-37 编译按钮

查看输出信息窗口(如图 2-38 所示),可以看到 0 错误、0 警告,系统编译通过。

图 2-38 输出信息窗口

除了这些,还有几个常用功能按钮要了解一下,如图 2-39 所示。

图 2-39 几个常用功能按钮

图 2-39 中的第一个按钮是调试按钮,我们后面介绍;用鼠标单击第二个按钮 ,可以发现左侧的项目管理窗口不见了,再单击该按钮项目管理窗口又出现了;用同样的方法操作第三个按钮 ,可以发现该按钮是管理输出信息窗口的;后 4 个按钮 是管理断点的,这和第一个调试按钮有关。我们将鼠标放在HELLO.C的SCON = 0x50(29 行)处,单击 按钮会发现该行左侧出现一个红点,该点表示断点。

单击 按钮,会出现程序运行窗口,如图 2-40 所示。我们可以用单步执行按钮 尝试着单步执行程序。

图 2-40 程序运行窗口

上面介绍的是Keil C51 的一些常用功能,在后面的学习过程中我们会进一步介绍Keil C51 的使用。例如,如何新建一个工程,如何写一个C程序文件,如何生成要在Proteus中使用的文件等,都会在下一章的实例讲解中介绍。

好了,两个工具都介绍完了,我们了解一下是否可以像连接一个电路板一样结合Keil C51 和Proteus调试C语言代码。

2.3 刀剑合并

要想实现Proteus与Keil C51 的联调,还要做些准备工作。据有人介绍Proteus 6 安装时自带的一个文件VDM51.DLL可以支持Keil C51 的联调,到Proteus 7 就没有该文件了,所以我们要去网上下载该文件。

2.3.1 安装VDM51.DLL

我们在网上搜索VDM51.DLL或者vdmagdi.exe文件,把它下载下来。如果是VDM51.DLL就简单些,如果下载的是vdmagdi.exe就先安装它。

安装时选择安装Keil C51 的版本,这里我们选择的是Keil μVision3,如图 2-41 所示。安装目录默认是Keil C51 的安装目录,如图 2-42 所示。

图 2-41 μVision版本选择

图 2-42 vdmagdi.exe安装目录

vdmagdi.exe不仅支持 51 单片机的联调,还支持ARM单片机的联调,我们要用的是VDM51.DLL,不过这里还是按照默认选择,如图 2-43 所示。

图 2-43 安装文件选择

安装完成后,到Keil C51 的安装目录C:\Keil\C51\BIN中找到VDM51.DLL,复制到Proteus的安装目录C:\Program Files\Labcenter Electronics\Proteus 7 Professional\BIN中。

用记事本打开C:\Keil\TOOLS.INI文件,可以看到有一行显示BIN\VDM51.DLL字样,如图 2-44 所示。

图 2-44 TOOLS.INI文件

以上是安装vdmagdi.exe找到VMD51.DLL的过程。如果下载的是VMD51.DLL怎么办呢?按照上面找到VMD51.DLL的过程将其复制到C:\Keil\C51\BIN和Proteus的Proteus 7 Professional\BIN目录下,然后修改C:\Keil\TOOLS.INI文件,如图 2-44 所示手动添加一行,注意字符串“TDRV”后面的数字不要与文件中原有的重复。

2.3.2 设置Keil C51 和Proteus

用Proteus ISIS打开一个样例,打开过程还记得吧?执行“File”→“Open Design”菜单命令打开选择文件对话框,找到SAMPLE\VSM for 8051\C51 Calculator目录,选择calc.DSN并打开。

打开样例工程后,选择Proteus的“Debug”菜单中的“Use Remote Debug Monitor”菜单项,如图 2-45 所示。

图 2-45 选择Debug选项

运行Keil C51,选择“Project”→“Open Project”菜单命令,打开选择工程对话框,找到Proteus的SAMPLE\VSM for 8051\C51 Calculator目录,选择工程CALC.UV2 并打开。打开后的界面如图 2-46 所示。

图 2-46 CALC.UV2 工程

选择菜单命令“Project”→“Options for Target‘Target 1’”,如图 2-47 所示,打开对话框“Options for Target‘Target 1’”。

图 2-47 Options for Target菜单

【注意】 如果菜单中没有该项,要在左侧Project Workspace列表中先选中“Target 1”,然后再回到Project菜单中找。

在“Options for Target‘Target 1’”对话框中,选择“Device”属性页,选择芯片类型为AT89C51。注意先在左侧的列表中找Atmel项,然后在其子项中找AT89C51 芯片,如图 2-48所示。

图 2-48 选择芯片

选择“Target”属性页,设置Xtal(晶振频率),默认为 24MHz,我们修改为 12MHz,如图 2-49 所示,其他项不变。

图 2-49 “Target”属性设置

选择“Output”属性页,设置输出文件类型,选择 选项,如图 2-50 所示。

图 2-50 “Output”属性设置

选择“Debug”属性页,选择调试工具,在Use选项中选择Proteus VSM Simulator,这个选择和前面介绍的TOOLS.INI文件中的TDRV8=BIN\VDM51.DLL('Proteus VSM Simulator')括号里的内容相对应(如果你写的其他名称,应根据自己修改TOOLS.INI文件的内容选择),如图 2-51 所示。

图 2-51 “Debug”属性设置

选择Proteus VSM Simulator选项后,单击Use右侧的“ Settings ”按钮(),弹出对话框,设置如图 2-52 所示。

图 2-52 Target Setup对话框设置

这里是按照Proteus、Keil C51 在同一台计算机上运行配置的,如果是在两台计算机上运行,就要设置为运行Proteus的计算机的IP。

完成上面的设置后,就可以编译、调试代码了,不同于前面的调试过程,我们要结合Proteus和Keil C51 联合调试。

2.3.3 联合调试

首先编译我们打开的示例程序,用编译按钮里的 按钮编译工程,编译后的输出信息如图 2-53 所示。

在Proteus打开的设计图中设置 8051 芯片,还记得怎么选择芯片吧?用鼠标左键单击要选择的芯片,使其变为红色,如图 2-54 所示。

图 2-53 编译输出信息

图 2-54 选择设置芯片

然后再用左键单击该芯片,弹出设置对话框,设置晶振频率为 12MHz,选择Program File加载的hex文件,这样就完成了设置,如图 2-55 所示。

图 2-55 设置 8051 芯片

完成这些设置后,就可以联合调试了。在Proteus中选择仿真按钮 中的play按钮,开始仿真;然后切换到Keil C51 下,会发现Keil C51 自动进入了调试模式,如图 2-56 所示。

图 2-56 Keil C51 的调试模式

在Keil C51 集成环境中,我们可以执行多种调试方式,查看调试信息。

这个样例是Proteus自带的,以我们现在的基础来看样例程序还是比较复杂的,而且有两个文件都是汇编文件,所以在这里就不进一步分析了。我们做到能联合调试,就算掌握了本章的内容。

补充内容

1.汉化Proteus

如果不习惯用英文版的软件,你可以想办法在网上找到对应版本的汉化包对其进行汉化。

汉化Proteus的过程很简单,下载的汉化包应该是两个DLL文件:ARES.DLL、ISIS.DLL,汉化包中通常也会对汉化过程进行简单的说明。

可以在开始菜单中找到我们安装的Proteus ,然后用鼠标右键单击“ ISIS 7 Professional”,在右键菜单中选择“属性”项,如图 2-57 所示。

接下来在其属性对话框中找到“查找目标(F)…”按钮(见图 2-58),用鼠标左键单击该按钮,找到ISIS.EXE所在的目录,如图 2-59 所示。

图 2-57 “ISIS 7 Professional”右键菜单

图 2-58 “ISIS 7 Professional”属性窗口

图 2-59 ISIS.EXE所在的BIN目录

为了防止汉化后软件不能正常启动,我们最好对原来的文件进行备份,找到ARES.DLL、ISIS.DLL将它们重命名为ARES_EN.DLL、ISIS_EN.DLL,然后将下载的汉化文件粘贴过来就可以了。

软件经过汉化后,主界面如图 2-60 所示。

图 2-60 汉化后的ISIS主界面

2.Proteus元件库

Proteus的元件库都是用英文显示的,包括其分类、子分类,虽然通过汉化包可以汉化软件的菜单、界面,但元件库还是英文的。对于英文基础不是特别好、又没有太多元器件使用经验的人来说,查找元器件就成了问题,所以我们在附录B里对元器件的分类做了翻译的工作。另外,为了方便查找,我的同事康磊也做了个小软件,用来查询元器件分类信息,软件界面如图 2-61 所示。

图 2-61 元器件分类查找软件界面

在图 2-61 中,可以直接在“关键字”一栏输入想使用元器件的分类,当然也可以在列表中查找,然后单击“查询”按钮,在下面就会显示查询结果及所有子类信息,这样就可以在Proteus中进一步查找自己要使用的元器件。查询结果如图 2-62 所示。

图 2-62 元器件分类查询结果

这个软件由两个文件组成:codedata.exe、codedata.ini。其中codedata.exe就是我们要使用的可执行文件(该软件是绿色软件,下载后可以直接运行,不用安装);codedata.ini是元器件库分类的信息,可以根据自己的需要来修改该文件,然后使用。该软件可以通过我的博客young45.cublog.cn下载。

好了,可以放松一下了。休息过后我们进入下一章的内容,自己动手来写 51 单片机的仿真程序。 bKQT56/af4R0gjJ3yZwTM0B2poTcW0BnlpENUTzUiqCtV7EYTOwojIO5biXAbglf

点击中间区域
呼出菜单
上一章
目录
下一章
×