实践表明,单片机的软件开发和硬件开发都离不开一些基本的开发软件和开发工具。本章从简单实例入手,介绍单片机开发所必备的一些软件及开发的基本过程。
Proteus 软件能对单片机应用系统同时进行软件和硬件的仿真,为设计单片机应用系统提供一个非常好的平台。
本书采用Proteus 8.10英文版,其特点如下。
(1)实现了单片机仿真和SPICE电路仿真的结合。
具有模拟电路仿真,数字电路仿真,单片机及其外围电路组成的系统的仿真,RS-232动态仿真,以及 I 2 C 调试器、SPI 调试器、键盘和 LCD 系统仿真的功能,还有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(2)支持主流单片机系统的仿真。
目前支持的单片机类型有68000系列、8051系列、AVR 系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列及各种外围芯片。
(3)提供软件调试功能。
Proteus 中提供了全速、单步、设置断点等调试功能,可以观察各个变量、寄存器等的当前状态。同时,还支持第三方的软件编译和调试环境,如Keil C51等软件。
(4)具有强大的原理图绘制功能。
使用Proteus可以快速、方便地绘制出单片机应用系统的原理图。
本节通过一个实例来感受Proteus的强大功能。
(1)打开随书附件中的“仿真实例\第2章\ex1”文件夹,双击“ex1.pdsprj”彩色图标,弹出图2-1所示的Proteus仿真原理图。
(2)用鼠标右键单击单片机AT89C51(标号为U1),则弹出图2-2所示的单片机属性对话框。单击“Program File”文本框右侧的文件打开按钮 ,选取目标文件ex1.hex。
(3)在“Clock Frequency”(时钟频率)文本框中输入11.0592MHz,使仿真系统以此频率运行。
(4)单击“OK”按钮,再单击“调试”菜单下的“执行”命令,或者按下“F12”键,或者直接单击仿真工具栏中的按钮 ,系统就会启动仿真。此时,只要计算机上接有音箱,就会听到优美的音乐。
图2-1 播放音乐的Proteus仿真原理图
图2-2 单片机属性对话框
注: 如果不特别说明,本书所有实例均采用11.0592MHz的频率进行仿真。
本书只介绍Proteus 智能原理图输入系统(ISIS)的工作环境和基本操作。
单击“File”→“New Project”→“Next”→“Next”→“Next”→“Next”→“Finish”,即可进入图2-3所示的Proteus ISIS集成环境。Proteus ISIS的工作界面是一种标准的Windows界面,下面简单介绍各部分的功能。
图2-3 Proteus ISIS集成环境(Proteus 8 Professional)
1.原理图编辑窗口
原理图编辑窗口用来绘制原理图。它也是各种电路、单片机系统的 Proteus 仿真平台。方框内为编辑区,元器件要放到它里面。
注意: 原理图编辑窗口没有滚动条,可通过预览窗口改变原理图的可视范围。
2.预览窗口
预览窗口可显示两部分内容:一部分是在元器件列表中选择一个元器件时,显示该元器件的预览图;另一部分是当鼠标焦点落在原理图编辑窗口时,显示整张原理图的缩略图,并显示一个绿色的方框,绿色方框里面的内容就是当前原理图编辑窗口中显示的内容。通过改变绿色方框的位置,可以改变原理图的可视范围。
3.对象选择器
对象选择器用来选择元器件、终端、图表、信号发生器、虚拟仪器等。对象选择器上方有一个条形标签,用以表明当前所处的模式及其下所列的对象类型。如图2-4所示,当前模式为选择元器件模式,选中的元器件为“BUTTON’”。选中后,该元器件即出现在预览窗口。单击“P”按钮可将选中的元器件放置到原理图编辑区。
图2-4 对象选择器
4.工具栏分类及图标
表2-1列出了Proteus工具栏分类及图标。
表2-1 Proteus工具栏分类及图标
下面仅介绍Proteus独有的工具。
(1)显示命令。
➢ :显示刷新;
➢ :显示/不显示网格点切换;
➢ :显示/不显示手动原点;
➢ :以鼠标所在点的中心进行显示;
➢ :放大;
➢ :缩小;
➢ :查看整张图;
➢ :查看局部图。
(2)主模式选择工具。
➢ :即时编辑元器件参数(先单击该图标,再单击要修改的元器件);
➢ :选择元器件(默认选择);
➢ :放置连接点;
➢ :放置网络标号连接标签(用总线时会用到);
➢ :放置文本;
➢ :绘制总线;
➢ :放置子电路。
(3)小工具箱。
➢ :终端接口,有VCC、地、输出、输入等接口;
➢ :元器件引脚,用于绘制各种引脚;
➢ :仿真图表,用于各种分析,如Noise Analysis;
➢ :录音机;
➢ :信号发生器;
➢ :电压探针,使用仿真图表时要用到(连接电路节点可显示电压);
➢ :电流探针,使用仿真图表时要用到;
➢ :虚拟仪表,有示波器等(可显示工作波形)。
(4)转向工具。
➢ :顺时针旋转90°;
➢ :逆时针旋转90°;
➢ :显示元器件放置角度;
➢ :元器件水平翻转;
➢ :元器件垂直翻转。
(5)仿真运行控制按钮。
:从左至右依次是运行、单步运行、暂停和停止。
5.Proteus操作特性
下面列出了Proteus不同于其他Windows软件的操作特性,必须熟练掌握。
(1)在元器件列表中用鼠标左键选择后可放置元器件。
(2)用鼠标右键单击元器件后可弹出编辑菜单。
(3)双击鼠标右键可删除元器件。
(4)先用鼠标右键单击后用鼠标左键单击,可编辑元器件属性。
(5)连线使用鼠标左键,而通过双击鼠标右键可删除画错的连线。
(6)先用鼠标右键单击连线,再用鼠标左键拖动,可更改连接线走线方式。
(7)滚动鼠标滑轮可放缩原理图。
本实例采用 Proteus 软件绘制仿真原理图,如图2-5所示。将编译好的流水灯控制程序ex2.hex载入单片机。启动仿真,观察流水灯点亮效果。实例所需的元器件见表2-2。
图2-5 单片机控制流水灯的仿真原理图
表2-2 实例所需元器件表
1.新建设计文件
打开Proteus 8 Professional工作界面,执行菜单命令“File”→“New Project”,在弹出的“New Project Wizard:Start”对话框中设置好保存路径,并在其上方“Name”处输入“ex2”后,再单击“Next”按钮,如图2-6所示。此时弹出选择模板对话框,选择DEFAULT模板,继续单击“Next”按钮三次,最后单击“Finish”按钮,即可完成新建设计文件的保存,文件自动保存为“ex2.pdsprj”。
2.从元器件库中选取元器件
单击图2-4所示的对象选择器上的“P”按钮,弹出元器件库选择对话框,如图2-7所示。
图2-6 原理图文件保存对话框
图2-7 元器件库选择对话框
1)添加单片机
在“Keywords”(关键字)文本框中输入“AT89C51”,则在元器件预览窗口中分别显示出元器件的类型及相应的原理图符号和封装,如图2-8所示。在预览结果中选中“AT89C51”,再单击“OK”按钮,或者直接双击“AT89C51”,均可将元器件添加到对象选择器中。
2)添加电阻
打开元器件库选择对话框,在“Keywords”文本框中输入“resistors”,在结果中可以看到各种类型的电阻,在“resistors”后接着输入“470r”,结果中显示出各种功率的470Ω电阻。因为这里只需小功率电阻,因此在元器件描述窗口双击“470R0.6W”电阻,将其添加到对象选择器中。
图2-8 元器件预览对话框
图2-9 添加470Ω电阻
用同样方法添加10kΩ电阻(0.6W)到对象选择器中。
3)添加发光二极管
打开元器件库选择对话框,在“Keywords”文本框中输入“led-yellow”(黄色)。结果中只有一种黄色发光二极管类型,双击该器件,将其添加到对象选择器中。
4)添加晶振
打开元器件库选择对话框,在“Keywords”文本框中输入“crystal”,结果中只有一种晶振类型,双击该器件,将其添加到对象选择器中。
5)添加电容
(1)添加33pF电容。
打开元器件库选择对话框,先在“Keywords”文本框中输入“capacitors”,可在结果中看到各种类型的电容,在“capacitors”后接着输入“30pF”,结果中显示出各种型号的30pF电容。在元器件描述窗口任选一个“50V”电容,双击它将其添加到对象选择器中。
(2)添加10μF电解电容。
打开元器件库选择对话框,先在“Keywords”文本框中输入“capacitors”,可在结果中看到各种类型的电容,接着输入“10u”(不要输入10μF),结果中显示出各种型号的10μF 电容。在元器件描述窗口选择“50V Radial Electrolytic”(圆柱形电解电容),双击它将其添加到对象选择器中。
元器件添加完毕后对象选择器中的元器件列表如图2-10所示。
图2-10 对象选择器中的元器件列表
3.放置、移动、旋转、删除和设置元器件
下面以单片机“AT89C51”的放置为例来说明元器件的放置与编辑方法。
1)放置
在元器件列表中,选择“AT89C51”,再将光标移到原理图编辑区,在任意位置单击鼠标左键,即可出现一个随光标浮动的单片机符号,如图2-11所示。移动光标到适当位置单击即可完成该单片机的放置。放置后的单片机符号如图2-12所示。
图2-11 随光标浮动的单片机符号
图2-12 放置后的单片机符号
2)移动和旋转
用鼠标右键单击“AT89C51”,弹出图2-13所示的快捷菜单。从中选择菜单项即可进行相应的编辑。例如,本例需要对单片机进行垂直翻转操作,所以单击“Y-Mirror”,即可实现单片机的垂直翻转。
3)删除
使用下面3种方法可将原理图上的单片机删除。
(1)用鼠标右键双击单片机AT89C51,可将其删除。
(2)用鼠标左键框选AT89C51,再按“Delete”键,可将其删除。
(3)用鼠标左键按住AT89C51不放,同时按“Delete”键,可将其删除。
图2-13 在元器件上单击鼠标右键弹出的快捷菜单
4)属性设置
本例需要对单片机AT89C51进行属性设置。
单击图2-13中的“Edit Properties”命令,弹出元器件属性设置对话框,如图2-14所示。例如,在“Clock Frequency”文本框中输入“11.0592MHz”,即可将单片机的时钟频率设置为11.0592MHz。
图2-14 单片机AT89C51的属性设置
用类似的方法放置和编辑其他元器件,放置后各元器件的位置如图2-5所示。
4.网格单位
Proteus 编辑环境默认的网格单位是100th(1th=0.01mm),这也是移动元器件的步长单位,可根据需要进行修改。如图2-15所示,执行菜单命令“View→Snap1mm”即可将网格单位设置为100th。若需要对元器件进行更精确的移动,可用同样的方法将网格单位设置为50th或10th。
图2-15 网格单位的设置
5.放置电源和地(终端)
单击图2-16所示小工具箱的终端按钮,则在对象选择器中显示出各种终端符号,从中选择“POWER”,可在预览窗口看到电源的符号。此时,将光标移到原理图编辑区,即可看到一个随光标浮动的电源终端符号。将光标移动到适当位置,单击即可将电源终端符号放置到原理图中。然后在电源终端符号上双击鼠标左键,弹出“Edit Terminnal Label”对话框,如图2-17所示。在“String”文本框中输入“VCC”,最后单击“OK”按钮完成电源终端的放置。
图2-16 电源终端的放置
图2-17 电源终端的编辑
用同样的方法放置“地”终端。
6.放制总线
单击主模式选择工具中的总线图标 ,可在原理图中放置总线。其放置方法及位置如图2-18所示。
图2-18 放置总线
7.电路图布线
系统默认自动捕捉功能有效,只要将光标放置在要连线的元器件引脚附近,就会自动捕捉到引脚,单击鼠标左键就会自动生成连线。当连线需要转弯时,只要单击鼠标左键即可。图2-19所示为在电源和电阻R8之间进行布线操作。
图2-19 在电源和电阻R8之间进行布线操作
用类似的方法完成其他元器件之间的布线,布线效果如图2-5所示。
8.添加网络标号连接标签
图2-5中各元器件引脚与单片机引脚通过总线的连接并不表示真正意义上的电气连接,需要添加网络标号。在Proteus仿真时,系统会认为网络标号相同的引脚是连接在一起的。
单击主模式选择工具 ,在需要放置网络端口的元器件引脚附近单击鼠标左键,弹出如图2-20所示的对话框。在“String”文本框中输入网络标号“P10”,单击“OK”按钮即完成网络标号的添加。
图2-20 添加网络标号
其他网络标号的添加与此类似,添加效果如图2-5所示。
9.电气规则检查
设计完电路图后,执行菜单命令“Tool”(工具)→“Electricd Rules Check”(电气规则检查),则弹出图2-21所示的电气规则检查结果对话框。如果没有错,则系统给出“No ERC errors found”的信息。
图2-21 电气规则检查结果
10.仿真运行
由于目前还没有学习单片机的程序设计,因此这里先使用一个编译好的流水灯控制程序来验证仿真效果。将随书附件“仿真实例\第2章\ex2”文件夹内的 ex2.hex 载入单片机AT89C51(U1),再将其时钟频率设置为11.0592MHz。最后单击仿真运行按钮 ,系统就会启动仿真,仿真原理图搭建效果如图2-22所示。从图中可以看出,在某一时刻发光二极管D4被点亮。
图2-22 流水灯控制电路的仿真原理图搭建效果
这个例子表明,Proteus 仿真软件可以获得几乎和真实硬件电路一样的实验效果,这为学习单片机提供了一个非常好的虚拟实验平台,节约了不少硬件成本。本书的绝大多数实验都将基于Proteus软件平台进行。
能让单片机工作的、由最基本元器件构成的系统称为单片机最小系统。构成51系列单片机最小系统的基本条件如下:
➢ 电源:单片机使用的是5V电源。
➢ 晶振电路:单片机是一种时序电路,必须有脉冲信号才能工作。在单片机内部有一个时钟产生电路,只要接上两个电容和一个晶振即可正常工作。
➢ 复位电路:启动后让单片机从初始状态开始执行程序。
➢ 引脚:连接到电源正极,表示使用内部程序存储器。
点亮发光二极管D1所需的单片机最小系统原理图如图2-23所示。
图2-23 点亮发光二极管D1所需的单片机最小系统原理图
注意: 在 Proteus 中绘制仿真原理图时,最小系统所需的晶振电路、复位电路和 引脚与电源的连接都可以省略,并不影响仿真效果。
本例在Keil C51下编写点亮图2-23中发光二极管D1的程序,并用Proteus软件对编写的程序进行仿真。
点亮发光二极管D1的工作原理很简单,只要让P1.0输出低电平,使D1正向偏置。在C语言中,只要输入以下语句即可。
可见控制语句很简单,但怎样将其写入单片机呢?换句话说,怎样让单片机明白我们的意思呢?这些工作需要用Keil C51软件来完成。
1.新建项目和源程序文件
Keil C51软件安装完成后,双击桌面上的“Keil μVision2”图标,进入“μVision2”工作界面。
1)新建项目
执行菜单命令“工程”→“新建”,弹出“新建工程”对话框,如图2-24所示。指定好保存路径后,在“文件名”文本框中输入“ex3”,再单击“保存”按钮即完成新工程的创建(系统默认扩展名为“.uv2”)。此时系统弹出如图2-25所示的“为目标‘Target 1’选择设备”对话框,单击对话框左侧数据库内容中 Atmel 前面的图标“+”,在弹出的系列单片机型号中单击“89C51”,然后单击“确定”按钮即完成设备的选择。
图2-24 “新建工程”对话框
图2-25 为目标“Target 1”选择设备
设备选择结束后,在如图2-26所示的窗口左边的项目管理器中新增了一个“Target 1”文件夹,通过它可以对项目进行源程序添加和属性设置等操作。
图2-26 项目管理器中新增了“Target 1”文件夹
2)新建源程序文件
要编写程序,还需要新建一个源程序文件,再在该文件中编写程序。
执行菜单命令“文件”→“新建”,新建一个空白文档,如图2-27所示。
图2-27 新建源程序文件
输入以下C语言源程序:
执行菜单命令“文件”→“保存”,弹出如图2-28所示的“另存”对话框。指定好文件保存路径后,在“文件名”文本框中输入“ex3.c”。单击“保存”按钮完成源程序的保存。
图2-28 保存源程序文件的对话框
注意: 源程序后缀“.c”必须手动输入,表示为 C 语言程序,让 Keil C51采用对应 C语言的方式来编译源程序。
2.将新建的源程序文件加载到项目管理器
单击项目管理器中“Target 1”旁的“+”图标,展开后在“Source Group 1”文件夹上单击鼠标右键,则弹出图2-29所示的快捷菜单。选择“增加文件到组‘Source Group 1’”命令,则弹出图2-30所示的对话框。在该对话框中选择文件类型为“C 源文件”,找到新建的“ex3.c”,然后单击“Add”按钮,“ex3.c”文件即被加入到项目中。此时对话框并不会消失,可以继续加载其他文件。单击“关闭”按钮将该对话框关闭。在 Keil 软件项目管理器的“Source Group1”文件夹中可以看到新加载的“ex3.c”文件,如图2-31所示。
图2-29 在快捷菜单中选择加载源程序文件的命令
图2-30 在对话框中选择要添加的文件
图2-31 “Source Group 1”文件夹下出现新加载的文件
3.编译程序
单片机不能处理 C 语言程序,而必须将 C 程序转换成二进制或十六进制代码,这个转换过程称为汇编或编译。Keil C51软件本身带有C51编译器,可将C程序转换成十六进制代码,即*.hex文件。用鼠标右键单击“Target1”,从弹出的快捷菜单中选择“目标‘Target1’属性”命令,弹出如图2-32所示的目标属性设置对话框。该对话框有8个标签页,其中“目标”和“输出”标签页较为常用,默认打开的是“目标”标签页。本书只需在“输出”标签页中选中“生成 HEX 文件”选项即可,如图2-33所示。选中该选项后,在编译时会生成扩展名为“.hex”的十六进制文件供程序烧录或 Proteus 仿真使用,最后单击“确定”按钮即可完成所需设置。设置完成后,单击图2-34中的 图标,或者执行菜单命令“工程”→“重新构造所有目标”命令,软件就开始对源程序“ex3.c”进行编译。如果程序没有问题,将在输出窗口给出“0错误,0警告”的信息提示。
图2-32 目标属性设置对话框
图2-33 编译时生成十六进制文件“.hex”的设置
图2-34 程序编译后的提示信息
4.用Proteus软件仿真
程序经Keil软件编译通过后,就可以利用Proteus软件进行仿真了。在Proteus ISIS工作环境中绘制好仿真电路图,或者打开随书附件“仿真实例\第2章\ex3”文件夹内的“ex3.pdsprj”仿真原理图文件。用鼠标右键单击原理图中的 AT89C51,从弹出的快捷菜单中选择“Edit Properties”命令,弹出“Edit Component”对话框,在“Program File”文本框中载入编译好的“ex3.hex”文件,并在“Clock Frequency”文本框中输入“11.0592MHz”,然后单击“OK”按钮返回Proteus ISIS原理图工作界面。最后单击仿真运行按钮即可进行功能仿真,仿真原理图搭建效果如图2-35所示。从图中可以看出,发光二极管D1被点亮,达到了预期控制目的。
图2-35 点亮一个发光二极管的仿真原理图搭建效果
单片机软硬件系统仿真成功后,要真正投入实际应用,必须将程序“烧写”入单片机芯片,这就必须使用程序烧录器及烧录软件。程序烧录器的主要功能是擦除单片机中的旧程序和写入新程序。不同类型的单片机,一般需要不同的程序烧录器。下面简单介绍 A51程序烧录器及其烧录软件的使用方法。
在连接A51程序烧录器时,先将其COM接口(用作数据通信)与计算机的COM接口(RS-232)连接好,然后将要“烧写”的单片机安插在烧录器的插座中,再用一根 USB 线将 USB 接口与计算机的 USB 接口连接起来,让计算机通过这根 USB 线向烧录器提供+5V电源。
烧录器连接好后,就可以使用烧录软件“烧写”单片机程序了。A51烧录软件界面如图2-36所示。在使用烧录器前,仍需手动设置一些参数,进入“设置”标签页,根据编程器所插的COM接口,设置好串口,波特率设置为“28800”(bit/s)。
单击“(自动)擦除器件”按钮,即可将单片机中的旧程序擦除;单击“(自动)打开文件”按钮,在弹出的对话框中选择要写入单片机的十六进制文件(*.hex),单击“打开”按钮,再单击“(自动)写器件”按钮,大约1~2s即可将程序写入单片机。
程序写入单片机后,将单片机从烧录器插座取下,再将它安装在单片机实验板上,为实验板通电,单片机即开始工作,实现预设的控制功能。
图2-36 A51烧录软件界面
1.用Proteus软件绘制图2-37所示的单片机最小系统仿真原理图。
图2-37 单片机最小系统仿真原理图
2.在Keil C51环境下编译以下源程序并输出十六进制文件。
3.将第2题输出的十六进制文件载入第1题的仿真原理图进行仿真。
4.将第2题输出的十六进制文件用烧录器写入单片机,再插入实验板进行通电实验。