在微机的硬件系统中,除了CPU、存储器之外,还必须有输入/输出设备(即I/O设备或称外部设备或称外围设备,简称外设)。计算机通过外设与外界进行人机通信操作。计算机所用的程序、数据以及现场采集的各种信息都要通过输入设备输入计算机,而计算的结果和计算机产生的各种控制信号都要输出到各种输出装置或受控部件才能起到实际的作用。但是,一般来讲,计算机的三总线(AB、DB、CB)并不是直接与外设相连接,而是外设先通过输入/输出接口电路(即I/O接口,或称外设接口),再接到三总线与系统相连,只有在I/O接口的支持下才能实现各种方式的数据传送。
1.I/O 接口电路的定义
CPU要通过I/O接口电路与外设交换信息。I/O接口(电路)是位于系统的主机(包括CPU、内存、三总线等)与外设之间、用来协助完成数据传送和控制任务的逻辑电路。它相当于主机与外设之间的“桥梁”,如图5-1所示。
图5-1 I/O接口电路的示意图
2.I/O接口电路的作用
与CPU交换信息更频繁的不是外设,而是内部存储器(包含ROM或RAM,简称内存),CPU与内存的连接并不需要通过任何接口电路,而是直接通过三条总线相连。那么,为何CPU不能通过三条总线直接与外设相连,而一定要通过I/O接口(电路)呢?其主要原因如下:
(1)协调高速工作的主机与速度较低的外设的速度匹配问题。外设的一个普遍特点是工作速度较低,例如一般的打印机打印一个印刷字符需要几十毫秒,而主机向外输送一个字符的信息只需若干微秒,两者工作速度的差别为几百倍甚至几千倍。另一方面,微机系统的数据总线DB是与各种设备以及存储器传送信息的公共通道,任何设备都不允许长期占用,而仅允许被选中的设备在主机向外传送信息时享用DB,在这么短的时间内,外设不可能启动并完成工作,相当于打印机刚要开始打印,字符信息就消失了,使打印成为不可能。因此,向外传送的数据必须有一个锁存器加以保存,主机的CPU将数据传送到锁存器后就不必等待外设的动作,可以继续执行其他指令。外设则从锁存器中取得数据,时间长一些也没有问题。这种数据锁存器就是一种最简单的接口电路。锁存器除了与DB相连外,还要受CPU的控制,以确定何时向这个接口电路传送数据。
(2)传送输入/输出过程中的状态信号。由于主机与外设工作速度的差异,使得主机不能够随意地向外设传送信息。在输出信息时,主机必须在外设把上次送出的信息处理完(例如打印)以后再传送下一个信息;在输入信息时,主机也必须知道外设是否已把数据准备好,只有准备好时才能进行输入操作。也就是说,主机在与外设交换数据之前,必须知道外设的状态,即是否处于准备就绪的状态,而这种状态信息的产生或传递也是接口电路的任务之一。这种状态信息的交互,有时候是双向的,即主机还要向外设提供状态信号。在接口电路中,主机与外设之间状态信号的配合,特别是时间上的配合,将是接口设计中最主要的任务之一。当然,状态信号的真正的产生还是由外设决定的,接口电路只是作为桥梁来传递这种信号。
(3)解决主机信号与外设信号之间的不一致。主机信号与外设需要或提供的信号在许多场合是不一致的。这种不一致往往是指信号电平、码型的不一致。此时接口电路就是用来进行电平转换和码型转换的。例如,电传电报信号的电平高达几十V,采用的电码也为5单位码,而计算机的电源电压只有5V,必须通过接口电路两者才能连接;又如,串行口所采用的逻辑系统是负逻辑,负电平为逻辑“1”,正电平为逻辑“0”,与微机所采用的正逻辑完全不一致,也必须通过接口电路的转换,两者才能连接;此外,主机送出的信号都是并行数据,而对于外设来讲,有的只能接受一位一位传送的串行数据,完成这种并串、串并变换也是某种接口的功能,这种接口一般称为串行接口;有时外部提供的信号是模拟信号,而微机信号是数字信号,也是不能直接连接的,此时A/D,D/A转换接口是必不可少的。
总之,I/O接口电路主要是为了解决主机与外设工作速度不一致、信号不一致而不得不采用的。对于内存来讲,其信号和微机的CPU是完全一致的,只要存取速度能满足微机CPU要求的前提下,可以直接互连。若内存的存取时间较长或速度太低,则仍然要采取其他措施来解决与微机CPU的速度匹配问题。当然这种解决办法比较简单,远没有微机与外设的接口那样复杂。
3.I/O接口电路的功能
设置I/O接口的主要目的就是解决主机与外设之间的这些差异,I/O接口不但应该负责接收、转换、解释并执行CPU发来的命令,而且应能将外设的状态或请求传送给CPU,从而完成CPU与外设之间的数据传输。I/O接口应具有的主要功能有:
(1)主机与外设的通信联络控制功能。由于主机与外设的工作速度有较大的差别,所以I/O接口的基本任务之一就是必须能够解决两者之间的时序配合问题。CPU应能通过I/O接口向外设发出启动命令;外设在准备就绪时,应能通过I/O接口送回“准备好”信息或请求中断的信号。
(2)设备选择功能。微机系统中一般有多个外设,主机在不同时刻可能要与不同的外设进行信息交换,I/O接口必须能对CPU送来的外设地址进行译码以产生设备选择信号。
(3)数据缓冲功能。解决高速主机与低速外设矛盾的方法是在I/O接口中设置一个或几个数据缓冲寄存器或锁存器,用于数据的暂存,以避免因速度不一致而丢失数据;另一方面,采用数据缓冲或锁存也有利于增大驱动能力。有时I/O接口还需要能向CPU提供内部寄存器空或满的联络信号。
由于主机高速和外设低速之间存在差异,因此,对于数据输入接口,若外设有数据保持能力时,数据输入接口只需采用三态门使其具有数据缓冲功能即可,而若外设无数据保持能力时,则需用带有三态输出的锁存器来实现;而对于数据输出接口,需要采用三态锁存器实现。因此,输出接口一般应有锁存环节,而输入接口一般应有缓冲环节。
(4)信号格式转换功能。外设直接输出的信号和所需的驱动信号多与微机总线信号不兼容,因此I/O接口必须具有实现信号格式转换的功能,如电平转换功能、A/D转换功能、D/A转换功能、串/并转换功能、并/串转换功能、数据宽度变换功能等。
(5)错误检测功能。在很多情况下,系统还需要I/O接口能够检测和纠正信息传输过程中引入的错误。常见的有传输线路上噪声干扰导致的传输错误、接收和发送速率不匹配导致的覆盖错误等。
(6)可编程功能。可编程功能意味着I/O接口具有较强的通用性、灵活性和可扩充性,即在不改变硬件设计的条件下,I/O接口可以接收并解释CPU的控制命令,从而改变接口的功能与工作方式。
(7)复位功能。接收复位信号,使I/O接口本身以及所连的外设进行重新启动。
4.I/O接口电路的信号
一般来说,每连接一个外设,就需要一个I/O接口(Interface),但每一个接口都可以有不止一个端口(Port)。端口(简称口)是指那些在I/O接口电路中用以完成某种信息传送,并可由编程人员通过端口地址进行读/写的寄存器。
CPU与存储器之间通过数据总线DB所传输的信息只有1种,即数据。而CPU与接口之间通过DB传输的信息就有多种,它们有:
(1)数据信息。即要交换的数据本身,它当然是CPU与外设之间传输的最基本的信息。
(2)状态信息。即反映外设的工作是否处于准备好的状态。对输入接口而言,CPU是否准备好接收数据;对输出接口而言,外设是否准备好接收数据。
(3)命令信息。即控制外设工作的命令,CPU通过I/O接口向外设传送某种命令信息,例如,启动外设开始工作的命令等。
上面3种信息从形式上看都是二进制代码,如果没有特殊的规定,无法区分收到的信息是数据还是命令,或者是需要传送的状态。例如,微机向外设发送一个信息“00000001”,它有可能是数据信息“+1”,也可能是反映计算机的一种状态,这个状态由最低位是“1”还是“0”来表示,还可能通过最低位表示对外设的一种控制命令。如果没有其他的机制,外设收到这个信息无法区别它究竟代表什么。
由于不能从信息的形式上来区分交换的是什么信息,因此只好从空间位置上来加以区分,使一个接口上有若干个端口,也就是不同的寄存器,并规定这些端口分别是数据口、状态口和命令口3种。
只要送到数据口的二进制代码就是数据信息,而送到状态口或命令口的信息就一定是状态信息或命令信息。因此,一个接口在物理上就有若干个端口。当然,也不一定每个接口都要3种端口齐全,要视需要来配置。另外,每种端口的数目也可以不止一个,使得不同的接口芯片上的端口数可以差别很大,有的只有一两个端口,有的则有十几个端口,也是按需要来设置。
对于内存来说,一个单元有一个地址;而对于接口来说,由于一个接口有若干个端口,每一个端口都要分配一个地址,这样,一个接口就要分配若干个地址。CPU将不同的信息写到不同的端口地址,也从不同的端口地址来读取不同的信息。一个端口上还可以读、写几种不同的信息,例如,在同一个命令端口上写入几个不同的控制命令,此时要求写入的命令在形式上必须有各自的特征,以示相互之间的区别。
5.I/O接口电路的基本结构
图5-2为I/O接口电路的基本结构。
图5-2 I/O外设接口电路的基本结构
(1)I/O接口部件的I/O端口(数据端口、控制端口、状态端口)。CPU对I/O接口的访问实际上就是对接口中数据寄存器、状态寄存器和控制寄存器的访问。从含义上讲,数据信息、状态信息和控制信息应该分别传送和处理。但在微机系统中,从广义上讲,状态信息属于输入数据,控制信息属于输出数据,因此CPU与I/O接口之间各类信息的交换都是通过数据总线DB来进行的。在这种情况下,我们只有利用地址信号来区分各类信息,即根据CPU送出的不同地址将数据线上出现的数据与I/O接口内部的寄存器对应起来。换句话说,系统将给I/O接口中的寄存器分配地址,CPU可以通过不同的地址访问不同的寄存器,从而完成对接口的访问。
CPU向外设进行数据传输时,各类信息在接口中进入不同的寄存器,一般称这些寄存器为I/O端口,每个端口有一个端口地址。用于对来自CPU和内存的数据或者送往CPU和内存的数据起缓冲作用的端口,这些端口叫数据端口。用来存放外部设备或者接口部件本身状态的端口,称为状态端口。用来存放CPU发出的命令,以便控制接口和设备动作的端口,这类端口叫控制端口。
(2)I/O接口的外部特性。由于I/O接口电路位于CPU与外设之间,因此,它的引脚信号可分成两侧信号,即面向CPU一侧的信号和面向外设一侧的信号。
1)面向CPU一侧的信号:用于与CPU连接。不同的I/O接口这部分功能基本相同,主要提出数据、地址和控制信号,以便与CPU三总线相连。
2)面向外设一侧的信号:用于与外设连接。由于外设种类繁多,不同的I/O接口这部分功能相差很大,它提供的信号也是五花八门,其功能定义、时序及有效电平等差异较大。
6.I/O接口电路芯片的分类
I/O接口电路核心部分往往是一块或数块大规模集成电路芯片(接口芯片),它可采用下面3种接口芯片:
(1)通用接口芯片。支持通用的数据输入/输出和控制的接口芯片。
(2)面向外设的专用接口芯片。针对某种外设设计、与该种外设的接口。
(3)面向微机系统的专用接口芯片。与CPU和系统配套使用,以增强其总体功能。
7.I/O接口电路芯片的可编程性
许多I/O接口电路具有多种功能和工作方式,可以通过编程的方法选定其中一种。I/O接口除需进行硬件连接,还需要编写相应的接口软件。接口软件有下面两类:
(1)初始化程序段。设定芯片工作方式等;
(2)数据交换程序段。管理、控制和驱动外设,负责外设和系统间信息交换。(https://www.xing528.com)
8.I/O端口的编址方式
为了区分接口电路的各个寄存器,系统为它们各自分配了一个地址,称为I/O端口地址,以便对它们进行寻址并与存储器地址相区别。
CPU通过I/O接口与外设交换信息的过程和与存储器交换信息的过程很相似。例如,要传送状态信息,CPU先把状态口的地址送到地址总线AB上,选中了接口的状态口,然后发出读/写控制信号,实现信息交换。但从接口地址的安排上,I/O端口却存在与存储器统一编址和独立编址两种不同的方式可以选择。
(1)I/O端口与存储器之间的统一编址(也称存储器映象编址,简称统一编址)。它是指I/O端口与存储器共享一个寻址空间,也就是把I/O端口当做存储器单元来对待,即本来可以让存储器使用的寻址范围要分出一部分给外设寻址使用。这种编址方式的示意图如图5-3所示。从内存的寻址范围中划出一部分作为外设端口地址,例如,规定FF00H~FFFFH为I/O端口地址,这时,当地址总线上的地址属于这个范围时,硬件连接应保证能自动寻找到外设的某个端口,而不是错误地找到的存储器单元,此部分地址空间已让出位置来给I/O口了。
图5-3 I/O与存储器统一编址方式
此方式的优点:
1)I/O数据存取与存储器数据存取一样灵活,可以直接使用访问存储器的各种指令访问外设端口,使用方便,而且这类指令很多,如用运算指令就可直接对I/O口的数据进行算术或逻辑操作等。
2)不需要设置专门的输入/输出指令。
3)I/O寄存器数目与外设数目不受限制,而只受它们总存储容量的限制。
4)读写控制逻辑电路比较简单。
此方式的缺点:
1)I/O端口要占用存储器的部分地址空间,相对减少了存储器的可用空间。
2)尽管外设的地址范围不大(如只需255个端口),但仍然应该采用与存储器地址位数完全相同的地址线数(如16位)来对端口寻址,地址译码器会比较复杂些。
3)程序不易阅读,不易分清访问内存还是访问外设。
MCS-51单片机的I/O外设的编址就是采用这种方式。
(2)I/O端口单独编址(简称I/O独立编址)。它是指主存地址空间和I/O端口地址空间相互独立,分别编址。此时,外设的地址和存储器的地址没有关系。存储器的地址范围仍然由CPU地址总线的数目来决定。这种编址方式的示意图如图5-4所示。此方式另外再给I/O端口分配一组地址,具体的地址范围由CPU决定。例如,8086 CPU的存储器地址线是20条,存储器的寻址范围是00000H~FFFFFH(1MB),但对外设I/O寻址时,只用16条地址线,外设I/O的地址范围是0000H~FFFFH(64KB)。
图5-4 I/O单独编址方式
此方式的优点:
1)I/O端口的地址空间独立,且不占用存储器地址空间,主存和I/O端口的地址可用范围都比较大。
2)I/O端口地址线较少,控制和地址译码电路相对简单,且寻址速度相对较快。
3)采用专门的I/O指令,可使编制的程序清晰易读,便于理解和检查。
此方式的缺点:
1)I/O指令的功能一般比较弱,在I/O操作中必须借助CPU的寄存器进行中转。
2)I/O指令没有存储器指令丰富,导致程序设计的灵活性较差。
3)由于存储器的地址可能和接口的地址重叠,需要存储器和I/O端口两套控制逻辑,增加了控制逻辑电路的复杂性。
8086 CPU的I/O外设的编址就采用这种方式。
9.MCS-51单片机I/O接口的统一编址方式
MCS-51单片机采用的是外设I/O接口与数据存储器RAM统一编址,访问外设I/O接口和访问数据存储器应该使用相同的方式,即将外设当作数据存储器来访问。MCS-51单片机有内部I/O接口(也称片内I/O接口)、外部I/O接口(也称扩展I/O接口)之分。其中,内部I/O接口寄存器(如并行接口锁存器P0、P1、P2、P3,串行接口寄存器SCON、SBUF,定时计数器的寄存器TMOD、TCON、TH0、TL0、TH1、TL1,中断寄存器IE、IP等)在特殊功能寄存器SFR中,它们占用内部数据存储器RAM的高位地址空间(80H~FFH,高128B);而外部I/O接口使用外部数据存储器RAM地址空间(0000H~FFFFH,64KB)。
这主要体现在下面两个方面:
(1)MCS-51单片机对外设(即I/O接口)的连接方式与单片机对数据存储器RAM的连接方式是相同的。
在MCS-51单片机中,内部I/O接口与CPU之间的连接方式与内部数据存储器RAM与CPU之间的连接方式完全相同,这在制造单片机集成电路时已完全做好了,用户不需关注单片机内部是如何连线的。
在MCS-51单片机系统中,外部数据存储器RAM是通过单片机引脚上的控制线
和
与_单片机连接的,同样外部的I/O口也要通过
与单片机连接,这就是要将单片机的
脚与外部I/O接口的写控制线连接,单片机的
脚与外部I/O接口的读控制线连接。
MCS-51单片机的外部程序存储器ROM是通过控制线PSEN与单片机连接的。MCS-51单片机与外设I/O接口的连接不能采用这种连接方式,因为这种连接只能对外设读数据,而不能对外设写数据,显然这是不行的。另外,访问外部ROM的指令(MOVC)与访问外部RAM的指令(MOVX)也是不同的。
(2)MCS-51单片机通过访问数据存储器RAM的指令来访问I/O接口,也就是将I/O接口当作数据存储器RAM单元来访问。
MCS-51单片机访问内部数据存储器RAM的指令有:
MOV A,direct ;读内部存储器RAM
MOV direct,A ;写内部存储器RAM
其中,direct为内部RAM的直接地址,它可为低128B的内部RAM,也可为高128B中的SFR(如,内部I/O接口P0~P3等)。
MCS-51单片机访问外部数据存储器RAM的指令有下面两组:
1)当外部数据存储器RAM采用8位地址时,需要采用工作寄存器R i(i=0或1)的间接寻址指令来进行访问。
MOVX A,@Ri;读外部存储器
MOVX@Ri,A;写外部存储器
2)当外部数据存储器RAM采用16位地址时,用DPTR寄存器间接寻址指令进行访问。
MOVX A,@DPTR ;读外部存储器
MOVX@DPTR,A ;写外部存储器
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
