如何仿真单片机的外围设备
摘要:单片机开发需要良好的软件开发环境支持,现国内外已经有若干软件仿真器支持51系列单片机,但外围设备的仿真仍是软件仿真的一个薄弱环节。本文针对目前较为流行的Keil公司的51单片机软件仿真器,介绍如何利用VC++编写动态链接库,仿真单片机外围设备,从而为软件仿真器提出一新思路。关键词:单片机 仿真 动态链接库
1 问题提出
目前,单片机因其诸多特点,在各行各业中得到了广泛的应用。单片机本身只有一个电子器件,只有和其它器件、设备有机地组合在一起,并配置适当的工作程序(软件)后,才能构成一个单片机的应用系统。因此,单片机的开发包括硬件和软件两个部分。单片机本身没有自开发功能,必须借助于开发工具。近年来,随着个人计算机系统的不断普及,国内外推出了不少以PC机为基础的单片机开发系统;而软件模拟仿真器是一种新型的开发方法。这种方法是在PC机上,用软件来实现仿真,并配置一系列相关的服务程序,使用时,只要在PC机上运行该软件包,就可以对目标码程序进行调试。对于那些只是用到单片机内部资源的设计来说,可以在软件仿真器内完成仿真工作。但是,由于目前大多数厂商提供的产品还不能模拟单片机的外围设备(如液晶显示板),所以对于那些用到外部设备的设计来说,软件仿真器则显得力从心了。在这种情况下,笔者利用硬件软化的思想及面向对象、窗口等技术,将外围设备的功能在软件中实现。下面就针对Keil公司的51单片机软件仿真器,介绍如何利用VC++编写动态链接库,仿真单片机外围设备,从而弥补纯软件仿真的不足,最大限度地发挥软件仿真的威力。
2 方案构思
目前,Keil公司出品的51系列单片机软件仿真器已经成为国内流行的软件仿真器之一。Keil uVision2是一个标准的Windows应用程序,集成了C51编译器、A51汇编器、L51连接器、实时操作系统、项目管理器及调试器等,可以完成编辑、编译、链接、调试及仿真等整个开发流程,可以用IDE编译C或汇编源文件。
而单片机软件的设计总要和外部事件打交道,比如响应外部中断,检测某一引脚上输入信号电平的高低,完成A/D转换等;同时某些情况下,还要根据外部信号输出不同的控制信号。如果使用硬件仿真系统或在线调试器时,已有一个实实在在硬件环境,在调试时,可以利用目标系统提供给单片机各种信号的输入,以便测试单片机的实际运行情况。如果使用软件仿真器,没有任何硬件环境可以给出这些外部信号,所以外部信号的输入是面临的一个难题;此外单处常常需要和其它常用器件有机地组合在一起使用,如A/D芯片、液晶显示板等,如何仿真这些常用器件的功能,也是面临的一个难题。
一种解决的方法是,利用Keil提供的调试函数实现。调试函数可以模拟外部设备产生的给CPU的模拟和脉冲输入信号,还可以产生外部中断,周期性更新模拟输入,将串行数据送入片内串行口,解决了外部信号的输入问题。但dScope只支持特殊命令语句及一些特定的表达式,需要花费时间掌握调试命令;而且利用调试函数不能仿真外围设备的界面,不直观。
另一种解决的方法是,利用Keil提供的接口AGSI(Advanced Generic Simulator Interface),用
[1] [2] [3]