当前位置:无忧公文网 >范文大全 > 征文 > 单片机实验教学仿真软件设计

单片机实验教学仿真软件设计

时间:2022-03-21 08:27:25 浏览次数:

摘 要:主要讨论以微型计算机为操作平台、基于Widnows操作系统的单片机实验教学仿真软件的设计。实现对单片机教学实验的全软件仿真。针对自主研发的单片机实验教学仿真软件的特点和实际实验教学过程面临的问题,详细阐述软件的系统需求分析、建模及各子系统的详细设计过程。在此重点论述了仿真编译、仿真运行和仿真电路子系统的设计思路、相关算法的设计及程序设计与实现。

关 键 词:仿真软件; 虚拟实验; 实验教学; 仿真编译

中图分类号:TN964⁃34 文献标识码:A 文章编号:1004⁃373X(2013)02⁃0039⁃03

0 引 言

目前,各高校顺应发展设置的单片机课程是机电、自动化等电类专业的一门重要课程,是一门多基础、多理论的实践性课程[1]。在高职单片机教学过程中理论教学的发展已经较为完善,而实验教学由于受到经费的限制,提供的实验设备有限,不能满足学生的要求。

鉴于以上情况,开发单片机教学实验的全软件仿真。可以减少实验经费的开销,又便于增添实验内容,同时也可借用投影仪更加清晰地为学生做演示实验,非常有利于学生加深对所学理论知识的感性认识、掌握基本实验知识、方法、技能。对于有危险性的实验,虚拟实验平台更具有优势[2]。

1 单片机实验教学软件的系统组成

由于单片机实验教学仿真软件系统较为复杂固将其设计为如干个子系统,对每个子系统建模和设计,最后将它们连接起来构成整个系统模型。图1说明了系统的组成和各子系统关系。

图1 系统模型

考虑到单片机实验教学仿真软件的具体情况,同时使用结构化程序设计与面向对象设计2种方法,对于单片机实验教学仿真软件系统的功能模块采用结构化方法来设计。

采用面向对象的方法设计软件中的用户界面、各个窗口、菜单、仿真元件等,最后,将各个子系统结合在一起, 就构成了单片机实验教学仿真软件。

下面对主要功能模块进行论述。

2 仿真编译子系统的设计

实际的编译是利用编译程序从源程序产生目标程序的过程。该过程分为5个阶段:词法分析,语法分析,语义检查,中间代码生成,代码优化,目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析[3]。考虑本软件的实际情况,仿真编译子系统只进行词法分析和语法分析,发现有语法错误,给出提示信息,仿真编译成功后将仿真编译结果保存。

(1)词法分析模块调用源程序编辑子系统产生的用户源程序文件,逐行对文件中用户输入的源程序按照单片机指令系统规定的符号,如:(“Rn”、“#”、“/”、“@”、“$”、“:”及7种不同寻址方式表示的数据或地址、指令转移的偏移量、工作寄存器和特殊功能寄存器的表示符号、44个指令助记符、7个伪指令、用户定义的标号和符号常量、回车符)。进行词法分析,判断用户源程序中使用的基本符号是否正确,如果不是合法的符号则将错误所在的位置及错误的类型反馈给用户,终止仿真编译等待用户修改后再一次运行仿真编译;如果是合法的符号则将每个符号以及符号的类型保存在string类型数组cifa[]和int类型数组type[]中供语法分析程序模块使用。

(2)语法分析模块首先定义了51系列单片机所有指令和伪指令的检查函数。然后在词法分析的基础上,从数组cifa[]和数组type[]中取出用户输入的字符根据单片机指令的语法格式,字符的前后关系逐一进行处理,并调用指令和伪指令的检查函数判断:用户输入的源程序是否符合语法规则;标号和符号常量的定义与使用是否正确;伪指令的使用是否正确;程序是否以END结束等。如果存在错误则将错误所在的位置及错误的类型反馈给用户,终止仿真编译等待用户修改后再一次进行仿真编译;如果是正确的指令则将指令进行处理(对指令地址、指令ID、指令字节数、指令周期、操作数类型、操作数的值等进行处理)后存入预先定义的全局数组对象command中。仿真运行时由仿真运行子系统调用。

3 仿真运行子系统的设计与实现

(1)对51系列单片机指令系统的111条指令建立对应的处理函数,依照地址指针在指令类的数组对象中查询到对应元素,再根据指令ID调用指令的处理函数,完成指令的所有处理功能,返回下一指令地址给地址指针,实现仿真运行子系统的基本需求。

(2)设计状态扫描程序,查询中断申请。当有中断时,在指令处理函数在完成指令的所有处理功能后进行中断处理。

(3)仿真运行子系统与仿真电路建立子系统的信息交换功能的设计通过仿真电路子系统与程序仿真运行子系统的接口函数实现。

当仿真运行子系统仿真执行的指令向单片机I/O接口发送数据,这些数据将引起单片机外接电路及相关元件状态的改变。此时,由仿真运行子系统向仿真电路子系统发送消息,启动仿真电路状态修改进程,对仿真电路及元件的状态更新。然后修改进程结束将控制权交还,继续仿真运行。

如果在仿真运行期间仿真电路或元件(仅限按钮开关)状态发生改变,此时则由仿真电路子系统向仿真运行子系统发送消息,启动仿真运行状态修改进程,更新存储器单元对应的内部变量。然后修改进程结束将控制权交还,继续仿真运行。

4 仿真电路子系统的设计

仿真电路子系统在外部,它向用户提供了一个可视的虚拟的单片机实验平台,用户通过这一平台建立仿真的实验电路。当用户仿真运行实验源程序时,将再次通过这一平台进行相关操作,观察实验现象。在内部,仿真电路子系统对用户建立的仿真电路进行元件的记录、电路连接的分析、节点表的建立与维护、元件(包括单片机端口)状态得计算,通过发送消息与仿真运行子系统交互。最终达到在完全软件仿真的环境中让用户完成单片机教学实验,并获得与真实实验条件下相同的实验结果。

4.1 仿真元件的设计与实现

元件是电路建立的基础[4]。对实验中用到的电器元件(如:51系列单片机89S51、电阻、电容、发光二极管、数码管、各种开关、逻辑门电路、译码器、存储器芯片等)设计元件类。另外将电源、接地、导线、节点也作为元件进行设计。

部分元件以简化的图形表现,在设计元件时为简化软件的设计,将元件以单元模块的形式进行设计,即以单元模块电路的形式将模拟元件简化为数字逻辑单元。忽略了电路及元件具体的电流电压等模拟特性。类似的单元模块有,复位模块、振荡电路模块、数码管模块、开关模块。

4.2 元件类的设计与实现

首先设计出CYuanJian类,它定义了元件共有的基本属性及方法,例如:在窗口中的位置、元件的线条及填充颜色、元件管脚的坐标,其次,对元件操作时的方法,例如:元件的绘制和对其他属性进行设置等。为了让元件对象能方便地以数据文件的形式在存储器中存储和读取,将CYuanJian类的父类定义为VC++ MFC提供的基类CObject类。这样就可使用CObject类的成员函数Serialize()对元件对象进行串行化[5]。由于每个元件的外形均不相同,对元件进行绘制的Draw()函数和元件移动函数Move()定义为虚函数,利用VC++的多态性在子类中实现。同时这使得CYuanJian类成为了抽象类,CYuanJian类仅用来派生子类,不能实例化。

对每一个元件或单元模块都根据上述方法建立对应的类。元件类的建立是仿真电路建立的基础。根据元件的功能要设计其自身特有的属性和方法。由于元件较多受篇幅限制不再一一详细叙述。

4.3 电路仿真设计与实现

单片机电路设计在现实中是非常复杂的,要考虑众多因素,如:接口的驱动能力、布线不良使数字噪声影响模拟信号、电源去耦合、高低频噪声的处理、信号延时造成的竞争与冒险、阻抗匹配等[6]。在电路仿真设计时同样采用元件设计时的思路,将电路简化为一个数字电路模型。通过元件类中管脚结点号这一属性记录元件的连接信息,再通过结点表记录各个结点的逻辑电平,最终元件同过结点的逻辑电平计算出自己的状态。

数字电路中所有数字器件天然的按照时间的推移并行运算。输入的变化导致器件按照内部的电路,完成一定的逻辑运算并可能导致输出的改变。实际电路中各个器件是并行运行的,而程序指令的执行是串行的[6]。在软件仿真中,引脚状态的变化,数字器件的运算,只能按照程序中函数调用的顺序,逐一执行,或交替执行。在不考虑信号延时的情况下,程序通过循环,检测元件电路状态最终计算出电路稳定时的各元件输出值,达到与实际电路一致的目的[8]。电路仿真设计主要有以下几个部分:

(1)元件的基本操作和元件的连接

单片机仿真实验软件系统通过电路建立菜单中各菜单项及工具栏按钮向用户提供操作类型选择。用户首先选择操作类型,主要包括选择元件、添加元件、设置结点、连接元件等。用户通过键盘操作(按下shift键)和鼠标操作(左键单击、右键单击、双击、拖动)进行仿真电路的建立或修改,系统获得Windows消息判断出鼠标和键盘事件再结合操作类型以决定程序如何执行;元件的连接反映出用户期望实现的电路功能,仿真电路子系统要完成连接线和连接点信息的记录,元件管脚结点号的更新,结点表的建立及更新。

(2)电路初始状态的计算

电路初始状态的计算的主要目的是根据仿真电路中的具体元件和连接信息计算出电路各结点的逻辑电平,进而计算各元件管脚的逻辑电平,最终决定各元件的状态。在这里将元件管脚分为输入型、输出型和双向型三类,并设置优先度。建立结点表时会将元件管脚的优先度传递给结点,但电路元件状态发生改变更新结点表时,对某一结点的改变要参考优先度决定结点值。并在电路状态计算时设计了一组规则以保证电路计算的正确性。电路初始状态计算时发现仿真电路违反连接规则时停止计算提示用户修改。否则遵循计算规则进行计算。

(3)电路状态的跟踪

与现实中的单片机实验一样,在用户进行仿真运行时有两种情况会改变仿真电路的状态,一是:正在运行的用户程序改变了单片机的I/O口。二是:用户通过鼠标操作改变了电路中按钮开关或拨动开关的状态。在设计时定义两个函数IOchange()和SWchange(),该函数采用与电路初始状态计算相似的算法计算当前电路状态。仿真电路子系统将重新计算电路中个结点的逻辑值并更新元件管脚的值,同时发出消息使所有元件将发生重绘,在元件重绘时由元件类自己的成员函数根据管脚值计算元件状态绘制对应图形。

5 结 论

本文在深入分析单片机实验教学需求的基础上,对单片机实验教学仿真软件建立系统模型并针对功能最为重要的仿真编译、仿真运行和电路仿真三个子系统的设计方法进行详细的论述。对词法分析、语法分析、元件操作、元件连接以及电路状态计算跟踪等重要功能,设计了相关算法。由于单片机的实际应用涉及到很多领域的相关知识,本文不是非常成熟和完善。但同时我们看到单片机实验教学仿真软件的应用在单片机的教学过程中有着巨大的使用价值和深远的意义。

参考文献

[1] 邵春波,张涛.单片机虚拟实验平台的设计与实现[J].台州学院学报,2008(6):7⁃10.

[2] 封小钰,余雄.构建单片机虚拟实验仿真平台[J].计算机与信息技术,2008(4):32⁃35.

[3] 刘文秀.单片机应用系统仿真策略的研究[J].现代电子技术,2005,28(14):25⁃27.

[4] 艾莉.基于VB的单片机虚拟实验软件的研制与开发[D].沈阳:沈阳工业大学,2006.

[5] TAIBI Toufik. Hybrid object⁃oriented method (HOOM): the software development poreess [C]// 36th International Conference on Technology of Object⁃Oriented Languages and Systems. Xi’an, China: CTOOLS, 2000:8⁃17.

[6] 吴王平.基于89C51 单片机的计算机仿真系统设计[J].电脑知识与技术,2004(32):65⁃67.

[7] 马鹏举,张保平.数字电路仿真的Java实现[J].微处理机,2009(1):151⁃152.

[8] 辛允东.虚拟实验和真实实验的比较研究[J].中国科技信息,2008(10):64⁃66.

[9] GARRIDO José M. Object⁃oriented discrete⁃event simulation with Java: a practical introduction [M]. [S.l.]: Kluwer Academic/ Plenum Publishers, 2001.

[10] HARROLD M J. Testing: a roadmap in the future of software engineering [M]. New York: ACM Press, 2000.

推荐访问: 单片机 仿真 实验教学 设计 软件