构建单片机虚拟实验仿真平台(1)
2015-05-29 01:15
导读:计算机应用论文论文,构建单片机虚拟实验仿真平台(1)样式参考,免费教你怎么写,格式要求,科教论文网提供的这篇文章不错:
摘 要 介绍了构建单片机虚拟实验仿真平台的基本思路和各功能
摘 要 介绍了构建单片机虚拟实验仿真平台的基本思路和各功能的实现方法,详细叙述了构建仿真平台所使用的一些技术手段。 关键词 虚拟实验平台;中断;输入输出接口;示波器;仿真实验
1 引言 虚拟仿真实验是利用计算机创建出一个可视化的实验操作环境,其中的每一个可视化仿真物体代表一种实验仪器或者设备,通过操作这些虚拟的实验仪器或设备,即可进行各种复杂的实验,达到与真实实验环境相一致的教学要求和目的。与传统的硬件实验平台相比,虚拟实验平台可以不受时空的限制,用户能随时随地进行实验。通过采用虚拟化技术,利用软件仿真,可以完全不使用真实的实验仪器,因此不会存在仪器磨损、破坏等情况,既节省了资金,又有利于资源共享。对于有危险性的实验,虚拟实验平台更具有优势。2 单片机虚拟实验仿真平台的实现2.1 系统设计思想及总体设计 我们开发的“单片机虚拟实验平台”将“硬件实验台”和“软件调试环境”均统一进行虚拟化设计,亦即不仅“硬件实验台”设计为软件形式,原来的汇编程序等调试工具也要重新专门进行设计,MASM等工具就不能使用。并且由于采用封闭式设计思路,对应用环境的适应性及其可靠性、稳定性相对较强;也就是说,这种虚拟平台下的实验结果与硬件条件下的结果更为相似。

图1 传统单片机实验系统组成结构 该仿真平台可以由如图2所示的模块图来表示。 从图2可以看出8031和存储器构成了虚拟的CPU,直接或间接地控制其它所有模块,并负责执行汇编语句。通信桥模块实际上是一个虚拟的存储空间,是接口芯片和外设(LED、开关和显示器等)间数据交换的场所。接口芯片和外设之间不直接发生关系,它们通过通信桥模块提供的接口将数据放入通信桥缓存或从通信桥缓存中取出数据。通常,通信桥分为输入桥、输出桥、芯片桥三种情况。开关与芯片连接构成输入桥,LED或者显示器与芯片连接构成输出桥,芯片与芯片连接构成芯片桥。

图2 总体框架图2.2 具体设计2.2.1 仿真平台编译原理 仿真平台对于汇编语言的编译模拟了真实的CPU。大家都知道,真实的CPU在编译过程中要使用寄存器(包括通用寄存器、特殊功能寄存器)。在虚拟的CPU环境下,我们模拟了一些寄存器,并且定义了一些执行函数以及运行规则。当然,这些运行规则是根据汇编指令制定的。虚拟的编译过程则是逐一与运行规则进行比较,从而检查语法错误,同时生成数据库存储所得到的一些数据。我们可以更具体地表述一下虚拟编译系统的工作过程:CPU在执行汇编程序的时候,实际上是运行的执行函数。首先启动一个新的线程mainthread,然后把源程序取出来逐行逐行地执行,这个动作是由Qrun函数执行的。Qrun函数从源程序的第一行开始执行,把取得的这一行数据先进行预处理,去掉注释(以“;”开始的说明)和标号(位于行首并以“;”开始的程序),然后再按照汇编语言的固定格式取得指令名称和操作数,每一个指令名称都有一个与之相对应的执行函数,这些函数负责完成对应指令的功能,例如:MOV函数和MOV指令是对应的,此函数负责把第二个参数的值放到第一个参数里面。程序就像这样一行一行执行下去。 值得我们注意的还有指针的实现以及中断的实现问题。在虚拟的编译系统中,指针和真实的指针不同。我们用行号代替了内存地址。普通情况下,程序每执行一行,指针就加一(不论单指令语句、双指令语句还是多指令语句均同样处理),跳到下一行继续执行。但若遇到跳转指令或类跳转指令的时候就不一样了。首先要根据跳转的目的标号到在编译阶段建立的数据库中查找相应的行号,然后将获得的行号赋值给指针IP,那么此时程序就跳到对应的行继续执行。对于中断的处理,我们借助了虚拟的8259A。具体实现过程将在中断实现模块中详细介绍。2.2.2 虚拟实验操作台 虚拟实验操作台是硬件设备的一个缩影。它包含了8031的四个并行I/O端口即P0口、P1口、P2口、P3口;以及中断控制器8259A的IR0~IR7八条中断请求输入线;还有8255的三个8位I/O数据口PA口、PB口、PC口;最后还有LED、显示器、开关三种外部设备(示波器是以单独的界面形式存在的,其设计方法将单独介绍)。它可以划分为三个部分:显示部分、外设部分(LED、开关)、接线部分(一个接口实现,用于将外设和实验中用到的芯片连接起来即建立通信)。 对于显示部分,我们模拟了八段显示器。并且在程序中我们给它分配了一个中断号10H,功能号0(AH=0)表示对显示屏的操作(例如,AL=1表示清屏)。功能号1(AH=1)表示将AL中的数据写入显示器。它的实现可以利用一个RichTextBox来模拟,给显示部分划分一个线程,让该线程一直处于不停的检测状态isMonitorInterrupt,若为真表示显示器有中断,然后马上去寻找功能号并实现相应的功能。在执行函数INT中,有一个对应于显示器的分支,当参数为10H(也就是内中断号为10H)时就将状态isMonitorInterrupt置为真,从而,只要在程序中一有显示器中断则马上就可以在模拟的显示器中体现出来。 对于外设部分,我们模拟了LED和开关。LED我们用Label来实现,通过backcolor的变换来实现LED的亮与灭。开关我们用TrackBar来实现,通过变形可以得到一个很形象的开关,将滑块滑到最上面表示开,滑到最下面表示关。在LED相关的程序中,我们还定义了一个线程RunLED,该线程将一直处于运行状态,不停地将缓冲中的数据取出,并按位对LED进行操作。开关的程序实现更简单,当我们改变开关的一个状态之后,马上将SwitchStatus传递给接线部分对应的程序模块。实际上,开关只负责状态的改变。 对于接线部分,实际上是一个复杂的模块。首先要解决表面上接线的问题。在虚拟实验操作台上,每一个需要接线的地方都设定了一个接线孔。实际上是用图片模拟的,没接线的时候是一种图片,处于接线状态的时候又是另一种图片。同时引用了DrawLine函数来绘制导线。其次要考虑到它深层次上的意义。从另外一个角度来说,虚拟实验操作台起到了“桥”的作用。它负责接收外设(开关)送过来的数据,并根据建立的“输入桥”将数据传递给相应的芯片,还负责接收芯片传过来的数据并根据建立的“输出桥”将数据传递给外设(主要是LED)。而各种桥的建立也是不容忽视的。所有接线孔都对应一个序号,芯片对应接线孔的序号固定在一个范围内,外设对应接线孔的序号对应在一个范围内(开关与LED也要区分开)。这样做能够很容易地通过序号获得该接线孔的类型。当连续点击两个接线孔时,程序就会根据接线孔的序号得出接线孔的类型,若是输入的接线孔和芯片孔,则加入输入桥;若是输出的接线孔和芯片孔,则加入输出桥;若两个都是芯片接线孔,则加入芯片桥。这样就建立了桥。