第九章
串行通信与串行接口
【 本章重点 】
本章重点介绍有关串行通信的基本概
念和串行通信接口的工作原理,并且进一
步介绍了可编程通信接口 Intel8251A的结
构、特性、引脚及应用。
【 本章难点 】
本章难点在于对可编程串行接口芯片
8251A的特性、初始化和应用的掌握。
9.1 串行通信与串行接口基础
9.1.1 串行通信
串行通信是指数据一位接一位的顺序传送, 与并行通信相
比它所需的传输线少, 传送距离远, 而且可以利用现有的通信
线路 。
9.1.2 串行接口
1.串行接口的输入过程
( 1) 数据通过串行数据输入端输入, 串行接口接收到外设
的串行数据后, 通过控制寄存器和串行输入 /并行输出移位寄存
器变换为并行数据, 同时送入数据输入寄存器暂存 。
图 9— 1 典型串行接口电路框图
1.串行接口的输入过程
( 1) 数据通过串行数据输入端输入, 串行接口接收到外设
的串行数据后, 通过控制寄存器和串行输入 /并行输出移位寄
存器变换为并行数据, 同时送入数据输入寄存器暂存 。
( 2) 接口向 CPU发输入请求或 CPU查询输入请求的状态允
许后, CPU向接口发送读命令, 通过控制逻辑读取数据输入寄
存器中的数据 。 数据传送到 CPU内部寄存器后, 完成一次串行
输入 。
2.串行接口的输出过程
( 1) CPU向并行接口输出并行数据, 当串行接口收到后,
暂存至数据输出寄存器中 。
( 2) 通过控制寄存器和并行输入 /串行输出移位寄存器变
换为串行数据, 通过发送串行数据端发送数据 。 外设收到此数
据后完成一次串行输出 。
9.1.3 串行通信线路的工作方式
1,单工方式
2,半双工方式
3,全双工方式
图 9— 2 串行通信的连接方式
9.1.4 串行通信的数据收发方式
在串行通信中有两种基本的通信方式:即异步通信
ASYNC和同步通信 SYNC。
1,串行异步通信 ASYNC
通信的双方进行异步串行通信时必须遵守异步串行通信
控制规程, 也称异步通信协议, 他的特点是通信双方以一个
字符 ( 包括特定附加位 ) 作为数据传输单位 。 图 9.3是异步通
信时一个字符的标准数据格式 。
图 9— 3 异步通信的数据格式
2,串行同步通信 SYNC
串行同步通信是靠同步字符来完成收发双方同步的,与
异步通信相比一个显著的特点是同步通信方式所用的数据格
式没有起始位和停止位,一次传送的字符个数是可变的,但
字符与字符间不允许有空隙。它的传输格式如图 9— 4所示。
图 9— 4 同步通信数据格式
9.1.5 RS-232C串行接口标准
1.RS-232C接口概述
RS-232C是美国电子工业协会在 1969年公布的数据通信标
准, 应用于串行通信中, 是计算机与计算机之间 ( 或数据终
端设备之间 ), 计算机与调制解调器之间 ( 或数据终端设备
与数据通信设备之间 ) 的串行二进制交换的标准接口 。
调制解调器 ( MODEM) 是调制器和解调器的总称 。
图 9-5 RS-232C电平和 TTL电平的转换示意图
2,控制信号的定义
RS-232C接口采用 D型 25针连接器,而微机中的两个串行
接口 COM1和 COM2,使用的是 D型 9针连接器( 9针引脚为 IBM
公司对 RS-232C标准的缩减,且符合 RS-232C标准)。表 9-1给
出了计算机通信中常用的 RS-232C信号标准的引脚定义。
CTS
RTS
25针
引脚

9针引
脚号 名称 传送方向
表示
方法 功能
2 3 发送数据 输出 TXD 数据送到调制解调器
3 2 接收数据 输入 RXD 从调制解调器接收数据
4 7 请求发送 输出 半双工时控制发送器的开关
5 8 允许发送 输入 调制解调器准备就绪
6 6 数据设备准 备好 输入 调制解调器进入数据传送状态
7 5 信号地 信号公共 地 GND 接地
8 1 载波检测 输入 DCD 调制解调器准备接收另一端的 信号
20 4 数据终端准 备好 输出 调制解调器准备发送数据
22 9 振铃指示 输入 RI 测试到响铃信号
CTS
DSR
DTR
表 9— 1 计算机串行通信中 RS-232C信号的引脚定义
9.2 可编程串行接口 Intel8251A
9.2.1 8251A芯片外部引脚和内部结构
1,Intel8251A芯片外部引脚
图 9-6 8251A芯片引脚
( 1) 8251A与
CPU 相连的引脚
( 如图控制线和
数据线 )
( 2) 与外部
设备 /调制解调器
连接的引脚 (如图
外设 /调制解调器
控制部分 )
2,8251A的内部结构
8251A内部由 5个主要部分组成:接收器、发送器、调制
解调控制、读 /写控制和系统数据总线缓冲器。
图 9-7 8251A的内部结构
⑴ 数据总线缓冲器
数据总线缓冲器是 CPU与 8251A之间交换信息的通道 。 包括三个三态双
向 8位缓冲器, 即状态缓冲器, 接收数据缓冲器和发送数据缓冲器 。
⑵ 接收器
8251A的接收器包括接收缓冲器和接收控制电路 。 串行数据通过 RXD引
脚输入, 并按规定的格式把它转换为并行数据, 存放到数据总线缓冲器中 。
⑶ 发送器
8251A的发送器包括发送缓冲器和发送控制电路, CPU输出的并行数据,
通过规定的格式各式转换成串行数据, 从 TXD引脚输出 。
⑷ 调制控制
调制控制实现对 MODEM的控制, 8255A实现远距离串行通信时, 数据输
出端要经过调制器将数字信号转换成模拟信号, 而数据接收端收到的是经
过解调器传来的数字信号 。
⑸ 读写控制逻辑
用来控制整个 8251A芯片的工作过程, 以完成对数据信息, 状态信息和控
制信息的传输 。
9.2.2 8251A的控制字
8251A的控制字命令包括:方式选择命令字和工作命令字
( CPU发来的控制命令 ) ;工作状态字 ( 向 CPU送去的控制命
令 ) 。
1.方式选择命令字
图 9-8 8251A的通信方式选择命令字格式
2,工作命令字
图 9-9 8251A的工作命令字
3,工作状态字
8251A工作过程中执行命令进行数据传输的工作状态字放在
状态寄存器中,CPU通过 IN指令读控制 /状态口操作工作状态字。
图 9-10 8251A的工作状态字
9.3 8251A初始化编程及应用举例
9.3.1 8251A的初始化编程
1.初始化编程步骤
步骤一,8251A系统复位后, 用 OUT指令写入控制 /状态端口方式选择命
令字 。 规定双方的通信方式 ( 同步 /异步 ), 数据格式 ( 数据位和停止位
长度, 校验特征, 同步字符特征 ) 及传输速率 ( 波特率系数 ) 等参数 。
步骤二:如果 8251A工作在同步方式, 应由 CPU执行 OUT指令向控制 /
状态端口写入规定的 1个或 2个字节的同步字符 。
步骤三:不论同步方式还是异步方式 ( 复位命令除外 ), 均再由 CPU
执行 OUT指令向控制 /状态端口再写入工作命令字, 控制 8251A允许发送
/接收或复位 。
步骤四,CPU就可通过查询 8251A的工作状态字内容或采用中断方
式,进行正常的串行通信发送 /接收工作。
8251A初始化编程的操作过程可用流程图来描述,如图
9-11所示。
图 9-11 8251A初始化流程图
2.初始化编程举例
【 例 9— 1】 8251A芯片工作在异步方式下,波特率系数为
64,字符长度为 8位,奇校验,1个停止位,清除出错标志位、
请求发送、数据准备就绪,接受允许、发送允许、内部不用
复位。设 8251A的数据和控制 /状态两个端口地址分别为 020H
和 021H。
初始化程序如下:
MOV AL,01011111B
OUT 021H,AL ;设置方式选择命令字
MOV AL,00110111B
OUT 021H,AL ;设置工作命令字
【 例 9— 2】 8251A芯片工作在同步方式下, 一个同步字符
( 外同步 ), 偶校验, 字符长度 8位, 清除出错标志, 允许发
送和接收, 使 CPU已准备好且请求发送, 要求内部复位, 启动
搜索同步字符, 设同步字符为 0CCH,8251A端口地址同上例 。
初始化程序段如下:
MOV AL,01000000H
OUT 021H,AL ;复位 8251A
MOV AL,11111100B
OUT 021H,AL ;设置方式选择命令字
MOV AL,0CCH
OUT 021H,AL ;写入同步字符
MOV AL,10110111B
OUT 021H,AL ;设置工作命令字
9.3.2 8251A应用举例
利用 8251A和 RS— 232C实现两台微机之间的双机串
行通信的结构框图如图 9-12所示,这种双机通信在实际
中应用得非常广泛。试编写完整的程序完成利用 8251A
双机通信将一组数据从发送机传送到接收机。 (要求通过
发送器 A把数据 0~ 9传送到接收机 B中,采用异步方式,
字符长度为 8位,波特系数为 16,偶校验,一位停止位 )
图 9-12 8251A双机通讯结构框
初始化程序由初始化发送器 A和初始化接收
器 B两部分组成 。 使用查询方式, 双方采用半
双工通信, 所以发送器 A的初始化程序中 CPU
每查询到 TXRDY有效 ( 高电平 ), 便向 8251A
并行输出一个字节数据;接收器 B的初始化程
序中 CPU每查询到 RXRDY有效 ( 高电平 ),
则从 8251A并行输入一个字节数据 。
设 8251A端口地址为 0FF80H,0FF81H,具
体程序如下,
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
DATAX DB ‘0123456789’
DATA ENDS
CODE SEGMENT
ASSUME CS,CODE,DS, DATA,
SS, STACK
START,MOV AX,STACK ;段寄存器的装入
MOV SS,AX
MOV AX,DATA
MOV DS,AX
LEA SI,DATAX ;设置发送区的首址
1.发送器 A的初始化程序
MOV DX,0FF81H ; 8251A控制器端口地址
MOV AL,00H
OUT DX,AL ;输出空操作
MOV AL,40H
OUT DX,AL ; 8251A内部复位
NOP ;空操作
NOP
MOV AL,7EH ;定义发送器为异步方式, 8位数据,
OUT DX,AL ;波特系数为 16,偶校验, 1位停止

MOV AL,11H ;允许发送, 清除错误标志
OUT DX,AL ;设置计数值为 10
MOV CX,000AH
A1,MOV DX,0FF81H ;读 8251A的状态字
IN AL,DXH
AND AL,01H ;查询 TXRDY是否有效
JZ A1 ;无效, 继续查询
MOV AL,[DI] ;有效, 向数据端口输出一个字符
MOV DX,0FF80H
OUT DX,AL
INC SI ; SI指向下一个发送字符
LOOP A1 ; CX≠0,继续发送
MOV AH,4CH ;发送完毕, 返回 DOS
INT 21H
CODE ENDS
END START
2,接收器 B的初始化程序
STACK SEGMENT STACK
DW 64 DUP (?)
STACK ENDS
DATA SEGMENT
DATAY DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS,CODE,DS,DATA
SS,STACK2
START,MOV AX,STACK ;段寄存器的装入
MOV SS,AX
MOV AX,DATA
MOV DS,AX
LEA DI,DATAY ;设置接收区首址
MOV DX,0FF81H ; 8251A控制器端口地址
MOV AL,00H
OUT DX,AL ;输出空操作
MOV AL,40H
OUT DX,AL ; 8251A内部复位
NOP ;空操作
NOP
MOV AL,7EH ;定义接收器为异步方式, 8位数据
OUT DX,AL ;波特系数为 16,偶校验, 1位停止

MOV AL,14H ;允许接收, 清除错误标志
OUT DX,AL
MOV CX,000AH ;设置计数值为 10
A2,MOV DX,0FF81H ;读 8251A的状态字
IN AL,DX
AND AL,02H ;查询 RXRDY是否有效
JZ A2 ;无效, 继续查询
MOV DX,0FF80H ;有效, 向数据端口输入一个字符
IN AL,DX
MOV [DI],AL
INC DI ; DI指向下一个接收字符区
LOOP A2 ; CX≠0,继续发送
MOV AH,4CH ;接收完毕, 返回 DOS
INT 21H
CODE ENDS
END START
本章到此结束