第八章 串行通信接口
微机接口技术
德才兼备
知行合一
第8章 串行通信接口
学习目标:
◆ 掌握串行通信的基本概念;
◆ 掌握RS-232C串行接口标准;了解RS-422、RS-
423、RS-485串行接口标准的特点及应用场合;
◆ 理解串行接口芯片INS 8250的内部结构及外部
特性,掌握INS 8250的内部寄存器及编程方法;
◆ 重点掌握利用INS 8250实现查询方式和中断方
式下的串行通信编程应用;
◆ 学会采用BIOS或DOS调用方式利用串行接口来发
送/接收一个字符。
第8章 串行通信接口
本章目录:
串行通信的基本概念
串行接口标准
异步通信接口
通信接口的BIOS调用及DOS调用
习题与思考题
串行通信的基本概念
串行通信的特点
数据通信方式
串行通信方式
信息的校验方式
传输速率与传送距离
信号的调制与解调
串行接口的基本结构和基本功能
并行传输与串行传输
并行传输:
数据代码的每一位各占一条传输线,在两个数据部件之
间一次并行传输n位数据。适合近距离高速传输。
例:计算机内CPU与主存之间的数据传输。
串行传输 :
数据代码的所有位顺序串行排列成数据流,在一条
线缆上逐位传输。适宜远距离数据传输
例:①通信网中服务器与站点之间及各站点间的数
据传输。
② 键盘到主机键盘接口电路的按键扫描码传送、
③USB接口
串行通信的特点
串行通信特点:
① 信息在一个方向上传输,只占用一根通信
线,因此在这根传输线上既传送数据信息
又传送联络控制信息;
② 信息格式有固定的要求;
③ 需要进行逻辑电平转换。
数据通信方式
串行通信中,数据通常是在两个站(如终
端和微机)之间进行传送,按照同一时刻
数据流的方向可分成三种基本传送模式
串行通信方式
根据时钟控制方式可分为:
异步通信方式
通信的发送设备与接收设备使用各自的时钟
控制工作,要求双方的时钟尽量一致,但接收端
的时钟完全独立于发送端,由自己内部的时钟发
生器产生,所以实际频率总是有差异的。
同步通信方式
通信的双方使用同一个时钟控制数据的发送
和接收,发送端与接收端的时钟必须严格一致。
串行通信协议
通信协议:
通信双方的一种约定。约定中包括对数
据格式、同步方式、传送速度、传送步骤、
纠错方式以及控制字符定义等问题作出统
一规定,通信双方必须共同遵守。因此,
也叫做通信控制规程,或称传输控制规程
串行通信协议分类
通信协议
同步协议
异步协议
面向字符
面向比特
1.起止式异步协议
特点:
① 按字符传输;
② 靠起始位和停止位来实现字符的界定或同
步;
③ 字符之间没有固定的时间间隔要求;
④ 可靠性高;
⑤ 附加位,降低了传输效率。
异步传输模式的字符格式
1位起始位,5~8位数据
1位校验位(可无)
1位、位或2位的停止位
异步传输模式的字符格式
传送时,数据的低位在前,高位在后。
例:
要传送一个字符“C“,C的ASCII码为
43H(1000011),要求一位停止位,采用偶
校验,数据有效位7位,则一帧信息为:
0110000111
2.面向字符的同步协议
特点:
① 一次传送由若干个字符组成的数据块,
② 规定了10个特殊字符作为这个数据块的开
头与结束标志以及整个传输过程的控制信
息,它们也叫做通信控制字。
最有代表性的面向字符的协议:
IBM公司的二进制同步通信协议(BSC)
面向字符同步协议的帧格式
SYN:同步字符(Synchrunous Character),表示一
帧的开始
SOH:序始字符(Start OF Header),表示标题的
开始。
标题:包括源地址、目标地址和路由指示等信息。
STX:文始字符(Start Of Text),标志着传送正文
的开始。
ETB:组终字符(End of Trandmission Block),用于
每个分数据块后面
ETX:文终字符(End of Text) ,用于最后一个分
数据块后面。
校验码:对从SOH开始直到ETX(或ETB)字段进行
校验,校验方式可以是奇偶校验或CRC校验。
面向字符同步协议的帧格式
转义字符DLE
数据透明:
将特定字符作为普通数据处理的能力
实现方法:
协议中设置转义字符DLE(Data Link
Escape
注:
DLE本身也是特定字符,当它出现在数据
块中时,也要在它前面再加上另一个DLE。
这种方法叫字符填充。
3.面向比特的同步协议
特点:
① 所传输的一帧数据可以是任意位;
② 靠约定的位组合模式标志帧的开始和结束。
最有代表性的面向比特的协议:
① IBM的同步数据链路控制规程SDLC
(Synchronous Data Conrtol)
② 国际标准化组织ISO的高级数据链路控制规程HDLC
(High Level Data Link Conrtol)
③ 美国国家标准协会的先进数据通信规程ADCCP
(Advancde Data Communications Control Procedure)
面向比特同步协议的帧格式
标志字符: 01111110
地址场(A): 与之通信的次站的地址
控制场(C): 可规定若干个命令
注:
SDLC规定A场和C场的宽度为8位或16
位。接收方必须检查每个地址字节的第一
位,如果为“0”,则后边跟着另一个地址
字节;若为“1”,则该字节就是最后一个
地址字节。同样,如果控制场第一个字节
的第一位为“0”,则还有第二个控制场字
节,否则就只有一个字节。
面向比特同步协议的帧格式
信息场(I):要传送的数据
校验场(FC):16位循环冗余校验码CRC。其
生成多项式为CCITT多项式X16+X12+X5+1。
除了标志场和自动插入的“0”位外,所有的
信息都参加CRC计算。
“0”位插入和删除技术
“0”位插入和删除技术:
为了把信息场中同标志字节相同的字符与标
志区分开。
具体作法:
发送端在发送所有信息(除标志字节外)时,
只要遇到连续5个“1”,就自动插入一个“0”;
当接收端在接收数据时(除标志字节外),如果
连续接收到5个“1”,就自动将其后的一个“0”
删除,以恢复信息的原有形式。这种“0”位的插
入和删除过程是由硬件自动完成的。
信息的校验方式
检错:
发现传输中的错误。
纠错:
发现错误之后,如何消除错误。
常用的校验方式:
奇偶校验;
循环冗余(CRC)校验。
1.奇偶校验(Parity check)
发送时,在每个字符的数据最高有效位之后
都附加一个奇偶校验位,这个校验位可为“1”或
为“0”,以便保证整个字符(包括校验位)中
“1”的个数为偶数(偶校验)或为奇数(奇校验)
。
接收时,接收方采用与发送方相同的通信格式,
使用同样的奇偶校验,对接收到的每个字符进行
校验。
2.循环冗余码校验CRC
CRC码:
又称(n,k)循环码,此编码共n位,前k位为数
据位,后(n-k)=r位为冗余位,冗余位是原数据代
码模2除某个r位二进制数得到的余数。
CRC校验过程
将发送帧看成是一长串的二进制位流,在发
送的同时连续模2除一个二进制数(即生成多项式)
,数据位发送完毕再接着发送模2相除所得到的余
数;接收方将接收到的二进制位流(包括余数)
模2相除同一个生成多项式,若能除尽则认为传输
无误,若除不尽肯定出错。
传输速率与传送距离
1.波特率
串行通信中,每秒钟传送的位数(bit/s)
波特率与字符速率的关系:
假如在某异步串行通信中,通信格式
为1个起始位、8个数据位、1个偶数位、2
个停止位,若传输速率是1200波特,那么,
每秒所能传送的字符数是
1200/(1+8+1+2)=100个
2.发送时钟和接收时钟
在发送数据时,发送器在发送时钟(下降沿)
作用下将移位寄存器中的数据按位串行移位输出,
数据位的时间间隔取决于发送时钟周期。
在接收数据时,接收器在接收时钟(上升沿)
作用下对接收数据位采样,并按位串行移入接收
移位寄存器,最后装配成并行数据。
波特率系数:
时钟个数N,异步通信时N可取值1、16、32、64
等。同步通信时N只能取1
发送/接收时钟频率与波特率的关系:
发/接时钟频率 =N * 发/收波特
例:
N=16,传输速度为1200波特,则
发送/接收时钟频率 =
信号的调制与解调
调制:
将二进制信号变换成适合电话网传输的模拟信
号
解调:
将在电话网上传输的音频模拟信号进行还原
成原来的数字信号
调制解调器按照调制技术分为:
① 振幅键控(ASK)
② 频移键控(FSK)
③ 相移键控(PSK)
串行接口的基本结构
和基本功能
基本功能:
1、实现串行与并行数据之间的相互变换
2、根据串行通信协议完成串行数据的格式化
3、具有出错检测电路
1.异步串行通信接口
异步通信接口基本结构图
发送移位寄存器及发送控制逻辑:发送数据
寄存器的数据并行送入发送移位寄存器,
然后在发送时钟控制下,将装配好的数据
逐位发送出去。
接收移位寄存器及接收控制逻辑:在接收时
钟控制下,将串行数据输入线上的串行数
据逐位接收并移入接收移位寄存器。当移
位寄存器接收到规定的数据位后,将数据
并行送往接收数据寄存器。
发送数据寄存器:从CPU数据总线接收并行数
据。
接收数据寄存器:接收从接收移位寄存器送
来的并行输入数据,再将数据送往CPU。
数据总线缓冲器:它是CPU与数据寄存器(发
送和接收)交换数据的双向缓冲器,用来
传递CPU对端口的控制信息、双向传递数据、
向CPU提供状态信息。
常见的差错状态位
①奇偶校验错
②帧出错
③溢出错
2.同步串行通信的接口
同步通信端口基本结构图
FIFO(先进先出缓冲器):它是由多个寄存器组成,
因此发送时,CPU一次可以将几个字符预先装入;
接收时允许CPU一次连续取出几个字符。
发送FIFO:它接收CPU数据总线送来的并行数据。
输出移位寄存器:它从发送FIFO取得并行数据,以
发送时钟的速率串行发送数据信息。
CRC发生器:它从发送数据流信息中获得CRC校验
码。
CRC校验器:它从接收数据流信息中提取CRC校验
码,并与接收到的校验码相比较。
输入移位寄存器:它从串行输入线上以时钟分离器
提取出来的时钟速率接收串行数据流,每接收完
一个字符数据将其送往接收FIFO。
接收FIFO:接收输入移位寄存器送来的并行输入数
据,CPU从它取走接收数据。
总线缓冲器:它是CPU与FIFO(发送和接收)交换
数据的双向缓冲器,用来传递CPU端口的控制信
息、字符数据和向CPU提供状态信息。
时钟分离器和锁相环:用来从串行输入数据中提取
时钟信号,以保证接收时钟与发送时钟的同频同
相。
串行接口标准
数据终端设备DTE与数据通信设备DCE串行连接
时要解决两个问题:
一、双方要共同遵循物理接口标准,包括连接电
缆的机械、电气特性、信号功能及传送过程的定
义,它属于ISO’S OSI七层参考模型中的物理层。
二、按接口标准设置双发进行串行通信的接口电
路。
EIA-RS-232C接口标准
RS-422、RS-423、RS-485接口标准
EIA-RS-232C接口标准
RS-232C标准(协议)
是美国EIA(电子工业协会)于1969年公布的
通信协议。
适合数据传输速率0~20000bit/s范围内的通信。
1.电气特性
(1)电平规定
数据发送TxD和数据接收RxD的信号电平:
逻辑1(MARK)= -3 ~ -15V,典型值为-12V;
逻辑0(SPACE)= +3 ~ +15V,典型值为+12V。
RTS、CTS、DTR和DCD控制和状态信号电平:
信号有效(接通,ON状态)= +3 ~ +15V,典型
值:+12V;
信号无效(断开,OFF状态 = -3 ~ -15V,典型
值:-12V。
1.电气特性
(2)电平转换
必须在EIA-RS-232C与TTL电路之间进
行电平和逻辑关系的转换。
1.电气特性
(3)传输距离及通信速率
RS-232C接口标准的电气特性中规定,驱动
器的负载电容应小于2500pF,直接传送最
大距离是15m,传输数据速率不能高于
20kbit/s。
2.接口信号功能
RS-232并未定义连接器的物理特性,因此,出
现了DB-25、DB-15和DB-9各种类型的连接器
DB-25/DB-9型连接器
RS-232C标准接口信号
常用联络控制信号线
请求发送RTS(Request to send):表示DTE
请求DCE发送数据。
允许发送CTS(Clear to send):表示DCE准
备好接收DTE发来的数据,是对请求发送信
号RTS的响应信号。
这对RTS/CTS请求应答联络信号适用于半双工方
式,用于MOEDM系统中作发送/接收方式之间的
切换。
常用联络控制信号线
数据装置准备好DSR(Data Set Ready):由
DCE发至DTE,表示DCE已与通信信道相连
接。
数据终端准备好DTR(Data Terminal
Ready):由DTE发至DCE,有效(ON状
态)时表明数据终端可以使用。
这对信号有效只表示设备已准备好,可以使用。
所以,这两个信号可以直接连到电源上,一上电
就立即变得有效。
常用联络控制信号线
接收线信号检出RLSD(Received Line Signal
Detection):表示DCE已接通通信信道,
通知DTE准备接收数据。此线也叫数据载波
检出DCD(Data Carrier Detection)线。
振铃指示RI(Ringing):当MODEM检测到
线路上有振铃呼叫信号时,使该信号有效,
通知终端,已被呼叫,每次振铃期间RI为
接通状态,而在两次振铃期间,则为断开
状态。
数据发送与接收线
发送数据TxD(Transimitted Data):通过
TxD线数据终端设备串行发送数据到DCE。
接收数据RxD(Received Data):通过RxD
线数据终端设备接收从DCE送来的串行数
据。
地线
保护地PG:可接机器外壳,需要时可以直接
接地,也可以不接。
信号地SG:这是其它各信号电压的参考点。
无论电缆如何连接,这条线必不可少。
3、信号线的连接
(1)在15m以上的远距离通信时,一般要加调制解调
器MODEM。
若在通信双方的MODEM之间采用专用线进行通
信则只要使用2~8号信号线进行联络与控制;若
采用普通电话线进行通信,则还要增加RI(22)
和DTR(20)两个信号线进行联络。
3、信号线的连接
(2)近距离通信时,不采用调制解调器
MODEM,又称零MODEM方式。
RxD
TxD
DTR
DSR
RTS
CTS
DCD
RI
RxD
TxD
DTR
GND
DSR
RTS
CTS
DCD
RI
GND
3、信号线的连接
(3)如果在直接连接时,需要考虑RS-232C的
联络控制信号,则采用零MODEM方式的标
准连接方法,又称为双交叉环回接口。
RS-422、RS-423、RS-
485接口标准
EIA-RS-232C接口标准规定,最大传输
距离为15m,最高数据传输速率不高于
20kbit/s。
为了解决传输距离不够远、传输速率不
够快的问题,EIA在RS-232C的基础上,制
订了更高性能的串行接口标准。
1.RS-422A标准
RS-422A标准是一种以平衡方式传输的标准。
RS-422A标准的电气特性对逻辑电平的定义是
根据两条传线之间的电位差值来决定 :当AA’电
平比BB’电平低-2V时表示逻辑“1”;当AA’线电
平比BB’线电平高+2V时表示逻辑“0”。
RS-422A电路通过平衡发送器把逻辑电平变换
成电位差,完成始端的信息传送;
通过差动接收器把电位差变成逻辑电平,实现
终端的信息接收。
RS-422A标准抗共模干扰的能力强,最大数据
速率可达10Mbit(传送15m时)。若传输速率降
到90kbit/s时,则最大距离可达1200m。
该标准规定电路中只许有1个发送器,可有多
个接收器,允许驱动器输出为+2V~+6V,接收器
输入电平可以低到+200mV。
为了实现RS-422A标准的连接,许多公司推出
了平衡驱动器/接收器集成芯片,如MC3487/3486、
SN75174/75175等。
2.RS-423A标准
RS-423A标准是非平衡方式传输的。即单端线
传送信号,规定信号参考电平为地。
该标准规定电路中只允许有1个单端发送器,
但可有多个接收器。因此,允许在发送器和接收
器之间有一个电位差。
标准规定的逻辑“1”电压必须超过4V,但不
能高于6V;逻辑“0”电压必须低于-4V,但不能
低于-6V。
RS-423A标准由于采用差动接收,提高了抗共
模干扰的能力,因而与RS-232C相比,具有传输
距离更远、传输速率更快,当传输距离为90m时,
最大数据速率可为100kbit/s,若降至1kbit/s时,传
输距离为1200m。
3.RS-485接口标准
RS-485是一种平衡传输方式的串行接口标准,
和RS-422A兼容,且扩展了其功能,是一个多发
送器的标准,允许一个发送器驱动多个负载设备。
RS-485的共线电路结构是在一对平衡传输线的
两端都配置终端电阻,其发送器、接收器、组合
收发器可挂在平衡传输线上的任何位置。
RS-485标准抗干扰能力强,传输速率高,传送
距离远。。
RS-485允许平衡电缆上连接32个发送器/接收
器对,目前已在许多方面得到应用,尤其是在多
点通信系统中。
为了实现RS-485标准串行传送,可采用大规模
集成芯片,如MAXIM公司的MAX485/491芯片。
异步通信接口
IBM-PC机系统可配有同步和异步通信接口,
一般系统只配置了异步通信接口,系统提供有两
个通信端口:COM1和COM2。
PC/XT异步通信适配器提供RS-232C标准的
EIA电压接口和20mA电流环接口两种操作方式。
异步通信适配器的组成
INS 8250的结构和外部特性
INS8250内部寄存器及其编程方法
INS 8250应用实例
异步通信适配器的组成
1.电平转换
INS 8250芯片处理电平为TTL电平,要
与25芯连接器相连接,必须经过电平转换。
前图中,INS 8250和连接器的信号线是
分别通过了电平转换器SN75150和SN75154
才送到对方的。
2.地址译码电路
系统地址总线低10位(A0~A9)用于端口地址译码,其中高
位地址(A3~A9)经译码器U2产生选片信号,送到8250的
CS2端;低位地址(A0~A2)直接送到8250的(A0~A2)
端,作为芯片内部寄存器的选择线。
I/O地址译码部分是由8输入端与非门U2及反相器U3组成的。
口地址有两个,由跳接开关U15的J10和J12端子进行切换。
中断请求由跳线开关U15控制连接IRQ3/IRQ4 。
INS 8250的结构和外部特
性
INS 8250的外部引脚及内部结构图
片选信号CS0=1,CS1=1,CS2=0时,选中INS 8250芯
片,并由A0~A2选择访问哪个内部寄存器。
DISTR或DISTR和DOSTR或DOSTR,读写控制信号
两对。
DDIS,(数据总线)驱动器禁止信号引脚,在CPU
从8250读取数据时为低电平,其它时间为高电平,
禁止外部收发器对系统总线的驱动,PC/XT异步
适配器未使用此信号。
中断请求引脚INTRPT,OUT1和OUT2两个输出引脚
用来控制INTRPT的输出。
XTAL1 XTAL2 ,输入外部晶体振荡电路产生的
信号,作为8250的基准工作时钟。
BAUDOUT,输出外部输入的基准时钟经内部波特
率发生器(分频器)分频后产生的发送时钟。
RCLK可接收由外部提供的接收时钟信号。
MR,主复位端,接系统RESET信号。
INS8250内部寄存器及
其编程方法
8250芯片只有3根地址选择线A0~A2,而内部有
10个可访问的寄存器,所以有些寄存器的端口地
址必须重复
8250内部寄存器地址
1.波特率因子寄存器
(DLL/DLH)
8250芯片串行数据传输的速率是由波特率因子
寄存器DLL/DLH控制,在初始化时将选用的波特
率因子值的高、低字节分别写入DLH和DLL。
外接基准时钟,通过除以波特率因
子寄存器给定的分频值,在8250内部产生不同的
波特率,通过BAUDOUT引脚输出接到RCLK端,
控制收发数据的传输速率。
即分频值的计算公式是:
波特率因子=1843200÷(16*波特率)
波特率因子与波特率对照表
若设定通信波特率为1200BPS,则波特率因子值为00H(高8位)
和60H(低8位),其装入程序段为:
MOV DX,3FBH ;置LCR口地址,DLAB=1
MOV AL,80H
OUT DX,AL
MOV DX,3F8H ;DLL的口地址
MOV AL,60H ;波特率因子低字节
MOV DX,3F9H ;DLH的口地址
MOV AL,00H ;波特率因子高字节
OUT DX,AL
例:设置INS8250波特率因子寄存器
2.通信线路控制寄存器(LCR)
主要用来指定异步通信数据格式,即字符
长度、停止位位数、奇偶校验。
LCR的最高位DLAB用来指定允许访问波特
率因子寄存器。
内容不仅可以写入而且可以读出。
D0D1位:字长选择,用来设置数据有效位数。
WLS1WLS0=00,为5位;WLS1WLS0=01,为6位;
WLS1WLS0=10,为7位;WLS1WLS0=11,为8位。
D2位:停止位选择,用来设置停止位位数。
STB=0,为1位;STB=1,为1½位(字符长为5位时);或
STB=1,为2位(字符长度为6,7或8位时)。
D3位:奇偶校验允许位,用来设置是否要奇偶校验。
PEN=0,不要校验;PEN=1,要校验。
D4位:偶校验选择,用来设置偶校验或奇校验
EPS=0,要奇校验;EPS=1,要偶校验。
D5位:附加奇偶标志位选择。
SP=0,不附加;SP=1,附加1位。
D6位:中止设定。指定发正常信号还是连续发空号
(逻辑0)。
SB=0,正常;SB=1,中止。
D7位:波特率因子寄存器访问允许控制位。
DLAB=1,允许访问波特率因子寄存器;DLAB=0,访问
其他寄存器。
PEN=1 SP=1时,说明在奇偶校验位和停止位
之间插入一位奇偶标志位:
“0”,采用偶校验;“1”,则采用奇校验。
作用是发送设备把采用何种奇偶校验方式通过数
据流告诉接收设备
例,设发送数据字长为7位,1位停止位,偶校验,
其程序段为:
MOV DX,3FBH ;LCR口地址
MOV AL,00011010B ;LCR的内容,数据格式
参数
OUT DX,AL
3.通信线路状态寄存器(LSR)
表示数据接收和数据发送时8250的状态。
若出错,则指出出错的类型。
CPU可以采用查询方式查询这些状态,也可以
采用中断方式获得出错的原因。对LSR不仅可读,
而且可写(除6位外),写LSR是为了人为地设置
某些错误状态,供系统自检时使用。
D0位:接收数据准备好(接收缓冲器满)。
DR=1,表示接收器已接收到一个数据字符,并且
接收移位寄存器的内容已送到接收缓冲器中;当
CPU从接收缓冲器读走一个数据时,DR位自动置
“0”。
D1~D3位:出错标志位。
OE溢出错标志位:
PE 奇偶校验出错标志位:
FE 帧出错标志位:
D4位:中止识别指示。
BI=1,指示发送设备进入中止状态;发送端发送
正常时,BI=0。
D5位:发送保持器空。
THRE=1,一旦数据从发送保持寄存器送到发送移
位寄存器,发送保持寄存器就变为空;当CPU将
数据写入发送保持器中,THRE自动置“0”。
D6位:发送移位寄存器空(只读)。
TSRE=1,表示数据从发送移位寄存器送到发送数
据上;当发送保持寄存器的内容被送入发送移位
寄存器时,TSRE自动置“0”。
START:
MOV DX,3FDH ;LSR口地址
IN AL,DX ;读取LSR的内容
TEST AL,00011110B ;查询有无数据接收错误
JNZ ERR ;有错,转出错处理
TEST AL, 01H ;无错,查询接收数据是否
;准备好,DR=1?
JNZ RECEIVE ;已准备好,则转到接收程序
TEST AL, 20H ;未准备好,再查发送保持
;寄存器是否空,THRE=1?
JNZ TRANS ;已空,则转到发送程序
JMP START ;不空,循环等待
ERR: ……
TRANS : ……
RECEIVE: ……
例:利用LSR的状态位进行收发数据处理
4.中断允许寄存器(IER)
控制中断源提出的中断请求被允许还是
被禁止。
该寄存器控制了8250的4个中断,若对应
位置“1”,则允许相应的中断请求;若对
应位置“0”,就禁止相应的中断请求。
D0位:ERBFI=1,允许接收缓冲器满中断;
ERBFI=0,禁止接收缓冲器满中断
D1位:ETBEI=1,允许发送保持寄存器空中断;
ETBEI=0,禁止发送保持寄存器空中断
D2位:ELSI=1, 允许接收数据出错中断;ELSI=0
,禁止接收数据出错中断
D3位:EMSI=1,允许调制解调器状态改变中断;
EMSI=0,禁止调制解调器状态改变中断
D4~D7位:标志位,D4~D7=0
5.中断识别寄存器(IIR)
8250内部设有4个中断优先级,按从高到低的
顺序排列为:接收数据出错中断、接收缓冲器满
中断、发送保持寄存器空中断、MODEM控制信
号状态改变引起的中断。
8250内部设置了中断识别寄存器IIR,用来保
存优先级最高的中断类型编码,直到该中断请求
被CPU响应并服务之后,才能接受其它的中断请
求。IIR是只读寄存器,它的内容随中断源而改变。
最高5位为标志位,规定为低电平“0”。
D0位:IP=0,表示还有其它中断等待处理;IP=1,
表示无其它中断等待处理。
D1D2位:中断类型标识码ID1ID2,表示申请中断的
中断源的中断类型编码。
ID1ID2=00时,调制解调器状态改变引起的中断
ID1ID2=01时,发送保持寄存器空(THRE=1)中断
ID1ID2=10时,接收缓冲器满(RBFI=1)中断
ID1ID2=11时,接收数据出错(包括OE=1,PE=1,
FE=1,BI=1)中断
6.调制解调控制寄存器(MCR)
调制解调控制寄存器(MCR)
设置对MODEM的联络控制信号和芯片自检
D0位:D0=1,数据终端准备好(DTR=1)有效
D1位:D1=1,请求发送有效(RTS=1)
D2位:D2=1,使OUT1输出有效(OUT1=1),未使
用
D3位:D3=1,中断控制,为使8250能发出中断控制
信号,此位必须置“1”(OUT2=1)
D4位:LOOP位是供8250本身自检诊断而设置的。
当这位置“1”时,8250处于诊断方式。在正常通
信时,LOOP位置“0”。
若要使MCR的DTR、 RTS有效,OUT1、OUT2以及LOOP无效,则
可用下程序
MOV DX,3FCH ;MCR口地址
MOV AL,00000011B ;MCR的控制字
OUT DX,AL
若要自发自收进行诊断,则程序段为:
MOV DX,3FCH ;MCR口地址
MOV AL,00010011B ;LOOP位置“1”
OUT DX,AL
例:设置MCR
7.MODEM状态寄存器(MSR)
MODEM状态寄存器用来检测和记录来自
MODEM的联络控制信号及其状态的变化
MSR的低4位表示来自MODEM联络控制信号
状态的改变情况。任意一位为“1”,且在中断允
许时(IER中D3=1),均产生MODEM状态中断。
MSR的高4位,分别表示收到了来自MODEM
的控制信号,供CPU进行处理。
8.发送保持寄存器(THR)
发送时,CPU首先将待发送的字符写到
8250的发送保持寄存器THR中,然后进入
发送移位寄存器,在发送时钟的作用下,
从SOUT引脚输出。
接收缓冲寄存器(RBR)
接收时,串行数据在接收时钟作用下,
从SIN引脚先输入到接收移位寄存器RSR,
然后由RSR并行输入到接收缓冲器RBR,一
旦RBR变满,将LSR的DR位置“1”,产生
中断请求,要求CPU读取数据字符。
INS 8250应用实例
异步通信编程一般有三个部分:
初始化串行通信口、发送一个字符以及接收
一个字符。
1.初始化串行通信口COM1
初始化串行通信口COM1(端口基址3F8H):
确定数据传输帧格式、确定传输波特率以
及确定8250操作方式。
8250操作方式:
自发自收的循环反馈通信方式
程序查询方式传送
中断方式传送
初始化方法有两种:
一种是按步骤分别对线路控制寄存器、波特率因子
寄存器和MODEM的控制寄存器等进行参数写入
操作,其参数是在程序中由指令分散设定的;
二是专门编制一个初始化串行口的子程序,其初始
化参数作为子程序的入口参数集中给出,可由调
用者按要求设置不同参数来完成相应的初始化。
入口参数:AL=初始化参数
其中,D4~D0各位的定义与线路控制寄存器相对应
的位定义相同,而D7~D5的各位则为波特率选择。
;波特率因子表
;D7D6D5 波特率BAUD-TABLE
DW 1047 ;0 0 0 110
DW 768 ;0 0 1 150
DW 384 ;0 1 0 300
DW 192 ;0 1 1 600
DW 96 ;1 0 0 1200
DW 48 ;1 0 1 2400
DW 24 ;1 1 0 4800
DW 12 ;1 1 1 9600
SERIAL-INIT PROC NEAR
MOV AH,AL ;入口参数保存到AH
MOV DX,3FBH ;线路控制寄存器端口
MOV AL,80H ;置DLAB=1
OUT DX,AL
MOV DL,AH ;获取波特率因子
MOV CL,4
ROL DL,CL ;波特率因子移低4位
串行口初始化的子程序
AND DX,0EH ;因子值乘2,存放在DX
MOV DI,OFFSET BAUD-TABLE
ADD DI,DX ;DI为波特率因子表索引
MOV DX,3F9H ;波特率因子高字节端口
MOV AL,CS:[DI]+1
OUT DX,AL ;写入因子高字节
MOV DX,3F8H ;波特率因子低字节端口
MOV AL,CS:[DI]
OUT DX,AL ;写入低字节
MOV DX,3FBH ;线路控制寄存器端口
MOV AL,AH
AND AL,1FH ;保留数据格式参数
OUT DX,AL ;写入数据格式
MOV AL,0 ;屏蔽4种中断源类型
MOV DX,3F9H ;中断允许寄存器端口
OUT DX,AL ;采用查询I/O
RET ;正常通信,返回
SERIAL-INIT ENDP
串行口初始化的子程序(续)
2.查询方式下的PC机间相互通
信
要求:在A机上敲键盘字符,并且在A机的屏幕上显
示该字符,然后通过串行口将该字符发送给B机,
并且也在B机上显示,即实现A机与B机间通信,
通信波特率为1200BPS。以敲击字符“P”作为结
束,(使用COM2端口)。
分析:为了实现PC机间相互通信,两机通过RS-
232C的三根信号线(TXD、RXD、GND)进行相
连。为实现一端向另一端传送数据,采用查询方
式分别编写发送程序和接收程序。
查询方式的PC机间通信程序流程
图
data segment
disp db 'transmission start:',0ah,0dh,'$'
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV DX,2FBH ;置DLAB=1
MOV AL,80H
OUT DX,AL
MOV DX,2F8H ;置波特率因子寄存器
MOV AL,60H ;波特率因子低字节
OUT DX,AL
MOV DX,2F9H
MOV AL,0 ;波特率因子高字节
OUT DX,AL
MOV DX,2FBH ;置线路控制寄存器
MOV AL,0AH ;数据位7位、停止位1位、奇校验
OUT DX,AL
查询方式的PC机间相互通信发送程序
MOV DX,2FCH ;置MODEM控制寄存器
MOV AL,02H ;禁止中断
OUT DX,AL
MOV DX,2F9H ;置中断允许寄存器
MOV AL,0 ;屏蔽所有中断
OUT DX,AL
MOV DX,OFFSET DISP ;显示发送提示信息
MOV AH,9
INT 21H
CODE ENDS
END START
LOP: MOV DX,2FDH ;读线路状态寄存器
IN AL,DX
TEST AL,20H ;测试发送保持寄存器空?
JZ LOP ;不空,则循环测试
MOV AH,1 ;读取按键字符,并显示
INT 21H
MOV DX,2F8H ;发送该字符
OUT DX,AL
CMP AL,'P' ;判断按下字符“P”吗?
JZ OVER ;是,则结束
JMP LOP ;不是。继续循环
OVER: MOV AH,4CH ;返回DOS
INT 21H
查询方式的PC机间相互通信发送程序(续)
DATA SEGMENT
RBUF DB 30 DUP(0)
DISP DB 'RECEIVE START:',0AH,0DH,'$'
ERROR DB 'RECEIVE ERROR!',0AH,0DH,'$'
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA SI,RBUF ;置接收缓冲区地址指针
MOV DX,2FBH ;置DLAB=1
MOV AL,80H
OUT DX,AL
MOV DX,2F8H ;置波特率因子寄存器
MOV AL,60H ;波特率因子低字节
OUT DX,AL
MOV DX,2F9H
MOV AL,0 ;波特率因子高字节
OUT DX,AL
查询方式的PC机间相互通信接收程序
MOV DX,2FBH ;置通信线路控制寄存器
MOV AL,0AH ;数据位7位、停止位1 位、奇校验
OUT DX,AL
MOV DX,2FCH ;置MODEM控制寄存器
MOV AL,02 ;禁止中断
OUT DX,AL
MOV DX,2F9H ;置中断允许寄存器
MOV AL,0 ;屏蔽所有中断
OUT DX,AL
MOV DX,OFFSET DISP ;显示接收提示信息
MOV AH,9
INT 21H
MOV DX,2F8H ;读接收缓冲器内容,不处理
IN AL,DX
LOP: MOV DX,2FDH ;读线路状态寄存器
IN AL,DX
TEST AL,1EH ;测试接收错误?
JNZ ER ;有,转错误显示
TEST AL,01H ;无,则测试接收数据准备好?
JZ LOP
查询方式的PC机间相互通信接收程序(续1)
MOV DX,2F8H ;准备好则接收字符
IN AL,DX
AND AL,7FH
CMP AL,'P' ;判断接收结束吗?
JZ OVER ;结束转OVER
MOV [SI],AL ;未结束则存入缓冲区
INC SI
MOV DL,AL ;显示该字符
MOV AH,02
INT 21H
JMP LOP
ER: MOV DX,2F8H ;清标志位
IN AL,DX
MOV DX,OFFSET ERROR;显示错误信息
MOV AH,9
INT 21H
JMP LOP
OVER: MOV DL,AL
MOV AH,2
INT 21H
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START
查询方式的PC机间相互通信接收程序(续2)
3.中断方式下的PC机间相互通
信
要求:采用中断方式在PC机间发送和接收信息。
(使用COM2端口)
发送方:在发送主程序中,接收键盘输入信息,以
回车符作为结束,键入信息并存入发送缓冲区中。
能否发送是由用户确认后才能发送,发送过程中
允许中断,发送保持寄存器空引起中断。
接收方:以中断方式接收发送方送来的字符信息。
接收时,使用接收数据准备好方式中断,将接收
到的字符信息存入接收缓冲区中,并且在屏幕上
显示。
DATA SEGMENT
SBUF DB 100 DUP(?) ;发送缓冲区
DISP1 DB 0DH,0AH,'SEND MESSAGE:$'
DISP2 DB 0DH,0AH,'TRANSMISSION MESSAGE?[Y/N]:$'
SENDPTR DW ?
ENDFLAG DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START: MOV AX,DATA
MOV DS,AX
CLI ;关中断
MOV AX,0 ;设置IRQ3中断向量MOV ES,AX
MOV DI ,0BH*4
MOV AX,OFFSET SENDINT
CLD
STOSW
MOV AX,CS
STOSW
MOV AL,0FFH ;屏蔽8259A所有中断
OUT 21H,AL
MOV DX,2FBH ;置DLAB=1
MOV AL,80H
OUT DX,AL
MOV DX,2F8H ;设置通信波特率2400BPS
MOV AL,30H ;波特率因子低字节
OUT DX,AL
中断方式PC机间相互通信发送程序
MOV DX,2F9H
MOV AL,0 ;波特率因子高字节
OUT DX,AL
MOV DX,2FBH ;设置通信线路控制寄存器
MOV AL,0AH ;数据位7位、停止位1位、奇校验
OUT DX,AL
MOV DX,2FCH ;设置MODEM控制寄存器
MOV AL,0BH ;允许8250发中断
OUT DX,AL
MOV AL,0 ;置8259A中断屏蔽寄存器
OUT 21H,AL ;所有中断源不屏蔽
NEXT: MOV AL,0 ;置发送结束标志为未结束
MOV ENDFLAG,AL ;存入保护单元
MOV DX,2F9H ;设置中断允许寄存器
MOV AL,0 ;禁止所有中断
OUT DX,AL
STI ;CPU开中断
MOV SI,OFFSET SBUF ;置发送缓冲区指针
MOV SENDPTR,SI ;保护指针
MOV DX,OFFSET DISP1;显示接收提示信息
MOV AH,9
INT 21H
LP: MOV AH,1 ;接收键入字符并显示
INT 21H
MOV [SI],AL ;存入发送缓冲区
INC SI ;修改指针
中断方式PC机间相互通信发送程序(续1)
CMP AL,0DH ;判断是回车键吗?
JNZ LP ;不是,则继续接收字符
LEA DX,DISP2 ;显示发送提示信息
MOV AH,9
INT 21H
MOV AH,1
INT 21H
CMP AL,'N' ;判断是“N”吗?
JZ NEXT ;不是,则重新输入
MOV SI,OFFSET SBUF ;恢复发送缓冲区指针初值
MOV DX,2F9H ;设置中断允许寄存器
MOV AL,2 ;允许发送保持寄存器空中断
OUT DX,AL
WINT: HLT ;等待中断
MOV AL,ENDFLAG
CMP AL,0FFH ;判断发送结束吗?
JZ NEXT ;结束,转重新接收
JMP WINT ;未结束,等待发送
SENDINT PROC NEAR ;中断方式发送子程序
PUSH DS ;寄存器保护
PUSH SI
PUSH AX
PUSH DX
中断方式PC机间相互通信发送程序(续2)
MOV AX,DATA
MOV DS,AX
MOV SI ,SENDPTR ;发送缓冲区当前指针
STI ;CPU开中断
MOV AL,[SI] ;发送字符
MOV DX,2F8H
OUT DX,AL
INC SI ;修改指针
MOV SENDPTR,SI
CMP AL,0DH ;判断发送结束吗?
JZ SEND ;结束转SEND
MOV AL,0 ;置未发送结束标志
JMP NEND
SEND: MOV AL,0FFH ;置发送结束标志
NEND: MOV ENDFLAG,AL
MOV AL,20H ;结束中断(EOI)
OUT 20H,AL
POP DX ;恢复寄存器
POP AX
POP SI
POP DS
IRET
SENDINT ENDP
CODE ENDS
END START
中断方式PC机间相互通信发送程序(续3)
DATA SEGMENT
RBUF DB 100 DUP(?) ;接收缓冲区
DISP DB 0AH,'RECEIVE MESSAGE:$'
RECEPTR DW ?
ENDFLAG DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START: MOV AX,DATA
MOV DS,AX
CLI ;CPU关中断
MOV AX,0 ;设置IRQ3中断向量
MOV ES,AX
MOV DI,0BH*4
MOV AX,OFFSET RECIVINT
CLD
STOSW
MOV AX,CS
STOSW
MOV AL,0FFH ;屏蔽8259A所有中断
OUT 21H,AL
MOV DX,2FBH ;置DLAB=1
MOV AL,80H
OUT DX,AL
中断方式PC机间相互通信接收程序
MOV DX,2F8H ;设置波特率2400BPS
MOV AL,30H ;波特率因子低字节
OUT DX,AL
MOV DX,2F9H
MOV AL,0 ;波特率因子高字节
OUT DX,AL
MOV DX,2FBH ;设置通信线路控制寄存器
MOV AL,0AH ;数据位7位、停止位1位、奇校验
OUT DX,AL
MOV DX,2FCH ;设置MODEM控制寄存器
MOV AL,0BH ;允许8250发中断
OUT DX,AL
MOV DX,2F9H ;设置中断允许寄存器
MOV AL,1 ;允许数据接收准备好中断
OUT DX,AL
MOV AL,0 ;8259A所有中断未屏蔽
OUT 21H,AL
NEXT : MOV SI,OFFSET RBUF ;置接收缓冲区指针
MOV RECEPTR,SI
MOV AL,0 ;置接收结束标志为未结束
MOV ENDFLAG,AL
STI ;CPU开中断
中断方式PC机间相互通信接收程序(续1)
LEA DX,DISP ;显示接收提示信息
MOV AH,9
INT 21H
WINT: HLT ;等待中断
MOV AL,ENDFLAG
CMP AL,0FFH ;判断接收结束吗?
JNZ WINT ;未结束,继续接收
JMP NEXT ;结束转NEXT
RECIVINT PROC NEAR ;接收字符中断处理子程序
PUSH DS ;保护寄存器
PUSH SI
PUSH AX
PUSH DX
MOV AX,DATA
MOV DS,AX
MOV SI ,RECEPTR ;恢复接收缓冲区指针
STI ;CPU开中断
MOV DX,2F8H ;接收字符
IN AL,DX
MOV [SI],AL ;字符存入接收缓冲区
INC SI ;修改指针
中断方式PC机间相互通信接收程序(续2)
MOV RECEPTR,SI
MOV DL,AL ;显示接收字符
MOV AH,2
INT 21H
CMP AL,0DH ;判断接收结束吗?
JNZ NEND ;未结束转NEND
MOV AL,0FFH ;结束则置接收结束标志
MOV ENDFLAG,AL
NEND: MOV AL,20H ;发中断结束命令(EOI)
OUT 20H,AL
POP DX ;恢复寄存器
POP AX
POP SI
POP DS
IRET
RECIVINT ENDP
CODE ENDS
END START
中断方式PC机间相互通信接收程序(续3)
通信接口的BIOS调用及DOS
调用
PC系列及其兼容机提供了一种功能全面、
使用灵活的ROM BIOS功能调用和DOS功能
调用,以软中断INT 14H和INT 21H的形式
提供给高层系统软件或应用程序调用。
通信接口的BIOS调用
通信接口的DOS调用
通信接口的BIOS调用
INT 14H根据功能号分为串行口初始化、发送
一个字符到串行口、从串行口接收一个字符、
读串行口当前状态等四个功能模块组成
串行通信接口的BIOS调用(INT 14H)
对8250进行初始化,即约定通信双方采用的
波特率,数据位位数,停止位位数及奇偶校验等
参数。这些参数由用户写入AL寄存器。
采用串行口COM1进行通信,要求数据格式为:8位数据
位,2位停止位,奇校验,数据传输率为4800bit/s
MOV AH,0H ;初始化功能号
MOV AL,11001111B ;初始化内容
MOV DX,0H ;通信口号
INT 14H ;调用0
号功能
0号功能初始化程序
2.1号功能
把AL中存放的字符向串行口发送。
如果发送字符不成功,则AH寄存器的最
高位为1,表示发送失败。
在CPU向8250的发送保持寄存器THR发
送一个字符之前,要读线路状态寄存器
(LSR),检测发送保持寄存器是否已空,
即THRE位是否为“1”,THRE=1时才能发
送字符。
3.2号功能
从串行口接收一个字符并放入AL寄存器
中。如果接收成功,则AL寄存器存放接收
的字符,AH7=0;若接收不成功,则AH7=1。
在CPU从8250的接收缓冲器中读一个字
符之前,要读线路状态寄存器(LSR),检
测接收缓冲器是否已装满接收的字符,即
DRF位是否为“1”,DRF=1时才能接收字
符。
4.3号功能
读串行通信口的状态。
调用时,只需指出被查询的串行通信口号,
调用返回时,其状态信息放入AX中,
(AL)=MODEM状态,(AH)=线路状态。
通信接口的DOS调用
通信接口的DOS调用(INT 21H)能够
实现向串行口发送一个字符和从串行口接
收一个字符。
当功能号(AH=3)时,从串行口等待输
入一个字符,存入寄存器AL中,且不返回
状态和错误码;
当功能号(AH=4)时,把寄存器DL中
的字符输出到串行通信口,也不返回状态
和错误码。
习题与思考题
1.为何要在RS-232C与TTL电平之间加电平转换电
路?
2.面向字符和面向比特的通信协议有什么不同?各
自的帧格式是怎样的?
3.利用一个异步传输系统传送文字资料,传输率为
2400BPS,资料约1000个汉字,传输时采用数据
有效位8位、停止位1位、无校验位,问至少需要
多长时间才能把全部资料传完?
4.编写PC机间通信程序。要求:发送端以中断方
式发送数据;接收端以查询方式接收数据。
5.试利用串行通信接口的BIOS调用(INT 14H),
编写一个发送程序,发送一个1KB大小的文件。