1、第8章 输入/输出方法及常用的接口电路 第8章 输入/输出方法及常用的接口电路 8.1 概述概述 8.2 I/O端口的编址及基本输入端口的编址及基本输入/输出方法输出方法 8.3 8255A并行接口电路并行接口电路 8.4 可编程计数可编程计数/定时器定时器8253/8254 8.5 串行通信及串行通信及8251串行接口电路串行接口电路 8.6 DMA控制器控制器8237A 8.7 多功能多功能I/O接口电路接口电路82380 第8章 输入/输出方法及常用的接口电路 8.1 概 述 图 8.1 主机通过I/O接口与外设交换信息 主机外部设备接口第8章 输入/输出方法及常用的接口电路 为什么主机
2、与外设交换信息要通过接口电路呢?这主要由于:(1)外部设备不能直接和CPU数据总线相连,要借助于接口电路使外设与总线隔离,起缓冲、暂存数据的作用,并协调主机和外设间数据传送速度不配的矛盾。因为在微机系统中,数据总线是各种设备以及存储器传送信息的公共总线。任何设备(包括存储器)都不允许长期占用数据总线,而仅允许被选中的设备在读/写周期中(RD或WR为低电平)享用数据总线。第8章 输入/输出方法及常用的接口电路 图 8.2 经接口电路传送数据(a)经接口输入数据;(b)经接口输出数据 A0输入接口A1CS(含三态输入)地址译码器A1A0ID7ID1ID08CPU数据总线A9A3A2IOR片选地址线
3、片内端口选择线(a)A0输出接口A1CS(含锁存器)地址译码器A1A0OD7OD1OD08CPU数据总线A9A3A2IOW片选地址线片内端口选择线(b)第8章 输入/输出方法及常用的接口电路 (2)接口电路为主机提供有关外设的工作状态信息及传送主机送给外设的控制命令。如输出时,CPU将信息送到接口以备输出;输入时,输入设备将数据送到接口寄存,以备CPU来读取。这些均由接口发出相应的信号来告诉外设或CPU。这些信号主要有“准备好”、“忙”、“闲”等。第8章 输入/输出方法及常用的接口电路 (3)借助于接口电路对信息的传输形式进行变换。一般CPU在处理数据时均以并行的方式处理,例如Z80-CPU以
4、8位一个字节为处理单位,但有的外设只能接受串行的,即一位一位传送的数据方式,此时就需要有一个接口来处理并行或串行数据的转换。在此应指出接口(Interface)和端口(Port)的区别。端口(简称口)这个术语实际上指那些在接口电路中完成信息的传送,并可由编程人员寻址进行读写的寄存器。若干个口加上相应的控制电路而构成接口。所以,一个接口往往含有几个端口。CPU可通过输入/输出指令向这些端口取或存信息。端口主要有两类:一类为状态口和命令口。状态口主要用来检测外设的工作状态。CPU通过输入指令来检测某一外设的工作状态,以决定下一步的操作,通常称此为输入(设备)状态字。第8章 输入/输出方法及常用的接
5、口电路 所以说状态字是描写外设所处状态的。CPU可通过输出指令向某一外设发出控制命令以控制相应的外设,通常称此为输出(设备)控制字。所以说控制字是控制外设实际操作的命令。控制字中每一位所具有的状态代表了某种操作命令。例如“启动(或停止)电机转动”,“步进电机转向”,“改变某种频率”等。另一类为数据口,它传送的是数据信息,如数字、字符及某种特定的编码等。第8章 输入/输出方法及常用的接口电路 图 8.3 外设通过接口与系统的连接 数据输入寄存器数据输出寄存器控制寄存器状态寄存器外部输入或输出设备数据线数据线状态线地址总线接口控制总线ABCB数据总线DB第8章 输入/输出方法及常用的接口电路 8.
6、2 I/O端口的编址及基本输入端口的编址及基本输入/输出方法输出方法 8.2.1 I/O端口的编址方法端口的编址方法 1.I/O端口的统一编址方式端口的统一编址方式 统一编址是将I/O端口看成是存储器空间的一个组成部分,按照存储器单元的编址方法统一编排地址号。这样,CPU对I/O端口的输入/输出操作如同对存储单元的读/写操作一样。对存储器的各种寻址方式也同样适用于对I/O端口。所有访问内存的指令同样都可用于访问I/O端口。统一编址的最大优点是无需专门的I/O指令,从而简化了指令系统的设计,并能省去相应I/O操作的对外引线。而且CPU可直接对I/O数据进行算术和逻辑运算。统一编址的不足之处在于I
7、/O端口地址占用了一部分存储器空间,另外访内指令长度一般比专用的I/O指令长,从而取指周期较长,又多占了指令字节。第8章 输入/输出方法及常用的接口电路 2.I/O端口的独立编址方式端口的独立编址方式 独立的I/O端口编址方式的特点是有一个与存储器地址空间完全独立的I/O地址空间。在这个空间内,每一个I/O设备的端口有一个唯一对应的I/O端口地址。这种独立的编址方式要求CPU有专用的I/O指令(IN及OUT指令),用于CPU与I/O端口之间的数据传输。Intel公司研制开发的CPU产品通常都设有IN、OUT指令。因此,80 x86 CPU组成的系统一般都采用独立编址方式。如8086/8088
8、CPU采用地址总线的低16位作为I/O端口的寻址地址线。因而IN、OUT指令可寻址216=65 536(64 K)个8位地址号的I/O端口,或32 K个16位的I/O端口。80386DX的地址总线是32位,则就有直接访问4 GB(232字节)的存储器空间或I/O空间的能力。80386以上的CPU I/O端口的地址号可以是双字(32位),指令中端口地址中的字传送到AX,端口地址+2中的高字则传送至EAX的高16位中。第8章 输入/输出方法及常用的接口电路 8086/8088 CPU组成系统时有最大、最小两种工作方式。在不同的方式下,8086/8088 CPU对I/O端口存取操作的控制命令有所不同
9、。最小方式对I/O端口的控制操作。在最小方式下,CPU的读命令(RD)和写命令(WR)对存储器和I/O端口的访问是公用的。当存储器地址空间和I/O端口地址号两者不重叠时,则仅用RD和WR信号就能区分CPU的访内及访外操作。如果两者的地址号发生重叠时,除了RD、WR信号外,还应与M/IO信号相配合来区分访内访外操作。当M/IO为低电平时为访外操作。第8章 输入/输出方法及常用的接口电路 最大方式对I/O端口的控制操作。在最大方式下,CPU是通过总线控制器8288分别产生存储器读/写命令和I/O读/写命令代替公用的M/IO信号。这样,对于独立编址的I/O端口而言,CPU只需通过总线控制器发出IOR
10、C或IOWC命令就可实现对I/O端口的读/写操作。大多数8位接口电路芯片中都有几个端口,通常各端口的地址号是连续排列的,则其中有奇地址也有偶地址。当8位接口芯片与8086 CPU 16位数据总线相连时,原则上讲,它既可以和数据总线的低8位相连,也可以和数据总线的高8位相连。但应注意低8位数据总线只能传送I/O为偶地址的端口数据,而高8位数据总线只能传送I/O为奇地址的端口数据。第8章 输入/输出方法及常用的接口电路 I/O端口仅使用偶地址。端口仅使用偶地址。图 8.4 只使用偶地址的I/O接口地址线连接方法 IORCIOWC系统低8位数据线D0D78A0A9地址译码器&RDWRD0A0A1A2
11、A1A0接口电路CS1D7第8章 输入/输出方法及常用的接口电路 I/O端口使用连续的地址。图 8.5 8位接口与16位数据总线的连接方法 D0D7TOEA8286TOEA828688地址译码器11RDCS811A0A1A0A1A9A0BHEIORCD7D0D15D82#1#接口电路D0D7D0D7第8章 输入/输出方法及常用的接口电路 8.2.2 I/O端口地址译码端口地址译码 1.固定式端口地址译码固定式端口地址译码 所谓固定式端口地址译码是指接口中用到的端口地址不能更改。目前,各种I/O功能接口卡中大部分都采用固定地址译码。当接口芯片仅有一个端口地址时,则可采用门电路组成地址译码电路。当
12、接口芯片中有多个端口,通常各端口的地址号是连续排列的,则采用译码器译码比较方便。译码器的型号很多,最常用的有3-8译码器,74LS138,8205;4-16译码器74LS154;双2-4译码器74LS139和74LS155等。用户可根据需要选用合适的译码器。第8章 输入/输出方法及常用的接口电路 表表 8.1 几种常用的通用译码器输入输出对应关系列表几种常用的通用译码器输入输出对应关系列表 第8章 输入/输出方法及常用的接口电路 图 8.6 IMB-PC系统板I/O地址译码电路 8-5ABCG2BG2AG174LS138DMACS(8237)INTCS(8259A)TICCS(8253)PPI
13、CS(8255)&WRTDMAPG(写DMA页面寄存器)&WRTNMIREG(写NMI屏蔽寄存器)A5A6A7A8A9AENIOW74LS32Y08-6Y1Y2Y3Y4Y5Y6Y7第8章 输入/输出方法及常用的接口电路 2.开关式可选端口地址译码开关式可选端口地址译码 1)使用拨动开关或跨接开关 在地址译码的基础上,通过线路板上的微型拨动开关DIP或跨接开关“跳线”连接。从而使得某个特定的I/O端口(或存储器)在一组线地址中选定当前所使用的译码地址,增加地址译码的灵活性。第8章 输入/输出方法及常用的接口电路 图 8.7 使用跳线开关选择I/O口译码地址 AENA3A4A5A6A7A91126
14、48A8&片选信号825074LS3074LS04U3U3U15U2第8章 输入/输出方法及常用的接口电路 2)使用比较器+地址开关译码 图 8.8 由比较器组成的可选式译码电路 74LS138Y0G1G2BG2AABCY774LS138Y0G1G2BG2AABCY774LS688P0P7COMPQ0Q6Q7+5V+5VDIPAENA9A0IOWIOR+5VP=Q第8章 输入/输出方法及常用的接口电路 图8.8所示为由比较器74LS688与3-8译码器组成的I/O芯片地址可选的译码电路。8位比较器74LS688对两组8位的输入端P0P7和Q0Q7信号进行比较。其比较规则为:当P0P7Q0Q7时
15、,P=1,输出高电平;当P0P7=Q0Q7时,P=0,输出低电平。第8章 输入/输出方法及常用的接口电路 应用时,可将P0P7与地址线及控制线相连,Q0Q7连接地址开关,而将比较器输出端P接到74LS138的控制端,如G2A上。根据比较器的特性,当输入端P0P7的地址与输入端Q0Q7的开关状态一致时,输出为低电平,打开译码器74LS138允许进行译码。因此,使用时可预置微型拨动开关DIP为某一值,得到一组所要求的口地址。图中让IOW和IOR信号参加译码,可分别产生8个读或写的端口地址。从图中连线可以看出,仅当A9=1(因Q6接+5 V),AEN=0(因Q7接地)才使译码有效。第8章 输入/输出
16、方法及常用的接口电路 8.2.3 基本的输入基本的输入/输出方法输出方法 在微机系统中,微机与外设之间的信息传送,实际上是CPU与接口之间的信息传送。传送的方法,一般可分为 3 种方式:(1)程序控制的输入/输出方式。(2)程序中断的输入/输出方式。(3)直接存储器存取(DMA)方式。传送的方式不同,CPU对外设的控制方式也不同,从而使接口电路的结构及功能也不同,CPU与外设接口的连接方法也不同。在微机与外设之间的信息传送是接口设计中极为重要的问题。第8章 输入/输出方法及常用的接口电路 1.程序控制的输入程序控制的输入/输出输出 程序控制的输入/输出方式是指在程序的编制中利用I/O指令来完成
17、CPU与接口间交换信息的一种方式。何时进行这种信息传送是事先知道的,所以能把I/O指令插入到程序中所需要的位置。根据外设性质的不同,这种传送方式又可分为无条件传送及有条件传送两种。(1)无条件传送。当程序执行到I/O指令时,无条件地立即执行I/O指令相应的操作,如图8.9所示。第8章 输入/输出方法及常用的接口电路 图 8.9 无条件数据传送 数据传送程序第8章 输入/输出方法及常用的接口电路 (2)有条件传送。这种传送方式如图8.10所示。CPU在传送数据之前应检查外设是否已作好收发数据的准备(Ready)工作,若设备已“准备就绪”,则可接着进行数据传送。为用这种方式传送数据,一般要用3条有
18、如下功能的指令来完成。将描述外设工作状态的信息(如“准备好”)状态字读入CPU相应的寄存器中。检测相应的状态位,以检查外部设备收发数据的准备工作是否“准备就绪”。若外部设备没有“准备就绪”,则重复执行、步骤,等待“准备就绪”;若外设“准备就绪”,则可执行预定的数据传送。第8章 输入/输出方法及常用的接口电路 图 8.10 有条件数据传送 数据准备好没有?数据传送输入状态字YN第8章 输入/输出方法及常用的接口电路 2.程序中断的输入程序中断的输入/输出方式输出方式 程序控制的输入/输出方法是由CPU来查询外设的状态,CPU处于主动的地位;外设处于被动的地位;而程序中断的输入/输出则是外设处于主
19、动地位,CPU处于被动地位。只有当外设要传送数据时才向CPU发出中断请求信号。实时性比程序控制的输入/输出要好得多。但它仍有缺点,主要是:为了能接受中断的请求信号,CPU内部要有一些线路来控制。利用中断输入/输出,每传送一次数据就要中断一次CPU。CPU响应中断后,每次都要执行“中断处理程序”,而且在其中都要保护现场、恢复现场,这相当麻烦,浪费了很多不必要的CPU时间。故此种传送方式一般较适合于传送少量的输入/输出数据。对于大量的输入/输出数据可采用高速的直接存储器存取方式DMA。第8章 输入/输出方法及常用的接口电路 3.直接存储器存取方式直接存储器存取方式(DMA)图 8.11 典型的DM
20、A传送流程图 外设通过DMAC向CPU申请DMA请求CPU响应DMA请求交出总线控制权从源口地址中读取数据将数据写到目标口数据传送结束否?DMA结束修改地址指针YN第8章 输入/输出方法及常用的接口电路 实现DMA传送的基本操作如下:外设可通过DMA控制器向CPU发出DMA请求;CPU响应DMA请求,把总线控制权交给DMA控制器,使系统转变为DMA工作方式;由DMA控制器发出I/O数据的存储地址,并决定传送数据块的长度;执行DMA传送;DMA操作结束,并将控制权交还给CPU。第8章 输入/输出方法及常用的接口电路 8.3 8255A并行接口电路并行接口电路 8.3.1 8255A的结构与功能的
21、结构与功能 图 8.12 8255A内部结构框图及引脚排列(a)内部结构图;(b)引脚图A组口A(8)A组口C(高4)B组口C(低4)B组口B(8)I/OPA7PA0I/OPC7PC4I/OPC3PC0I/OPB7PB0A组控制B组控制数据总线缓冲器读/写控制逻辑RDWRA1A0BESETCS(a)PA3PA2PA1PA0RDCSGNDA1A0PC7PC6PC5PC4PC0PC1PC2PC3PB0PB1PB215101520PA4PA5PA6PA7WRRESETD0D1D2D3D4D5D6D7VSSPB7PB6PB5PB4PB32125303540(b)8位内部总线8255A18255第8章
22、输入/输出方法及常用的接口电路 1.3 个并行输入个并行输入/输出端口输出端口(A口、口、B口、口、C口口)3 个端口的功能全部由程序设定,每个端口都有自己的功能特点。A口、B口通常可当作独立的I/O口使用;C口也可以用作一般的I/O端口,但当A口、B口作为应答式(选通式)I/O口使用时,它分为2个4位端口:A组C口(或上C口)和B组C口(或下C口),分别用来作为A口、B口应答式I/O工作时,提供输出控制信息及输入状态信息之用。各端口的功能如表8.2所示。第8章 输入/输出方法及常用的接口电路 表表 8.2 8255A端口功能表端口功能表 第8章 输入/输出方法及常用的接口电路 2.读读/写控
23、制逻辑写控制逻辑 读/写控制逻辑的功能用于管理数据、控制字或状态字的传送。与此部分有关的信号为:片选信号CS和来自地址总线信息(A1、A0)以及有关控制信号,如RD、WR、RESET。其中:A1、A0:端口选择信号。8255A内部共有4个端口:3个数据端口和1个控制端口。规定A1A0为00、01、10和11时,分别选中端口A、B、C和控制端口。A1A0和RD、WR、CS信号相配合可对各端口实现输入/输出操作,其功能见表8.3。当与8086系统16位数据总线的低8位(D7D0)相连时,8255A的A0、A1线分别与CPU的A1、A2地址线相连,而地址总线A0设置为“0”,从而8255A的端口地址
24、为偶地址。RESET:复位信号,高电平有效。有效时将控制字寄存器清零,所有的端口均被置成输入方式。第8章 输入/输出方法及常用的接口电路 表表 8.3 8255A端口选择及操作功能表端口选择及操作功能表 第8章 输入/输出方法及常用的接口电路 3.A组和组和B组控制电路组控制电路 这两组接受来自CPU的读/写控制逻辑部分的信号和CPU发出的控制字,然后分别决定各端口的功能。A组控制电路控制A口及A组C口(PC7PC4),B组控制电路控制B口及B组C口(PC3PC0)。还可根据控制字的要求,对端口C的某位实现“置0”及“置1”的位操作。第8章 输入/输出方法及常用的接口电路 4.数据总线缓冲器数
25、据总线缓冲器 这是一个双向三态的8位缓冲器,用于和系统的数据总线D7D0相连。输入输出的数据以及CPU发出的控制字及读入的状态字都是通过此缓冲器传送的。在8086系统中,采用16位数据总线,通常8255A的D7D0是接于16位数据总线的低8位上。第8章 输入/输出方法及常用的接口电路 8.3.2 工作方式的选择及其功能工作方式的选择及其功能 8255A有3种基本工作方式,而且对C口各位又可以进行按位操作。这些都由CPU输出到8255A来控制。8255A的控制字分为两种:一种是各端口的“工作方式选择控制字”。它可以使8255A的三个端口工作于不同的工作方式。方式选择控制字总是将三个端口分为两组来
26、设定工作方式,即A口和C口的高4位(A组C口)作为一组,端口B和C口的低4位(B组C口)作为另一组。另一种控制字是“端口C按位置1/置0控制字”。它可以使C口中的任何一位进行置“1”或置“0”操作。第8章 输入/输出方法及常用的接口电路 口C(低半)1=输入 0=输出 口B 1=输入 0=输出方式选择 0=方式0 1=方式1B组 口C(高半)1=输入 0=输出 口A 1=输入 0=输出方式选择 0 0=方式0 01=方式1 1=方式2A组设定工作方式标志1=有效D7D6D5D4D3D2D1D0(a)控制字图 8.13 8255A两种工作方式控制字格式(a)工作方式选择控制字;第8章 输入/输出
27、方法及常用的接口电路 图 8.13 8255A两种工作方式控制字格式(b)置位/复位控制字 D7D6D5D4D3D2D1D0控制字位置1/位置01=置1 0=置00123456701010101B000110011B100001111B2位选择位置1/置0标志0=有效任意(b)第8章 输入/输出方法及常用的接口电路 假设我们要求8255A的各个端口工作于如下方式:A口方式0输出;B口方式0输入;A组C口(PC4PC7)方式0输出;B组C口(P C0 P C3)方 式 0 输 入,则 相 应 的 方 式 选 择 控 制 字 为10000011B(83H)。设8255A控制端口的地址为D6H,则在
28、8086系统中,对8255A的初始化程序为 MOV AL,83H ;将控制字送入AL。OUT 0D6H,AL ;控制字写入到指定的控制端口中。第8章 输入/输出方法及常用的接口电路 对端口C的置位/复位功能主要用于通过C口某位输出高/低电平控制信号。当要通过置1/置0控制字对C口PC6位实现置0操作时,控制字为00001100B(0CH)。控制字的D0位用于区分是置1还是置0操作,但究竟对C口的哪一位进行相应操作则由控制字中的D3、D2、D1决定。现为PC6位,则对应为110代码。此时,对PC6置0操作的初始化程序为MOV AL,0CH ;对PC6位实现置0操作。OUT 0D6H,AL 第8章
29、 输入/输出方法及常用的接口电路 1.工作方式工作方式0 方式0也叫基本输入/输出方式。它适用于无需应答(握手)信号的简单的无条件输入/输出数据的场合,即输入/输出数据处于准备好状态。这时CPU可以随时从端口中写入或读取数据。在这种方式下,A口、B口可以通过由CPU对8255A相应的方式选择控制字,规定为输入口或输出口;端口C也同样由方式选择控制字分别规定A组C口、B组C口为输入口或输出口。第8章 输入/输出方法及常用的接口电路 2.工作方式工作方式1 方式1也称为选通型(应答式)输入/输出方式。和方式0相比,它最主要的特点是当A口、B口工作于方式1时,要利用A组C口、B组C口的端线作为A口、
30、B口选通型工作时提供所需的选通信号或提供有关的状态信号之用。现分输入及输出两种情况说明。(1)方式1输入。当A口、B口工作于方式1输入时,端口C控制信号的定义如图8.14(a)所示。图中还给出了相应的方式选择控制字格式。C口所提供的控制信号说明如下:第8章 输入/输出方法及常用的接口电路 图 8.14 8255A工作方式1及时序图(a)方式1输入;(b)方式1输出 PA7PA0PC4PC5PC3PC6,7INTEA&8STBAIBFAINTRAI/O21011I/OD7D6D5D4D3D2D1D0控制字PC6,71=输入0=输出RDPB7PB0PC2PC1PC0INTEB&8STBBIBFBI
31、NTRB111D7D6D5D4D3D2D1D0控制字RDSTB端口(外设)数据D0D78255输入缓冲寄存器(8)IBFINTRIOR(a)第8章 输入/输出方法及常用的接口电路 图 8.14 8255A工作方式1及时序图(a)方式1输入;(b)方式1输出 PA7PA0PC7PC6PC3PC4,5INTEA&8OBFAACKAINTRAI/O21010I/OD7D6D5D4D3D2D1D0控制字PC4,51=输入0=输出WRPB7PB0PC1PC2PC0INTEB&8OBFBACKBINTRB110D7D6D5D4D3D2D1D0控制字WRACKINTR8255输出缓冲器(8)端口(外设)数据
32、D0D7IOW(b)方式1(口B)OBF方式1(口A)第8章 输入/输出方法及常用的接口电路 3.工作方式工作方式2 图 8.15 8255A工作方式2及时序图 11I/O I/O I/OD7D6D5D4D3D2D1D0控制字PC261=输入0=输出口B1=输入0=输出B组方式0=方式01=方式1PC3PA7PA0PC7PC6PC4PC5PC2PC0&1INTE1INTE2&INTRA8OBFAACKASTBAIBFAI/O3RDWR后续第8章 输入/输出方法及常用的接口电路 图 8.15 8255A工作方式2及时序图 IOWOBFAINTRAACKASTBAIBFA接I/OD0D7IOR数据
33、从I/O到8255A口数据从8255A口到I/O第8章 输入/输出方法及常用的接口电路 4.8255A的状态字格式的状态字格式 图 8.16 几种状态字格式(a)、(b)方式1输入、输出状态字格式;(c)、(d)A组为方式2,B组为方式1的输入、输出状态字格式 I/OI/OIBFAINTEAINTRAINTEBIBFBINTRBD7D6D5D4D3D2D1D0A组B组(a)OBFAINTEAI/OI/OINTRAINTEBOBFBINTRBD7D6D5D4D3D2D1D0A组B组(b)第8章 输入/输出方法及常用的接口电路 图 8.16 几种状态字格式(a)、(b)方式1输入、输出状态字格式;
34、(c)、(d)A组为方式2,B组为方式1的输入、输出状态字格式 OBFAINTE1IBFAINTE2INTRAINTEBIBFBINTRBD7D0A组B组(c)OBFAINTE1IBFAINTE2INTRAINTEBOBFBINTRBD7D0A组B组(d)第8章 输入/输出方法及常用的接口电路 8.3.3 8255A应用举例应用举例 例例 8.1 利用8255A作为输出设备打印机的接口。其连接方法如图8.17(a)所示。当主机需要打印输出时,先测试打印机忙(Busy)信号。若打印机处于忙状态(如正在处理一个字符或正在打印一行字符),则Busy为高电平“1”,反之,则Busy为低电平“0”。当B
35、usy=0时,则CPU可通过8255A向打印机输出一个字符,此时还需经PC6输出一个负脉冲选通信号,输出至打印机的STB端,用此负脉冲(宽度1 s)将PA0PA7上的字符信息打入锁存于打印机输入缓冲器中,由打印机进行处理。同时,打印机应送出Busy=1信号,表示打印机处于忙状态。一旦Busy=0,则表示打印机处理完毕,又可以接收一个新的字符数据。第8章 输入/输出方法及常用的接口电路 图 8.17 8255A用作打印机接口及打印机时序(a)8255A与打印机的连接;(b)打印机时序 PA0PA78RESETPC6PC2RDWRA1A0D0D7D0D7RESETIORIOWA1A0D0D7STB
36、Busy打印机GA9A8A7G2BG2A1A6AENA5CBAA4A3A2Y0CSPB0PB788255数据STROBEBUSY(a)(b)&74B8第8章 输入/输出方法及常用的接口电路 为此,8255A端口A的8条并行数据线PA0PA7作为数据传送通路,A口应工作于方式0输出,端口B不用。端口C也工作于方式0,PC2作为Busy信号输入端,所以C口PC3PC0应设定为输入方式;PC6作为STB选通信号输出端,故PC7PC4应设定为输出方式。现根据图8.17中8255A的寻址信号,8255A的端口地址为:端口A:0380H;端口B:0381H;端口C:0382H;控制寄存器端口:0383H。
37、8255A接口的初始化及控制程序编制如下:第8章 输入/输出方法及常用的接口电路;8255初始化程序BEGIN:MOV AL,10000001B ;送工作方式选择控制字至控制寄存器中。A、B、C口均为 工作方式0。A口、B口 为输出方式。PC4PC7为输出,;PC0PC3为输入。MOV DX,0383H OUT DX,AL MOV AL,00001101B ;送C口置1/置0控制字,置PC6=1。OUT DX,AL ;使STB初始状态为高电平。第8章 输入/输出方法及常用的接口电路;下面为控制程序,设欲打印的字符已存于CL中,经8255A的A口输出至打印机。CONP:MOV DX,0382H;
38、从C口检测Busy=0否,若等于1,则等待;等于0则可送打印字符。LPST:IN AL,DXH;读入C口值。AND AL,04H;保留PC2(Busy)状态。JNZ LPST;若Busy=1,则等待,等于0则向下执行。MOV AL,CL;将(CL)字符送A口。MOV DX,0380H OUT DX,AL MOV AL,0CH;送C口置1/置0控制字,置PC6=0,即使STB为低电平。第8章 输入/输出方法及常用的接口电路 MOV DX,0383H OUT DX,AL MOV CX,XXH;为使STB宽度1 s,送延时程序。EDLAY:DEC CX JNZ DELAY MOV AL,0DH;再使
39、STB为高电平。;地址指向控制口。OUT DX,AL ;向下执行后续程序。第8章 输入/输出方法及常用的接口电路 例例 8.2 利用8255A实现与10位A/D转换器和10位D/A转换器的接口。图8.18为8255A与A/D、D/A的接口相连方法。图中10位A/D变换由START输入一个正脉冲启动,开始将UA变换为数字量,BUSY变高。当A/D这次变换结束,BUSY变低告之CPU可从A/D变换器的D0D9端上获得稳定的数字量。D/A变换器是由STB负脉冲将加在D0D9上的10位数字量锁存于D/A变换器内部,并且将其变换成模拟电压输出。第8章 输入/输出方法及常用的接口电路 D0D1D2D3D4
40、D5D6D7D8D9BUSYSTART10位A/DD0D1D2D3D4D5D6D7D8D9STB10位D/APA0PA1PC2PC4PC7PC6PA7总线边CPUUAPB0PB1PC3PC1PC0PB7-+UOULT图 8.18 8255A与A/D、D/A转换器的接口第8章 输入/输出方法及常用的接口电路 为了实现8255A与这两个芯片如图所示的连接,应将8255的A组和B组均初始化工作在方式0之下。而且A口和C口的高4位初始化为输入;B口和C口的低4位初始化为输出。只有这样才能满足如图连接上的要求。这时的方式控制字应为:10011000B,即98H。故为了启动A/D变换,应从C口的PC2送出
41、一正脉冲,这可利用位操作控制字来完成。初始化时应先将PC2输出置为0。当要启动A/D变换时,可选送00000101B控制字到控制寄存器,置PC2=1;再对C口送00000100B置PC2=0,实现对A/D的启动。以同样的原理,D/A转换在初始化时将PC3输出为高,利用位操作字同样可以形成D/A变换器的负锁存脉冲。第8章 输入/输出方法及常用的接口电路 若8255A与CPU系统的地址信息连接仍同图8.17所示,则对8255A的初始化编程如下:MOV DX,0383H;送方式选择控制字到8255控制寄存器。MOV AL,98H OUT DX,AL MOV AL,00000100B;使PC2输出初始
42、时为低电平。OUT DX,AL 第8章 输入/输出方法及常用的接口电路 在初始化8255A之后,若要启动A/D变换一次,并将变换的10位数字量放在DX的低10位中,其高6位应为0,其程序可以如下编写:MOV DX,0383H MOV AL,00000101B;PC2=1,使START为高电平,启动A/D转换。OUT DX,AL MOV AL,00000100B OUT DX,AL;置PC2=0,使START为低。DEC DX;(DX)=0382,指向C口。第8章 输入/输出方法及常用的接口电路 WAIT:IN AL,DX;等待A/D转换结束(PC4=0)。AND AL,20H JNZ WAIT
43、 IN AL,DX;由C口读取A/D转换的D9、D8位。AND AL,0C0H MOV CL,AL;D9、D8位值暂存CL的D7、D6中。DEC DX;(DX)=0380H,指向A口。DEC DX IN AL,DX;由A口读取D7D0位转换值。MOV AL,AL;D7D0位值存DL中。ROL CL,1;CL中D7、D6值移至D1、D0位中完成10位A/D转换值;的装配,存DX中。ROL CL,1 MOV DH,CL 第8章 输入/输出方法及常用的接口电路 在完成上述指令时,10位A/D变换器的数字量就存放在DX中。同时,A/D变换器处于就绪状态,可以接收下一次变换的启动信号。至于D/A变换器,
44、情况就更简单一些。首先将要变换的10位数字量写入8255A的B口和C口的PC0、PC1,C口的两位应为数字量的高二位,B口的8位为数字量的低8位。然后,利用位操作控制字产生一个负的STB锁存脉冲就可以了,程序从略,读者可以自己完成此程序的编写。第8章 输入/输出方法及常用的接口电路 8.4 可编程计数可编程计数/定时器定时器8253/8254 8.4.1 8253的组成与功能的组成与功能 图 8.19 8253/8254内部结构框图及引脚图(a)结构框图;(b)引脚图 CLK0GATE0OUT0计数器#0(CNT0)计数器#1(CNT1)CLK1GATE1OUT1计数器#2(CNT2)CLK2
45、GATE2OUT2数据总线缓冲器读/写逻辑控制字寄存器WRRDA0A1CS(a)1234567891011122423222120191817161514138253(8254)D7D6D5D4D3D2D1D0CLK0OUT0GATE0GNDVCCWRRDCSA1A0CLK2OUT2GATE2CLK1GATE1OUT1(b)内部总线D7D0第8章 输入/输出方法及常用的接口电路 1.3 个独立的个独立的16位计数器位计数器 图 8.20 8253/8254计数器内部逻辑框图 计数器0#控制寄存器计数器寄存器(CR)CRH CRL CEH CEL OLH OLL计数单元(CE)输出锁存器(OL)
46、计数器1#计数器2#VCCGNDGATE0CLK0OUT0GATE1CLK1OUT1GATE2CLK2OUT2+5VD0D7RDWR地址译码CS地址线A1A0第8章 输入/输出方法及常用的接口电路 2.控制命令寄存器控制命令寄存器 此寄存器用来保存来自CPU送入的控制字。每个计数器都有一个控制命令寄存器,用于保存该计数器的控制信息。控制字将决定计数器的工作方式、计数形式及输出方式,亦能决定应如何装入计数器初值。8253的 3 个控制寄存器只占用一个地址号,而靠控制字中最高二位来指定当前的控制字是发给哪个计数器的。控制寄存器只能写入,不能读出。第8章 输入/输出方法及常用的接口电路 3.读读/写
47、逻辑写逻辑 读/写逻辑的任务是接收来自CPU的控制信号,完成对8253各计数寄存器的读/写操作。这些控制信号包括读信号RD、写信号WR、片选信号和片内寄存器寻址信号A0、A1。第8章 输入/输出方法及常用的接口电路 4.数据总线缓冲器数据总线缓冲器 这是一个双向、三态8位缓冲器。它用于8253和系统数据总线连接。CPU通过数据总线缓冲器将控制命令字和计数值写入8253计数器,或者从8253计数器中读取当前计数值。8253的8位数据线D0D7通常与系统数据总线D0D7相连。8253共占用4个I/O地址。当A1A0=00时,为计数器0中的CR和OL寄存器的共用地址。同时,当A1A0=01和10时,
48、分别为计数器1和2的CR和OL的共用地址。当A1A0=11时,是3个计数器内的3个控制寄存器的共用的地址号。但CPU给哪一个计数器送控制字,这由控制字格式中最高两位(计数器选择位)SC1、SC0的编码来决定。第8章 输入/输出方法及常用的接口电路 表表 8.4 8253端口的地址分配端口的地址分配 第8章 输入/输出方法及常用的接口电路 8.4.2 8253的控制字、的控制字、读读/写操作和初始化编程写操作和初始化编程1.8253的控制字格式的控制字格式 SC1SC0RL1RL0M2M1M0BCDD7D6D5D4D3D2D1D0进制方式0:二进制计数1:十进制计数00:选计数器0的 控制寄存器
49、01:选计数器1的 控制寄存器10:选计数器2的 控制寄存器11:非法值RL1RL000:将计数器CE中的数据锁存到输出锁存器OL中(锁存功能)01:选计数器的低8位字节读或写10:选计数器的高8位字节读或写11:计数器16位操作(先低8位字节,后高8位字节读或写)设定读写方式M2M1M00011001100010101方式0方式1方式2方式3方式4方式5工作方式选择功能图8.21 8253控制字格式第8章 输入/输出方法及常用的接口电路 2.8253的读的读/写操作写操作 (1)读操作。所谓读操作是指读出某计数器的计数值至CPU中。有两种读数方法。先使计数器停止计数(在GATE端加低电平或关
50、闭CLK脉冲):根据送入的控制字中RL1、RL0的状态,用一条或两条输入IN指令读CE的内容,通常第一次读低字节(LSB),第二次读出高字节。实际上,CPU是通过输出锁存器OL中读出的,因为在计数过程中OL的内容是跟随CE内容变化的。此时由于CE不再计数,故可稳定地读出OL(即CE)的内容。第8章 输入/输出方法及常用的接口电路 在计数过程中不影响CE的计数而读取计数值:这称为“飞读”方法。为达此目的,应先对8253写入一个具有锁存功能的控制字,即D5D4位(RL1、RL0)应取00,而其余位不变。这样就可将当前的CE内容锁存入OL中,然后再用两条输入指令将OL中的内容取到CPU中,从而实现“