资源描述
第10章 并行和串行接口电路
1.教学目的和要求:
掌握串行通信和并行通信的概念
掌握并行接口电路8255A的使用
掌握串行接口电路8251A的使用
2.教学重点:
8255A的使用
8251A的使用
3.掌握难点:
8255A的使用
8251A的使用
5.教学方法:
课堂讲授
6.教学内容摘要:
10.1 概述
10.1.1 并行通信
1. 并行接口
图10.1 并行接口与CPU、外设的连接
2. 并行接口的组成
⑴状态寄存器
状态寄存器用来存放外设的信息,CPU通过访问这个寄存器来了解某个外设的状态,进而控制外设的工作,以便与外设进行数据交换。
⑵控制寄存器
并行接口中有一个控制寄存器,CPU对外设的操作命令都寄存在控制寄存器中。
⑶数据缓冲寄存器
在并行接口中还设置了输入缓冲寄存器和输出缓冲寄存器,缓冲器是用来暂存数据。因为外设与CPU交换数据,CPU的速度远远高于外设的速度。例如,打印机的打印速度与CPU的速度相差的远不止是一个数量级,在并行接口中设置缓冲器,把要传送的数据先放入缓冲器中,打印机按照安排好的打印队列进行打印,这样可以保证输入,输出数据的可靠性。
3. 数据输入过程
数据输入过程,指的是外设向CPU输入数据。
① 当外设将数据通过数据输入线送给接口时,先使状态线“输入数据准备好”为高电平。然后通过接口把数据接收到输入缓冲寄存器中,同时把“输入回答”信号置成高电平“1”,并发给外设。
② 外设接到回答信号后,将撤消“输入数据准备好”的信号。当接口收到数据后,会在状态寄存器中设置“准备好输入”状态位,以便CPU对其进行查询。
③ 接口向CPU发出一个中断请求信号,这样CPU可以用软件查询方式,也可以用中断的方式将接口中的数据输入到CPU中。
④ CPU在接收到数据后,将“准备好输入”的状态位自动清除,并使数据总线处于高阻状态。准备外设向CPU输入下一个数据。
4. 数据输出过程
数据输出过程,指的是CPU向外设输出数据。
① 当外设从接口接收到一个数据后,接口的输出缓冲寄存器“空”,使状态寄存的“输出数据准备好”状态位置成高电平“1”,这表示CPU可以向外设接口输出数据,这个状态位可供CPU查询。
② 此时接口也可向CPU发出一个中断请求信号,同上面的输入过程相同,CPU可以用软件查询方式,也可以用中断的方式将CPU中的数据通过接口输出到外设中。当输出数据送到接口的输出缓冲寄存器后,再输出到外设。
③ 与此同时,接口向外设发送一个启动信号,启动外设接收数据。外设接收到数据后,向接口回送一个“输出回答”信号。
④ 接口电路收到该信号后,自动将接口状态寄存器中的“准备好输出”状态位重新置为高电平“1”,通知CPU可以向外设输出下一个数据。
10.1.2 串行通信
图10.2 串行接口与CPU、外设的连接
1. 串行接口的组成
串行接口是通过系统总线和CPU相连,串行接口部件的典型结构如图10.2所示。主要由控制寄存器、状态寄存器、数据输入寄存器和数据输出寄存器4部分组成。
⑴控制寄存器
控制寄存器用来保存决定接口工作方式的控制信息。
⑵状态寄存器
状态寄存器中的每一个状态位都可以用来标识传输过程中某一种错误或当前传输状态。
⑶数据寄存器
①数据输入寄存器:在输入过程中,串行数据一位一位地从传输线进入串行接口的移位寄存器,经过串入并出(串行输入并行输出)电路的转换,当接收完一个字符之后,数据就从移位寄存器传送到数据输入寄存器,等待CPU读取。
②数据输出寄存器:在输出过程中,当CPU输出一个数据时,先送到数据输出缓冲寄存器,然后,数据由输出寄存器传到移位寄存器,经过并入串出(并行输入串行输出)电路的转换一位一位地通过输出传输线送到对方。
串行接口中的数据输入移位寄存器和数据输出移位寄存器是为了和数据输入缓冲寄存器和数据输出缓冲寄存器配对使用的。
在学习串行通信方式时,很有必要了解一下有关串行通信中的一些基本概念,这里仅做简单介绍。
2. 串行通信中使用的术语
⑴发送时钟和接收时钟
把二进制数据序列称为比特组,由发送器发送到传输线上,再由接收器从传输线上接收。二进制数据序列在传输线上是以数字信号形式出现,即用高电平表示二进制数1,低电平表示二进制数0。而且每一位持续的时间是固定的,在发送时是以发送时钟作为数据位的划分界限,在接收时是以接收时钟作为数据位的检测。
①发送时钟:串行数据的发送由发送时钟控制,数据发送过程是:把并行的数据序列送入移位寄存器,然后通过移位寄存器由发送时钟触发进行移位输出,数据位的时间间隔可由发送时钟周期来划分。
②接收时钟:串行数据的接收是由接收时钟来检测,数据接收过程是:传输线上送来的串行数据序列由接收时钟作为移位寄存器的触发脉冲,逐位打入移位寄存器。
⑵DTE和DCE
①数据终端设备(data terminal equipment,DTE):是对属于用户所有联网设备和工作站的统称,它们是数据的源或目的或者即是源又是目的。例如:数据输入/输出设备,通信处理机或各种大、中、小型计算机等。DTE可以根据协议来控制通信的功能。
②数据电路终端设备或数据通信设备(data circuit-terminating equipment或data communication equipment,DCE):前者为CCITT标准所用,后者为EIA标准所用。DCE是对网络设备的统称,该设备为用户设备提供入网的连接点。自动呼叫/应答设备、调制解调器Modem和其他一些中间设备均属DCE。
⑶信道
信道是传输信息所经过的通道,是连接2个DTE的线路,它包括传输介质和有关的中间设备。
3. 串行通信中的工作方式
串行通信中的工作方式分为:单工通信方式、半双工通信方式和全双工通信方式
图10.3 串行通信工作方式
4. 同步通信和异步通信方式
串行通信分为2种类型:一种是同步通信方式,另一种是异步通信方式。
⑴同步通信方式
同步通信方式的特点是:由一个统一的时钟控制发送方和接收方,若干字符组成一个信息组,字符要一个接着一个传送;没有字符时,也要发送专用的“空闲”字符或者是同步字符,因为同步传输时,要求必须连续传送字符,每个字符的位数要相同,中间不允许有间隔。同步传输的特征是:在每组信息的开始(常称为帧头)要加上l一2个同步字符,后面跟着8位的字符数据。同步通信的数据格式如图10.4所示。
10.4 同步通信字符格式图
传送时每个字符的后面是否要奇、偶校验,由初始化时设同步方式字决定。
⑵异步通信方式
异步通信的特点是:字符是一帧一帧的传送,每一帧字符的传送靠起始位来同步。在数据传输过程中,传输线上允许有空字符。所谓异步通信,是指通信中两个字符的时间间隔是不固定的,而在同一字符中的两个相邻代码间的时间间隔是固定的通信。异步通信中发送方和接收方的时钟频率也不要求完全一样,但不能超过一定的允许范围,异步传输时的数据格式如图10.5所示。
图10.5 异步通信字符格式
字符的前面是一位起始位(低电平),之后跟着5~8位的数据位,低位在前、高位在后。数据位后是奇、偶校验位,最后是停止位(高电平)。是否要奇、偶校验位,以及停止位设定的位数是1,1.5位或2位都由初始化时设置异步方式字来决定。
5. 通信中必须遵循的规定
⑴字符格式的规定
通信中,传输字符的格式要按规定写,图10.5是异步通信的字符格式。在异步传输方式每个字符在传送时,前面必须加一个起始位,后面必须加停止位来结束,停止位可以为1位,1.5位,2位。奇、偶校验位可以加也可以不加。
①比特率:比特率作为串行传输中数据传输速度的测量单位,用每秒传输的二进制数的位数bit/s(位/秒)来表示。
②波特率:波特率是用来描述每秒钟内发生二进制信号的事件数,用来表示一个二进制数据位的持续时间。
有关在远距离传输时,数字信号送到传输介质之前要调制为模拟信号,再用比特率来测量传输速度就不那么方便直观了。因此引入波特率作为速率测量单位即:
波特率=1/二进制位的持续时间
比特率可以大于或等于波特率,假定用正脉冲表示“1”,负脉冲表示“0”,这时比特率就等于波特率。假如每秒钟要传输10个数据位,则其速率为l0波特,若发送到传输介质时,把每位数据用10个脉冲来调制,则比特率就为100b/s,即比特率大于波特率。
发送时钟与波特率的关系是:时钟频率=72×波特率(n可以是l,16,32,64。,2为波特率因子,是传输一位二进制数时所用的时钟周期数。不同芯片的n由手册中给出)。
波特率是表明传输速度的标准,国际上规定的一个标准的波特率系列是:110,300,600,1200,1800,2400,4800,9600,19200。大多数CRT显示终端能在110—9600波特率下工作,异步通信允许发送方和接收方的时钟误差或波特率误差在4%~5%。
6.信号的调制与解调
计算机对数字信号的通信,要求传输线的频带很宽,但在实际的长距离传输中,通常是利用电话线来传输,电话线的频带一般都比较窄。为保证信息传输的正确,都普遍采用调制解调器(modem)来实现远距离的信息传输,现在还有很多家庭上网仍使用modem连接。
调制解调器,顾名思义主要是完成调制和解调的功能。经过调制器(modulator)可把数字信号转换为模拟信号,经过解调器(demodulator)把模拟信号转换为数字信号。使用modem实现了对通信双方信号的转换过程,如图10.6所示。现在modem的数据传输速率理论值可达72Kb/s,而实际速率仅为33.6Kb/s
图10.6 调制与解调过程
10.2 可编程并行接口电路Intel 8255A
10.2.1 8255A的主要性能和内部结构
8255A是为Intel公司的80系列微机配套的通用可编程并行接口芯片,具有三个可编程的端口(A端口、B端口和C端口),每个端口8条线,共有24条I/O引脚,也可分为2组工作,每组12条线,并有三种工作方式。
可编程是指可通过软件设置芯片的工作方式,因此这个芯片在与外部设备相连接时,通常不需要附加太多的外部逻辑电路,这给用户的使用带来很大方便。
芯片的主要技术性能如下:
(1) 输入、输出电平与TTL电平完全兼容。
(2) 时序特性好。
(3) 部分位可以直接置“1”/置“0”,便于实现控制接口使用。
(4) 单一的+5 V电源。
8255A的内部结构框图如图10.7(a)所示,图10.7(b)为8255A的外引脚图。从图中可以看到,8255A主要由4部分组成。
图10.7 8255内部结构和引脚图
(a) 8255A内部结构;(b) 8255A外引脚图
1. 三个独立的数据口
8255A的三个数据口分别是A端口、B端口、C端口,它们彼此独立,都是8位的数据口,用来完成和外设之间的信息交换。三个口在使用上有所不同。
1) A端口
A端口对应一个8位的数据输入锁存器和一个8位的数据输出锁存器和缓冲器。因此A端口适合用在双向的数据传输场合,用A端口传送数据,不管是输入还是输出,都可以锁存。
2) B端口和C端口
这两个口分别是由一个8位的数据输入缓冲器和一个8位的数据输出锁存器和缓冲器组成。因此用B端口和C端口传送数据作输出端口时,数据信息可以实现锁存功能;而用作输入口时,则不能对数据实现锁存,这一点在使用中要注意。在实际应用中,A端口和B端口通常作为独立的输入口和输出口,而C端口常用来配合A端口和B端口的工作使用。C端口分成两个4位的端口,这两个4位的端口分别作为A端口和B端口的控制信号和输入状态信号使用。
2. A组控制电路和B组控制电路
控制电路分成A组控制和B组控制两组,A组控制电路控制A端口和C端口的高4位(PC4~PC7)。B组控制电路控制B端口和C端口的低4位(PC0~PC3)。这两组控制电路的作用是:由它们内部的控制寄存器接收CPU输出的方式控制命令字,还接收来自读/写控制逻辑电路的读/写命令,根据控制命令决定A组和B组的工作方式和读/写操作。
3. 读写控制逻辑电路
这部分电路是用来完成对8255A内部三个数据口的译码工作,由CPU的地址总线A1、A0和8255A的片选信号CS和WR、RD信号组合后产生控制命令,并将产生的控制命令传送给A组和B组的控制电路,从而完成对数据信息的传输控制。
4. 数据总线缓冲器
这是一个双向、三态的8位数据总线缓冲器,是8255A和系统总线相连接的通道,用来传送输入/输出的数据、CPU发出的控制字以及外设的状态信息。总之,8255A与CPU之间的所有信息传输都要经过数据总线缓冲器。
10.2.2 8255A的外部特性
8255A是40条引脚的双列直插式芯片,引脚排列如图10.7(b)所示。单一的+5 V电源,使用时要注意它的+5V电源引脚是第26脚,地线引脚是第7脚,它不像大多数TTL芯片电源和地线在右上角和左下角的位置,除了电源和地线之外,其他引脚的信号按连接的功能可分为两大组。
1. 与CPU相连的引脚
RESET(35PIN):芯片的复位信号,高电平时有效。复位后把8255A内部的所有寄存器都清0,并将三个数据口自动设置为输入口。
CS(6PIN):片选信号,低电平时有效。只有当CS=0时,芯片被选中,才能对8255A进行读、写操作。
RD(5PIN):读信号,低电平有效。只有当CS=0,RD=0,才允许从8255A的三个端口中读取数据。
WR(36PIN):写信号,低电平有效。只有当CS=0,WR=0,才允许从8255A的三个端口写入数据或者是写入控制字。
A1、A0(8,9PIN):端口译码信号。用来选择8255A内部的三个数据端口和一个控制端口的地址。其中对控制口只能进行写操作。
(1) 当A1A0=00时,选中A端口。
(2) 当A1A0=01时,选中B端口。
(3) 当A1A0=10时,选中C端口。
(4) 当A1A0=11时,选中控制端口。
A1、A0与读、写信号组合对各端口所执行的操作如表10-1所示。
D7~D0(27~34PIN):双向三态8位数据线,与系统的数据总线相连接。
8255A的数据线为8条,这样8位的接口芯片在与8086外部数据线为16条的CPU相连接时,应考虑接口芯片本身对地址的要求。由于在8086这样的16位外部总线系统中,CPU在进行数据传输时,低8位对应一个偶地址,高8位对应一个奇地址。如果将8255A的数据线D7~D0与8086CPU的数据总线的低8位相连的话,从CPU这边看来,要求8255A的4个端口地址都应为偶地址,这样才能保证对8255A的端口的读/写能在一个总线周期内完成,但又要满足8255A本身对4个端口规定的地址要求是00,01,10,11。因此将8255A的A1和A0分别与8086系统总线的A2和A1相连,而将最低位A0总设置为0。
2. 和外设端相连的引脚
PA7~PA0(37~40 PIN,l~4PIN):A端口的输入/输出引脚
PB7~PB0(25~18 PIN):B端口的输入/输出引脚
PC7~PC0(10~13,17~14 PIN):C端口的输入/输出引脚
10.2.3 8255A的控制字和编程
由CPU执行输出指令,向8255A的端口输出不同的控制字来决定它的工作方式。控制字分为两种,分别称为方式选择控制字和端口C置1/置0控制字。根据控制寄存器的D7位的状态决定是哪一种控制字。
1. 方式选择控制字
方式选择控制字用来决定8255A三个数据端口各自的工作方式,它的格式如图10.8所示。它由一个8位的寄存器组成。
图10.8 8255A的方式选择控制字
2. C端口置1/置0控制字
8255A在和CPU传输数据的过程中,经常将C端口的某几位作为控制位或状态位来使用,从而配合A端口或B端口的工作。为了方便用户,在8255A芯片初始化时,C端口置1/置0控制字可以单独设置C端口的某一位为0或某一位为1。控制字的D7位为“0”时,是C端口置1/置0控制字中的标识位,具体的格式如图10.9所示。
图10.9 8255A的C端口置1/置0控制字
10.2.4 8255A的工作方式
8255A有三种工作方式,分别称为方式0,方式1和方式2。其中A端口可以工作在三种方式中的任一种;B端口只能工作在方式0和方式1;C端口通常作为控制信号使用,配合A端口和B端口的工作。每种工作方式的具体内容如下所述。
1. 方式0:基本的输入/输出方式
方式0之所以被称为基本的输入/输出方式,是因为在这种方式下,A端口、B端口和C端口(C端口分为2个4位使用)都可提供简单的输入和输出操作,对每个端口不需要固定的应答式联络信号。工作在方式0时,在程序中可直接使用输入指令(IN)和输出(OUT)指令对各端口进行读写。方式0的基本定义是2个8位的端口和2个4位的端口。任何一个端口都可以作为输入或输出,输出的数据可以被锁存,输入的数据不能锁存。
方式0的输入时序如图10.10所示,输出时序如图10.11所示。从输入时序图可以看到,对各信号的要求是:
(1) 地址信号要领先于RD信号到达,8255A在RD信号有效以后,最长经过250 ns的时间,就可以使数据在数据总线上得到稳定。
(2) 在一般的微处理器系统中都配备了地址锁存器,保证CPU对先发出的地址能够锁存,可以满足地址信号先于RD信号到达,对于从读信号有效到数据稳定的时间,应由输入设备给予满足。在使用时应注意,方式0对输入数据不做锁存。
图10.10 8255A方式0输入时序
图10.11 8255A方式0输出时序
从输出时序图可以看到,为了将数据能可靠地输出到8255A,对各信号的要求是:
(1) 地址信号必须在写信号之前有效,同时要求在信号有效(也就是为低电平时)期间内,地址信号不能发生变化,要保证一直有效,直到在撤消(变高后)后的20 ns时间以后,地址信号才允许发生变化。
(2) 写脉冲 (为低电平时间)的宽度最小要求是400 ns。
(3) 要求数据也必须在写信号之前最少有100 ns时间出现在数据总线上。写信号撤消后,数据的最小保持时间是30 ns。
满足上述条件,写信号结束后,最长经过350 ns的时间,CPU输出的数据就可以出现在8255A的指定端口。
方式0一般用于无条件传送的场合,不需要应答式联络信号,外设总是处于准备好的状态。也可以用作查询式传送,查询式传送时,需要有应答信号。可以将A端口、B端口作为数据口使用。把C端口分为2部分,其中4位规定为输出,用来输出一些控制信息,另外4位规定为输入,用来读入外设的状态。利用C端口配合A端口和B端口完成查询式的I/O操作。
2. 方式1:选通输入/输出方式
在这种方式下,当A端口和B端口进行输入输出时,必须利用C端口提供的选通和应答信号,而且这些信号与C端口中的某些位之间有着固定的对应关系,这种关系是硬件本身决定的不是软件可以改变的。由于工作在方式l时,要由C端口中的固定位来作为选通和应答等控制信号,因此称方式1为选通的输入/输出方式。方式1的基本定义是,分成2组(A组和B组),每组包含一个8位的数据端口和1个4位的控制/数据端口。8位的数据端口既可以作为输入,也可以作为输出,输入和输出都可以被锁存。4位的控制/数据端口用于传送8位数据端口的控制和状态信息。
1) 选通的输入方式
方式1在选通输入方式下对应的控制信号如图10.12所示。图10.13是方式1在选通输入方式的工作时序图。选通输入方式的工作过程是:
当外设的数据已送到8255A某个端口的数据线上时,就发出选通输入信号STB,将数据通过A端口或B端口锁存到8255A的数据输入寄存器,STB信号的宽度至少是500 ns。STB信号变低后最多经过300 ns时间,使输入缓冲器满信号IBF变为高电平,如图10.13中表示的箭头①。
输入缓冲器满意味着将阻止外设输入新的数据,可供CPU来查询。在选通输入信号结束后,最多经过300 ns时间,向CPU发出中断请求信号(要在中断允许的情况下),如图10.13中表示的箭头②,使中断请求信号INTR变高,CPU可以响应中断。当CPU响应中断后才发出读信号RD,将数据读入到CPU中,读信号有效(低电平为有效)后,最多经过400 ns时间,STB就清除中断请求,使中断请求信号变低,如图10.13中表示的箭头③。当读信号结束后,才使输入缓冲器满信号IBF变低,如图10.13中表示的箭头④。IBF变低表明输入缓冲器已空,通知外设可以输入新的数据。
图10.12 方式1选通输入下对应的控制信号
(a) 对A端口;(b) 对B端口
图10.13 8255A方式l输入时序
当8255A的A端口和B端口工作在选通输入方式时,对应的C端口固定分配,规定是PC3~PC5分配给A端口,PC0~PC2分配给B端口,C端口剩下的2位PC7、PC6可作为简单的输入/输出线使用。控制字的D3位为“1”时,PC7、PC6作输入;控制字的D3位为“0”时,PC7、PC6作输出。
在方式1选通输入方式时,各控制信号的意义如下:
STB(Strobe):选通输入信号,低电平有效。A组方式控制字中对应PC4;B组方式控制字中对应PC2。当该信号有效时,从外部设备来的8位数据送入到8255A的输入缓冲器中,负脉冲宽度最小是500 ns。
IBF(Input Buffer Full):输入缓冲器满信号,高电平有效。A组方式控制字中对应PC5;B组方式控制字中对应PC1。这是8255A送给外设的联络信号,当8255A的输入缓冲区已有一个新数据后,输出这个信号供CPU查询。该信号在选通输入信号STB变低后,300 ns时间内即变为有效的高电平。在RD信号撤消后的300 ns时间内IBF信号才撤消,变为无效的低电平,这样保证了数据传输的可靠性。
INTR(Interrupt Request):中断请求信号,高电平有效。A组方式控制字中对应PC3;B组方式控制字中对应PC0。这是8255A向CPU发出的中断请求信号。当STB信号撤消变为高电平后最多300 ns时间内,并且IBF信号也为高电平,INTR信号产生变为有效的高电平。INTR信号变高后可以请求CPU读取数据。当CPU发出的RD信号有效后,400 ns的时间内INTR信号将撤消,变为低电平。
INTE(Interrupt Enable):中断允许信号,高电平有效。该信号为高时,允许中断请求,为低时则屏蔽中断请求。INTE的状态是用软件通过由C端口置1/置0控制字来控制的,在A组中,使PC4置“1”后INTEA变高;在B组中,使PC2置“1”后INTEB变高,A端口和B端口才允许中断。如果PC4和PC2都置“0”,与之对应的INTE信号为低,则禁止中断。
对于这种选通的输入方式,如果采用查询式输入时,CPU先查询8255A的输入缓冲器是否满了,也就是IBF是否为高? 如果输入缓冲器满信号IBF为高,则CPU就可以从8255A读入数据。如果采用中断方式传送数据时,应该先用C端口置1/置0的控制字使相应的端口允许中断,也就是要使PC4或PC2置1。
2) 选通的输出方式
方式1在选通输出情况下对应的控制信号如图10.14所示,图10.15是方式1选通输出情况下的工作时序图。这种方式的工作过程与选通输入的情况相类似。
图10.14 方式l输出时C端口对A、B端口的控制
(a) 对A端口;(b) 对B端口
图10.15 8255A方式1输出时序
当8255A的A端口和B端口工作在选通输出方式时,对应的C端口也是固定分配,规定是PC3、PC6、PC7分配给A端口;PC2、PC1、PC0分配给B端口,剩下的2位PC4、PC5可作为简单的输入/输出线使用。当控制字的D3位为“1”时,PC4、PC5作输入;当控制字的D3位为“0”时,PC4、PC5作输出。
方式1选通输出方式时,各控制信号的意义如下:
OBF(Output Buffer Fu11):输出缓冲器满信号,低电平有效。A组方式控制字中对应PC7;B组方式控制字中对应PC1,这是8255A与外设的联络信号。当CPU向8255A的端口中传送了数据以后,由8255A向外设发出低电平的OBF信号,通知外设可以把数据取走。由输出指令产生的写信号WR的上升沿出现后,最多经过650 ns时间,将OBF信号置成有效即变为低电平,如图10.15中表示的箭头②。当应答信号ACK变为有效的低电平后350 ns时间,OBF信号撤消变为高电平,如图10.15中表示的箭头③。
ACK(Acknowledge):数据接收应答信号,低电平有效。A组方式控制字中对应PC6;B组方式控制字中对应PC2,这是外设的响应信号,当CPU输出给8255A的数据已由外设接收后,外设就向8255A回送一个低电平的应答信号ACK。
INTR:中断请求信号,高电平有效。A组方式控制字中对应PC3;B组方式控制字中对应PC0。当外设已经接受了CPU输出的数据后,由8255A向CPU发出中断请求,要求CPU输出新的数据。当ACK撤消后为高电平,OBF也为高电平,中断允许信号INTE也为高时,INTR中断请求信号被置位为高电平,如图10.19中表示的箭头④。作为请求CPU进行下一次数据输出的中断请求信号,是在WR有效的下降沿出现后850 ns时间内使它变为无效的低电平,如图10.19中表示的箭头①。
INTE:中断允许信号,高电平有效。当该信号为“1”时,允许中断,为“0”时,A端口(B端口)处于中断屏蔽状态,即不发出中断请求信号INTR。在使用时,中断允许信号INTE是用软件通过对C端口置1/置0的控制字来设置的。当PC6置1时,A端口允许中断;PC2置1,B端口允许中断。反之,如果A、B端口所对应的PC6、PC2置0时,则处于中断屏蔽状态,即不允许中断。
当8255A工作在方式l输出选通方式时,一般是采用中断方式与CPU通信。从图10.19方式1输出工作时序图中可以看到,CPU响应中断以后,就向8255A输出数据,写信号出现。当写信号WR撤消,其上升沿一方面撤消中断请求信号INTR,如图10.19中表示的箭头①使INTR变低,表示CPU对上一次中断已经响应过。另一方面使OBF信号变为有效的低电平,如图10.19中表示的箭头②,以通知外设可以接收下一个数据。
实际上,CPU在发出写信号后要经过最长350 ns时间,数据才能出现在端口的输出缓冲器中。当外设收到数据后,便发出一个ACK信号,ACK信号有效后使OBF变成无效的高电平,如图10.19中表示的箭头③,表示数据已经取走,当前缓冲器空。ACK信号结束时使INTR信号变为有效的高电平,如图10.19中表示的箭头④,向CPU发出中断请求信号,从而开始新的数据输出过程。
3. 方式2:带选通的双向传输方式
在双向的传输方式中,8255A可以向外设发送数据,同时CPU通过这8位数据线又接收外设的数据,因此称为双向的传输方式。方式2的基本定义是,只能适用于A端口,一个8位的双向端口(A端口)和1个5位的控制端口(C端口)。A端口的输入和输出都可以被锁存。5位的控制端口用于传送8位双向端口的控制和状态信息。当A端口工作在方式2时,由PA7~PA0作为8位数据线,因为要由C端口对A端口进行控制,所以称为带选通的双向传输方式。C端口对A端口的控制信号分别如图10.16和图10.17所示。在这种方式下,C端口中有5位PC7~PC3作为控制信号和状态信息使用,剩下的3位PC2~PC0可作为简单的输入/输出线使用。当控制字的D0位为1时,PC2~PC0作输入;当控制字的D0位为0时,PC2~PC0作输出。
STB:选通信号,低电平有效。对应于PC4,由外设提供给8255A。该信号负责把外设送到8255A的数据送入输入锁存器。
IBF:输入缓冲器满信号,高电平有效。对应PC5,是8255A送给CPU的状态信息,供CPU查询用。当该信号有效时,表示当前已经有一个新的数据送到了输入锁存器中,CPU可以取走。
OBF:输出缓冲器满信号,低电平有效。对应PC7,由8255A发给外设的选通信号,当OBF有效时,表明CPU已经将一个数据写入8255A的A端口中,通知外设可以取走数据。
INTR:中断请求信号,高电平有效。对应PC3,不论A端口工作在输入方式还是工作在输出方式,当一个操作完成,并且要进入下一个操作时,8255A都要向CPU发出中断请求信号。
ACK:数据接收应答信号,低电平有效。对应PC6,这是外设对信号OBF的响应信号,该信号为低电平时,使A端口的输出缓冲器打开,送出数据到外设。否则,当该信号为高电平时,方式2时输出缓冲器处于高阻状态。
图10.16 方式2时C端口对A端口的控制信号
INTEl:输出中断允许信号。当该信号为“1”时,允许8255A向CPU发出由A端口输出数据的中断请求信号。反之,如果该信号为“0”时,即使输出缓冲器空,也不允许8255A向CPU发中断请求信号。INTEl信号的置1或置0,是用软件使C端口的PC6置1或置0来实现的。
INTE2:输入中断允许信号。当该信号为“1”时,允许8255A中A端口的输入处于中断允许状态,反之,如果该信号为“0”时,A端口的输入处于中断屏蔽状态,即不允许中断。INTE2信号的置1或置0,同样是用软件通过C端口的PC4置1或置0来实现。
通过仔细分析方式2的工作时序图10.17,会发现方式2的时序基本相当于方式1的选通输入时序和选通输出的时序的组合。从图10.17中可以看到,对于输入过程,当外设向A端口送来数据时,选通信号STB也跟着有效变为低电平,选通信号将数据锁存到8255A的A端口的输入锁存器中。同样也正是由于STB信号的变低,才使得输入缓冲器满信号IBF变为高电平,如图10.17中表示的箭头⑦。当选通信号STB结束,也就是变为高电平时,又使中断请求信号INTR有效,变为高电平,如图10.17中表示的箭头⑧。当CPU响应输入中断,执行输入指令时,会产生RD信号,在读信号RD有效期间,将数据从A端口读入到CPU中。当RD信号结束后输入缓冲器满信号IBF又变为低电平,如图10.17中表示的箭头⑨。中断请求信号INTR虽然为高也不再起作用。
对于输出过程,当CPU响应中断后,在中断服务程序中执行输出指令时,将发出写脉冲WR,WR的下降沿使中断请求信号INTR变低,如图10.17中表示的箭头①。WR信号结束其上升降沿使输出缓冲器满OBF信号变为有效的低电平,如图10.17中表示的箭头②。OBF信号送到外设,当外设接到OBF信号后,发出应答信号ACK,如图10.17中表示的箭头③。由ACK信号打开8255A的输出缓冲器,使数据出现在A端口和数据总线上,ACK信号结束时使输出缓冲器满信号OBF变为无效的高电平,如图10.17中表示的箭头⑤,从而开始下一个数据传输过程。由于方式2是双向传输的工作方式,如果一个外设既可以作为输入,又可以作为输出时,采用8255A的方式2与它相连就十分方便。
图10.17 8255A方式2时序
10.2.5 8255A的应用举例
8255A初始化时,先要写入控制字,指定它的工作方式,然后才能通过编程,将总线上的数据从8255A输出给外设,或者将外部设备的数据通过8255A送到CPU中。举一个通过8255A把CPU中的数据输出到打印机上的例子。图10.18(a)采用查询方式传送数据,A端口作为8位数据的输出端口,工作在方式1输出方式。C端口作为状态端口和控制端口使用,一般的打印机有3个主要的控制状态信号线。BUSY表示打印机是否处于“忙”状态,高电平有效;DATASTB选通信号,低电平有效,当该信号有效时,将CPU的数据输出到打印机中;ACK是打印机对主机的应答信号,当打印机接收完字符后发出这个信号。当DATASTB信号有效时,将BUSY信号置为高电平,ACK有效使BUSY置为低电平,图中的单稳定用来展宽脉冲,以满足DATASTB打印机对信号要求的时间宽度。
图10.18 8255A与打印机的接口方式
(a) 查询方式电路图;(b) 中断方式电路图
A端口地址用PortA表示,C端口地址用PortC表示,控制端口地址用PortCtr表示。输出500个字符程序段如下:
MOV AL,0A8H ;A端口方式1输出,PC4输入
MOV DX,PortCtr ;控制口送DX
OUT DX,AL ;输出控制字
MOV CX,500 ;传送500个字符
MOV DI,Buffer ;送字符缓冲区首址
LOOP1:MOV AL,[DI]
MOV DX,PortA ;A端口地址送DX
OUT DX,AL ;从A端口输出一个字符
MOV DX,PonC ;C端口地址送DX
NEXT:IN AL,DX ;从C端口读入打印机状态
TEST AL,10H ;测试BUSY信号
JNZ NEXT ;如果打印机忙,等待
INC DI ;缓冲区首址加1
LOOP LOOP1 ;继续输出下一个字符
如果采用中断方式传送数据,电路的连接形式如图10.18(b)所示。由CPU控制PC4产生选通脉冲,PC4作输出用,这里OBF没有用。PC3作为中断请求INTR,由ACK信号上升沿产生,使用IRQ3,中断向量0BH。
在编写有关中断的程序时,中断服务程序要尽量短,把其他的处理工作都放在主程序中。
程序段如下:
MOV AL,0A0H
MOV DX,PortCtr
OUT DX,AL ;A端口,方式1输出方式,PC4作输出
MOV AL,00001000B ;置PC4=1,令DATASTB=1选通无效
CLI ;关中断
MOV AH,35H
MOV AL,0BH
INT 21H ;将0BH中断向量取到ES、BX中
PUSH ES
PUSH BX ;保存0BH中断向量
PUSH DS
MOV DX,OFFSET INTSERV ;中断子程序的偏移地址送DX
MOV AX,SEG INTSERV
MOV DS,AX ;中断子程序段地址送DS
;设置0BH中断向量,即将DS,DX的内容传送到中断向量表中
MOV AL,0BH
MOV AH,25H
INT 21H
POP DS
MOV AL,0DH
MOV DX,PortCtr
OUT DX,AL ;将PC6置“1”,使INTE为“1”,允许8255A端口中断
STI ;开中断,允许中断请求信号进入CPU
CLI
POP DX
POP DS ;将开始压栈的ES、BX的内容弹入DX中
MOV AL,0BH
MOV AH,25H
INT 21H ;恢复0BH原中断向量
STI
中断服务程序
INTSERV:
PUSHAD ;通用寄存器进栈
MOV AL,CL ;打印字符送AL
MOV DX,PortA
OUT DX,AL ;打印字符送A端口
MOV AL,00H
MOV DX,PortCtr
OUT DX,AL ;置PC4=0,产生选通信号,使DATASTB为低电平
INC AL
OUT DX,AL ;使PC4=1,撤消选通信号
MOV DX,20H
OUT DX,20H ;发EOI命令
POPAD ;通用寄存器出栈
IRET ;中断返回
10.3 可编程串行接口电路Intel 8251A
展开阅读全文