图7.1简单的外设接口系统总线I/O接口I/O设备数据寄存器状态寄存器控制寄存器地址选择与控制逻辑DBABCB控制命令状态数据输入/输出的控制方式是指以何种方式控制计算机的主机(包括微处理器、存储器等)与I/O接口之间进行数据传送。根据I/O设备与主机的并行工作程度,微型计算机的输入/输出控制方式主要有无条件传送方式、程序查询方式、I/O中断方式和DMA方式等四种。无条件传送方式典型的输入/输出接口形式:端口地址译码三态门数据总线A0~A9AENIOR1G2G地址选择读LS373锁存器LS244输入数据端口的典型结构无条件传送方式典型的输入/输出接口形式:输出数据端口的典型结构端口地址译码锁存器数据总线A0~A9AENIOW1G2G地址选择写LS373微处理器读I/O设备状态准备就绪微处理器从I/O接口读一个字微处理器向主完成否现行程序N现行程序启动I/O设备N存写入一个字程序查询方式的流程图准备就绪Y读I/O设备N的状态启动N个I/O设备读I/O设备1的状态读I/O设备2的状态准备就绪准备就绪完成I/O设备1的一次输入/输出操作Y完成I/O设备2的一次输入/输出操作Y完成I/O设备N的一次输入/输出操作对多个设备的程序查询流程当系统中有多个I/O设备进行输入/输出操作时,微处理器需要按照一定次序或优先级轮流查询这些I/O设备的状态,当某个I/O设备就绪时,则完成这个I/O设备的输入或输出操作,其流程如图7.6所示。由于微处理器需要轮流查询多个I/O设备的状态,所以当某个设备准备就绪时,微处理器并不一定能及时响应,特别是在I/O设备速度较快时,问题更加严重,所以程序查询方式的实时性也较差,通常只适合慢速设备的输入/输出操作。I/O中断方式启动I/O设备第K条指令第K+1条指令中断服务程序主程序I/O中断方式的过程I/O中断方式在I/O设备准备期间不需要微处理器“原地踏步”查询I/O设备的状态,而程序查询方式则是串行的,所以I/O中断方式充分利用了微处理器资源,提高了输入/输出操作的效率。当采用I/O中断方式实现系统中多个I/O设备的输入/输出操作时,利用硬件排队电路和中断屏蔽寄存器可以灵活地安排这些I/O设备的优先级,及时地对中断请求做出响应,因此也具有较好的实时性。与程序查询方式相比,实现I/O中断方式需要增加有关的软、硬件,比如接口中需要增加中断请求电路,系统中还要增加中断控制电路,实现优先级设置和判定、中断允许和屏蔽,以及产生中断向量地址等功能,因此I/O中断方式在一定程度上增加成本和复杂性。DMA传送方式HLDA发存储器地址传送数据DMA结束修改地址指针传送结束?YN一、I/O地址译码及译码电路在I/O地址译码中,采用的译码电路形式,也和存储器地址译码一样,有:门电路译码专用译码器译码数字比较器译码可编程逻辑器件(如CPLD/FPGA)译码等常用芯片的接口技术在I/O地址译码中,不管采用何种译码方式和译码电路形式,与存储器地址译码不同之处为参加译码的地址线的条数不同,以及参加译码的控制信号不同。下面给出了在不同的系统中进行I/O端口地址译码及I/O电路设计时,用到的总线信号:,,,,,,常用芯片的接口技术8088最小方式系统:8088最大方式系统:15070/AADDIOMRDWR,,,,15070AADDIOW,,IOR,8086最大方式系统:15015870AADDDD,,,,IORIOWBHE15015870AADDDD,,/MIORDWRBHE,,,8086最小方式系统:常用芯片的接口技术二、系统总线驱动及控制在较大的微机应用系统中,I/O插件板设计时要考虑系统总线的负载能力,必要时可以通过缓冲器或总线驱动来提高总线的负载能力。常用的缓冲器或总线驱动器有74LS373、74LS244(单向8位)和74LS245(双向8位)等。对单向的地址总线及控制总线的驱动可以74LS373、74LS244等芯片缓冲的方式。对双向系统数据总线的驱动与控制,要遵循下列原则:•只有当CPU读板内I/O端口时,驱动器指向系统总线的三态门才允许导通;•只有当CPU写板内I/O端口时,驱动器指向板内的三态门是导通的;•当CPU不去寻址板内I/O端口时,驱动器两边均处于高阻状态。例7.2在8086CPU工作在最小方式组成的微机系中.扩充设计一个数据输入端口,分配给该端口的地址8001H,输入端口芯片用74LS245,输入设备为8个乒乓开关。(1)画出此输入端口与8086系统总线以及与输入设备的连接图。(2)编写程序检测K0开关,若K0断开,程序转向PROG1;K0闭合,程序转向PROG2。常用芯片的接口技术A0B0A7B7DIRE~~74LS245D15~D810K×8A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1M/IOBHE+5VK0K7若K0开关断开程序转向PROG1,K0闭合程序转向PROG2的程序如下:MOVDX,8001HINAL,DXTESTAL,01HJZPROG2PROG1:···PROG2:······