《微机接口技术及其应用》课件第6章_第1页
《微机接口技术及其应用》课件第6章_第2页
《微机接口技术及其应用》课件第6章_第3页
《微机接口技术及其应用》课件第6章_第4页
《微机接口技术及其应用》课件第6章_第5页
已阅读5页,还剩199页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章串行通信和可编程串行接口芯片8251A6.1串行通信的基本概念

6.2可编程串行接口芯片8251A6.3可编程串行接口芯片16550和8250

习题与思考题随着微机应用和计算机网络的发展,计算机与外界之间的信息交换变得越来越重要。这种信息的交换又称为通信(Communication)。它包括计算机与外设之间的通信和计算机与计算机之间的通信。按数据传送的方式可分为并行通信和串行通信两种。串行通信是在一条传输线上一位一位地传送二进制信息。每一个数据位占用一固定的时间长度,传输效率低,但是它所占用的传输线少,适合于远距离传送。一些计算机外设(如CRT显示终端、打印机、磁盘等)需要以串行方式逐位处理和交换信息。在计算机分布式控制系统中,往往要处理各种复杂的控制过程,被控制对象的控制规律复杂,控制量大,因此要进行分级处理和控制。这样,各种微机之间就要实时地交换信息,它们之间的通信一般都采用串行方式。虽然串行通信占用传输线少,系统的开销较小,但是它需要进行串行变换成并行、并行转换成串行等工作,因此,串行通行技术比并行通行技术更为复杂。为了保证串行通信的正常进行,提高串行通信的效率和CPU的利用率,在微机系统中采用专用的大规模集成电路芯片来完成这些转换工作。这种能实现串行通信接口(SerialCommunicationInterface)功能的电路称为串行接口。串行接口是微机系统中常用的一种接口电路。

串行接口完成的功能主要体现在以下几个方面。

1.串行数据格式化

串行通信中的数据是一位一位按顺序传送的,在发送和接收时,收/发双方必须按预先约定的格式进行收/发。串行通信又分为异步通信和同步通信两类。异步通信是指通信中两个字符的时间间隔是不固定的,而同一字符中的两个相邻代码间的时间间隔是固定的。异步通信的格式是用一个起始位表示字符的开始,用停止位表示字符的结束。同步通信是指在数据块开始处加入1~2个同步字符来进行数据传送。因此,串行通信接口电路就是要实现在不同通信方式下数据的格式化。在异步通信方式下,接口电路要完成发送时自动生成启/停位,接收时自动去掉启/停位。在同步通信方式下,接口电路要完成的数据格式化是指在发送的数据块之前加上事先约定好的同步字符。

2.串/并转换

在主机内部处理的数据是并行的。当串行传送时,是以位为单位依次传送的。因此,从主机发送数据到数据终端时,必须将并行数据转换成串行数据才能发送;相反,当主机接收由数据终端传来的数据时,必须把串行数据转换成并行数据才能送给主机处理。这种将并行数据转换成串行数据,把串行数据转换成并行数据的工作是由串行接口电路来完成的。

3.可靠性检验

串行接口电路在发送时能自动生成奇偶校验位,以供可靠性检验。在接收时,串行接口电路能检查字符的奇偶校验位,以确定是否发生传送错误。

4.接口与DCE之间的联络控制

计算机与通信设备之间进行通信是通过计算机的串行接口与通信设备连接的。因此,接口电路应能提供符合RS-232C标准规定的信号线,以便于Modem进行联络与控制。

6.1.1数据传送的方向

串行通信时,数据在两个站(或设备)A与B之间传送,按传送方向可分成单工通信、半双工通信和全双工通信等三种不同的方式,如图6-1所示。6.1串行通信的基本概念

图6-1单工、半双工和全双工通信

1.单工通信(SimplexCommunication)

单工通信方式中,数据线仅能在一个方向上传输数据。当两个站之间进行通信时,一边只能发送数据,另一边只能接收数据,如图6-1(a)所示。我们把这种通信方式称为单工通信或单向通信。

2.半双工通信(HalfDuplexCommunication)

在半双工方式中,数据可在两个设备之间向任一个方向传输,但两个设备之间只有一根传输线,故同一时间内只能在一个方向上传输数据,不能同时收发,如图6-1(b)所示。无线电对讲机就是半双工传输的一个例子,一个人在讲话的时候,另一个人只能听着,因为一端在发送信息时,接收端的电路是断开的。

3.全双工通信(FullDuplexCommunication)

如果在一个数据通信系统中,对数据的两个传输方向采用不同的通路,则这样的系统就可以工作在全双工方式,如图6-1(c)所示。采用全双工通信的系统可以同时发送和接收数据,电话系统就是全双工传送数据的一个例子。计算机的主机和显示终端(它由带键盘的CRT显示器构成)进行通信时,通常也采用全双工方式。一方面,键盘上敲入的字符可以送到主机内存,另一方面主机内存的信息可以送到显示终端。在键盘上敲入一个字符后,并不立即显示出来,而是等计算机收到该字符后,再回送给终端,由终端将该字符显示出来。这样,对主机而言,前一个字符的回送过程和后一个字符的输入过程是同时进行的,并通过不同的线路进行传送,即系统工作于全双工方式。6.1.2基本工作方式

串行通信有两种基本工作方式:异步通信方式和同步通信方式。

1.异步通信方式(AsynchronousCommunication)

采用异步通信时,数据传送的格式如图6-2所示。

图6-2异步通信的数据传送格式

(1)起始位。起始位表示字符传送的开始。在通信线路上,没有数据传送时(空闲状态),该位处于逻辑“1”(高电平)状态。当发送方要发送一个字符数据时,首先发出一个逻辑“0”(低电平)信号,这就是起始位。起始位通过通信线路传向接收方,当接收方的设备检测到这个逻辑低电平后,就开始准备接收数据信号。

(2)数据位。当接收方的接收设备检测到起始位后,接下来通信线路上的数据信号就是数据位。在传送过程中,数据位从最低位开始传送。数据位的个数可以选择5位、6位、7位或8位。

(3)奇偶校验位。奇偶校验用于有限差错检测。数据传送完成后发送奇偶校验位,通信双方在通信时必须约定使用相同的奇偶校验方式。奇偶校验位是冗余位,但它表示了数据的一种性质,这种性质可以用于检错。

(4)停止位。停止位是一个字符数据传送结束的标志。在数据位(当通信双方约定没有使用奇偶校验位时)或奇偶校验位之后发送的是停止位,停止位可以是1位、1.5位或2位。

在异步通信中,字符数据按照图6-2所示的帧格式一个接一个地传送。在发送间隙(空闲状态),通信线路总是处于逻辑“1”状态,每个字符数据的传送均以逻辑“0”开始。需要注意的是,发送和接受双方必须使用相同的字符数据帧格式,否则会造成数据错误,进而导致通信失败。异步通信通常用于信息传送量不太大、传输速度不太高的场合,如50~19200b/s。总之,在串行通信时,若不发送数据,则数据信号线总是呈现高电平,处于MARK状态,也称为空闲状态。当有数据要发送时,数据信号线变成低电平,并持续一位的时间,用于表示字符的开始,这一位称为起始位,这种低电平状态也称为SPACE状态。起始位之后,在信号线上依次出现待发送的每一位字符数据,最低有效位D0最先出现,因此它被最早发送出去。采用不同的编码方案,待发送的每个字符的位数就不同,它可以由5~8位构成。当字符用ASCII码表示时,数据位占7位(D0~D6)。在数据位的后面有一个奇偶校验位,加上这一位后,使字符中“1”的位数为奇数(进行奇校验时)或偶数(进行偶校验时),系统中也可以不用奇偶校验位。在奇偶校验位的后面至少应有一位高电平表示停止位,用于指示字符的结束。停止位可以是1位、1.5位或2位。如果传输完一个字符后立即传输下一个字符,那么后一个字符的起始位就紧跟在前一个字符的停止位之后,否则停止位后又进入空闲状态。

可见,用异步方式发送一个7位的ASCII字符时,实际需发送10位、10.5位或11位信息。如果用10位来发送的话,就意味着发送过程中将会浪费30%的传输时间。为了提高串行数据传输的速率,可以采用同步传送方式。

2.同步通信方式(SynchronousCommunication)

同步通信的数据传送格式如图6-3所示。

图6-3同步通信的数据传送格式在异步通信中,每一个字符数据的帧格式都要求使用起始位和停止位作为字符开始和结束的标志,占用了一定的传输时间。去除这些标志后可以达到提高通信速度的目的,这种通信方式即为同步传送。同步通信通过同步字符在每个数据块传送开始时使发送和接收双方同步。同步通信具有如下特点:

(1)以同步字符作为传送的开始,使发送和接收双方取得同步。

(2)每个字符数据位占用的时间相等。

在同步通信方式中,字符数据之间不允许有空隙存在,当线路空闲或没有字符发送时发送同步字符。同步字符可以由用户选择一个或两个特殊的8位二进制码作为同步字符。习惯上选用通信过程中没有出现的字符数据。与异步通信双方必须使用相同的字符格式一样,同步通信双方也必须使用相同的同步字符。一般地,在信息量大、传输速度要求比较高的情况下采用同步通信,速度可以达到8×106b/s或更高。

总之,在同步通信时,若没有数据发送,则传输线处于MARK状态。为了表示数据传输的开始,发送方先发送一个或两个特殊字符,该字符称为同步字符。当发送方和接收方达到同步后,就可以一个字符接一个字符地发送一大块数据,而不再需要用起始位和停止位了,这样就可以明显地提高数据的传输速率。当采用同步方式传送数据时,在发送过程中,收/发双方还必须用同一个时钟进行协调,用于确定串行传输中每一位的位置。当接收数据时,接收方可利用同步字符使内部时钟与发送方保持同步,然后将同步字符后面的数据逐位移入,并转换成并行格式,供CPU读取,直至收到结束符为止。6.1.3串行传送速率

1.波特率

串行通信中传送的字符数据流是逐字符逐位传送的,每一个数据位在通信线路上的保持时间(位信号持续时间)由数据传送速度确定。在串行通信中,常用波特率(BaudRate)来表示数据传送的速率,即单位时间内传送的信息量,以每秒传送的位数来表示。也就是说,每秒钟内传送数据的位数称为波特率,单位为波特,实际上它是传送每一位信息所用时间的倒数,即

1波特

=

1位/秒

通常用b/s表示,位时间Td

=

1/波特率。

【例6-1】

如果一个串行字符由1个起始位、7个数据位、1个奇偶校验位和1个停止位等10位构成,每秒钟传送120个字符,则数据传送的波特率为

10位/字符×120字符/秒

=

1200位/秒

=

1200波特

传送每位信息所占用的时间为

常用的波特率为110、300、600、1200、2400、4800、9600和19

200波特,它也是国际上规定的标准波特率。同步传送的波特率高于异步传送方式,可达到64000波特。在异步串行通信中,接收和发送设备保持相同的传送帧格式和波特率,即每个字符数据的起始位、数据位、奇偶校验位和停止位的约定在同一次传送过程中必须保持一致,这样才能成功地传送数据。

2.接收和发送时钟

二进制数据序列在串行通信传送过程中,以数字信号的形式出现在通信线路上,这样就要求接收和发送双方通过时钟信号对传送的数据进行定位及采样。所以,接收和发送时钟能够用来控制通信设备接收和发送字符数据的速度,该时钟信号通常由外部时钟电路产生。

发送数据时,在发送时钟的下降沿,发送设备将移位寄存器中保存的数据串行移位输出;接收数据时,在接收时钟的上升沿,接收器对接收数据采样,即对数据位进行检测,如图6-4所示。

图6-4发送时钟与接收时钟接收和发送时钟的频率与波特率存在如下关系:

接收/发送时钟频率

=

n

×

接收/发送波特率

其中,n通常叫做比特率系数,n=1,16,64。在同步传送方式下,必须取n=1,即

接收/发送时钟频率

=

接收/发送波特率

在异步传送方式下,n=1,16,64,即选择的接收/发送时钟频率是波特率的1、16或64倍。因此,可根据选择的传送波特率以及所选择的倍数n来确定接收/发送时钟的频率。

例如,如果要求数据传送的波特率为1200b/s,则

接收/发送时钟频率

=

1200Hz (n=1)

接收/发送时钟频率

=

19.2kHz (n=16)

接收/发送时钟频率

=

76.8kHz (n=64)如果异步通信中取n=16,那么接收数据同步过程如下:

接收器在每一个接收时钟的上升沿接收数据线,当发现接收数据线上出现低电平时,则认为是起始位。此后,如果在连续的8个时钟周期内检测到接收数据线上仍保持低电平,则确定为起始位。采用这种方法能够排除接收数据线上的噪声干扰并识别假起始位,可较精确地确定起始位的中间点,从而提供一个准确的时间基准。

由上面的分析可以看出,接收和发送时钟对于双方数据传输实现同步是至关重要的。6.1.4数字信号的调制与解调

串行通信线路上传输的信号是数字信号,即方波脉冲序列。这种信号的传送要求通信媒介(如电缆、双绞线等)必须具有比传输的方波信号更宽的带宽,否则信号中的高频分量将被过滤,使方波出现毛刺而变形。在短距离通信时,由于传输线路比较短,因此用电缆直接连接进行数字信号传送时,问题还不十分严重。但在远距离通信时,通常利用电话线传送信息,由于电话线频带很窄,因此如果用数字信号直接通信,经过传输线后,信号的衰减将会导致信号发生畸变。接收方将因为数字信号逻辑电侥糊不清而无法鉴别,从而导致通信失败。这个问题的解决办法是:利用调制技术,将数字方波信号变换成能在通信线上传输而不受影响的波形信号,正弦波是最理想的选择。因为正弦波很容易产生,而且不易受通信线路固有频率的影响。最基本的信号调制应由其频率靠近频带中心的那些正弦波组成。将待传送的数字信号转变为能在模拟信道上传输的模拟信号的过程称为调制,而该信号的恢复过程则称为解调,相应的设备称为调制器(Modulator)和解调器(Demodulator)。信号发送端的调制器将待传输的数字信号转换成模拟信号,接收方用解调器接收到此模拟信号,再转换成数字信号。由于串行通信大都是双向进行的,因此通信线路的任一端既需要调制器也需要解调器。将调制器和解调器合二为一的装置称为调制解调器,称做Modem。调制与解调如图6-5所示。

图6-5调制与解调计算机通信传送的是数字信号。但在进行远程数据通信时,通信线路往往利用的是公用电话网。电话网是为300~3000Hz的音频模拟信号设计的,这对二进制数据的传输不适合。为此,在发送时需要将二进制信号调制成相应的音频信号,以便在电话网上传输。在接收时,需要对音频信号进行解调还原成数字信号。

调制的方式有多种,如幅移键控ASK、频移键控FSK、相移键控PSK等,其中频移键控(FSK,FrequencyShiftKeying)是一种最常用的调制方法。当波特率小于300时,一般采用频移键控(FSK)调制方式。它的基本原理是把“0”和“1”两种数字信号分别调制成不同频率的2个音频信号,其原理如图6-6所示。

图6-6FSK调制原理图两个不同频率的模拟信号f1和f2,分别经过电子开关S1、S2送到运算放大器A的输入端相加。开关的通/断由外部控制,Si=1接通,Si=0断开。利用被传输的数字信号(即数据)控制开关。当数字信号为“1”时,开关S1接通,送出一串频率较高的模拟信号f1;当数字信号为“0”时,开关S2接通,送出一串频率较低的模拟信号f2。这两个不同频率的信号经运算放大器相加后,在运算放大器的输出端就可以得到调制后的两种频率的音频信号。串行数据在传输过程中由于干扰而引起误码是难免的,误码将直接影响通信系统的可靠性。因此,对通信中差错的控制能力是衡量一个通信系统的重要指标。我们把发现传输中错误的过程称为检错;发现错误后消除错误的过程称为纠错。在基本通信规程中,一般采用奇偶校验或方阵码检错,用反馈重发方式纠错。在高级通信控制规程中,一般采用循环冗余码(CRC)检错,用自动纠错方式纠错。6.1.5串行接口芯片UART和USART

由于计算机是按并行方式传送数据的,因此当它采用串行方式与外部通信时,必须进行串/并行变换。发送数据时,需通过并行输入移位寄存器、串行输出移位寄存器将CPU送来的并行数据转换成串行数据后,再从串行数据线上发送出去;接收数据时,则需经串行输入移位寄存器、并行输出移位寄存器,将接收到的串行数据转换成并行数据后送到CPU中。另外,在传送数据的过程中,需要一些握手联络信号,确保发送方和接收方以相同的速度工作,同时还要检测传送过程中可能出现的一些错误等等,这就需要有专门的可编程串行通信接口芯片来实现这些功能。通过对这些接口芯片进行编程,可以设定不同的工作方式、选择不同的字符格式和波芈实取常用的通用串行接口芯片有两种:一种是仅用于异步通信的接口芯片,称为通用异步收发器(UART,UniversalAsynchronousReceiverTransmitter),NationalINS8250就是这种器件,IBM-PC机中用INS8250作串行接口芯片;另一种芯片既可以工作于异步方式,又可工作于同步方式,称为通用同步/异步收发器(USART,UniversalSynchronousAsynchronousReceiverTransmitter),Intel8251A就是这种器件。本章重点讨论8251A芯片的工作原理及使用方法。为使读者对UART的工作原理有所了解,下面简单介绍一种硬件UART的电路和工作过程。图6-7所示为一种通用的硬件UART电路。

图6-7硬件UART电路图硬件UART的电路由三部分组成:接收器、发送器和控制器。接收器把串行码转换为并行码,发送器把并行码转换成串行码,而控制器则用来接收CPU发来的控制信号,执行CPU所要求的操作,并输出状态信息和控制信息。

UART工作于接收方式时,其接收电路始终监视着串行输入端RxD,当发现数据线上出现一个起始位时,就开始一个字符的接收过程。在时钟脉冲CLOCK的控制下,先逐位把数据移入移位寄存器,再按相应的格式将串行数据转换成并行数据,送入并行寄存器中,等待CPU来读取。如果设置了奇偶校验位,在传送过程中还能进行奇偶校验,如奇偶校验错,则置奇偶校验出错标志(图6-7中未标出);在接收过程中,还能自动检测每个字符的停止位,若无停止位,则置帧出错标志FRERR。如果传送过程中,前一个字符还未取走,又送一个新的字符过来,则置溢出(丢失)标志OVRN。

UART工作于发送方式时,发送缓冲器把来自CPU的并行数据加上相应的控制信息,如起始位、停止位和奇偶校验位等,再在时钟脉冲的控制下,经并/串变换电路转换成串行数据后,从TxD引脚一位一位地发送出去。

为让CPU正确控制数据的接收与发送,有的电路中还设有接收数据就绪(RDA)和发送缓冲器空(TBE)等状态信息。

可编程串行接口的工作方式、功能和工作状态同样可以用软件编程的方法来指定或加以改变。使用时可以根据需要来选择接口芯片的工作方式,这种选择通过写入相应的方式字或控制字来指定。可编程串行接口电路能自动完成数据的格式化、串/并数据间的转换以及自动进行安全性检验,具有结构简单、灵活和适应性强等优点,因此使用起来很方便。本节主要介绍Intel公司生产的可编程串行接口芯片8251A。6.2可编程串行接口芯片8251A

8251A是Intel公司生产的一种通用同步/异步数据收发器(USART),被广泛应用于以Intel8080、8085、8088、8086和8048等为CPU的微型计算机中。USART作为可编程通信接口器件,能工作于全双工方式,而且既可工作于同步方式,又可工作于异步方式。

工作于同步方式时,通过对8251A进行编程,可选择每个字符的数据位数为5~8位,数据传送的波特率为DC(直流)~64kb/s,还可选择内同步或外同步字符。工作于异步传送方式时,通过编程可选择每个字符的数据位数为5~8位,波特率系数(时钟速率与传输速率之比)为1、16和64,停止位位数为1、1.5或2位,能检查启动位,并能自动产生、检测和处理终止符等。异步传送的波特率为DC(直流)~19.2kb/s。

无论工作于同步方式还是异步方式,均具有检测奇偶校验错、溢出错和帧出错的功能。下面介绍8251A的工作原理和使用方法。6.2.18251A的内部结构和外部引脚

8251A的内部结构如图6-8所示,其外部引脚如图6-9所示。8251A内部由数据总线缓冲器、接收缓冲器、接收控制电路、发送缓冲器、发送控制电路、读/写控制电路和调制解调器等电路组成,通过内部总线来实现各部件相互间的通信。

825lA内部各部件及外部各引脚的功能如下所述。

图6-88251A的内部结构

图6-98251A的外部引脚

1.数据总线缓冲器

数据总线缓冲器用做8251A与系统数据总线之间的接口,内部包含3个三态、双向、8位缓冲器,它们是状态缓冲器、接收数据缓冲器和发送数据/命令缓冲器。前两个缓冲器分别用于存放8251A的状态信息和所接收的数据,CPU可用IN指令从这两个缓冲器中分别读取状态信息和数据。发送数据/命令缓冲器用来存放CPU用OUT指令向8251A写入的数据或命令(控制)字。

与数据总线缓冲器有关的引脚有D7~D0数据线,它们与系统的数据总线相连,除用来在8251A和CPU间传送数据外,还传送CPU对8251A的编程命令和8251A送往CPU的状态信息。

2.接收缓冲器和接收控制电路

接收缓冲器由接收移位寄存器、串/并变换电路和同步字符寄存器等构成。在时钟脉冲的控制下,它逐个接收从RxD引脚上输入的串行数据,并将这些数据送入移位寄存器,待接收到一个字符数据后,通过串/并变换电路,将移位寄存器中的数据变成并行数据,再通过内部总线送到接收数据缓冲器中。接收数据的速率取决于送到接收时钟端

的时钟频率。

(1)在异步方式下,接收时钟 的频率可以是波特率的1、16或64倍,或者说波特率系数为1、16或64。使用比波特率高的时钟频率,能使接收移位寄存器在位信号的中间同步,而不是在信号起始边沿同步,这样可减少信号噪声在信号起始处引起读数错误的机会。当CPU发出允许接收数据的命令时,接收缓冲器就一直监视着数据接收引脚RxD上的信号电平。无信号时,RxD为高电平,一旦检测到RxD为低电平,就启动接收控制器中的内部计数器,对时钟频率进行计数。若接收时钟频率为波特率的16倍,则计数器计到半个数位传输时间(也就是计到8)时,如检测到RxD引脚上仍是低电平,就确认收到了一个有效的起始位,而不是干扰信号。在这之后,8251A每隔一个数位传送时间,也就是16个时钟周期,就对RxD进行一次采样,8251A对数据的采样过程如图6-10所示。

图6-108251A对数据的采样过程采集到的数据被送到输入移位寄存器中,并被移位和进行奇偶校验(如果设置奇偶校验的话)等操作,然后删除起始位和停止位,得到并行数据,再经内部总线送到数据总线缓冲器中的接收数据缓冲器。这时使RxRDY引脚输出高电平,用来通知CPU8251A已从外部接收一个字符,等待送到CPU中。当RxRDY引脚上产生高电平时,芯片内部状态寄存器中的RxRDY位也被置成高电平。

(2)同步传送方式又分内同步和外同步两种情形。

工作于内同步方式时,CPU发出允许接收和进入搜索命令后,就一直监测RxD引脚,把接收到的每一位数据送入移位寄存器,并与同步字符寄存器的内容进行比较。若两者不相同,则继续接收数据和进行移位比较等操作;若两者相同,则8251A将SYNDET引脚置为高电平,表示已实现同步过程。如果将8251A编程为采用双同步字符方式工作,则需搜索到两个同步字符后,才认为已实现同步。若采用外同步方式工作,则由外部电路来检测同步字符。外部电路检测到同步字符后,就从同步输入端SYNDET输入一个高电平,通知8251A当前已检测到同步字符,8251A就会立即脱离对同步字符的搜索过程。只要SYNDET上的高电平能维持一个 时钟周期,8251A便认为已达到了同步。实现同步之后,接收器才能接收同步数据。首先,接收器利用时钟信号对RxD线进行采样,然后把采得的数据送到移位寄存器中,每当接收到的数据位数达到一个字符所规定的位数时,就将移位寄存器里的内容经内总线送到输入缓冲器中,同时使RxRDY引脚上输出高电平,表示已收到一个可用字符。与接收端有关的信号有以下几种:

·

RxD(ReceiverData):接收数据,输入。外部串行数据从RxD引脚逐位移入接收移位寄存器中,经串/并变换,变成并行数据后,进入接收数据缓冲器,等待输入到CPU中。

·

RxRDY(ReceiverReady):接收数据准备好,输出,高电平有效,表示接收数据缓冲器已收到一个字符数据,可将其输入到CPU中。当8251A与CPU之间采用中断方式传送数据时,RxRDY可作为中断请求信号,由中断服务程序用IN指令读入数据;当采用查询方式时,此信号可作为一个状态信号,当程序查到此信号为高电平时,由IN指令读取数据。每当CPU从8251A的接收数据缓冲器中读取一个字符后,RxRDY就复位为低电平,等到下次接收到一个新字符后,才又变为有效的高电平。

·

SYNDET/BRKDET(SyncDetect/BreakDetect):同步检测/断点检测,输入或输出。8251A工作于同步方式和异步方式时,该引脚有不同的用处。

当8251A工作于同步方式时,它用于同步检测,系统复位时,此引脚变成低电平。对于内同步方式,此引脚为输出信号。如8251A检测到了同步字符(在双同步字符情况下,需检测到第二个同步字符)后,SYNDET输出高电平,表明8251A已达到了同步状态。CPU执行一次读状态操作后,SYNDET被自动复位。对于外同步方式,SYNDET为输入信号,该引脚由低电平变为高电平时,使8251A在下一个RxC的上升沿开始接收字符,一旦达到同步,SYNDET端的高电平可以去除。对8251A编程为外同步检测时,内同步检测是被禁止的。当8251A工作于异步方式时,该引脚为断点检测端,BRKDET是输出信号。每当8251A从RxD端连续收到两个由全0数位组成的字符(包括起始位、停止位和奇偶校验位)时,该引脚输出高电平,表示当前线路上无数据可读,只有当RxD端收到一个“1”信号或8251A复位信号时,BRKDET才复位,变成低电平。断点检测信号可作为状态位由CPU读出。

·

(ReceiverClock):接收时钟,由外部输入。

决定8251A接收数据的速率,当8251A工作于同步方式时, 端输入的时钟频率应等于接收数据的波特率。如采用异步工作方式,它的频率可以是波特率的1倍、16倍或64倍,接收时钟应与对方的发送时钟相同。

3.发送缓冲器和发送控制电路

当CPU向外部发送数据时,先用OUT指令把要发送的数据经8251A的发送数据缓冲器并行输入并锁存到发送缓冲器中,再由发送缓冲器中的移位寄存器将并行数据转换成串行数据后,经TxD引脚串行发送出去。

对于异步传送方式,发送控制器能按程序规定的字符格式,给发送数据加上起始位、奇偶校验位和停止位,然后从起始位开始,经移位寄存器移位后,逐位将数据从数据输出线上发送出去。发送速率取决于 引脚上接的发送时钟频率, 的频率可以是所发送波特率的1倍、16倍或64倍。对于同步传送方式,发送器在发送数据字符之前,先送出1个或2个同步字符,然后逐位输出串行数据。在同步发送时,字符之间是不允许存在空隙的,若由于某种原因(如出现更高优先级的中断)迫使CPU在发送过程中停止发送字符,则8251A将不断自动地插入同步字符,直到CPU送来新的字符后,才重新输出数据。同步传送时,数据传输率等于的时钟频率。与发送端有关的信号有以下几种。

·TxD(TransmitterData):发送数据,输出。8251A把CPU送来的并行数据转换成串行数据后,逐位从TxD引脚发送到外部。

·TxRDY(TransmitterReady):发送器准备好,输出。高电平有效,当允许8251A发送数据,而且数据总线缓冲器中的发送数据/命令缓冲器为空时,TxRDY有效,它表示发送缓冲器已准备好从CPU接收一个数据。对于中断传送方式,TxRDY有效时请求中断,由中断服务程序用OUT指令从CPU输出一个数据到8251A。在查询方式下,TxRDY可作为状态信号,当CPU检测到该信号有效时,才向8251A输出一个数据。当CPU向8251A输出一个并行数据后,TxRDY被置为低电平。

·TxE(TransmitterEmpty):发送器空,输出。高电平有效,当发送器空信号有效时,表示8251A发送器中的并行到串行转换器为空,即完成一次发送操作,缓冲器中已无数据可向外部发送。在异步传送方式下,由TxD引脚向外部输出空闲位;在同步传送方式下,由于不允许在字符间留有空隙,因此由TxD引脚向外部输出同步字符。当8251A从CPU接收到一个数据后,TxE便成为低电平。

·

(TransmitterClock):发送器时钟,输入。TxC确定8251A的发送速率。对于同步方式, 端输入的时钟频率应等于发送数据的波特率;对于异步方式,可由软件定义发送的时钟频率是波特率的1倍、16倍或64倍。

4.读/写控制电路

读/写控制电路用来接收CPU的控制信号和控制命令字,决定8251A的工作状态,并向8251A内部其余功能部件发出相应的控制信号。从CPU送到读/写控制电路的控制信号有如下几种。

·RESET:复位信号,输入。高电平有效,RESET信号有效时,8251A进入空闲状态,等待对芯片进行初始化编程。在用指令对8251A写入复位命令字后,也能使它进入空闲状态。

·CLK:时钟,输入。时钟信号用来产生8251A内部的定时信号。对于同步方式,CLK的频率必须比 和

大30倍;对于异步方式,CLK的频率应比 和

大4.5倍。

·

:写信号。当 为低电平时,表示CPU正在把数据或控制字写入8251A。

·

:读信号。当 为低电平时,表示CPU正从8251A读出数据或状态信息。

·

:片选信号。 为低电平时,825lA芯片被选中,可以对它进行读/写操作。当 为高电平时,数据总线处于浮空状态,不能对该芯片进行读/写操作。 由地址译码电路产生。

·

(Control/Data):控制/数据信号,输入。

=1时,表示当前通过数据总线传送的是控制信息或状态字;当 =0时,传送的是数据信息。 、 、 和

这几个信号组合起来组成的读/写操作如表6-1所示。

表6-18251A读/写操作表由表6-1可知,对8251A读/写数据时, =0,选择数据端口;向8251A写入控制字或从8251A读取状态字时, =1,使用控制端口。图6-11所示为CPU通过8251A和串行外设或调制解调器接口的连接示意图。

图6-11CPU通过8251A和串行外设或调制解调器接口的连接图

5.调制解调器

当终端和远程计算机或计算机与远程中央处理机之间进行通信时,可用8251A作远距离通信接口芯片,并与调制解调器相连,经标准电话线传输数据。8251A用4条信号线 、 、 和 实现与Modem之间的通信联络,联络方式分为同步方式和异步方式两种。在异步方式下,

和 信号的频率可以是波特率的1倍、16倍或64倍,它们由波特率产生器提供,也可用时钟信号CLK经8253分频后形成。8251A与异步Modem的连接如图6-12所示。8251A与同步Modem的连接图同图6-12十分相似,不同之处仅在于同步方式时 和 信号直接由调制解调器提供,其频率与波特率的数值相等。

图6-128251A与异步Modem的连接图通常,将Modem和其他用于远距离发送串行数据的设备称为数据通信设备(DCE,DataCommunicationEquipment),用于收/发数据的终端和计算机称为数据终端设备(DTE,DataTerminalEquipment)。下面介绍8251A与Modem接口的4条信号线的功能。

·

(DataTerminalReady):数据终端准备好,输出,低电平有效。当终端电源接通,做好接收数据的准备工作时,就可向Modem发出有效的 信号,告诉Modem数据终端已准备好。该信号可用软件定义,只要使控制字中的 =1,就能使 引脚上产生有效的低电平。

·

(DataSetReady):数据装置准备好,输入,低电平有效。 有效时,表示Modem已准备好数据,实际上它是对的回答信号,CPU可用IN指令读入8251A状态寄存器中位的内容,以检测的状态。当控制字中的 =1时, 表示引脚上产生了有效的低电平。

·

(RequestToSend):请求发送信号,输出,低电平有效。 有效时,表示计算机或终端已准备好数据,需要发送,该信号向Modem发出请求发送信号。该信号可用软件定义,使控制字中的 =1, 引脚上将产生有效的低电平信号。

·

(ClearToSend):清除发送信号,输入,低电平有效。当Modem收到 命令,完全做好了发送串行数据的准备之后,就向终端回送 低电平信号。这时,如果控制字中TxEN=1,则表示8251A的发送缓冲器中已收到CPU的一个数据,发送器就可以发送串行数据。所以,实际上 是对 的回答信号。当终端发送完所有字符后, 信号变高,发送过程结束。如果在数据的发送过程中清除 ,也就是使 无效或者使TxEN=0,那么发送器将正在发送的字符发送完后就停止继续发送。

在实际使用时,上述四个控制信号是通用的,如果需要的话,它们可以被赋予不同的物理意义,用于调制解调器以外的功能。

6.8251A与CPU及外设的连接

假设我们用8251A构成的串行接口与CRT显示器或鼠标器等外设相连,并工作于异步方式,那么就不需要用到上述那些控制Modem的信号。图6-13所示是8251A与CPU及某个具有串行接口的外设的连接图。

从图6-13中可以看到,8251A的信号可分成两组:一组是8251A与CPU之间的接口信号,另一组是8251A与外设之间的接口信号。

图6-138251A与CPU及外设的连接图

1)

8251A与CPU之间的连线

如图6-13所示,8251A的 、 、CLK和RESET信号可直接与CPU的相应引脚相连。而8251A的数据线D7~D0与CPU的低8位数据总线D7~D0相连, 与系统地址总线A1相连。地址总线的其余位经译码后产生片选信号,与8251A的 相连。

TxRDY、TxE、RxRDY和BRKDET都是8251A的输出信号,它们是CPU与8251A之间的收发联络信号。在查询方式时,它们被用做状态信号;在中断方式时,TxRDY和RxRDY可作为向CPU请求发送或接收数据的中断请求信号。

2)

8251A与外设之间的连线

在这组引线中,RxD接收外设送来的串行数据,TxD向外设发送串行数据。为了符合RS-232C串行接口标准对信号电平的要求,在接口电路中设有专门的电平变换电路,发送数据时,将TTL电平的TxD信号转换为RS-232C电平,接收数据时,则把RS-232C电平的RxD信号转换为8251A能接受的TTL电平。

发送时钟输入端 和接收时钟输入端 连在一起,由波特率产生器为它们提供所需要的时钟脉冲信号。

3)端口地址译码电路

我们已经知道,8251A是具有8位数据总线的接口芯片, =1时,选中控制端口,传送控制信号和状态信号; =0时,选中数据端口,传送数据信息。如果8251A与8位数据总线的微机相连,通常是将 与最低位地址线A0相连,高位地址线用于端口地址译码,产生片选信号。这样,当A0=0时,选中数据端口;当A0=1时,选中控制端口。例如,数据端口为F0H,控制端口为F1H。如果8251A与16位数据总线的CPU(如8086)相连,则它既可以与数据总线的高8位相连,也可与低8位相连,但是必须遵守以下约定:低8位数据总线总是与偶地址单元或端口相连,而高8位数据总线总是与奇地址单元或端口相连。若要使8位接口芯片仅与低8位数据总线相连,同时又要能区分8251A的控制端口和数据端口,则只要让地址总线的最低位A0参加I/O端口译码即可,只有在A0=0时,才选中8251A芯片。这样可保证CPU对8251A进行读/写操作时,8251A的端口地址必须为偶地址,符合低8位数据总线总是与偶地址端口相连的约定。另一方面,将地址总线的次低位A1与8251A的

端相连,用于选择8251A的控制端口或数据端口。当A1=0时,选中数据端口;当A1=1时,选中控制端口。从图6-13所示的译码电路可以看到,A7A6A5A4=1111和 =0时,74LS138的G1G2AG2B=100,译码器74LS138的使能信号有效。CPU为了选中偶地址端口,A0必须为0,若A3A2A0=000,则74LS138的 有效,可选中8251A。由于A1未参加译码,它可以是1或0,因此8251A的端口地址可以为F0H和F2H。当A1=0时,8251A的端口地址为F0H,选中数据端口;当A1=1时,8251A的端口地址为F2H,选中控制端口。6.2.28251A的控制字和状态字

8251A是可编程的串行通信接口芯片,因此,在使用之前必须通过初始化编程来设定它的工作方式、传输波特率、数据位、停止位、奇偶校验位、同步方式等。在8251A进行初始化编程时有两类控制字,即方式控制字和命令控制字。

1.方式控制字

8251A的方式控制字的格式如图6-14所示。方式控制字的最低两位(D1D0)用来定义8251A的工作方式,当它们不等于全0时,8251A工作于异步方式。

异步方式控制字的格式如图6-14(a)所示。

·

D1D0=B2B1的三种不同取值用来确定波特率系数,也就是 、 信号与波特率之间的系数,它们之间有如下关系:

收/发时钟频率

=

收/发波特率

×

波特率系数

若收/发时钟频率为19200,波特率系数为16,则收/发波特率为19

200/16

=

1200。

·

D3D2=L2L1位用来定义数据字符的长度,可以是5、6、7或8位。

·

D5D4=EP和PEN位决定是否有校验位及是奇校验还是偶校验。

·

D7D6=S2S1位用于决定停止位的个数。当方式字的最低两位D1D0=00时,8251A工作于同步方式,同步方式控制字的格式如图6-14(b)所示。

·

D3D2=L2L1及D5D4=EP、PEN位的意义与异步方式控制字相同。

·

D6=ESD位为外同步检测位。当ESD=1时,8251A工作于外同步方式,SYNDET为输入;当ESD=0时,工作于内同步方式,SYNDET为输出。

·

D7=SCS位为单字符同步位。当SCS=1时,8251A使用单同步字符;当SCS=0时,采用双同步字符。

图6-148251A的方式控制字的格式

2.命令控制字

8251A的命令控制字的格式如图6-15所示。

图6-158251A的命令控制字的格式

·

D0=TxEN位是允许发送位。只有当TxEN=1时,才允许发送器通过TxD引脚向外发送数据。

·

D1=DTR是数据终端准备好位。当DTR位置1时,就迫使DTR引脚输出有效的低电平,用以通知Modem,数据终端已做好了接收数据的准备。

·

D2=RxE位是允许接收位。当RxE=1时,接收器才能通过RxD线接收从外部发送过来的串行数据。

·

D3=SBRK位是发送空白字符位(SendBreakCharacter)。正常工作时,SBRK位应保持为0,当它为1时,就迫使TxD变为低电平,也就是一直在发送空白字符(全0)。

·

D4=ER位是清除错误标志位。8251A允许设置三个出错标志位,它们是奇偶校验错标志PE、溢出标志位OE和帧校验错标志位FE。当ER位等于l时,将PE、OE和FE三个标志位同时清0。这三个标志位的意义在下面讨论状态字时再作进一步说明。

·

D5=RTS位是请求发送位。当RTS位置1时,就迫使RTS引脚输出有效的低电平,表示计算机已准备好了数据,用该信号向Modem或外设请求发送数据。

·

D6=IR位为内部复位信号。该位置1时,使8251A内部复位,迫使8251A回到接收方式字的状态。在这种状态下,只有再向8251A的控制端口写入一个新的方式字,重新对芯片进行初始化编程后,8251A才能正常工作。

·

D7=EH位为外部搜索方式位,它只对内同步方式有效。该位置1时,8251A会从RxD引脚输入的信息流中搜索特定的同步字符,若找到了同步字符(双同步时要搜索到两个同步字符),就使SYNDET/BRKDET引脚输出高电平。

3.状态字

在数据通信系统中,常常要了解8251A的工作状态,如检查传送中是否产生了错误,TxRDY位是否有效等,以便控制CPU与8251A之间的数据交换。8251A内部设有状态寄存器,CPU可随时用IN指令读取状态寄存器的内容,在CPU读状态时,8251A将自动禁止改变状态。8251A的状态字的格式如图6-16所示。

其中,RxRDY、TxE、SYNDET/BRKDET位的意义与同名引脚的功能完全相同。

图6-168251A的状态字的格式

TxRDY是发送器准备好状态位,它与引脚信号有些区别。对于状态寄存器中的TxRDY位,只要发送数据缓冲器空就被置1;而引脚TxRDY置1的条件是:发送数据缓冲器空、CTS=0和TxEN=1必须同时成立。PE位是奇偶校验错标志位(ParityError)。PE=1表示当前产生了奇偶校验错误,它并不中止8251A的工作。OE位是溢出(丢失)错误标志位(OverError)。若CPU还没把输入缓冲器中的前一个字符取走,新的字符又被送入缓冲器,OE标志位便被置l,表示产生了溢出。该标志位不禁止8251A工作,但发生溢出时,前一个字已经丢失。FE位为帧错误标志位(FrameError),只用于异步方式。一帧数据必须以起始位开始,停止位结束,中间是字符位和奇偶校验位(若允许校验的话)。若任一个字符的结束处没有检测到有效的停止位,FE标志位置1。该标志位不禁止8251A工作。当向8251A输出命令字并使ER位置1时,则PE、OE和FE这三个标志位被复位。DSR位是数据装置准备好位。当DSR=1时,表示调制解调器已准备好发送数据,这时输入引脚DSR产生有效的低电平。6.2.38251A的编程流程图

8251A是一种多功能的串行接口芯片,使用前必须向它写入方式字及命令字等,对它进行初始化编程后才能收/发数据,使用中可以利用状态字来了解它的工作状态。方式字用来确定8251A的工作方式,如规定它工作于同步还是异步方式,传送的波特率及字符长度各是多少,是否允许奇偶校验等。命令字控制8251A按方式字所规定的方式进行工作,如允许或禁止8251A收/发数据,启动搜索同步字符,迫使8251A内部复位等。

当系统上电后用硬件电路使8251A复位,或通过软件编程使它复位后,就可对8251A进行初始化编程了。对8251A进行初始化编程的流程图如图6-17所示。

图6-17对8251A进行初始化编程的流程图由图6-17可见,系统复位后首先应将方式字写入控制端口,用来确定8251A的工作方式。若将8251A置成同步工作方式,则在方式字后,需往控制端口写入1个或2个同步字符,同步字符的个数由方式字的有关位决定。在同步字符之后,往控制端口写入命令字。若置为异步工作方式,则在输出方式字后,紧接着就往控制端口写入命令字。写入命令字后就使8251A处于规定的工作状态:准备发送或接收数据。

在传送数据的过程中,若需要改变传送方式,则必须写入使8251A内部复位的命令字,然后再重新写入新的方式字和命令字。8251A在工作过程中,还允许用IN指令读取8251A的状态字,用于了解8251A的当前工作状态,以便控制CPU与8251A之间的数据交换。6.2.48251A初始化编程举例

1.异步方式初始化程序

在接通电源时,8251A能通过硬件电路自动进入复位状态,但不能保证总是正确地复位。为了确保传送方式字和命令字之前8251A已正确复位,应先向8251A的控制端口连续写入3个全0,然后再向该端口送入一个使D0位等于1的复位控制字(40H),用软件命令使8251A可靠复位。8251A被复位后,可向它写入方式字和命令字,这两个字都被写入控制端口。8251A是通过写入次序来区分这两个字的,先写入的是方式字,在方式字后送入控制端口的是命令字。

注意:对8251A的控制端口进行一次写入操作后,需要有写恢复时间。若CLK引脚上输入时钟信号的周期为T,则需经过16个时钟周期(16T)后才能再写入第二个字。即两次写操作之间必须延时16个时钟周期才能保证可靠写入。最简单的做法是在两次写操作之间插入几条指令,再加上OUT指令本身要8个时钟周期,使延时时间足以超过16个时钟周期。下面给出能实现这种延时功能的程序段,为便于多次调用,程序段以宏指令的形式给出。

REVTIME

MACRO

MOVCX,02 ;4个时钟周期

DEPLAY:LOOPDEPLAY;17个或5个时钟周期

ENDM

在向8251A写入数据字符时,不必考虑恢复时间,这是因为8251A必须等前面一个字符移出后,才能写入新字符,移位所需的时间远大于恢复时间。若要求8251A工作于异步方式,波特率系数为16,具有7个数据位,1个停止位,有偶校验,控制端口地址为3F2H,写恢复时间程序为REVTIME,则对8251A进行初始化的程序为

MOVDX,03F2H ;控制端口

MOVAL,00H

OUTDX,AL ;向控制端口写入“0”

REVTIME ;延时,等待写操作完成

OUTDX,AL ;向控制端口写入第二个“0”

REVTIME ;延时

OUTDX,AL ;向控制端口写入第三个“0”

REVTIME ;延时

MOVAl,40H ;复位字

OUTDX,AL ;写入复位字

REVTIME ;延时

MOVAL,01111010B ;方式字:波特率系数为 16,7个数据位,一个停止位,偶校验

OUTDX,AL ;写入方式字

REVTIME ;延时

MOVAl,00010101B ;命令字:允许接收发送 数据,清除错误标志

OUTDX,AL ;写入命令字

2.同步方式初始化程序

如果8251A工作于同步方式,则初始化8251A时,先和异步方式一样,向控制端口写入3个0和1个软件复位命令字(40H),接着向控制端口写入方式字,然后往控制端口送同步字符。若方式字中规定为双同步字符,则需向控制端口再写入第2个同步字符。常用ASCII字符集中的16H作为收/发双方同意的一个同步字符。写入同步字符后,再向8251A的控制端口写入一个命令字,选通发送器和接收器,允许芯片对从RxD引脚上送来的数据位搜索同步字符。现在仍假设8251A的控制端口地址为03F2H,写恢复延时程序为REVTIME,如要求8251A工作于同步方式,采用双同步字符、奇校验、数据位为7位,则对8251A写入复位字以后的初始化程序为

… ;先向控制端口写入3个0,再送 复位命令字40H

MOVDX,03F2H ;控制端口

MOVAL,00011000B;方式字:双同步,内同步, 奇校验,7个数据位

OUTDX,AL ;送方式字

REVTIME ;延时

MOVAL,16H

OUTDX,AL ;送入第1个同步字符

REVTIME

OUTDX,AL ;送入第2个同步字符

REVTIME

MOVAL,10010101B ;命令字:启动搜索同步字符,错误标志复位,允许收发

OUTDX,AL6.2.58251A的接口技术与应用举例

【例6-2】

设8086CPU通过8251A串行接口与电传打字机相连。要求8251A工作于异步方式,波特率系数为64,字符格式为:7位数据位,1位偶检验,2位停止位,8251A的端口地址如图6-18所示。试编写8251A的初始化程序。

图6-188251A的端口地址从图6-18中可知,825lA的端口地址为偶地址,因而8251A的信息可通过8086CPU的低8位数据线D7~D0传送,具体端口地址为40H或C0H(C/=0)以及42H或C2H(C/=1)。8251A的方式选择控制字为11111011B,操作命令控制字为00010001B。初始化程序为

CONTREQU42H

DPORTEQU40H

DATASEGMENT

BUFFDB200DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

MOVAL,0FBH;8251A方式选择字

OUTCONTR,AL

MOVAL,11H ;8251A操作命令字

OUTCONTR,AL

MOVCX,200

MOVBX,OFFSETBUFF

CODEENDS

END

【例6-3】

利用8251A串行接口芯片通过标准串行接口总线RS-232C实现两台8086微机之间的串行通信,双机通信接口电路如图6-19所示。硬件电路图中仅画出一台微机的接口电路,另一台微机的接口部分完全是类似的。

利用RS-232C串行接口进行较近距离串行通信时,CPU和大多数外设或CPU与CPU之间进行通信不需要使用Modem。最常用的方法是采用三线传输的最小方式进行通信,即只使用发送数据线TxD、接收数据线RxD及地线这三根信号线进行通信,其中地线可与25芯插件的1、7脚相连。

图6-19双机通信接口电路由图6-19可见,8251A的 、 、RESET等信号与CPU的相应端相连,8251A的D7~D0和8086的低8位数据线D7~D0相连,8251A的片选信号由地址译码电路提供,C/与地址总线的A1相连,用于选择数据端口和控制端口。

从图6-19中我们还可以看到,8251A的主时钟和CPU使用同一个时钟CLK,这里假设主时钟CLK的频率为8MHz。CLK还经分频电路分频后形成2MHz的信号,送到8253的CLK0输入端,再经8253分频后,送到8251A的 和

端,作8251A的接收时钟和发送时钟。若8253工作于方式3,串行数据传送的波特率为9600b/s,波特率系数为16,则 和 的频率应是:9600×16

=

153600Hz

=

0.1536MHz。8253的通道0的分频系数为:2MHz/0.1536MHz=13。

这样,系统工作时,便可从OUT0端得到频率为0.1536MHz的方波信号,作为8251A的接收时钟信号 和发送时钟信号 。由于8251A的输入/输出信号均是TTL电平,与RS-232C的电平不一致,因此输出信号TxD要经1488转换成RS-232C的电平后才能将数据发送出去;反之,另一台计算机送来的RxD信号是RS-232C电平,也要经1489转换成TTL的电平后才能送给8251A。另外,在使用RS-232C标准的25芯接插件时要注意:不能直接将双方的输出信号线(2脚)接在一起,也不能直接将输入信号线(3脚)接在一起,这样将无法工作,而必须按图6-19所示采用交叉连接的方法。也就是说,将第一台机器的发送端TxD(2脚)与第二台机器的接收端RxD

(3脚)相连,将第二台机器的发送端与第一台机器的接收端相连,这样才能使一方发送数据,另一方接收数据。假如第一台计算机所用的8251A的数据端口和控制端口地址分别为01F0H和01F2H,两台机器之间采用查询方法、异步传送、半双工通信。发送数据时,发送端CPU不断查询TxRDY的状态是否为有效的高电平,若为高,表示发送缓冲器空,可用OUT指令向8251A输出一个数据。接收数据时,CPU不断检测RxRDY是否为有效的高电平,若为高,则表示接收数据已准备好,CPU可用IN指令从8251A输入一个数据。设第一台计算机要求发送的数据存放在以BUFF-T为起始地址(偏移量)的内存单元中,发送数据个数为COUNT-T,接收数据存放到以BUFF-R为起始地址的内存单元中,接收数据个数为COUNT-R,则对于第一台计算机来说,发送一批数据的初始化程序和控制数据传送的程序为

… ;先向控制端口写3个0, 再向控制端口写入40H, 使系统复位

BEG-T:MOVDX,01F2H;控制端口

MOVAL,7AH ;方式字:异步方式,7 个数据位,1个停止位

;偶校验、波特率系数为16

OUTDX,AL

MOVCX,02H ;延时

T1: LOOPT1

MOVAL,11H

OUTDX,AL ;清除错误标志,允许发送

MOVCX,02H ;延时

T2: LOOPT2

LEADI,BUFF-T;发送缓冲区起始地址

MOVCX,COUNT-T ;发送数据个数

NEXT-T:INAL,DX ;读入状态

TESTAL,01H ;TxRDY有效否

JZNEXT-T ;否,则等待

MOVDX,01F0H;是,数据端口地址送 DX

MOVAL,[DI] ;从缓冲区取一个数据

OUTDX,AL ;向8251A输出一个数据

INCDI ;修改缓冲区指针

LOOPNEXT-T ;没送完则继续

… ;送完同一台机器上接收一批数据的初始化程序和控制数据传送的程序为

… ;使系统复位

BEG-R:MOVDX,01F2H ;控制端口

MOVAL,7AH

OUTDX,AL ;送出方式字,同 发送部分

MOVCX,02H ;延时

R1: LOOPR1

MOVAL,14H

OUTDX,AL ;输出命令字:清 除错误标志,允许 接收

MOVCX,02H ;延时

R2: LOOPR2

LEADI,BUFF-R ;接收数据缓冲区 起始地址

MOVCX,COUNT-R ;接收数据个数

NEXT-R:INAL,DX ;读入状态字

TESTAL,02H ;RxRDY有效否

JZNEXT-R ;否,循环等待

TESTAL,38H ;是,查是否有错

JNZERROR ;有错,则转出错处理程序

MOVDX,01F0H;无错

INAL,DX ;读入一个数据

MOV[DI],AL ;输入数据一缓冲区

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论