8.1可编程并行接口8255
8.1.1并行通信的概念
1、并行通信与串行通信
并行通信:指数据的各位同时进行传送的通信方式,可以字或字节为单位并行进行。 特点是速度快,所用的通信线多、成本高,故不宜进行远距离通信。计算机内部各种总线都是以并行方式。
串行通信:指数据逐位顺序传送的通信方式。 特点是速度低,但只需要很少的通信线,适用于长距离而速度要求不高的场合。在网络中传送数据绝大多数采用串行方式。
2、并行接口
并行通信由并行接口完成,它与I/O设备或被控对象进行数据交换,以同步方式传输。
从并行接口的电路结构来看,它有硬连线接口和可编程接口之分。
(1)硬连线接口的工作方式及功能用硬连线的不同方式来设定,不能用软件编程的方法加以改变;
(2)可编程接口的工作方式及功能可以用软件编程的方法加以改变。
并行接口中包括状态信息、 控制信息和数据信息,这些信息分别存放在状态寄存器、 控制寄存器和数据缓冲寄存器中。
1) 状态寄存器:用来存放外设的信息, CPU通过访问这个寄存器来了解某个外设的状态。
2) 控制寄存器: CPU对外设的操作命令都寄存在控制寄存器中。
3) 数据缓冲寄存器:缓冲器是用来暂存数据的。这是因为外设与CPU交换数据时, CPU的速度远远高于外设的速度。
3. 数据输入过程:数据输入过程指的是外设向CPU输入数据的过程。
(1) 当外设将数据通过数据输入线送给接口时,先使状态线“输入数据准备好”为高电平,然后通过接口把数据送到输入缓冲寄存器中,同时把“输入应答” 信号置成高电平1发给外设。
(2) 外设接到回答信号后,将撤销“输入数据准备好”信号。在接口收到数据后, 它会在状态寄存器中设置“准备好输入”状态位,以便CPU对其进行查询。
(3) 接口向CPU发出一个中断请求信号,这样CPU可以用软件查询方式或中断的方式将接口中的数据输入到CPU中。
(4) CPU在接收到数据后,将“准备好输入”的状态位自动清除,并使数据总线处于高阻状态,准备外设向CPU输入下一个数据。
4. 数据输出过程数据输出过程指的是CPU向外设输出数据的过程。
(1) 当外设从接口接收到一个数据后,接口的输出缓冲寄存器“空”,使状态寄存器的“输出数据准备好”状态位置成高电平1,这表示CPU可以向外设接口输出数据,这个状态位可供CPU查询。
(2) 此时接口也可向CPU发出一个中断请求信号,同上面的输入过程相同, CPU可以用软件查询方式或中断的方式将CPU中的数据通过接口输出到外设中。当输出数据送到接口的输出缓冲寄存器后,再输出到外设。
(3) 与此同时,接口向外设发送一个启动信号,启动外设接收数据。外设接收到数据后,向接口回送一个“输出回答”信号。
(4) 接口电路收到该信号后,自动将接口状态寄存器中的“准备好输出”状态位重新置为高电平1,通知CPU可以向外设输出下一个数据。
8.1.2 8255外部引脚及内部结构
1、8255内部结构
8255是一个40条引脚的双列直插式组件,它内部有3个8位I/O数据端口:A口、 B口和C口,以及一个8位的控制端口。
如图所示:
1) 面向CPU的接口电路
(1) 数据总线缓冲器:是一个三态双向的8位缓冲器,是8255与系统数据总线的接口。接口的数据线D7~ D0直接与CPU数据总线相连,以实现CPU与8255接口之间的信息传递。 CPU向8255写入控制字或从8255中读状态信息以及所有数据的输入和输出,都需要通过数据缓冲器来进行传递。
(2) 读/写控制逻辑:是8255内部完成读/写控制功能的部件, 它接收来自CPU的地址和控制信号,通过内部控制逻辑向8255的各功能部件发出读/写控制命令,用于管理数据、控制字或状态字的传送。
2) 面向外设的接口电路
(1) 端口A: 包含一个8位的数据输出锁存/缓冲器和一个8位的数据输入锁存器,与之关联的接口线是PA7~ PA0。
(2) 端口B: 包含一个8位的数据输入/输出、锁存/缓冲器和一个8位的数据输入缓冲器,与之关联的接口线是PB7~ PB0。
(3) 端口C: 包含一个8位的数据输出锁存/缓冲器和一个8位的数据输入锁存器。必要时端口C可分成两个4位端口,分别与端口A和端口B配合工作,以输出控制信号,或接收从外设输入的状态信号,与之关联的接口线是PC7~ PC0。
3) 内部控制逻辑
内部控制逻辑包括A组控制部件、 B组控制部件两部分。
(1)A组控制部件:控制端口A和端口C的高4位(PC7~ PC4);
(2)B组控制部件:控制端口B和端口C的低4位(PC3~ PC0)。
控制逻辑内部设置了一个控制寄存器,接收来自CPU的控制字,根据控制字的内容决定各数据端口的工作方式。也可以根据控制字对端口C的每一位进行置位和复位。 控制寄存器的内容只能写入而不能读出。
2、8255的引脚功能
8255芯片有40根引脚,如图所示。
PA7~ PA0(输入/输出、三态): A口的8根输入/输出信号线。可用软件编程决定这8条线是工作于输入、输出还是双向方式。
PB7~ PB0(输入/输出、三态): B口的8根输入/输出信号线。可用软件编程指定这8条线作输入还是输出。
PC7~ PC0(输入/输出、三态): C口的8根输入/输出信号线。根据其设定的工作方式可作输入或输出线使用,也可用作控制信号的输出或状态信号的输入
D7~ D0(输入/输出、三态): 双向三态数据线,用来传送数据、控制字和状态字等信息。直接与系统数据总线相连。
RESET(输入): 复位信号,高电平有效。当它有效时,所有寄存器,包括控制寄存器的内容全部清零, A口、 B口、 C口均被设定为输入方式。
A1、 A0(输出): 端口选择信号。 8255内部共有4个端口,即3个数据端口(A口、 B口、 C口)和一个控制端口(控制寄存器),它们可由程序寻址。A1、 A0通常与系统总线的低位地址线相连。
RD~(输入): 读信号,低电平有效。当它为低电平时, CPU从8255中读取数据或状态信息。通常接系统总线的 信号。
WR~(输入): 写信号,低电平有效。当它为低电平时, CPU将数据或命令字写入8255。通常接系统总线的 信号。
CS~ (输入): 片选信号,低电平有效。当它为低电平时,选中8255芯片。通常由系统总线的高位地址线经译码得到。
A1A0和 RD~、WR~ 、CS~ 信号配合可对各端口进行输入/输出访问,组合逻辑功能如表所示。
8.1.3 8255的工作方式
1. 工作方式0(基本输入/输出方式): 适用于简单的无条件输入/输出数据或查询式输入/输出数据的场合。
无条件数据的传送过程中,输入/输出数据随时都处于准备好状态,8255与CPU及外设之间无须交换应答(握手)信号。
查询式数据的传送过程中,需要有应答信号,通常A口与B口作为输入/输出数据端口,而C口分为两个4位端口分别作为控制信号输出口和状态信号输入口,用于配合A口和B口的查询式数据传送。
当A口、 B口、 C口都工作于方式0时, 8255各口的输入/输出有16种组合,如表所示。
2. 工作方式1(选通输入/输出方式):是一种选通输入/输出方式,即利用C口所提供的选通信号和应答信号,控制A口和B口的输入/输出。
1) 方式1的主要功能
(1) 分成A、 B两组选通端口,可工作于查询式或中断式输入/输出数据传送。其中, A组包括端口A的8位数据线和端口C的3位联络信号线; B组包括端口B的8位数据线和端口C的3位联络信号线,每组均设置有中断请求逻辑。
(2) 当两组端口中只有一组(A组或B组)工作在方式1时,另一组端口的8位和C口的剩余5位可工作在方式0下作输入或输出; 若A组和B组同时工作在方式1下,则C口中剩余两位既可作输入或输出,又可用位操作方式对它们进行置位或复位。
2) 方式1的工作过程
(1) A口、 B口工作于输出方式
在方式1下, A口作输出时,需使用C口的3根引脚PC6、 PC7、 PC3作为其ACK 、OBFA 、INTRA的握手信号线,协同完成A口与CPU或外部设备之间的数据传送。其端口定义如图所示。
B口工作于方式1作输出时,同样需要使用C口的3根引脚PC2、 PC1、 PC0作为ACKB 、OBFB 、INTRB的握手信号线,协同完成B口与CPU或外部设备的数据传送。其端口状态如图所示。
(2) A口、 B口工作于输入方式
在方式1下, A口、 B口作为输入口的端口定义如图所示。
3. 工作方式2(双向输入/输出方式):只有A口可在此方式下工作。
当A口工作于双向输入/输出方式时, B口只能工作于方式0或方式1下,而C口剩下的3位(PC2~ PC1)既可作为输入/输出线使用,也可作为B口方式1下的控制线。 A口工作于方式2时,各端口定义如图所示。
8.1.4方式控制字及状态字
1. 8255的控制字:8255有3种基本工作方式,而且对C口各位又可以进行按位操作。CPU通过向8255内部的控制寄存器写入不同的控制字来选择不同的工作方式和位操作。
2、8255的状态字:8255的状态字为查询式输入/输出数据提供了外设的工作状态。值得注意的是:C口的状态字与C口各位对外的引脚状态不完全一致。
当8255的A口和B口均工作在方式1的输出时,由C口读出的状态字各位的意义如图所示。
当8255的A口工作在方式2时,状态字各位的意义如图所示
8.1.5 8255与CPU的连接
如图所示:
8.2 可编程定时/计数器82533/8254
8.2.1 8253的外部引线及内部结构
1. 8253的内部结构(内部结构如图8.19)
1) 数据总线缓冲器:为双向、三态的8位缓冲器,直接挂接在数据总线上,它是8253与CPU之间的数据接口。
2) 读/写逻辑:是接收来自CPU的控制信号,包括读、写信号和地址信号,实现对计数器和控制寄存器的读/写控制。
3) 控制寄存器:只能写入,不能读出。控制字将决定计数器的工作方式、计数形式及输出方式等。
4) 计数器:由16位锁存寄存器和一个16位的减1计数器组成。
2. 8253的引脚功能
芯片共有24根引脚,如图8.20所示。
D0~D7(输入/输出、三态): 与数据总线相连,用以传送 CPU与8253之间的数据信息。
A0、A1(输入): 地址输入信号线,用来选择计数器或控制寄存器,一般接地址线低位。
CS~(输入): 片选信号,低电平有效。通常由地址线高位译码形成。
RD~(输入): 读控制输入信号,低电平有效。通常与
系统总线的IOR信号连接。
WR~(输入): 写控制输入信号,低电平有效。通常与
系统总线的IOW信号连接。
CLK~0-2(输入): 用于控制计数器的减1操作。CLK最高频率可达5MHz。
GATE~0-2 (输入): 门控信号,即计数器的控制信号,用来控制计数器工作或者复位。
OUT~0-2 (输出): 当相应的计数器计数值减到零时,该端输出标志信号。在不同的工作方式下,OUT的输出波形各不相同。
8253寻址操作的控制逻辑如下表所示。
8.2.2 8253的方式控制字和读/写操作
1. 方式控制字:用来决定计数器的工作方式、计数形式及输出方式等。
2. 8253的读/写操作及编程
1) 写操作
8253有3个计数器通道,需逐个对各计数器分别进行初始化。当方式控制字中D0=0时,采用二进制计数,初值可在0000H~FFFFH之间选择;而当方式控制字中D0=1时,采用十进制计数,初值可在0000~9999之间选择。由于8253中计数器采用减1计数方式工作,因此计数初值为0时,对应着最大计数值,即二进制数时为65536,十进制数时为10000。
2) 读操作
读取计数器当前值有两种方法:
第一种方法:利用门控GATE信号为低电平或关闭CLK脉冲,使计数操作暂停,以读出确定的计数值。CPU首先向8253的控制寄存器中送入一个方式控制字,选择要读取的计数器
并设定读/写方式。
第二种方法:在计数过程中读出计数器值,而不影响计数器的工作。CPU首先向8253的控制寄存器写入一个特定的方式控制字(SC1SC000××××),即锁存读命令,将所选中的计数器当前计数值锁存到计数锁存器中。这种读取计数值的方法称为锁存读,又叫做“飞读”。
8.2.3 8253的工作方式
有6种不同的工作方式。其区别:
①它们启动计数器进行计数的触发方式不同;
②计数过程中,门控信号GATE对计数操作的影响不同;
③计数结束后,OUT输出线上的输出波形不同。
1. 方式0 (计数结束产生中断)
当CPU向8253的计数器通道所对应的控制寄存器中写入方式0的控制字后,该计数器通道的OUT输出信号立即变为低电平,一旦计数初值被装入,计数器马上开始对CLK输入信号进行减1计数,即每过一个时钟周期计数器减1,当计数值减到0即计数结束时,OUT输出高电平,其工作波形如图8.22所示(其中CW是控制字,N为计数值)。常利用OUT信号作为中断请求信号
2. 方式1(可编程单稳触发器)
3. 方式2(分频器)
4. 方式3(方波频率发生器)
5. 方式4(软件触发选通)
6. 方式5(硬件触发选通)
8.2.5 可编程定时/计数器8254
8254芯片中每一个计数器都有一个状态寄存器,用于保存该计数器的状态。状态寄存器的内容称为状态字,可由CPU读出。
8254状态字格式
其中:D5~D0与CPU写入该计数器的方式控制字的对应位一致;D7位为输出位,反映该计数器输出信号OUT的状态,若OUT输出高电平,则D7=1,否则D7=0;D6位指示计数值是否已由计数寄存器送入减1寄存器中,若已装入,则D6=0,否则D6=1。显然,D6=1时读入计数值是无意义的。