APP下载

基于KEIL-AGSI接口的单片机虚拟实验室构建

2011-12-31胡茗

城市建设理论研究 2011年28期
关键词:单片机

胡茗

摘要:文章提出了一种基于uVision KEIL的AGSI接口,利用VC++编写动态链接库,模拟单片机外围设备,以实现单片机虚拟实验室的建设方案,从而实验、实训课题在虚拟平台中实现,有效解决了资金和设备维护问题,并增强了学生自主学习单片机的便利性和时效性。

关键词:AGSI;仿真实验室;单片机;动态链接库

1. 引言

目前,单片机因其功能强且可自定义,价格低,可靠性高,抗干扰能力强,使用方便灵活,通用性强,在工控、智能仪表、通信系统、信号处理、智能家电等领域都得到了广泛的应用,学习者逐年增加。作者利用计算机软件的仿真技术,在KEIL的AGSI接口基础上,开发DLL库,构建单片机虚拟实验室,针对高职院校单片机教学,成功的解决了资金的限制,单片机设备更新快,学生自主学习时硬件缺乏等许多实际的问题和困难。

2. 解决方案

为了解决传统单片机实验室存在的问题,并为学生自主学习提供更大的便利。基于AGSI接口利用VC++自行开发动态链接库,采用纯软件的方法仿真按钮、LED、数码管、LCD、信号发生器以及其他自定义外设,无缝链接至uVision,实现方便的外设软件仿真和直观的界面问题。

2.1 仿真库的开发。下面将以学生学习时常用的跑马灯实训题目为例,开发直观的虚拟外设,介绍如何利用AGSI接口开发动态链接库。

(1)启动MS Visual C++,利用MFC AppWizard(dll)新建Experiment工程。注意使用MFC的静态链接,否则无法正常工作。

(2)在Experiment工程中添加头文件AGSI.h,增加AGSI的接口函数原型,在Experiment.h中添加SFR(特殊功能寄存器)、VTR(虚拟寄存器)的定义和接口函数原型。

(3)在Experiment.cpp文件中添加外设初始化代码,包括AGSI的建立(GetFunctionPointers),外设菜单入口及其对应对话框的声明(DefineAllMenuEntries),和SFR(DefineAllSFR),VTR(DefineAllVTREG),监视器(DefineAllWatches)和中断(DefineAllInterrupts)的声明。编写外设复位代码(ResetPripheral),上述的所有函数都通过AgsiEntry()函数调用,该函数需要在DLL中导出,定义如下:extern "C" DWORD AGSIEXPORT AgsiEntry (DWORD , void *)。

(4)在工程中添加一个非模态对话框,在对话框定义时产生的源文件中添加PeriDisp、PeriUpdate、PeriKill三个函数,分别用来显示对话框,更新显示内容和关闭对话框。同时添加两个宏用于菜单定义AGSIMENU和对话框属性定义AGSIDLGD。

(5)在对话框类中添加Update()函数,用于更新显示,该函数在外设状态改变时被自动调用便于及时反映外设状态。

(6)在Update()函数,编写人机界面,利用Agsi.ReadSFR()函数读取P1口的状态,绘制8个LED灯,用于仿真P1口状态。

(7)添加4个按钮,用于仿真P3.4~P3.7四个管脚的按键动作。编写按钮的处理函数如下:利用Agsi.WriteSFR(P3,0x00,0x10)对P3.4口进行清“0”操作,然后调用AGSI的CreateTimer函数将回调函数BtnP34与时间进行关联 Timer4=Agsi.CreateTimer(BtnP34),最后利用SetTimer函数定时100ms,Agsi.SetTimer(Timer4,1000),这样回调函数BtnP34将在1S以后被调用,在BtnP34函数中调用WriterSFR对P3.4口进行置“1”操作,模拟按键P3.4的动作。其他P3.5等三个管脚的动作仿照P3.4管脚实现,P3.4按键动作时序与VC++程序间关系如图1所示。

(8)编译链接生成动态链接库Experiment.dll。

图1 P3.4仿真按键时序的实现方法

2.2 仿真库的使用

(1)将编译生成的Experiment.dll文件拷贝到KEIL程序所在的目录C51BIN文件夹中。

(2)在uVision3的Options for Target的Debug选项页中,选择Use Simulator,在Dialog DLL一栏的Parameter项中写入-dExperimen,为后续进行仿真单片机程序做准备。

(3)编写一个跑马灯的单片机测试程序,P1.0~P1.7所接8个LED灯,循环点亮,间隔周期为1S,按键P3.4控制跑马灯的启停。编译通过后,启动Debug Session后,IDE将自动装载8051的仿真动态链接库S8051.DLL和我们所设计的仿真动态链接库Experiment.DLL。在Peripherals的下拉菜单中可以看到“单片机虚拟实验平台1.0”,点击后可进入实验平台的选择界面,点击“实验1”按钮可进入图2所示跑马灯仿真界面。

图2 跑马灯仿真运行界面

(4)开始仿真时,点击P3.4按键后,8个LED灯以1S为周期循环左移点亮,再次点击P3.4按键后,LED灯停止循环,停留在当前状态。图3为LED的仿真界面。

上述通过动态链接库的编写,实现了简单跑马灯电路的仿真工作,为高职学生学习单片机提供了直观形象的仿真界面,并为自主学习单片机,调试程序工作时提供了很大的便利。

图3LED显示实验仿真界面

3. 结论

本文介绍的利用AGSI接口编写动态链接库,仿真单片机外围设备的方法,其设计思想具有一定的普遍性,不光可以仿真51系列单片机的内部资源,也可以仿真其外设设备,而且也可以仿真其他KEIL软件支持的单片机。

参考文献

[1]鲍小南.单片微型计算机原理及应用.浙江大学出版社,2007

注:文章内所有公式及图表请用PDF形式查看。

猜你喜欢

单片机
基于单片机MCU的IPMI健康管理系统设计与实现
浅析51单片机的特点与应用
单片机在智能控制中的应用
C8051F020与80C51单片机的异同点
MCS—51单片机多串口通讯技术应用分析
一种单片机虚拟实验室的建立方法
点阵式液晶显示器lMl2864与51单片机的接口设计
单片机I/O口模拟串行通讯的C51实现方法
单片机调试方法的探讨
用PIC单片机制作的时间继电器