80C196单片机仿真软件的设计与实现

发布者:Serendipity66最新更新时间:2013-09-11 来源: dzsc关键字:80C196  单片机  仿真软件 手机看文章 扫描二维码
随时随地手机看文章
  为提高嵌入式控制软件(以下简称为应用软件)的质量和可靠性,研制过程中通常需对应用软件进行全面细致的测评。但是基于嵌入式控制器的应用软件测评通常需要构建与应用系统相当或更加复杂且完备的软硬件测试环境,时间和资金的耗费不亚于被测系统开发。采用全软件测试平台实现应用软件测评不失为一种较好的选择。本文所介绍的80C196单片机仿真软件即为旨在构建该种测试平台的基础技术之一。

l仿真软件需求分析与软件结构

  仿真软件作为全软件测试平台的主框架,主要利用PC机上较丰富的资源,在PC机上实现应用软件全速全功能仿真80C196单片机的运行,并顶留测试用例生成模块、软件模拟的外部激励等软件测评信息的插装接口。

  该仿真软件可仿真80C196单片机指令功能、中断响应和外设接口功能。具有良好的人机界面,便于控制仿真过程,查看仿真结果。

  CPU模块,主要仿真80C196 CPU芯片和存储器,执行80C196指令系统中的所有指令,支持多种数据类型,包括位、字节、字、双字、短整形、整形、长整形,以及多种寻址方式,完成中断处理并控制各种仿真的外设模块;编译模块,完成源程序的预处理过程,包括编译、分析、查错,将源程序转换成80C196 CPU能识别的指令集,供仿真运行使用;程序控制模块,控制仿真软件的运行,支持中断点的设置,完成仿真软件与用户的交互;系统信息模块,显示当前系统信息,监视仿真软件的运行情况;结果信息模块,查看源程序运行结果,并以形象直观的方式显示出来,具有良好的人机界面。

2仿真软件设计与实现

  仿真软件采用VC++面向对象技术,将系统中的各个抽象模块,细化为各自的类实例,从而完成规定的系统功能。仿真软件中所用到的主要类和关键技术描述如下

2.1 存储器数据结构设计

  80C196具有一个逻辑上完全统一的寄存器空间,可寻址范围为64 kB,其中大部分空间是用户可以自由使用的空间。为了实现存储器的全部功能以及便于程序控制,设计了一个包含多种信息的结构作为仿真软件中的存储单元,并由这些存储单元组成了仿真平台的存储区,软件仿真平台的存储区与80C196的存储空间一一映射。存储单元结构表示如下:
仿真软件中的存储器表示为MyCode m_ramMap[0xffff],实现了与真实存储空间的映射。

2.2 CPU模块设计

  CPU模块实质是一个庞大的类实例,模拟80C196CPU的所有功能,他是整个仿真软件的核心。CPU类是80C196单片机中指令执行部件,存储器,IO接口,串行口等硬件部件的软件实现,完成指令仿真、存储器管理、中断管理等功能。能实现80C196单片机指令系统中104种指令的功能,并处理6种指令寻址方式,包括立即数寻址、寄存器直接寻址、间接寻址、自动增量间接寻址、短变址寻址和长变址寻址。

  80C196CPU的所有功能由C196Chip类实现,C196Chip类的结构图及其类中调用关系。

  CMyCPU类为所有类共有,包含存储器单元,程序状态字,CPU时钟频率,指令执行总的周期数以及一些其他的CPU信号。CFindAddr 类实现了指令的六种寻址方式,通过提供统一的接口,实现不同的寻址方式,使得操作数的寻址过程变得透明。需要访问存储器的指令通过调用CFindAddr类中的方法完成访问存储器的过程,取得访问数据,依指令的不同,取得的数据类型包括字节、字、短整型数、整型数、双字和长整型数。80C196指令系统中有104种指令,依据功能的不同,划分为加法指令、减法指令、乘法指令、除法指令、逻辑运算指令、数据传送指令、堆栈操作指令、跳转和子程序调用指令、条件跳转、位逻辑值跳转指令、单寄存器指令、移位指令和特殊控制指令。每一类指令作为一个单独的模块设计为一个类实例,完成相应指令的解释执行。对于需要修改程序状态字的指令,将修改状态字的操作作为一个类。[page]

  CRunCode类封装所有的操作模块,仿真80C196单片机中的指令执行部件,完成单步运行、一次运行和连续运行3种指令的执行方式。C196Chip类仿真整个单片机模块,除了指令执行部件外,还包括各种外设模块,完成中断、串口等功能。对外提供统一的控制接口,完成单片机的初始化、启停、访问存储器、访问外设、访问特殊功能寄存器。

CPU模块中各个类的描述及其继承关系。

2.3指令的仿真运行

  80C196指令系统中有104种指令,按照操作码和功能的不同,将指令划分为13类,每个类模块实现1类指令的功能。

  CRunCode类封装了13类指令的各个模块,提供了统一的接口,以地址寄存器值作为输入输出。进入CRuncode-类的为地址寄存器值,根据此值取得指令,依指令操作码的不同进入各个操作模块。各个操作模块完成指令的功能,并计算出下一条指令的地址值返回给CRunCode-类,CRunCode类再将此值写入CPU的地址寄存器中。其执行过程如图3所示。

  对于每一条指令的仿真,包括操作过程,操作结果与程序状态字的改变力求做到与80C196指令集相一致。以两个操作数的加法指令ADD Al,BL为例,其实现过程如下:

 


2.4编译模块设计

  编译模块将用户编写的源程序编译成CPU能识别的二进制机器语言的形式。为了降低系统的设计难度,采用了已经具有的外部程序对源程序进行处理。编译模块读取由外部程序生成的列表文件,将程序信息转化为本系统能处理的数据结构,并将生成的二进制操作码装入CPU的存储器。

2.5程序仿真与控制的实现

  程序运行有3种方式,即单步运行,运行一次和连续运行。程序的主要控制功能有复位、设置/清除中断点、查看寄存器、查看程序状态字等。编译模块对源程序进行预处理,将源程序转化为二进制操作码。CPU模块将操作码装入存储器成功后,初始化CPU的各种信号,并将程序地址寄存器的值置Ox2080,这是80C196汇编程序的起始地址。然后CPU模块依据地址寄存器的值取操作码,按照取址、译码、执行的过程执行每一条指令。在一条指令执行完毕后,执行中断处理,刷新显示结果以及检查中断点等操作。

 
3软件运行结果

  本仿真软件的关键技术在于CPU模块的设计。这个模块要完成80C196所有指令的功能,要分配存储器资源,要控制软件仿真过程中程序状态字、特殊功能寄存器以及其他CPU信号的变化。采用面向对象编程方法和分层设计的思路,通过对指令的合理划分,降低了指令系统的复杂度,通过对实际器件的抽象与封装,实现了与实际硬件器件的功能等价,使得仿真结果与真实执行情况相一致。

  至此,该仿真软件的基本功能已经实现,为仿真平台的设计打下了基础,接下来的工作是以仿真软件为基础,完成仿真平台的开发与调试,主要包括各种外设的实现,测试用例生成工具以及驱动测试的外部激励产生模块,以此搭建一个具有良好人机界面的测试环境,提高应用软件的质量与可靠性。按照软件要求计划采用dll文件的方式将各个模块生成库文件,并在仿真软件中预留各个库文件的接口,在程序需要时调用相应的库文件即可,简化了设计的难度,同时增加了仿真平台的灵活性和通用型。

4结 语

  本文提出一种采用VC++面向对象技术设计80C196单片机应用软件仿真环境的方法。据此方法研制的仿真软件可仿真80C196指令集的全部指令,并可对80C196单片机嵌入式控制软件进行仿真与运行。该项技术为全软件测试平台的开发奠定了基础,也可供相关领域的应用参考。

关键字:80C196  单片机  仿真软件 引用地址:80C196单片机仿真软件的设计与实现

上一篇:基于mPSD32xx系列单片机无线远程IAP的实现
下一篇:基于W77E58单片机的通用GSM无线传真终端实现

推荐阅读最新更新时间:2024-03-16 13:27

瑞萨为下一代汽车架构推28纳米MCU 内置自测试功能增强
据外媒报道,当地时间2月19日,日本瑞萨电子株式会社(Renesas Electronics Corporation)宣布研发,并成功运行验证了一款汽车测试芯片,可实现采用28纳米(nm)低功耗工艺的下一代汽车控制闪存微控制器(MCU)。瑞萨电子是全球领先的先进半导体解决方案供应商。 该MCU有4个600兆赫(MHz)CPU(中央处理器),具备锁步机制和16MB闪存容量以及: 1、支持MCU虚拟化的虚拟化辅助功能:该技术允许多个软件组件在一个MCU上运行,互不干扰,从而满足道路车辆ISO 26262功能安全标准规定的最高汽车安全完整性级别ASIL D的要求。 2、内置的自测试功能(BIST)得以增强,可用于MCU自诊断故障检测,这
[汽车电子]
PIC单片机-锁报警器
振动传感器拾取到振动信号后经Q1放大给IC1,JS83就是一个PIC12C508单片机,它的6脚按照程序输出所需要的音调波形,经Q2推动升压变压器升压,驱动压电蜂鸣器发声。 原理图: 下面是用PIC16C54做的测试程序,程序按照音调波形图编制。 PIC54 EQU 1FFH PIC57 EQU 7FFH SUB EQU 0 PORTA EQU 05H RA EQU 05H PORTB EQU 06H RB EQU 06H STATUS EQU 03H PA2 EQU 7 PA1 EQU 6 PA0 EQU 5 TO EQU 4 PD EQU 3 Z EQU 2 DC EQU 1 C EQU 0 DE
[单片机]
PIC<font color='red'>单片机</font>-锁报警器
八位单片机的程序优化12项注意事项
1、采用短变量 一个提高代码效率的最基本的方式就是减小变量的长度。使用 C 编程时,我们都习惯于对循环控制变量使用 int 类型,这对 8 位的单片机来说是一种极大的浪费,你应该仔细考虑你所声明的变量值可能的范围,然后选择合适的变量类型,很明显,经常使用的变量应该是unsigned char,只占用一个字节。 2、使用无符号类型 为什么要使用无符号类型呢?原因是8051不支持符号运算,程序中也不要使用含有带符号变量的外部代码,除了根据变量长度来选择变量类型外,你还要考虑是否变量是否会用于负数的场合。如果你的程序中可以不需要负数那么把变量都定义成无符号类型的。 3、避免使用浮点指针 在 8 位操作系统上使用 32 位浮点数是得不偿失
[单片机]
基于单片机的语音播报万用表设计
1.引言 万用表是一种最常用的电工测量仪表,目前主要使用的有两种,即模拟以指针万用表和数字式万用表.这 两种万用表使用时存在一个共同的问题,就是测量时必须用眼睛观看被测点和刻度盘或数据显示屏,容易造成在观测测量结果时表笔脱离被测点,或者造成表笔金属 极在相邻电路上短路.随着语音技术的发展,在数字万用表中增加语音播报功能,为万用表使用性能的实质性进步开辟了一条新的途径,有了语音播报数值功能,可 以告诉测量数值和单位准确的确认读数的结果,大大减少读数出错的可能.不仅如此,本设计通过高精度A/D转换,提高万用表的测量精度,对其他电子仪器的改进有着重要的意义. 2.系统硬件设计 2.1 系统设计框图 语音播报万用表,最主要目的是对
[单片机]
基于<font color='red'>单片机</font>的语音播报万用表设计
无微不至的物联网趋势 标准型MCU产品与市场
微控制器(MCU)采用省电、可长达数年、弹性的硬体架构,并以低功耗、执行效率高的功能诉求,进军各种电器与电子产品的市场,并可应用在各行业领域,并至今累计数亿颗销售量。因应近年来穿戴式装置与物联网的兴起,装置设计朝向更轻薄短小、价格越低的趋势下,MCU的应用不只更加广泛,其功能也倍加市场考验。相关业者无不使出浑身解数,推出各式新一代MCU产品,来符合客户与市场的需求… 见“微”知着 MCU主宰低功耗市场 处理器(Processor)因应电脑架构的各种不同功能需求与用途,可区分成:中央处理器(Central Processing Unit;CPU)、绘图处理器(Graphics Processing Unit;GPU)、
[物联网]
PIC单片机CCS之C语言(#USE FAST_IO的用法)
#USE FAST_IO 语法:#use fast_io(port) port是A~G 目的:影响编译器如何产生输入输出代码,说明如下.这种指令有效,直到出现下一个#use xxxx_io为止.执行I/O的快速方法将使编译器不用对I/O方向寄存器进行编程就可执行I/O操作,但用户必须保证通过set_tris_X()来设置I/O方向寄存器. 例子:#use fast_io(A)例子文件:ex_cust.c;该文件在前面已经叙述过了
[单片机]
用PIC单片机制作的电源定时插座
本电源定时插座有三个操作按键S1、S2、S3,并用两位LED 数码管显示定时时间。其中S2、S3两个按键分别预置、设定个位和十位数的定时时间值,设定的定时时间调整范围是0 ~ 99 分钟,用一个S1 按键做定时插座的"启动/ 停止"操作按键。 并且程序中添加了蜂鸣器提示音部分,该部分程序功能是:每按下一次S1、S2 或者S3 按键,蜂鸣器就会发出"嘀"的一声响,以确定按键按下的有效性。 计时程序采用倒计时递减计数的工作方式工作,程序在运行时,时间每过一分钟数码管的个位显示值减"1",每过十分钟数码管"十位显示值"减"1". 预设定时时间一到,插座自动切断AC220V 电源输出,同时蜂鸣器报警。直至再次按下"启动/ 停止"按键
[单片机]
用PIC<font color='red'>单片机</font>制作的电源定时插座
基于MCU的多机并行通信
摘要:单片机的多机串行通信应用十分广泛,但在串行口被占用又要进行多机通信时就要采取其它措施。本文介绍了一种使用并口进行多机通信的方法,在实践中已得到验证。 关键词:MCU,并口通信 1. 问题的提出 某系统中使用了三路串行接口的传感器(GPS、压力和风向)及三路模拟电流(4~20mA)接口的传感器(湿度、温度和水位)。现需要将这些数据汇总后通过串口上传给PC机,并且要求每路信号数据都能够实时独立的接收。 2.系统设计 经过分析,我们分别使用一块2051单片机接收各路串口传感器的数据,同时使用一块多路高精度ADC对转换成电压的温度等信号采样,系统结构图如图1所示。主从机之间的具体管脚连接参见图2。
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved