2021年基于Proteus的微机原理实验_第1页
2021年基于Proteus的微机原理实验_第2页
2021年基于Proteus的微机原理实验_第3页
2021年基于Proteus的微机原理实验_第4页
2021年基于Proteus的微机原理实验_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一熟悉实验环境1实验环境搭建1、1 emu80861、1、1 emu8086 介绍emu8086虽然就是一款汇编语言学习平台,但其生成的代码就是符合真正x86标准的二进制彳弋码,可以被x86平台执行。本学期实验课程中仅仅用到emu8086的汇编代码编辑功能,不会用到emu8086的二进制代码生成与调试功能。强烈建议汇编语言编程基础差的同学课 下多使用emu8086练习汇编语言编程。1、1、2 emu8086 安装尽量安装在非中文路径下,比如“”。安装文件位于本教程所在目录的"toolsemu8086-crack、zip"。按照压缩包中的说明安装即可,为学习与教学方便,使

2、用破解软彳,请勿用于其她用途。1、2汇编编译器1、2、1汇编编译器介绍本学期实验课程中用到的汇编语言编译器取自masm32,但masm32过于庞大,因此只选出对实验有用一些工具 ,打包在"toolsmasm4proteus、zip”中,包中还有三个批处理文件 ,专 用于本学期的主要实验平台 Proteus。1、2、2汇编编译器安装将 “toolsmasm4proteus 、zip ” 解 压即可,尽量 解压到 非中文路径下,比如 “e:stumcpmasm ”。1、3 Proteus1、3、1 Proteus 介绍Proteus就是一款商用的专业的IC设计软件,同时具备许多处理器的仿

3、真功能,本学期实验即用到了它的8086处理器仿真功能。1、3、2 Proteus 安装实验室微机上可能已经安装,若未安装,可按下面说明安装。尽量安装在非中文路径下,比如“安装文件位于本教程所在目录的"toolsProteus7、10pro-crack、zip"。按照压缩包中的说明安装即可,为学习与教学方便使用破解软件,请勿用于其她用途。1、3、3 Proteus 配置启动Proteus,按图1提示打开Proteus的代码生成工具设置窗口。ISource Debug Library Template E:_Add/Remove Sojrce file&.Define

4、Code Generation TooIs.hSetup External Text editor.Build Allp .图1开打代码生成工具添加删除窗口在代码生成工具添加删除窗口中选New,如图2中红圈所示,便可打开一个文件选择对话框。图2代码生成工具添加删除窗口“MASM32、BUILDk在弹出的文件选择对话框中找到1、2节中安装汇编编译器时解压出的EXE bat”,双击或点打开,对话框关闭,返回代码生成工具设置窗口,然后按图3中的红圈标注进行设置然后点OK关闭该窗口,这样Proteus就拥有编译本学期实验课程中用到的汇编语言 的能力了。图3代码生成工具添加删除窗口-配置新添加的编译器接

5、着,按图4所示,设置外部代码编辑器。Sourcu Debug Library T em plateAdd/Remove Source files.,费 Define Cede Generation Tools-.Setup External Text £ditor.Build All图4打开外部代码编辑器设置窗口按照图5所示,找到前面过程中安装好的emu8086,点OK即可,如此Proteus将使用emu8086作为汇编语言编辑工具。图5 配置emu8086Proteus基本配置完毕,若无其她操作,可以关闭Proteus。2 8086平台基本电路搭建本节将介绍从 Proteus自带的

6、8086仿真实例中截取的 8086平台基本电路。2、1 创建实验文件夹一定在非中文路径下,创建一个文件夹“exp01",比如"e:stumcpexpexp012、2 添加8086平台基本电路到实验文件夹打开本教程所在文件夹中的“ 制到实验文件夹下,最好更名为“exp8086base、zip",将压缩包中的“8086base、dsn”复 exp01、 dsn”。2、3打开dsn文件双击 模块如图21_22芸1831h3319RESETDp.15READYA16.19INTXVQS1IIMTP ,ALE/QSDHOLD/GTTBHEHLDA/GTODT/R/S1TES

7、TDEN/S2NMIRDMM而WR/LOCKCLKMIO/®2S2534272、2中复制过来的dsn文件即可启动Proteus,并瞧到整个电路设计图。其中80866所示。图6 8086模块请观察电路图1为什么2为什么启查资料,在实验报告纸上回答下列问题:RESE嘲口要接地(低电平)?MN/MX与READY端口要接电源(高电平)?3AD0、15与A16、19的作用就是什么?4M/IO端口的作用就是什么?5RD端口的作用就是什么?(进行下面步骤时不要关闭当前Proteus)3 在Proteus的8086仿真平台中编辑与调试汇编程序3、1创建汇编源程序文件在先前创建的实验文件夹中创建一个文

8、本文件并更名为“exp01、asm”。按照图7所示,打开添加源文件窗口。Sc urce 口tbug Library TemplateAdd/Remove Source Fle51.n奥 Define Cede Generation Tools,. Setup Ejctemal Text £ditoc., Build All图7打开添加源文件窗口在打开的源文件添加删除窗口中按照如图8注释的顺序进行设置,然后点“ New”,打开源文件浏览窗口。图8源文件添加删除窗口在打开的文件浏览器找到刚才创建的“exp01、asm”,打开即可。至此也可瞧到图8中的源文件添加删除浏览器窗口的“Sourc

9、e Code”区域中显示出刚刚输入的源程序文件名(如“exp01、asm"),然后点OK关闭源文件添加删除窗口。3、2编辑汇编源程序文件如图9所示进行操作,即可打开刚创建的汇编源程序文件,并且就是由emu8086作为编辑器打 开的。图9请在源文件中写下如下代码model smal_102 .8086 .stack .code startup dead_loQp:07 inc ax mov var8 r al mov var16, ax jmp dead_Loop , data 12 var8 dt ?12 varlG dxj ? end凰写完代码后请点击 emu8086界面上的保存按

10、钮 田电。6请在实验报告纸上写源代码 每一行的含义。3、3编译汇编源程序文件不用关闭emu8086,回到Proteus界面,按图10进行操作,即可对源程序进行编译。Source Debug Library Template Systs Add/Remove Source files.Define Cede Generjticn Tools.,工旨tup External Text Editor,Build All MHexp01,asm图10编译源程序编译完成后会弹出一个" BUILD LOG'窗口(该窗口稍后关闭即可 ,若窗口中没有红色错 误提示,则表明源程序已经被成功编译

11、,否则要根据红色错误提示回到emu8086界面修改源程序,然后再回到Proteus中编译。编译成功后可以在实验文件夹下瞧到编译产生的与源程序文件同名但后缀不同的三个 文件,如“exp01、obj"、"exp01、map"、"exp01、exe”淇中exe后缀的即为二进制可执行 文件。3、4运行程序双击电路图中的8086芯片,弹出8086配置窗口,如图11所示红圈部分设置即可,这样便 可在稍后的环节中由 8086芯片运行刚生成的“ exp01、exe”。图11 8086与二进制程序的关联设置点OK关闭图11中的窗口然后按Proteus界面左下角的运行按钮

12、匚匚I便可启动8086 运行刚才的程序。可以观察到设计图上有些端口变红或变蓝。按停止按钮匚亘口便可结束8086的程序运行。3、5 单步调试程序,观察8086内部寄存器变化如图12进行操作就可开启单步调试模式。Debug Library Template System HelpStart/Re&tart DebuggingCtrl 十 Fl 2Piir i 尸Phii喘产 inim图12开启调试模式然后再次点图12中的Debug菜单时,弹出的内容如图13所示。1,Simulation LogWatch Window &086 Memory Dump - UI/ 4, &O

13、86 Roisters - U1- 3 &08& Source Code U15 6. &鲍6 Variable - Ui图13调试窗口菜单选上图13中所有勾选项就可以瞧到所有调试用窗口。此时可通过“ 8086 Source Code”窗口的单步调试按钮单步执行程序,并通过“ 8086Registers”窗口观察8086芯片中各个寄存器的变化。3、6 设置调试时刻观察的变量在3、5最后阶段,打开了若干调试窗口 ,其中有个叫做“8086 Variables”,这个窗口可以 显示定义在源程序中的变量 (观察源程序可发现,其中在“、data”部分定义了 “var8”、“vah

14、6 两个变量,但在3、5最后阶段,并未发现该窗口显示变量。若要将源程序中的变量显示到“8086 Variables”窗口中,则需要将要显示的变量声明成全局的,这需要在“、data”后添加两行代码,如下:.data.put)l LC VdL 6public var16- ver3 db 2var16 dw ?4 实验验收向实验指导教师演示搭建好的实验平台,并按老师的提问进行操作。5 实验报告请在实验报告上回答红字部分提出的问题。实验二 配置存储器及BIOS仿真应用1了解微机启动过程以下资料截选自百度文库:计算机启动过程第一步.当我们按下电源开关时,电源就开始向主板和其它设备供电, 此时电压还不太

15、稳定,主板上的控制芯片组会向CPI发出并保持一个RESET f用置)信号.让CPI内部口动快且到初始状态,但CPI在此刻不会马上 执行指令,当芯片组检测到电源已经开始稳定供电了(当然从小稳定到稳 定的过程只是一瞬间的事情),它便撤去RESET信号(如果是手工按下计 算机面板上的Reset按钮来重启机器,那么松开该按钮时芯片组就会撤去 RESET信号),CM马上就从地址FFFF0H处开始执行指令,从前面的介绢 可知,这个地址实际上在系统H1OS的地址范围内,无论是AwadB105还是 AMTBTOS4放在这里.的只是一条跳转指令,跳到系统BIOS中真正的启动代 码处.以下资料截选自 ChinaU

16、nix:,原英文资料网址: How Comuputers Boot Up 计算机如何引导启动前面的博文介绍了 Intel计算机的底板芯片组与内存映射 ,为理解计算机引导初始过程打下了 基础。引导就是一个复杂的、 多阶段的、有趣的“东西”。下面就是这个过程的简图(outline): 转风扇的僵尸电脑”。有时USB或者其它设备也会导致此类情况发生 :对于之前一直运行良好, 而突然出现上述死机状态的计算机 ,您可以拔掉所有非关键设备 ,这很可能解决死机问题,然 后排除出导致该问题的设备。Time Flo/;Siwtcfi to PiptectedModeAn outline of the boot

17、sequence当您按下计算机上的电源键时,事情已经开始启动。在加电之后(powered up),底板首先初始化自身固件firmware)-芯片组与其它小部件(tidbits)-并试图运行CPU如果此日运行 CPU失 败(例如,没有发现CPU或者CPU损坏),那么该计算机除了转动的风扇之外,一无所用。在发现 CPU损坏或者缺失的情况下,一些底板会发出蜂鸣报警声,但我最常遇见的情况就是只有“旋03<FFFFFFFFReset vector OxFFFFFFFO4 GB4 GB - 16 bytesJUMP to OxFOODO (Last 1S Bytes of m&mory ar

18、e add re stable s'ia EIP thanks to power-up hack.)Unaddr&s sable rremoryL real mode is limited to 1 MB. This region represents 7 GB and is not to scaleOxFFFFFOxFOOOOSystem BIOS1MB960 K3Ext&tided System BIDSEx pa nsion Area (maps ROMs for old peripheral c5rds)Legacy Video Card Memory Acce

19、ss8% KB766 K3640 KBAccessible RAM Memory (640KB 话 enough for any chi e oldDOSareaL.ttx博客jnix net00如果一切正常,CPU便开始运行。在多处理器 (multi-processor)或多 核(multi-core)系统中,会动态地选 择一个CPU作为引导处理器 (BSP:BootTrap Processor),它负责运 行所有的BIOS以及内核初始化代 码(kernel initialization code)。此时, 其它的被称作应用处理器 (application processor :AP)的 C

20、PU 仍处于终止状态(halted),直到内核 显示地激活它们。Intel CPU已经演 化了很多年,但它们就是完全后向 兼 容 的(fully backwards compatible)。因而,现代的 CPU同 最初的1973年的Intel 8086CPU的 启动行为非常相似:在加电之后执 行相同的动作。在这种原始的加电 状态下(primitive power up state),CPU 处于实模式(real mode), 此时内存映射就是禁用的 (memory paging disabled),这同古 老的MS-DOS时代类似。DOS系统 仅能寻址1M字节内存,并且任何 代码可以写入内存的

21、任何位置-即不存在保护 (protection)或特权 (privilege)的概念。加电之后,CPU内部的寄存器均具CPU将有定义好的值(well-defined values),包括指令指针(EPI:instruction pointer),它用于保存要执行指令的内存地址。Intel CPU加电后仅能够寻址1M内存空间,同时,一个隐含的基址(hidden base address)将应用于EIP因而,CPU执行的第一条指令位于地址:0xFFFFFFF0这个魔幻地址被称作重启向量(reset vector),也就是现代Intel CPU的标准规格。底板(motherboard)保证位于重启向

22、量的指令 (jump)跳转至U映射了 BIOS入口的内存地址。跳 转指令隐含地(implicitly)清除加电时的隐含基址 (hidden base address)。多亏了芯片组(chipsets) 保存的内存映射(memory map),使得所有内存地址存储着CPU所需要的正确内容。这些内存映射到包含BIOS的flash内存(flash memory),而此时的RAM模块里面还就是一些乱七八糟的 东西。以下资料通过百度知道以关键词“proteus仿真8086启动”搜索得到,资料网址为:【问题】8086不就是没有集成存储器的不,proteus中的仿真模型好像有内部存储器 ,使用内部存储器 的

23、时候怎么分别设置 RAM与ROM的空间大小?如果不想使用内部存储器 ,自己来扩展存储 器,怎么设置?如果使用自己扩展的存储器 ,程序从那个地址开始运行的?【回答】8086 本身就没有存储器。只有三类总线:地址总线、数据总线、控制总线。您如果想给8086添加存储器,必须利用总线。 加载 ROM 芯片与 RAM 芯片。 这些芯片与8086 本身的芯片一样,都在元器件库里面,但就是怎么接,接多大的存储器,按照您的要求选择。芯片具体的连接方法,需要瞧清楚8086 芯片的各个引脚功能,与芯片的引脚功能。接下来的任务就就是把芯片连接到引脚。 但就是连接时有些能直接相连,有些需要借助其她芯片做转换。例如80

24、86就是AD(地址与数据线)复用,这样您必须先利用锁存器741s373把地址总线与数据总线分离开,然后才能与存储器芯片的地址线与数据线连接。这些方面的详细介绍您可以瞧瞧微机原理方面的书籍。里面的存储器设计与译码电路设计部分。详细的介绍这些内容。8086的程序开始地址就是从ROM的FFFF0开始的,您如果要用8086必须配备ROM。RAM根据需要决定陪还就是不配。这与单片机不同。这个芯片的运行可以在ROM 也可以在 RAM,但就是启动的第一条指令必须在ROM的FFFF0单元。【追问】存储器的扩展,连线,译码之类的我会,我只就是不知道proteus 怎么对 8086 的存储器进行管理与设置的,您能

25、说明一下这个不?【回答】管理与普通系统一样的。就是由您自己编写的软件控制的。举例来说。您编程的时候,首先写一条跳转指令,写在ROM的FFFF庇个位置,proteus运行的时候,就首先执行在这个位置的第一条跳转指令。 然后转移到您实际程序的所在位置。 然后您在实际程序的所在位置编写代码,完成任务。 如果您需要变量或者可读写的量。 那些您就存在RAM 里面 ,如果您不需要这些,您就只用ROM。与单片机操作差不多。您问的意思就是能不能像dos环境下,那样,把程序读进来,然后在RAM 运行。 在有操作系统的环境里面,操作系统完成这些任务。 您现在没有操作系统,所有的操作必须您自己完成。有系统的机器,在

26、开始工作前也就是由主板上固定的 ROM 程序完成自检与设备初始化的。 现在您编程一般情况就写在ROM 当中。类似于 ROM 固话的自检程序。一般任务这样的方法完全可以完成。1查阅资料,回答为什么8086CPU力口电后会从0XFFFF0地址开始执行指令。2 配置闪存2、 1 闪存的作用由于闪存的内容在掉电后仍然可以保持 ,因此在 0806 存储系统中通常都会配有闪存。 闪 存中的内容就是 8086启动后最先执行的内容。本次实验将在“ exp8086base、zip”提供的8086 基本电路基础上配置闪存。闪存即8086存储系统中的ROM,可以在图1中瞧到闪存在微机硬件结构上所处的位置。计算机主板

27、上的 bios 就就是存储在 ROM 中。本次实验课就就是要模拟计算机系统中的 biosROM。图1微型计算机总线化硬件结构图(图片来自:)2、2配置闪存本节相当于在8086base基础上做一个ROM扩展,容量为64K字节,采用两片 27256(32K 乂 8)的EPROM芯片,其地址范围为 F0000至U FFFFF注意:8086就是16位CPU每次 会通过数据总线从 ROM模块t取16位数据,因此两片27256分别为8086提供高8位数据与 低8位数据。请在8086base、dsn基础上仿照图2进行电路扩展。简要画图说明挑选元器件:点左边工具栏中的方,再点击L| DEVICES,在弹出的“

28、 PickDevices”对话框中找到需要的元件(比如27256),然后按OK关闭对话框;(2)在电路图上放置元器件:点左边工具栏中的 »,然后点击IDEVICES 一 下列出的所需 元件(比如27256),然后在电路图上合适位置点击即可放置;(3)为连线命名:点击左边工具栏中的 幽U ,再点击要命名的连线,弹出的对话设置窗口中 直接填写String项命名或从下拉菜单中选择已有命名均可 ,命名相同的连线被认为就是相互 导通的(在逻辑上被认为就是同一条线 );(4)单线接点、电源、接地、总线接点个.可通过左边工具栏中的=进行选择,总线可通过左边工具栏中的进行绘制。U411/4)0 y1

29、3AD1 >13 M 2 / 1GAD3 71EM4 .17/MD5 J18MJb >19 班7)ADR|0, 190 12 3 4 = - EpMA1A2*MM 用而稣用A1A1RA1A1CFutvpD D D D D D D DkU (V6芭3互23 至U12iog7n刀"T0 12 3 4 三-一 平 他A1羯阴川悠他匐阳墨A1A1A1A1A1CFOFW7LSl3e图2 在8086base、dsn基础上扩展的 ROM电路U9o 1 2 3 2 5 0 7 ,D D D D D D D D11AD8 7 12Mg , 13AD10/ 15Mli1/ 1612y 17M

30、 13yl IJAJ4/ igADigy2电路图中如何保证 27256的地址范围为 F0000到FFFFF3为什么27256的地址接受端口 A0、14接的就是系统地址总线的A1、15,而不就是A0、14。4电路图中两片27256标示符分别为U4与U12,哪片就是向8086提供高8位数据,哪片提供 低8位数据。3向闪存中写入程序3、1 配置闪存编译环境由于前面实验中介绍的MASM32、BUILD EXE bat不能直接将汇编源代码编译成纯二进制代码的bin文件,因此本次实验中需要添加一个专用于编译生成bin文件的环境,具体步骤如下:(1)点击 Proteus 界面的"Source-&g

31、t;Define Code Generation Tools"打开"Add/Remove Code Generation Tools”界面;(2)点击“Add/Remove Code Generation Tools”界面的New按钮以添加用于编译 bin文件 的环境(这个环境位于“toolsmasm4proteusNASM、BUILD BIN、bat"),如图 3。Ta J: |NASM.BIIILD,BIN三J cxirce E xtn:|ASM £bj. Ewtn: |OBJ|图3 添加bin文件编译生成环境3、2编辑源程序在实验目录下创建一个名为

32、“ bios、asm”的汇编源程序文件,然后将该文件添加到电路 设计图,注意添加时选择“ Code Generation Tool”要选择“ NASM、BUILD BIN”。添加好“bios、asm”后,通过Proteus界面的Source菜单打开该源程序文件,然后编辑如 图4。bios_entry:rnov 3父,190|三 ruov bx 230rnov ex, 3 0005 mov dx. 400I? inc 已建 d李。bx inG GK dec dx jmp bios_loop times OfffOh-($-$) DE 0|lr jnip OfOOQlizOOOOli图4用于生成b

33、ios的源程序3、3 生成bin文件通过Proteus界面的Source->Build All即可生成bin文件,使用该功能后,在实验目录下(即 源程序所在目录)可以见到生成的“ bios、bin”。3、4 将bin文件装入ROM本次实验8086要运行的可执行代码不就是来自设置给8086的Program File,因此要保持8086的Program File项为空,如图5所示。一 RST 细口.151口-iit? xuficsa-a一 Rngiam Fie /呆-Extein'Clxk.4 | NoZl“twt-RHIwF挈, Clcck Frecuercpt|1500KHr-&

34、quot;I篇-bo LKMi3FC3 Package|DL40图5 双击8086后,清空其Program File项 双击用作低8位数据的27256芯片,设置如图6。Image File:bios.bin国File B 号第 Ad di曾亭(he«)I 山口口口口File Address 刮图6用于低8位数据的27256设置双击用作高8位数据的27256芯片,设置如图7。Image Ffe;File Address (hex)FleAddess Shift g)图7用作高8位数据的27256设置关于图6、图7中的三项的含义可以在双击27256芯片后,点击打开的界面中的Help按钮,

35、查IMJ Proteus 提供的 “ The Memory Model - MEMORY_#1_#2 ” 英文说明。4仿真微机启动过程真实的微机bios要做许多机器检测工作,代码非常复杂,本实验仅仅在硬件结构上模拟这 个过程,因此bios的功能装装样子而已,实现的就就是图4中所示代码的功能。点击即以调试模式单步运行8086。第一次点击调试后,请打开“ 8086 Registers”观察窗口,观察8086当前寄存器的值:5此时,CS IP、LA的值分别就是 什么。然后,分别在两片27256上点击右键 选择"Memory Contents ”,显示两片ROM的内容 观察窗口,可以发现大部

36、分内容为 00,仅有开始部分与结尾部分内容有变化,司如果想让其值 为00的部分都变成FE应该如何修改“ bios、asm”,请尝试修改并观察。1通过单步调试,记录源程序中每一行代码执行时,“8086 Registers”窗口中显示的寄存器值:Pc、CS IP、LA、AX、BX CX、DX。7图4源程序第13行的代码在“ bios、bin”文件中的首地址为FFF0但装载到27256芯片后,在其“Memory Contents ”中的首地址为 7FF8这就是为什么?5 实验验收,然后在掌握实验内容的情先将以上实验指导内容中蓝色部分的问题写在实验报告纸上 况下请指导老师验收,并回答指导老师提出的问题

37、。6 实验报告在实验报告纸上回答实验指导内容中的红字部分。实验三配置硬件地址及交通灯仿真应用1如何确定硬件地址U5图18086打开 8086base、 dsn,图中已经给出一 个基本的8086硬件系 统淇中74154这部分 就是专门为操作外围 (扩展)硬件而设计的 (如图1)。74154就是一个 4-16译码器(选择器), 当E1、E2都为低电平74154部分的电路设计时工作,工作时,通过A、B、C、D 选中 015 中某一个端口 ,选中的 端口对外呈现低电平 ,未选中的呈现高电平,具体可见其真值表(图2)。首先明确:8086的内存地址为20位,但硬件 地址为16位,1请尝试从8086base

38、电路图中观 察到这一事实。观察图1可知,若要74154工 作,A13A15以及必须为低电平,因此硬件 的有 效地址 范围为 0000011111,即 0000h1fffh( 2为什么),一共就是8192个地址(1 为什么)。稍后,我们将瞧到如何将这8192个地址配置给指定的硬件。2交通灯仿真应用利用两片74273(图4为74273真值表)与4 组红2黄LED搭建交通灯仿真电路,并编写程序 模拟交通灯行为。2、1 设计电路图在8086base的基础上扩展出交通灯仿真电路(扩展电路如图3)。2、2确定硬件控制地址观察图3可知,仅当面、A0、豆HE、你都为低电平时,两片74273可将数据线上的数据

39、AD0、11传递到LEDR、11,从而驱动交通灯亮灭,控制交通灯的行为。面 来自图1中的74154,因此可以确定若要两片74273完成数据传递工作,则硬件地址起码为 0000001xxxxxxxxx(2为什么);A0就是地址最低位,因此若要连接 A0的74273传递数据,则需要 地址为0000001xxxxxxxx0,而丽信号就是CPU发来的高8位数据操作信号,该信号通常均有 效,因此,与丽E连接的74273也仅需地址为0000001xxxxxxxxx即可传递数据。综合两片74273 的情况可知,若要它们完成数据传递的工作,需要地址为0000001xxxxxxxx0,我们假设x为0,则 可以确

40、定交通灯的硬件操作地址为0200h(其实0200h03feh均可,可在后面的程序设计中体验一下,实际硬件设计中不应这样,应该严谨)。M 口 15A-in: A' I4y?T pa13、AJb14A1,617A- ''18r 6i -匕F12 金 It15wT-JU 1Q203Q405Q6Q774273UI 3 4 5 6 7CDDDD0D T -R LL止止LELELELEIr|2用研 oooooooo ooo0一 OUUJII231000 rQ2Q45花Q7>CLK厢;42P320331 xpio 7 0011 Qo 匕 13 <A013 11 VgN i

41、7 .15 IBDLr 00001LED% L ED9 LIZD10工4rtLH?-GREErikUJwsrnTIM0TI山"目n.IJH,cnOOOc卜gQQOg_L|L_图3交通灯仿真电路图MRInputs CLK0nOutputsLXXLH/HHH/LL图4 74273真值表2、3编程程序如图5所示。3查阅资料,解释第8、11、17行的用法及作用。01.rtiodel small1 Qd©lay_chang©:02.3086& U1oop dlay_change03.stackadd si 204.codecmp si, s_end05.startu

42、p«£- -Jj z entry06entry:,jijmp pa日白 片han日白07mov &i , f fset s25OSmov ds, 0200h26.data 9pass_e:hange :n7:南北红,东西综10inov blk, si n q £ 0s dw 0000100001100001b11out d筮.己耳29:南北红,东西黄12mov c;瓦.Offf£h30si dw ODODOlOOOlOlOOOlb13delsy_pass;r T,南北绿,东西红14loop delay_pets3JZs2 dw OOOOODllO

43、aODllODb15adid si, 21*J -'J二南北黄,东西红16mov an, si|S3 dw OOOOOOlOiaODIDLOti17out dx, exs_end = $18mov crx, Offffh36end图5交通灯模拟程序2、4 编译编译采用MASM32、BUILD EXE(青根据实验一启行配置编译环境)。2、5运行设置好8086的Program File项后,即可运行或单步调试。运行时 ,交通灯可能闪烁过快 可以通过设置8086的Clock Frequency项降低8086的运行频率,从而更好的观瞧交通灯模拟 效果。2、6修改电路图若要交通灯的硬件控制地址为

44、0a00h,电路图应如何修改。请修改后运行(注意别忘了将源程序中硬件控制地址也改成0a00h)。2、7修改程序,贴近实际情况图5所示的程序在红绿黄灯亮时,延迟时间都就是一样的,实际情况应该就是,黄灯延迟时 间比较短,请修改程序重新编译,使交通灯运行效果更贴近实际情况。3 实验验收请将蓝字问题写在实验报告纸上。4 实验报告请将红字问题写在实验报告纸上。实验四硬件I/O控制1灯光控制应用本次实验模拟一个灯光控制应用,所需扩展电路如图1。采用八个开关 (:SWITCH)分别控制八个LED灯(一:LED-RED的亮灭(灯的颜色可以任意选择,图例中使用的都就是 LED-REDfe可以混用其它颜色的 LE

45、D灯)。OOOD- _yF.1217DE一科L罹442 U4:BY1I 亡 得血£用为1 g AEC y:人1,一mj m十二)REPACK'0* WB图1灯光控制应用电路扩展图1、1扩展电路设计分析(1)图中74273用来锁存从D0D1接受至IJ的控制LED灯的信号淇MR必须接高电平,否则 74273的Q0Q1会被复位(仅输出低信号,这样当CLK有上升沿电平跳变时,D0D1的数据可 被锁存并经由 Q0Q1稳定率出,从而控制LED等亮灭,1请问Q端输出高电平时,LED灯就是 亮还就是灭,为什么。(2)标记为“U2:B”的7427元件 淇输出给74273的CLK因此它用来操控就

46、是否将D端数据送给Q端以控制LED等亮灭,从其输入信号 A0J口可瞧出,若要其输出高电平,则A0,而都 要为低电平,观察完整电路图8086base部分,2回答什么样的地址能使 A0”1都为低电平,这 样的地址即可作为 LED灯的控制地址。除此之外还需要一个丽必须为低电平,这个条件由汇 编指令OUT满足,当CPU执行OUT指令时,WR被置为低电平。(3)图中两片74LS244为单向三态8位数据缓冲器。它们可将开关闭合的状态传导至数据 总线AD0、15,从而被CPU读取接收。其玩端为低电平时,A端的数据才能通过并由 Y端输 出。(4)标记为“U2:C”的7427,其输出通过一个反门连至两片74LS

47、244的1旧因此它用来操控就是否将8个开关的状态送至数据总线(由CPU接收)。观察其输入信号可得知,仅当A01成都 为低电平时,两片74LS277的员才能为低电平,请分析,3什么样的地址能使 A0,质者B为低电 平,这样的地址即可作为开关状态的读取控制地址。除此之外还需要一个而必须为低电平,这个条件由汇编指令IN满足,当CPU执彳T IN指令时R5被置为低电平。(5)可见观察到,图1中74273与两片74LS244均与数据总线(AD0、15)相连,这样,CPU 可以通过数据总线读取到开关的状态,并根据这些状态将 LED灯控制信号同样经由数据总线送给LED灯。1、2源程序及分析图2所示代码中从0

48、6行到11行为一个无限循环,循环中功能为:(1)将控制开关状态读取的地址赋值给dx;(2)使用in指令读取开关状态并存入al;(3)将控制LED等亮灭的地址赋值给 dx;使用out指令将al中存储的开关状态送到LED灯控制地址,从而控制灯的亮灭。01.model small 0in al, d支02.8086口 3mav d笈,0200h03.stack1CIciut dsf, al0411jinp entry05.5tertup12 data06entry:13end07inov dx, 0400h图2灯光控制应用汇编源程序1、3编译运行本次实验用编译环境为 MASM32、BUILD EXE

49、运行时将编译好的 exe文件指定给8086 芯片的Program File项即可。1、4观察实验现象1请单步执行,并记录每次单步时 A0,可、"、瓦、W&的电平状态(高电平:红色,低电 平:蓝色,高阻:灰色),只记录一轮循环即可。2连续运行,鼠标点击开关可改变其开合状态,请观察若要LED灯亮,就是闭合开关还就是断开开关,3若要反过来,电路应如何改造,并改造电路。2 实验验收请将蓝字问题写在实验报告纸上。3 实验报告请将红字问题写在实验报告纸上。接口芯片应用1 接口芯片的作用在实验四中,为了使八个开关分别控制八个LED灯,使用了 1片74273、2片74244、2片7427 以

50、及一些辅助元件,电路图较为复杂,设计效率不高。本次实验还就是利用八个开关控制八个LED灯,但使用8255可编程并行接口芯片来完成设计。电路图如图1,与实验四的电路图相比 ,应用8255 芯片后 ,电路图简洁了许多,实验四中使用的74273、 74244、 7427 等元件的功能由一片 8255 完全替代 ,提高了电路设计的效率,也更利于成品的小型化,低成本化。2 8255 可编程并行接口芯片简介2、1连接CPU数据总线的数据端口8255拥有一组与CPU进行数据交互的连接到数据总线的8位端口。2、 2 连接外部设备的数据端口8255 拥有 PA 口、 PB 口、PC 口三个8 位数据端口,用于连接到外部设备。这三组端口可做输入从外部设备(如本次实3的开关)获取数据到CPU也可做输出传送 CPU数据到外部设 备(如本次实验的LED灯),但注意,对于某个端口而言,不能同时做输出、输入。至于哪些端口 用于输出,那些端口用于输入,需要写程序进行设置。2、 3 设置数据端口工作状态使用 8255 时 ,需要先将8255 的三个数据端口设置为输入或输出。这个设置就是通过向8255 的控制字写入规定格式的数据实现的。在8255 上有 A1 、 A0 两个控制端口 ,当这两个端口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论