8086 IO读写操作
如图所示,通过8086来读写io口,实现流水灯以及开关。本电路是基于8086最小模式下的三总线结构添加的,三总线结构原理较为复杂本篇就不对其原理进行介绍了,大家可以自行查阅相关引脚的功能从而实现。
本文仅介绍io端口的实现,和代码逻辑部分。
概述:本文使用45h和40h两个端口,40h端口使用开关模拟白天或黑夜,45端口则控制LED的亮灭。
1.输出端口
输出口由译码电路、74ls373锁存器、以及8个LED灯构成。下面一一介绍。
(1).译码电路
译码电路使用的是基本门电路实现的,大家也可以使用可编程并行接口芯片8255来实现,这里不做介绍。
如图所示当使用指令out 45h,al时,RD引脚为低电压,(注意这是8086CPU的引脚,上面有一个横线表示低电平有效。文中的横线默认不标出。读者自行对比图片。相同的标签是连接到一起的本文的RD连接的是WR)M/IO为低电压。地址45H也就是0010 0101B,我们将相应位置的地址线接上一个非门,之后将地址接入到一个8输入的或门上,当地址是45h时,进行或运算的结果是0,其它地址则一定是1,
再将其与读写信号RD以及M/IO相连接。其输出引脚命名为OUT1,将其作为片选信号接入锁存器的LE引脚。这样,这个模块实现的功能是当8086对45h端口进行写操作时,OUT1为高电平,其它情况为低电平。
(2).锁存器
8086cpu共有16根数据线,当发送的地址是偶地址时,数据线的低8位有效,当发送奇地址时数据线的高8位有效。
OUT1接入LE,当LE为高电压时锁存器的数据可以被改写,LE为低电压时数据锁存。
(3)LED灯
LED采用的是共阴极的接法,当发送的数据是01h时,led0处的电压为12V,
LED的标压是2.2V,额定电流是10mA。
我们需要用一个电阻分走12-2.2=9.8V的电压。而额定电流是10mA,于是限流电阻应该是9.8X10x10e-2=0.98欧姆。
2.输入端口
输入端口的电路与输出端口类似就不一一介绍了。这里使用的是74HC245双向数据缓存器,AB/BA引脚控制数据的方向,高电平代表数据从A到B。低电平则相反。CE低电平时芯片有效。与上文的锁存器相反。所以直接用与门。
地址上40h的二进制是0100 0000B所以只需要将AB6接非门即可。由于是读操作。WR需要接一个非门。我们只需要用到一个Bit的数据,A1~A7接地即可。A0接开关。开关另一端接VCC。