单片机系统计算机辅助设计工具及软硬件设计和仿真
2010-09-12吴泽球
吴泽球
(武夷学院,福建 武夷山 354300)
单片机系统计算机辅助设计工具及软硬件设计和仿真
吴泽球
(武夷学院,福建 武夷山 354300)
选用C51语言作编程语言,KEIL和Proteus、双龙软件作为主要的软件编译、调试、仿真、下载和制作的工具,可以方便地进行51单片机的软件设计,并能进行硬件仿真和电路板制作,是优异的计算机辅助开发工具组合。最后提出了一个单片机系统开发方法和工具的设想。
单片机;计算机辅助设计;软硬件;设计;仿真
1 引言
使用适当的计算机辅助技术和工具来辅助单片机控制系统的设计开发能够大大地节省人的劳动,产生电脑解放人脑的巨大效益。早期的如Z80单片机,虽然使用汇编语言编程,但是机器只识别由0和1组成的编码,故当编出程序后还需要人工将其翻译成机器码,再输入到单片机中,然后才能进行软硬件调试。现在这种劳动早已经被电脑取代。其劳动效率提高了何止千百倍!虽然如此,人们还是在不断追求更高效的方法,开发更高效的工具。在单片机系统设计开发中,计算机辅助设计及软硬件结合仿真的开发设计工具已经被众多的开发者所使用。
2 51单片机控制系统设计开发工具及选用
现在对于51系列单片机已经有了不少开发工具和设备,如:支持用C语言开发51单片机程序的常用开发软件就有加拿大软件公司DAVEDUNFIELD推出的MICRO-C51编译器、IAR公司及2500 A.D公司开发的编译器[1]、Windows集成开发环境Keil软件[2]、Intel公司的ASM51、美国的Cybernetic Microsystern Inc公司的Cys8051等。国内的有Med-Win集成开发环境、伟福集成开发软件等[3]。功能比较齐全的集成开发环境可以将用户在开发应用软件过程中所需的所有工具有机地结合起来,这些工具包括编辑器,高级语言编译器,汇编器,定位/连接器等,能为用户提供友好的开发环境。软件和硬件仿真的工具有Nahau公司的EMUL5lXA-PC实时在线仿真器[4]、英国Labcenter公司的Proteus软件[5]等。
8051单片机应用程序可使用汇编语言,其优势是与硬件密切相关,可以方便地实现硬件功能,占用资源小、执行速度快。但后来开发的C51语言,可以方便地实现程序设计模块化,代码可读性好、易维护和升级,而且在绝大多数应用条件下执行效率已经非常接近汇编语言,采用C51语言进行单片机软件编程有其独特优势。因此用C51进行单片机程序设计已经成为单片机程序设计的主流之一。
对于C51的编译执行,目前最普遍使用的是KEIL 51软件。KEIL 51是德国KEIL公司开发的单片机C语言编译器,其前身是FRANKLIN C51,它集成了文件编辑处理、编译链接、项目管理、窗口、工具引用和软件仿真管理等多种功能,它的仿真功能中,有两种仿真模式:软件模拟方式和目标板调试方式。在软件模拟方式下,不需要8051单片机硬件就能完成程序仿真调试,这可以极大地提高用户程序的开发效率。
在硬件的仿真方面也有一些软件,其中Proteus是一款相当不错的软件。Proteus是英国Labcenter electronics公司研发的EDA工具软件,它不仅是模拟电路、数字电路、模/数混合电路的设计与仿真平台,还是一款先进、完整的多种型号微控制器(单片机)仿真器[6]。其中的ISIS智能原理图输入系统是Proteus系统的中心,它是画原理图和仿真的设计环境。Proteus可以与KEIL结合使用和联合进行单片机软、硬件的仿真调试,这使得不需要单片机硬件系统就能完成程序仿真调试,以及对单片机系统硬件不能包括电子线路部分的仿真。这给单片机系统的设计带来了极大的便利。
根据上述情况,综合考虑使用的效果和工具软件获得的成本,本文推荐以下51单片机的计算机辅助设计工具组合:选择用C51语言作主要的编程语言,KEIL和Proteus、双龙软件作为主要的软件编译、调试、仿真、下载和制作PCB板的工具软件,应该是目前性价比上相当好的组合。这些软件都可以得到能满足一般需求的免费版本。
3 51单片机的计算机辅助设计工具组合的使用
3.1 设计系统的硬件结构和软件各模块流程图
首先按照一个单片机控制系统的功能要求,设计出硬件电路和软件总体结构,对各模块作软件设计得到各模块的程序流程图。
3.2 用C51语言进行编程
C51是在完全支持标准C全部指令和规则基础上扩展而成的,可以方便地设计模块化的程序。有了各模块的程序流程图后,就容易分别对各程序模块按流程图用C语言进行编程。编写程序可以启动KEIL,在其界面下进行。
3.3 用Proteus画出单片机电路
为了能够对硬件电路进行仿真,需要用Proteus画出单片机系统的电路,一般可以按系统的各模块分别画出电路,仿真成功后再组合成总的电路,也可以将整个电路一次画出。用何种方法视电路、软件的复杂程度和调试难易的具体情况而定。
3.4 软硬件结合仿真和调试
可以用KEIL软件对编好的C51语言程序进行编译,编译通过后就可以在KEIL上进行调试,这时可以用KEIL与Proteus联合工作进行软、硬件的调试和仿真。当然里往往需要对软、硬件设计进行多次的改动和仿真调试。
3.5 制作硬件电路
软硬件调试通过后,就可以制作硬件电路了,这时可用Proteus的ARES软件方便地进行PCB板的设计和制作,然后就可以进行元件的安装。
3.6 实际软硬件调试、修改
最后是用实际的硬件电路进行实际的软硬件调试和修改。这时可以用双龙软件将调试好的程序下载到硬件电路的8051单片机中进行测试和调整。由于软件并不能完全地仿真真实电路,所以这时的硬件电路及软件还可能需要作进一步改进。
4 举例
下面用一个显示模块的设计来举例说明使计算机辅助设计工具进行软硬件结合仿真设计。
4.1 确定显示的功能、硬件结构和软件流程图
显示功能模块包括:需要发光显示的元件有八个七段LED数码管,七个发光二极管。一个七段LED数码管需要八条线控制段的显示(七段加一位小数点),一条线控制位显。七个发光二极管接成共阳极时与一个没有小数点的LED数码管一样可以用七条段的控制线加一条控制七个二极管的阳极的位线来控制,用动态扫描的方法使显示器件工作。硬件的电路原理图如图10所示。
其中,LED数码管是共阳极的,蓝色的表示数据总线,总线与51单片机的P0口的八条引脚相接,用字母a-h标示,七个二极管的阴极分别接到总线的这些线上,LED的阴极也分别接到总线的相应线上,并在一起的八个驱动门则分别按顺序与八个LED的位线相接,左边单独的一个驱动门则与并在一起的七个发光二极管的阳极相接。其工作原理是:51单片机通过P0口按一定次序将段码送上总线,另一方面单片机又控制驱动门按一定顺序输出高电平到对应的LED的位线上使相应的LED被接通电源点亮相应段,最后点亮并在一起的发光二极管,这样从左到右依次点亮,周而复始,当扫描频率够高时(不少于25次/秒),人眼就会看到所有发光的元件是稳定地发光的。
据功能和硬件工作原理写出程序流程图1如下:
LED显示函数:dispLED( )
图1 程序流程图FigureⅠ ProgranMflow ing
4.2 用C语言编写程序
可以使用KEIL的文本编辑器写程序,按流程图不难写出C语言程序如下:void dispLED( )
4.3 用Proteus画出相应的电路图
启动Proteus的ISIS,可使用界面的默认设置,先按电路所需元件到元件库里选择好元件,将元件摆放到图中,连好线,保存到指定文件名。电路图如图2所示。
图2 电路图FigureⅡ circuit digroom
4.4 软硬件结合仿真和调试
启动KEIL进行软件编译和调试,可以在KEIL的界面内先对程序文件进行编译,消除语法错误后再进行软硬件结合仿真。
软硬件结合仿真要设定KEIL与Proteus联调功能,方法是:启动KEIL,打开编译好的运行dispLED的项目,将KEIL的Option for target选项下的Debug设置成 Use proteus VSMMONITRE 51 DRIVE,并将Proteus的DEBUG菜单中选中“use remote debugermonitor”,就可以使用KEIL与 Proteus联调的功能进行软硬件结合仿真和调试。
使用KEIL与 Proteus联调功能时,同时启动KEIL和Proteus的ISIS并打开显示模块的软件和硬件项目,要将KEIL生成的HEX文件下载到ISIS打开的电路图中的8051中。这时KEIL的各种调试、修改、查看系统状态、仿真等功能都可以使用,同时在Proteus的界面显示的电路图上可以直观地看到运行的结果,如图2所示。图中,元件引脚上的高、低电平分别用红、蓝色直观地表示,不确定的电平则用灰色表示,LED可以发光显示数码。这点给电路和程序的调试带来很大的方便。不但比只用KEIL对8051仿真方便快捷,比用实际的电路硬件利用单片机的串口与PC机通信来实现KEIL对用户程序的实时在线调试也更直观和方便快捷。
4.5 制作硬件电路
经过调试、修改得到满足要求的硬件电路后,就可以用Proteus的ARES得到PCB图。做法是:在ISIS中完成原理图,然后修改封装,把元件的封装修改成符合元件的实际形状的,调整好所有元件的封装后,到菜单Tools→Netlist Compiler,打开Netlist Compiler设置对话框,一般用默认设置就行了,单击OK生成网表文件。紧接着将网表文件导入到ARES。选择菜单Tools→Netlist to ARES,这样就会打开ARES,在放置元件前,要选画一个版框,之后所有的元件将在版框内布线。最好先把具有标志性的元件先手工放置,然后单击Set Strategies按钮,设置布线策略(规则),例如使线的宽度适合所通过的电流和单面板等,然后使用自动放置元件,自动布线,最后再人工调整、添加安装孔、焊盘等。满意后就可以打印出来制电路板,然后就可以进行硬件的安装、软件下载和调试了。
4.6 实际硬件和软件的调试
虽然经过了仿真,但是对实际电路还要做进一步的软硬件调试和确认,因目前仿真软件还不可能完全地仿真实际电路。
5 讨论
从实际使用效果看,上面的计算机辅助设计仿真工具组合能够完成通常情况下的调试、仿真、下载、制作PCB板等任务,大大提高51单片机控制系统设计、制作与调试的工作效率。Proteus能对多种单片机进行仿真,所以这种方法能用于多种单片机系统设计,当然上面的KEIL等要代以其它单片机用的相应软件。
这种仿真也会遇到一些问题,主要有以下两点。
1.仿真的结果与实际电路运行的结果往往会有差别。对于硬件的仿真结果与实际情况差别可能会更大,这是因为硬件的实际运行情况是十分复杂的,仿真其实是用程序来模拟实际元件的工作情况,而由人编写的程序是很难全面地模拟电子元件的实际情况的,特别是多个元件的综合作用时。虽然如此,这些工具对提高设计开发效率的用处仍是令人满意的。
2.元件仿真模型不足。Proteus虽然有丰富的元件库,但其中许多元件可以在画电路图时使用,在进行程序仿真时就仿真不了,这是因为没有相应的仿真模型程序。对这个问题有三个解决办法:一是使用同功能的不同型号元件代替进行仿真;二是寻找相应的仿真模型程序;三是可以自建元件即自己为元件设计仿真模型程序。
有了以上的工具组合,学校可以建立虚拟电子和单片机实验室。这有几个好处:节省资金;使学生得到一定的仿真和计算机技术训练;不会造成电子设备和元器件的损坏;学生用仿真的方法进行原理和设计实验,然后再做实验电路的实验,这有利于循序渐进的教学等。
6 设想
EDA(电子设计自动化Electronic Design Automation)的一种技术就是用硬件描述语言VHDL按想达到的功能写出功能描述设计文件,就能由计算机自动地形成能完成这些功能的逻辑电路结构。如果51单片机的计算机辅助设计工具组合也能够由单片机系统的功能和电路出发自动形成能完成这些功能的软件结构,以至形成C51程序,那将是单片机系统开发方法和工具的一个飞跃。这应该是可能的,也应该是单片机系统开发工具的一个发展方向。
[1]陈龙三.8051单片机C语言控制与应用[M].北京:清华大学出版社,1999.
[2]求是科技.8051系列单片机C程序设计完全手册[M].人民邮电出版社,2006.
[3]祁伟,杨亭.单片机C51程序设计教程与实验[M].北京航空航天大学出版社,2006.
[4]张培仁,等.自动控制技术和应用,监控网络设计[M].中国科学技术大学出版社,2001.
[5]周润景,袁伟亭,景晓松.Prteus在MCS-51&ARM7系统中的应用百例[M].北京:电了工业出版社,2006.10.
[6]周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.5.
Abstract:Selecting the C51 language for the programming language,and the KEIL,Proteus,Shuanglong software as themajor compilers,debugging,simulation,downloading and production tools,we can easily carried out the design and hardware simulation of 51 Single-chip Microcomputer System,this is a good combination of computer-aided development tools.
Keywords:single-chip;computer-aided design;software and hardware;simulation
(责任编辑 王璟琳)
CoMputer-aided Design Tools and Software and Hardware Design and Simulation of Single-chip MicrocoMputer System
WU Ze-qiu
(Wuyi UniversityWuyishan Fujian China 354300)
TP391.9
A< class="emphasis_bold">文章编号:1
1673-2014(2010)02-0019-04
2009—12—18
福建省南平市科技计划项目《小型制冷剂回收机研制》(项目编号N2006Z01-4)
吴泽球(1954— ),男,广西贺州人,副教授,主要从事微机控制研究。