专业仿真软件自主学习报告_专业仿真软件报告

其他范文 时间:2020-02-29 04:21:29 收藏本文下载本文
【www.daodoc.com - 其他范文】

专业仿真软件自主学习报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“专业仿真软件报告”。

专业仿真软件自主学习报告完美版

专 业 仿 真 软 件 自主学习报告

建议先下载

专业

电气工程及其自动化

你老大 自不动不化 保密老师会找我的 大爱的李爱琴

2015年6月18日(日期假的)学生姓名 班学级 号

指导教师 完成日期

目录

1.概述...........................................................!1

1.1仿真软件的认识..............................................1 1.2专业仿真软件的分类..........................................1 1.3用途........................................................1 2.Keil软件.......................................................2

2.1 Keil软件简介...............................................2 2.2 Keil界面...................................................2 2.3 Keil在中国的应用情况.......................................3 2.4优点........................................................3 2.5keil操作....................................................3 3.Proteus软件....................................................8 3.1 proteus软件简介............................................8

3.2功能模块....................................................8 3.3应用领域....................................................8 3.4功能特点....................................................9 3.5proteus操作.................................................9 4.LabVIEW软件..................................................13

4.1LabVIEW简介...............................................13 4.2LabVIEW功能...............................................13 4.3Labview应用领域...........................................13 4.4 特点.....................................................14 4.5LabVIEW操作...............................................15 5.emu8086软件.................................................21

5.1emu8086 简介..............................................21 5.2功能......................................................21 5.3使用方法..................................................21 5.4emu8086操作...............................................22 6.MCS-51单片机仿真.............................................25

6.1仿真课题名称..............................................25

6.2仿真课题要求:............................................25 6.3硬件电路设计..............................................25 6.4软件设计..................................................29 6.5仿真数据及现象............................................33

7.8086仿真......................................................35

7.1 仿真课题名称.............................................35 7.2 仿真要求.................................................35 7.3硬件电路设计..............................................35 7.4软件程序设计..............................................39 7.5仿真数据及现象............................................50 8.LabView仿真..................................................52

8.1仿真课题..................................................52 8.2仿真要求..................................................53 8.3仿真设计..................................................53 9.结束语.........................................................57

9.1课程意义..................................................57

9.2感悟与体会................................................57 9.3建议......................................................58 9.4致谢......................................................58

1.概述

1.1仿真软件的认识

目前我们已经学习了关于PLC有关的博图、GX Simulator仿真软件;与自动控制、数字信号有关的Matlab;与电路、单片机有关的AutiumDesigner,Multisim、Proteus,Keil等仿真软件。具有灵活性高,易操作,能够弥补仿真硬件的不足,成本相较于硬件又很低的特点,对我们学习工作生活的帮助很大。

1.2专业仿真软件的分类

仿真软件分为仿真语言、仿真程序包和仿真软件系统三类。其中仿真语言是应用最广泛的仿真软件。仿真程序包是针对仿真的专门。应用领域建立起来的程序系统。软件设计人员将常用的程序段设计成通用的子程序模块,并设计一个主程序模块,用于调用子程序模块。仿真研究人员使用这种程序包可免去繁重的程序编制工作。仿真软件系统以数据库为核心将仿真软件的所有功能有机地统一在一起,构成一个完善的系统。它由建模软件、仿真运行软件(语言)、输出结果分析报告软件和数据库管理组成。的具体操作应用。

1.3用途

仿真软件(simulation software),专门用于仿真的计算机软件。它与仿真硬件同为仿真的技术工具。仿真软件是从50年代中期开始发展起来的。它的发展与仿真应用、算法、计算机和建模等技术的发展相辅相成。1984年出现了第一个以数据库为核心的仿真软件系统,此后又出现采用人工智能技术(专家系统)的仿真软件系统。这个发展趋势将使仿真软件具有更强、更灵活的功能、能面向更广泛的用户。

目前比较风行的是虚拟现实仿真软件,比如虚拟现实仿真平台(VR-Platform)。其目标是不断改善面向问题、面向用户的模块描述能力和对模型实验的功能。不同技术水平的用户通过仿真软件能在不同的程度上采用他们表达问题的习惯语言,方便地与计算机对话,完成建模或仿真实验。

2.Keil软件

2.1 Keil软件简介

Keil软件是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

2.2Keil界面

2.2.1 Keil μVision2

KeilμVision2是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统C语言的语法来开发,与汇编相比,C语言易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。Keil C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到μVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。μVision2 IDE可为它们提供单一而灵活的开发环境。

2.2.2Keil μVision3

2006年1月30日ARM推出全新的针对各种嵌入式处理器的软件开发工具,集成KeilμVision3的RealView MDK开发环境。RealView MDK开发工具KeilμVision3源自Keil公司。RealView MDK集成了业内领先的技术,包括KeilμVision3集成开发环境与RealView编译器。支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟,性能分析等功能,与ARM之前的工具包ADS等相比,RealView编译器的最新版本可将性能改善超过20%。

2.2.3Keil μVision4

2009年2月发布KeilμVision4,KeilμVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。新版本支持更多最新的ARM芯片,还添加了一些其他新功能。

2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本的KeilμVision4,其编译器、调试工具实现与ARM器件的最完美匹配。Keil μVision5

2013年10月,Keil正式发布了KeilμVision5 IDE。

2.3Keil在中国的应用情况

Keil官网虽然没有发布中文版本,但是Keil系列软件却被中国80%以上的软硬件工程师使用,但凡与电子相关的专业,都会开始从单片机和计算机编程开始学习,而学习单片机自然会用到Keil软件。国内由米尔科技、亿道电子、英倍特提供Keil的销售和技术支持服务,他们是ARM公司合作伙伴,也是国内领先的嵌入式解决方案提供商。

2.4优点

1.Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

⒉与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。

2.5keil操作

1.新建工程

2.选择工程位置

3.选择用到的CPU

4.新建文件

5.保存文件,注意后缀名

6.把文件添加到工程

7.编写程序

6.选中产生HEX文件

3.Proteus软件

3.1 proteus软件简介

Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前比较好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。

Proteus是英国著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

3.2功能模块

1.智能原理图设计 2.完善的电路仿真功能 3.实用的PCB设计平台 3.3应用领域

3.3.1教学

Proteus是一个巨大的教学资源,可以用于: 1.模拟电路与数字电路的教学与实验; 2.单片机与嵌入系统软件的教学与实验; 3.微控制器系统的综合实验; 4.创新实验与毕业设计; 5.项目设计与产品开发 3.3.2技能考评

Proteus能提供考试所需所有资源;

1.Proteus能直观评估硬件电路的设计正确性; 2.Proteus能直观的对硬件原理图进行调试软件; 3.Proteus能验证整个设计的功能; 4.测试可控、易评估、易实施; 3.3.3产品开发

Proteus Design Suite集成了原理图捕获、SPICE电路仿真和PCB设计,形成一个完整的电子设计系统。对于通用微处理器,还可以运行实际固件程序进行仿真。与传统的嵌入式设计过程相比,这个软件包能极大地缩短开发时间。

1.从产品概念到设计完成的完整仿真与开发平台;2.预研设计与项目评估,减少开发风险;3.ODM的虚拟样机;·强大的分析与调试功能克服新手的经验不足;4.软硬件的交互仿真与测试大大减少后期测试工作量;5.便利项目管理与团队开发。

3.4功能特点

Proteus软件具有其它EDA工具软件(例:multisim)的功能。这些功能是:

1.原理布图

2.PCB自动或人工布线

3.SPICE电路仿真

革命性的特点: 1.互动的电路仿真

用户甚至可以实时采用诸如RAM,ROM,键盘,马达4,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。

2.仿真处理器及其外围电路

可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。

3.5proteus操作

1.新建项目

2.路径选择、项目名确立

10

3.选择图纸大小

11

12

4.LabVIEW软件

4.1LabVIEW简介

LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。LabVIEW软件是NI设计平台的核心,也是开发测量或控制系统的理想选择。LabVIEW开发环境集成了工程师和科学家快速构建各种应用所需的所有工具,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。4.2LabVIEW功能

与 C 和BASIC 一样,LabVIEW[1] 也是通用的编程系统,有一个完成任何编程任务的庞大函数库。LabVIEW[2] 的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储,等等。LabVIEW也有传统的程序调试工具,如设置断点、以动画方式显示数据及其子程序(子VI)的结果、单步执行等等,便于程序的调试。

Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序,而LabVIEW则采用数据流编程方式。,程序框图中节点之间的数据流向决定了VI及函数的执行顺序。VI指虚拟仪器,是LabVIEW的程序模块。

LabVIEW提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面。用户界面在LabVIEW中被称为前面板。使用图标和连线,可以通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G代码。LabVIEW的图形化源代码在某种程度上类似于流程图,因此又被称作程序框图代码。

4.3Labview应用领域

4.3.1测试测量:

LABVIEW 最初就是为测试测量而设计的,因而测试测量也就是现在LABVIEW最广泛的应用领域。经过多年的发展,LABVIEW在测试测量领域获得了广泛的承认。至今,大多数主流的测试仪器、数据采集设备都拥有专门的LabVIEW驱动程序,使用LabVIEW可以非常便捷的控制这些硬件设备。同时,用户也可以十分方便地找到各种适用于测试测量领域的LabVIEW工具包。这些工具包几乎覆盖了用户所需的所有功能,用户在这些工具包的基础上再开发程序就容易多了。有时甚至于只需简单地调用几个工具包中的函数,就可以组成一个完整的测试测量应用程序。

4.3.2控制:

控制与测试是两个相关度非常高的领域,从测试领域起家的LabVIEW自然

13

而然地首先拓展至控制领域。LabVIEW拥有专门用于控制领域的模块----LabVIEWDSC。除此之外,工业控制领域常用的设备、数据线等通常也都带有相应的LabVIEW驱动程序。使用LabVIEW可以非常方便的编制各种控制程序。

4.3.3仿真:

LabVIEW包含了多种多样的数学运算函数,特别适合进行模拟、仿真、原型设计等工作。在设计机电设备之前,可以先在计算机上用LabVIEW搭建仿真原型,验证设计的合理性,找到潜在的问题。在高等教育领域,有时如果使用LabVIEW进行软件模拟,就可以达到同样的效果,使学生不致失去实践的机会。

4.3.4儿童教育:

由于图形外观漂亮且容易吸引儿童的注意力,同时图形比文本更容易被儿童接受和理解,所以LabVIEW非常受少年儿童的欢迎。对于没有任何计算机知识的儿童而言,可以把LabVIEW理解成是一种特殊的“积木”:把不同的原件搭在一起,就可以实现自己所需的功能。著名的可编程玩具“乐高积木”使用的就是LabVIEW编程语言。儿童经过短暂的指导就可以利用乐高积木提供的积木搭建成各种车辆模型、机器人等,再使用LabVIEW编写控制其运动和行为的程序。除了应用于玩具,LabVIEW还有专门用于中小学生教学使用的版本。

4.3.5快速开发:

根据笔者参与的一些项目统计,完成一个功能类似的大型应用软件,熟练的LabVIEW程序员所需的开发时间,大概只是熟练的C程序员所需时间的1/5左右。所以,如果项目开发时间紧张,应该优先考虑使用LabVIEW,以缩短开发时间。

4.3.6跨平台:

如果同一个程序需要运行于多个硬件设备之上,也可以优先考虑使用LabVIEW。LabVIEW具有良好的平台一致性。LabVIEW的代码不需任何修改就可以运行在常见的三大台式机操作系统上:Windows、Mac OS 及 Linux。除此之外,LabVIEW还支持各种实时操作系统和嵌入式设备,比如常见的PDA、FPGA以及运行VxWorks和PharLap系统的RT设备。4.4特点

尽可能采用了通用的硬件,各种仪器的差异主要是软件。可充分发挥计算机的能力,有强大的数据处理功能,可以创造出功能更强的仪器。用户可以根据自己的需要定义和制造各种仪器。未来虚拟仪器研究的另一个问题是各种标准仪器的互连及与计算机的连接。目前使用较多的是IEEE488 或 GPIB协议。未来的仪器也应当是网络化的。

14

LabVIEW(Laboratory Virtual instrument Engineering Workbench)是一种图形化的编程语言的开发环境,它广泛地被工业界、学术界和研究实验室所接受,视为一个标准的数据采集和仪器控制软件。LabVIEW集成了与满足 GPIB、VXI、RS-232和 RS-485 协议的硬件及数据采集卡通讯的全部功能。它还内置了便于应用TCP/IP、ActiveX等软件标准的库函数。这是一个功能强大且灵活的软件。利用它可以方便地建立自己的虚拟仪器,其图形化的界面使得编程及使用过程都生动有趣。

图形化的程序语言,又称为“G”语言。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图或框图。它尽可能利用了技术人员、科学家、工程师所熟悉的术语、图标和概念,因此,LabVIEW[2] 是一个面向最终用户的工具。它可以增强你构建自己的科学和工程系统的能力,提供了实现仪器编程和数据采集系统的便捷途径。使用它进行原理研究、设计、测试并实现仪器系统时,可以大大提高工作效率。

利用LabVIEW[2],可产生独立运行的可执行文件,它是一个真正的32位/64位编译器。像许多重要的软件一样,LabVIEW[2] 提供了Windows、UNIX、Linux、Macintosh的多种版本。

它主要的方便就是,一个硬件的情况下,可以通过改变软件,就可以实现不同的仪器仪表的功能,非常方便,是相当于软件即硬件!现在的图形化主要是上层的系统,国内现在已经开发出图形化的单片机编程系统(支持32位的嵌入式系统,并且可以扩展的),不断完善中(大家可以搜索 CPUVIEW 会有更详细信息)。

4.5LabVIEW操作

15

16

1.新建项目

2.编辑前面板

17

18

3.编辑后面板

19

4.仿真

20

5.emu8086软件

5.1emu8086 简介

EMU8086是学习汇编必不可少的工具,它结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。该软件包含了学习汇编语言的全部内容。Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,此外,还有循序渐进的教程

5.2功能

该软件包含了学习汇编语言的全部内容。Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,此外,还有循序渐进的教程。这套软件对于刚开始学习汇编语言的朋友非常有帮助.它能够编译源代码,并在模拟器上一步一步的执行。可视化界面令操作易如反掌.可以在执行程序的同时可观察寄存器,标志位和内存.算术和逻辑运算单元(ALU)显示中央处理器内部的工作情况.

这个模拟器是在一台“虚拟”的电脑上运行程序的,它拥有自己独立的“硬件”,这样你程序就同诸如硬盘与内存这样的实际硬件完全隔离开,动态调试(DEBUG)时非常方便.8086的机器代码同INTEL下一代微处理器完全兼容,包括Pentium II 和 Pentium 4,我相信 Pentium 5 同样也会支持 8086指令.这意味着8086代码具有很广泛的应用范围,它在老式的和最新的计算机系统上都能工作.

8086指令的另外一个优点是它的指令集非常小,这样学起来会容易得多.Emu8086 同主流汇编程序相比,语法简单得多,但是它能生成在任何能兼容8086机器语言的代码。注意:如果你不使用Emu8086编译程序,那你无法在运行的时候单步跟踪

5.3使用方法

5.3.1如何运行 1.在开始菜单选在它的图标,或者直接运行Emu8086.EXE

21

2.在“FILE”菜单中选择“SAMPLE” 3.点击“Compile and Emulate”按纽(或者按快捷键F5)

4.点击“Single Step”按纽(或者按快捷键F8),可以查看代码如何运行

5.4emu8086操作

1.新建项目

22

2.编译程序

23

3.调试

24

6.MCS-51单片机仿真

6.1仿真课题名称

八路抢答器

6.2仿真课题要求:

(1)用1位7段LED数码管显示选手组别;

(2)用8个LED显示抢答状态,常亮为正常答题,闪烁为犯规;(3)要求有蜂鸣器提示按键操作;

(4)要配置2个按键给裁判用,一个是开始键一个是清除键。

6.3硬件电路设计

25

6.3.1硬件搭建总图

下载后可调整图片

6.3.2各部分字电路介绍 1.单片机最小系统

2.显示抢答状态

26

27

抢答按键

4.数码管显示电路

28

3.5.裁判开始和清除按键以及声响部分

6.4软件设计

程序故意加了错误,下载文档后可见#include 3

#inclu33de #define uchar unsigned char #define uint unsigned int uchar code TAB[]= //共阳数码管的段码

{

0xc0, //“0”

0xf9, //“1”

0xa4, //“2”

0xb0, //“3”

0x99, //“4”

0x92, //“5”

0x82, //“6”

0xf8, //“7”

0x80, //“8”

0x90, //“9”

};uchari,aa,num,memary,xx;sbit START=P3^0;sbit sounder=P3^7;bit int1_flag;int play;

/***********延时程序段**********/ void Delay(uint z)

29

{ uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);

} /*******************************/ /*******INT0中断服务程序********/ void reset0()interrupt 0 //高级中断 { EX1=1;P1=0xff;P0=0xff;P2=0xff;sounder=0;int1_flag=0;} /*******************************/ /*******INT1中断服务程序********/ voidqiangda()interrupt 2 { EX1=0;int1_flag=1;//中断标准位

play=KEYscan();} /*******************************/ /*********按键扫描程序**********/ KEYscan(void){

{错误段

xx=P1;switch(xx){

case 0xfe:num=1;break;

case 0xfd:num=2;break;

case 0xfb:num=3;break;

case 0xf7:num=4;break;

case 0xef:num=5;break;

case 0xdf:num=6;break;

case 0xbf:num=7;break;

case 0x7f:num=8;break;

30

default:break;} } returnnum;} /*******************************/ /********LED灯显示程序*********/ Display2(){ //int play1;while(1){

switch(play)

{

case 1:P2=0xfe;break;

case 2:错误段 P2=0xfd;break;

case 3:P2=0xfb;break;

case 4:P2=0xf7;break;

case 5:P2=0xef;break;

case 6:P2=0xdf;break;

case 7:P2=0xbf;break;

case 8:P2=0x7f;break;

default: break;

} break;} } /*******************************/ /********数码管显示程序*********/ Display(){ //int play;while(1){

switch(play)

{

case 1:P0=TAB[1];break;

case 2:P0=TAB[2];break;

case 3:P0=TAB[3];break;

case 4:P0=TAB[4];break;

31

case 5:P0=TAB[5];break;错误段

case 6:P0=TAB[6];break;case 7:P0=TAB[7];break;

case 8:P0=错误段 TAB[8];break;

default: break;

}

break;} } /*******************************/ /***********起始LED*************/

/*******************************/ /************主程序*************/ void main(){

P1=0xff;//初始化

P0=0xff;//初始化

P2=0xff;//初始化 sounder=0;

int1_flag=0;

EA=1;//开总中断开关

EX1=1;//开INT1外部中断

IT1=1;//INT1边沿触发方式

IT0=1;//

EX0=1;// aa=0xfe;

while(1)

{

if(int1_flag==0)

{

P0=aa;

Delay(500);

aa=_crol_(aa,1);

} /////////////////////////////////////

if(int1_flag==1)

{

if(START==0)

32

{

sounder=1;

Display();

Display2();

}

/////////////////////////////////////

if(START==1)

{

sounder=1;

Display();

Display2();

Delay(200);

P2=0xff;

Delay(200);

}

}

}

} 6.5仿真数据及现象

1.仿真起始状态,数码管不断的依次点亮每个显示位

33

2有人抢答,数码管显示抢答选手序号并且LED灯闪烁、音响设备启动

3.主持人按下启动按钮后,2号选手抢答

34

7.8086仿真

7.1 仿真课题名称

基于8086的Protus仿真电子计算器 7.2 仿真要求 实现电子计算器的相关功能,如加减乘除等

7.3硬件电路设计

35

7.3.1硬件搭建总图下载后可调整图片

下载后可调整图片 下载后可调整图片 下载后可调整图片 下载后可调整图片 下载后可调整图片 下载后可调整图片 下载后可调整图片

36

7.3.2子电路介绍(1)88086芯片部分

(2)数据锁存器部分

37

(3)与按键部分

(4)显示部分

(5)译码电路

38

7.4软件程序设计

程序故意加了错误,下载文档后可见

网上有很多类似程序都是错的!!

DATA SEGMENT

X

DB

?,?,?,?

;存放数据的每一位 X1 DW

?

;存放第一个数据值 X2 DW

?

;存放第二个数据值

Y

DW

?

;存放运算结果

S

DB

?

;存放运算符号值

E

DB

?

;按下等号键标记 CC DB ?

;存放运算数据位数

H

DB

0

;存放按键行号

L

DB

0

;存放按键列号 DISCODE DB

3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

;段码表 DATA ENDS CODE SEGMENT

39

ASSUME

CS:CODE,DS:DATA

START: MOV

AX,DATA

MOV

DS,AX

MOV

AL,90H

;设置为A口输入,B口输出,C口输出

OUT

46H,AL

MOV

DI,OFFSET X+3

;DI指向X的高位

KKK: CALL

KEY

;扫描按键

JMP

KKK;以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号 KEY PROC

CHECK: CALL

DISP

;等待按键按下的同时进行显示

MOV

AL,0F0H

;所有行输出低电平

OUT

44H,AL

IN

AL,40H

CMP

AL,0FFH

;读列值

JZ

CHECK

;若都为高电平则无键按下,等待

MOV

CX,50

LOOP

$

;延时消抖

IN

AL,DX

;重读列值

CMP

AL,0FFH

JZ

CHECK

;无键按下一直等待

MOV

H,0

;有键按下,先把行列号变量清0

MOV

L,0

MOV

BL,01H

MOV

BH,0FEH

;扫描法读键值:从第一行开始测试,即PC0输出低电平

NEXT: MOV

AL,BH

OUT

44H,AL

NEXTH: IN

AL,40H

;读列值,判断是第几列有键按下

TEST

AL,BL

;从第一列开始判断

JZ

WAIT0

ROL

BL,1

CMP

BL,20H

;当前行状态下没有任何列有键按下,则转为对下一行的测试

JZ

NEXTL

INC

H

;每判断一列,列号加1

JMP

NEXTH

;再对下一列进行判断

NEXTL: MOV

H,0

MOV

BL,01H

ROL

BH,1;对下一行测试,让下一个PC口输出低电平

CMP

BH,0EFH

JZ

EXIT

INC

L

JMP

NEXT

40

错误段

WAIT0: IN

AL,40H

;若有键按下,则等该按键松开后再计算键值

CMP

AL,0FFH

JNZ

WAIT0

MOV

CX,50

LOOP

$

;延时消抖

IN

AL,40H

CMP

AL,0FFH

JNZ

WAIT0

CALL

KEYVALUE

;调计算键值子程序

EXIT: RET KEY ENDP

;以下为计算键值子程序,通过行列号计算键值(键值=行号*5+列号)

;键值存放在DL寄存器中 KEYVALUE PROC

MOV

DL,L

MOV

DH,H

SHL

DL,1

SHL

DL,1

;列号乘4

ADD

DL,DH

CMP

DL,9

;按下的是数字键

JNG

NUM_CALL

CMP

DL,14

JL

CONT_CALL

;按下的是运算键

CMP

DL,14

JZ

OUTP_CALL

;按下的是等于键

CMP

DL,15

JZ

CLR_CALL

;按下的是清除键

NUM_CALL: CALL

NUMBER

;调数字键处理子程序

JMP

EXIT1

CONT_CALL: MOV

S,DL

;存放运算键的键值

MOV

E,0

CALL

COUNT

;调运算键处理子程序,计算第一个加数

JMP

EXIT1

OUTP_CALL: CALL

OUTP

;调等号键处理子程序

JMP

EXIT1

CLR_CALL: CALL

CLEAR

;调清除键处理子程序

EXIT1: RET错误段

KEYVALUE ENDP;以下为清除键处理子程序,按下清除键后,X变量全部清0 CLEAR PROC

41

MOV

X[3],0

MOV

X[2],0

MOV

X[1],0

MOV

X[0],0

CALL

BITP

RET CLEAR ENDP;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量

;并根据运算符号,调用相应的运算子程序 OUTP PROC

PUSH

AX

PUSH

DX

PUSH

BX

INC

E

CALL

COUNT

;调运算键处理子程序,计算第二个运算数据

CMP

S,10

JZ

ADD_CALL

;运算符为加号,则调用加法子程序

CMP

S,11

JZ

SUB_CALL

;运算符为减号,则调用减法子程序

CMP

S,12

JZ

MUL_CALL

;运算符为乘号,则调用乘法子程序

CMP

S,13

CALL

DIVP

;运算符为除号,则调用除法子程序

JMP

STORE1

ADD_CALL: CALL

ADDP

JMP

STORE1

SUB_CALL: CALL

SUBP

JMP

STORE1

MUL_CALL: CALL

MULP

STORE1: MOV

AX,Y

;以下程序将各运算子程序返回的运算结果,按位分解,送入X变量

MOV

DX,0

MOV

BX,1000

DIV

BX

MOV

X[0], AL

MOV

AX,DX

MOV

BL,100

DIV

BL

MOV

X[1],AL

MOV

AL,AH

MOV

AH,0

MOV

BL,10

42

DIV

BL

MOV

X[2],AL

MOV

X[3],AH

POP

BX

POP

DX

POP

AX

RET OUTP ENDP;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量

;或者将第二个运算数据的数值计算出来并存入X2变量;将运算符的值存入S变量 COUNT PROC

PUSH

AX

PUSH

BX

PUSH

DX

MOV

DX,0

CALL

BITP

;测试X中的数据是多少位

CMP

CC,4

;输入的数据是4位数?

JZ

C4

CMP

CC,3

;输入的数据是3位数?

JZ

C3

CMP

CC,2

;输入的数据是2位数?

JZ

C2

JMP

C1

;输入的数据是1位数?

C4: MOV

AX,0

MOV

AL,X[0]

MOV

BX,1000

MUL

BX错误段

MOV

DX,AX

C3: MOV

AL,X[1]

MOV

BL,100

MUL

BL

ADD

DX,AX

C2: MOV

AL,X[2]

MOV

BL,10

MUL

BL

ADD

DX,AX

C1: MOV

AL,X[3]

MOV

AH,0

ADD

DX,AX

CMP

E,1

43

JNZ

X1_S

MOV

X2,DX

;按下的是等号,则将第二个运算数据的值存入X2变量

JMP

EXIT3

X1_S: MOV

X1,DX

;按下的是运算符号,则将第一个运算数据的值存X1变量

MOV

X[3],0

;清空X变量

MOV

X[2],0

MOV

X[1],0

MOV

X[0],0

EXIT3: POP

DX

POP

BX

POP

AX

RET COUNT ENDP;以下为数字键处理子程序

;该程序,将输入的数据按位存放在X变量中,并由CC记录数据的位数 NUMBER PROC

CMP

E,1

JNZ

CONTINUE

MOV

E,0

CALL

CLEAR

CONTINUE: CMP

CC,0

;目前数据为0位,即没有数据,则转到SSS

JZ

SSS;若已有数据,以下程序将X左移8位。;例如:先输入“1”,当再输入2时,;先要将“1”从个位移到十位,然后再将“2”存放到个位

PUSH

AX

PUSH

DX

MOV错误段

AL,X[3]

MOV

AH,X[2]

MOV

DL,X[1]

MOV

DH,X[0]

MOV

CX,8

LL: SHL

AX, 1

RCL

DX,1

LOOP

LL

MOV

X[3],AL

MOV

X[2],AH

MOV

X[1],DL

MOV

X[0],DH

POP

DX

44

POP

AX

SSS: MOV

[DI],DL

;将当前键入的数据存放到X的最低位

INC

CC

;数据位数加1

CMP

CC,4

;判断数据位数

JNG

EXIT2

MOV

CC,0

;如果数据超过4位,重新从最低位开始存放

MOV

X[2],0

MOV

MOV

EXIT2: CALL

RET NUMBER ENDP;加法子程序 ADDP PROC

PUSH

MOV

ADD

MOV

POP

RET ADDP ENDP;减法子程序 SUBP PROC

PUSH

MOV

SUB

MOV

POP

RET SUBP ENDP;乘法子程序 MULP PROC

PUSH

PUSH

MOV

MOV

MUL

MOV

POP

POP

RET MULP ENDP

X[1],0 X[0],0

DISP

AX AX,X1 AX,X2 Y,AX AX AX AX,X1 AX,X2 Y,AX AX AX DX AX,X1 DX,X2 DX Y,AX DX AX

;调显示子程序,显示输入的数据

45

;除法子程序 DIVP PROC

PUSH

AX

PUSH

BX

PUSH

DX

MOV

DX,0

MOV

AX,X1

MOV

BX,X2

DIV

BX

MOV

POP

POP

POP

RET DIVP ENDP;求幂子程序

PF

PROC

PUSH

PUSH

PUSH

MOV

MOV

MOV

DEC

LOP: MUL

MOV

LOOP

MOV

POP

POP

POP

RET

PF

ENDP;阶乘子程序

JCP

PROC

PUSH

PUSH

PUSH

MOV

MOV

MOV

DEC

DEC

BEGIN: MUL

Y,AX

DX

BX

AX AX DX CX CX,X2 DX,X1 AX,X1 CX DX DX,X1 LOP Y,AX CX DX AX AX BX CX CX,X1 AX,X1 BX,AX BX CX BX

46

DEC

BX

LOOP

BEGIN

MOV

Y,AX

POP

CX

POP

BX

POP

AX

RET

JCP

ENDP;求余子程序

QYP

PROC

PUSH

AX

PUSH

BX

PUSH

DX

MOV

DX,0

MOV

AX,X1

MOV

BX,X2

DIV

BX

MOV

Y,DX

POP

DX

POP

BX

POP

AX

RET

QYP

ENDP;显示子程序,将X中的数值按位显示出来 DISP PROC

PUSH

BX

PUSH

AX

MOV

BH,0

LEA

SI,DISCODE

CALL

BITP

;测试X位数

CMP

CC,4

JZ

QIAN

CMP

CC,3

JZ

BAI

CMP

CC,2

JZ

SHI

CMP

CC,1

JMP

G

JMP

NONE

QIAN: MOV

AH,11100000B

;从第4位开始显示

MOV

AL,AH

OUT

44H,AL

MOV

BL,X[0]

MOV

AL,[SI+BX]

47

下载专业仿真软件自主学习报告word格式文档
下载专业仿真软件自主学习报告.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文