前言
本系列文章讲述如何在仿真软件PROTEUS中对8086微机进行仿真实验。文章中使用仿真软件PROTEUS 8.6版本,编译软件为emu8086,仿真的8086微机工作在最小模式下。需要读者掌握基本微机及电路知识,并了解8086汇编基本指令及编程逻辑。本节内容为创建8086微机工程,并设计8086最小系统电路。
一、创建工程
首先打开PROTEUS软件,并选择新建工程。跟随新建工程向导设置文件名称及存放位置。 在原理图创建中选择默认即可。 由于我们主要目的为8086微机仿真,不涉及PCB布线及制作等工作,此处不创建PCB布板设计。 在创建固件选择中选择8086系列中的8086控制器。在编译器选择上,我们采用汇编语言进行编程,故采用MASM32(proteus内部并未集成相应的编译器,后续会讲解如何通过emu8086编译并链接编译文件。) 创建完成后会在原理图纸上得到8086微机,后续操作都将围绕此微机展开。
二、基本控制信号介绍
由于我们的微机仿真工作在8086最小模式下,故此部分只介绍最小模式时各引脚定义。
标号 | 类型 | 定义 |
---|
AD0-AD15 | I/O | 地址与数据信号传输端口,采用分时复用。 | A16-A19 | O | 在最小模式下输出16~19位地址信号。 |
BHE
 ̄
\overline{\text{BHE}}
BHE | O | 高8位读取控制,低电平有效。(低8位为A0) |
RD
 ̄
\overline{\text{RD}}
RD | O | 读有效,当8086从外部读取数据时为低电平。 |
WR
 ̄
\overline{\text{WR}}
WR | O | 写有效,8086需要想外部写数据时转换为低电平 | INTR | I | 中断请求信号,如需要触发中断则向此引脚发送高电平。 |
INTA
 ̄
\overline{\text{INTA}}
INTA | O | 中断应答,当INTR接收到中断请求并进行相应保护处理后,此引脚发出低电平以响应请求 | RESET | I | 重置,当此引脚收到低电平,则停止当前操作,program counter返回初始位置。 | CLK | I | 时钟信号,需外接晶振以提供微机时钟。(proteus的8086模型内置了时钟,故仿真时无需连接。) | MN/
MX
 ̄
\overline{\text{MX}}
MX | I | 模式选择引脚,需保持此引脚高电平以运行在最小模式下。 | ALE | O | 当8086的AD口输出地址信号时,此引脚变为高电平。 |
DEN
 ̄
\overline{\text{DEN}}
DEN | O | 当8086的AD口传输数据信号时,此引脚变为低电平。 | DT/
R
 ̄
\overline{\text{R}}
R | O | 数据方向选择引脚,高电平时传输,低电平时接收。 | HOLD,HOLA | I/O | 当其它芯片占用总线时通过此引脚与8086配合,一般用于DMA |
IO
 ̄
\overline{\text{IO}}
IO/M | O | 当8086访问内存时,此引脚为高电平,访问IO口时为低电平(此处与8088CPU正好相反) |
根据上表信息,可将8086CPU连接成如下状态。
三、8086最小系统搭建
由于proteus中已将RAM与ROM集成在8086内部,故搭建最小系统时只需处理地址锁存与数据缓冲部分即可。
1.数据缓冲
在8086系统中,数据缓冲主要功能是当DEN为低电平(传输数据)时,根据DT/R状态选择将数据传输方向,起到数据缓冲的作用。根据此要求,我们选择74HC245芯片作为数据缓冲芯片。该芯片可控制一字节信号的传输方向,并且双向均为三态门,可完美满足任务要求。该芯片引脚与功能如下图所示。 采用两个芯片组成16位缓冲器连接在总线上,将信号“过滤”为只含数据信号的数据总线。
2.地址锁存
8086总线输出的信号为地址与数据分时复用的多种信号,为保证访问外设时地址改变,需将地址锁存在新的地址总线中。此处采用74HC573锁存芯片。该芯片可实现有效8位锁存,并有较强的驱动能力,可在驱动多芯片时不掉电压。其电路结构图如下所示: 本系统共采用3块74HC573芯片锁存20位地址信号至新的地址总线中,其电路连接如下(最小模式中16~19位地址并不复用,也可以不做锁存处理。):
3.译码电路
由于RAM与ROM均已内置,故只需对IO口所接外设芯片地址译码,此处采用138译码器,并保证IO/M口低电压时有效。 (只对A5~8译码即可覆盖绝大多数常用IO外设的微机标准地址,故此处仅设计一个138译码器,后续其余功能若出现不足可再酌情增加。)
4.完整电路图
为方便后续验证电路连接是否正确,可在电路后端加一块74HC573锁存器。(片选信号需同时兼顾芯片片选与写入信号) 完整系统电路图如下:
四、系统实测
由于此微机系统较为基础,故尝试向74HC573中简单输入特定数据以检验系统是否可以正常工作。 由图可知,此573锁存器对应的地址为00C0H,试向其写入数据55H程序如下:
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT PUBLIC 'CODE'
ASSUME CS:CODE
START:
MOV DX, 00C0H
MOV AL, 55H
OUT DX, AL
ENDLESS:
JMP ENDLESS
CODE ENDS
END START
将上述程序在emu8086中编译并生成可执行文件后,双击仿真电路中8086芯片,在Program File选项中链接到生成的可执行文件上,即可运行仿真。 编译运行后得结果显示如下(红色为1,蓝色为0): 可见此系统正确输出了55H(01010101B)。
五、总结
本系统采用8086微机为控制器,74HC245为数据缓冲芯片,74HC573位地址锁存芯片,74HC138为地址译码器构建微机最小系统,并想=向00C0H地址处写入55H数据以检验系统正确性。
|