新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机实验教学仿真软件设计

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

作者:时间:2013-04-24来源:网络收藏


3 仿真运行子系统的设计与实现
(1)对51系列单片机指令系统的111条指令建立对应的处理函数,依照地址指针在指令类的数组对象中查询到对应元素,再根据指令ID调用指令的处理函数,完成指令的所有处理功能,返回下一指令地址给地址指针,实现仿真运行子系统的基本需求。
(2)设计状态扫描程序,查询中断申请。当有中断时,在指令处理函数在完成指令的所有处理功能后进行中断处理。
(3)仿真运行子系统与仿真电路建立子系统的信息交换功能的设计通过仿真电路子系统与程序仿真运行子系统的接口函数实现。
当仿真运行子系统仿真执行的指令向单片机I/O接口发送数据,这些数据将引起单片机外接电路及相关元件状态的改变。此时,由仿真运行子系统向仿真电路子系统发送消息,启动仿真电路状态修改进程,对仿真电路及元件的状态更新。然后修改进程结束将控制权交还,继续仿真运行。
如果在仿真运行期间仿真电路或元件(仅限按钮开关)状态发生改变,此时则由仿真电路子系统向仿真运行子系统发送消息,启动仿真运行状态修改进程,更新存储器单元对应的内部变量。然后修改进程结束将控制权交还,继续仿真运行。

4 仿真电路子系统的设计
仿真电路子系统在外部,它向用户提供了一个可视的虚拟的单片机实验平台,用户通过这一平台建立仿真的实验电路。当用户仿真运行实验源程序时,将再次通过这一平台进行相关操作,观察实验现象。在内部,仿真电路子系统对用户建立的仿真电路进行元件的记录、电路连接的分析、节点表的建立与维护、元件(包括单片机端口)状态得计算,通过发送消息与仿真运行子系统交互。最终达到在完全软件仿真的环境中让用户完成单片机教学实验,并获得与真实实验条件下相同的实验结果。
4.1 仿真元件的设计与实现
元件是电路建立的基础。对实验中用到的电器元件(如:51系列单片机89S51、电阻、电容、发光二极管、数码管、各种开关、逻辑门电路、译码器、存储器芯片等)设计元件类。另外将电源、接地、导线、节点也作为元件进行设计。
部分元件以简化的图形表现,在设计元件时为简化软件的设计,将元件以单元模块的形式进行设计,即以单元模块电路的形式将模拟元件简化为数字逻辑单元。忽略了电路及元件具体的电流电压等模拟特性。类似的单元模块有,复位模块、振荡电路模块、数码管模块、开关模块。
4.2 元件类的设计与实现
首先设计出CYuanJian类,它定义了元件共有的基本属性及方法,例如:在窗口中的位置、元件的线条及填充颜色、元件管脚的坐标,其次,对元件操作时的方法,例如:元件的绘制和对其他属性进行设置等。为了让元件对象能方便地以数据文件的形式在存储器中存储和
读取,将CYuanJian类的父类定义为VC++MFC提供的基类CObject类。这样就可使用CObject类的成员函数Serialize()对元件对象进行串行化。由于每个元件的外形均不相同,对元件进行绘制的Draw()函数和元件移动函数Move()定义为虚函数,利用VC++的多态性在子类中实现。同时这使得CYuanJian类成为了抽象类,CYuanJian类仅用来派生子类,不能实例化。
对每一个元件或单元模块都根据上述方法建立对应的类。元件类的建立是仿真电路建立的基础。根据元件的功能要设计其自身特有的属性和方法。由于元件较多受篇幅限制不再一一详细叙述。
4.3 电路仿真设计与实现
单片机电路设计在现实中是非常复杂的,要考虑众多因素,如:接口的驱动能力、布线不良使数字噪声影响模拟信号、电源去耦合、高低频噪声的处理、信号延时造成的竞争与冒险、阻抗匹配等。在电路仿真设计时同样采用元件设计时的思路,将电路简化为一个数字电路模型。通过元件类中管脚结点号这一属性记录元件的连接信息,再通过结点表记录各个结点的逻辑电平,最终元件同过结点的逻辑电平计算出自己的状态。
数字电路中所有数字器件天然的按照时间的推移并行运算。输入的变化导致器件按照内部的电路,完成一定的逻辑运算并可能导致输出的改变。实际电路中各个器件是并行运行的,而程序指令的执行是串行的。在软件仿真中,引脚状态的变化,数字器件的运算,只能按照程序中函数调用的顺序,逐一执行,或交替执行。在不考虑信号延时的情况下,程序通过循环,检测元件电路状态最终计算出电路稳定时的各元件输出值,达到与实际电路一致的目的。电路仿真设计主要有以下几个部分:
(1)元件的基本操作和元件的连接
单片机仿真实验软件系统通过电路建立菜单中各菜单项及工具栏按钮向用户提供操作类型选择。用户首先选择操作类型,主要包括选择元件、添加元件、设置结点、连接元件等。用户通过键盘操作(按下shift键)和鼠标操作(左键单击、右键单击、双击、拖动)进行仿真电路的建立或修改,系统获得Windows消息判断出鼠标和键盘事件再结合操作类型以决定程序如何执行;元件的连接反映出用户期望实现的电路功能,仿真电路子系统要完成连接线和连接点信息的记录,元件管脚结点号的更新,结点表的建立及更新。
(2)电路初始状态的计算
电路初始状态的计算的主要目的是根据仿真电路中的具体元件和连接信息计算出电路各结点的逻辑电平,进而计算各元件管脚的逻辑电平,最终决定各元件的状态。在这里将元件管脚分为输入型、输出型和双向型三类,并设置优先度。建立结点表时会将元件管脚的优先度传递给结点,但电路元件状态发生改变更新结点表时,对某一结点的改变要参考优先度决定结点值。并在电路状态计算时设计了一组规则以保证电路计算的正确性。电路初始状态计算时发现仿真电路违反连接规则时停止计算提示用户修改。否则遵循计算规则进行计算。
(3)电路状态的跟踪
与现实中的单片机实验一样,在用户进行仿真运行时有两种情况会改变仿真电路的状态,一是:正在运行的用户程序改变了单片机的I/O口。二是:用户通过鼠标操作改变了电路中按钮开关或拨动开关的状态。在设计时定义两个函数IOchange()和SWehange(),该函数采用与电路初始状态计算相似的算法计算当前电路状态。仿真电路子系统将重新计算电路中个结点的逻辑值并更新元件管脚的值。同时发出消息使所有元件将发生重绘,在元件重绘时由元件类自己的成员函数根据管脚值计算元件状态绘制对应图形。

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

本文引用地址:http://www.eepw.com.cn/article/170525.htm

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭