? 串行通信的基本概念
串行通信的接口标准
16550可编程串行接口芯片本章内容
了解微机串行通信的基本概念
了解 RS-232C,RS485以及 USB等几种串行接口标准及其用法
掌握 16550芯片的接口技术及程序设计学习目的
12.1 串行通信的基本概念通信,计算机与外部设备之间,计算机之间的信息交换 。
通信的基本方式并行通信串行通信 异步通信同步通信
12.1.1 串行通信的连接方式图 12.1 串行通信的 3种连接方式发送器
A
发送器接收器发送器接收器发送器接收器接收器发送器接收器
B数据线
(a)单工方式数据线
A B
(c)全双工方式数据线数据线A B
(b)半双工方式
12.1.2 信号的调制与解调
MODEM是由调制器和解调器合在一起形成的一个装置,以用作双向通信。 MODEM的类型一般可分为幅移键控( ASK),频移键控( FSK) 和相移键控( PSK) 等。当通信波特率小于 300bit/s时,
常采用 FSK调制方式。
12.1.3 同步与异步通信方式
1,异步通信方式( ASYNC)
第 n+1个字符第 n个字符空闲位起始位停止位7位数据位空闲位起始位
01 1 11 0 D0 D1 D2 D3 D4 D5 D6
图 12.3 异步通信字符格式异步通信方式的特点是:
( 1) 起始位,一位,逻辑 0,表示字符的开始;
通信时以收发一个字符为独立的通信单 位,
每个字符由 4个部分组成:
( 2) 数据位,可以是 5~ 8位逻辑 0/逻辑 1,与双方约定的编码形式有关,如,ASCII码( 7位),扩展的 BCD码( 8位)等,起始位之后紧跟着的是数据的最低位 D0。
( 3) 奇 /偶校验位,一位逻辑 0/逻辑 1。
( 4) 停止位,1位或 1.5位或 2位逻辑 1,表示字符的结束 。
2,同步通信方式( SYNC)
在异步通信中,每个字符都要用起始位和停止位来使通信双方同步,这些附加的额外信息,使得异步通信的传输效率不高。在需传输大量数据的场合,为提高传输效率和速度,常去掉这些附加位,即采用同步通信 SYNC( Synchronous data Communication)
同步字符 数据块 CRC1 CRC2
同步字符 2 数据块 CRC1 CRC2同步字符 1
a.单同步格式
b.双同步格式同步通信方式的特点是:
③ 为了防止因收,发双方的时钟频率的偏差的积累效应而产生错位,从而导致通信出错,同步通信要求接收和发送的时钟完全同步,不能有误差 。 实际应用中,同步传送常在收,发双方间使用同一时钟,故硬件电路比较复杂 。
② 对每个字符的检错一般可用奇校验,数据块的末尾用
CRC( 循环冗余码 ) 对整个数据块进行校验 。
① 收,发双方以一个或两个预先约定的同步字符作为数据块传送 的开始,数据块由几十到几千,甚至更多字节组成 。
12.1.4 波特率与收 /发时钟
1,波特率计算机串行通信中常用波特率( Baud rate) 来表示数据传输率,波特率的单位是 bit/s,即每秒所传送的二进制位数。常用的标准值有 110,300,600,1200,
2400,4800,9600,19200波特等。
某异步通信中每秒传送 960个字符,而每个字符由 10位( 1个起始位,7个数据位,1个奇校验位,1
个停止位)组成,则传送的波特率为:
fd=10× 960bit/s=9600bit/s
传送一位的时间 Td=1/9600=0.104ms
例如,
2.接收 /发送时钟异步通信中,大多数串行端口发送和接收的波特率均可分别设置,由发送器和接收器各用一个时钟来确定,分别称为 发送时钟 和 接收时钟 。
为了有利于收发双方同步,以及提高抗干扰的能力,这两个 时钟频率 fc一般不等于 波特率 fd,两者之间的关系为:
fc=kfd
其中,k称为波特率系数,其取值可为 16,32或 64。
12.2 串行通信的接口标准一个完整的串行通信系统除了对上一节所介绍的通信规程有所规定外,还必然会涉及到在电气连接上的接口标准问题 。 标准化的通用总线结构能使系统结构化,模块化,大大简化系统软,
硬件设计的工作,因此被普遍采用 。 本节介绍目前常用的有代表性的三种串行接口标准 。
12.2.1 RS-232C接口标准
RS-232C是串行异步通信中应用最广的串行总线标准,1969年由美国 EIA( 电子工业协会 ) 颁发,其中 RS是
Recommended Standard的编写,232是标准的标识号 。
RS-232C的前身是 RS-232A和 RS-232B,这前两种接口标准现在已很少使用 。 RS-232C主要用于使用模拟信道传输数字信号的场合,推出这种标准的最初目的是在数据终端设备 DTE( Data Terminal Equipment) 与数据通信设备
DCE( Data Communication Equipment) 之间建立接口标准 。
RS-232C的典型应用如图 12.5所示。
计算机串行接口
UART
调制解调器
Modem
DTE DCE
控制发送接收调制解调器
Modem
串行接口
UART
计算机控制接收发送
···
DTEDCE
RS-232C RS-232C
电话线图 12.5 RS-232C的典型应用
1.机械特性
RS-232C采用 25脚 D型连接器 ( 含插头 /插座 ) 作为 DTE与 DCE之间通信电缆的连接口,但在实际进行异步通信时,只需 9个信号即够用,因此也可以采用 9脚 D型连接器 。
2.电气特性
RS-232C采用负逻辑工作,即:
逻辑,1” 用负电平表示,有效电平范围是 -3V~ -15V
逻辑,0” 用正电平表示,有效电平范围是 +3V~ +15V
-3V~+3V为过渡区,逻辑状态不定,为无效电平 。
引脚号 信号名称 缩写 传送方向与功能说明
25脚 9脚
2 3 发送数据 TXD DTE DCE 输出数据到 Modem
3 2 接收数据 RXD DTE DCE 由 Modem输入数据
4 7 请求发送 RTS DTE DCE DTE请求发送数据
5 8 清除发送 CTS DTE DCE Modem表明同意发送
6 6 数据传输就绪 DSR DTE DCE 表明 Modem已准备就绪
7 5 信号地 GND 无方向 所有信号的公共地线
8 1 载波检测 DCD DTE DCE Modem正在接收载波信号
20 4 数据终端就绪 DTR DTE DCE 通知 Modem DTE已准备好
22 9 振铃指示 RI DTE DCE 表明 Modem已收到拨号呼叫
3.引脚信号定义表 12.1 RS-232C 主信道引脚信号
① 数据线:
TXD( Transmitted Data),发送数据,
DTE通过 TXD将串行数据发送到 Modem。
RXD( Received Data),接收数据,DTE
通过 RXD接收从 Modem来的串行数据。
② 发送控制信号线:
RTS( Request to Send),用来表示 DTE请求 DCE
发送数据 。
CTS( Clear to Send),用来表示 DCE已准备好,
可以为 DTE发送数据,此信号是对 RTS的响应信号 。
RTS/CTS是一对握手联络信号,用于采用 Modem的半双工系统中作发送 /接收方式之间的切换。
③ 接收控制信号线:
DSR( Data communication equipment Set
Ready),表示 Modem已准备就绪
DTR( Data Terminal Ready),DTE 用 来 通 知
Modem,已准备就绪,
可以接收数据 。
DCD( Data Carrier Detection),用 来 表 示
Modem正在接收来自对方 Modem的载波信号,
通知 DTE准备接收数据 。
RI( Ringing Indicator),通知 DTE,Modem已收到电话交换机送来的振铃呼叫信号,使用公用电话线时要用此信号 。
4.信号线的连接
(1) 远距离时的连接计算机串行接口
UART
调制解调器
Modem
TXD
RXD
调制解调器
Modem
串行接口
UART
计算机
···电话线图 12.6 采用 Modem时 RS-232C信号线的使用
RTS
CTS
DSR
DTR
DCD
RI
GND
TXD
RTS
CTS
DSR
DTR
DCD
RI
GND
RXD
(2) 近距离时的连接近距离 ( 少于 15m) 通信时,可不采用调制解调器
Modem( 亦称为零 Modem方式 ) 。
GND
RXD TXD
TXD RXD计 2
算 3
机 7
UART
3 计
2 算
7 机
UART
CTS
DSR
DTR
DCD
RTS
GND
DSR
DTR
DCD
CTS
RTS
TXD RXD
RXD TXD
2
计 3
4
算 5
8
机 20
6
7
3
2 计
4
5 算
8
20 机
6
7
图 12.7零 Modem方式的最简单连接
(b)(a)
5.EIA-RS-232C与 TTL相互转换如上所述,RS-232C是用 正负电平 来表示逻辑状态,而计算机内部电路所采用的
TTL标准 是用 高低电平 表示逻辑状态,显然为了让计算机能利用 RS-232C与外界连接,
则必须在 RS-232C与 TTL电路之间进行电平转换,实现这种转换的电路,可以采用分立元件或集成电路芯片。
TTL
输入
RS-232C
输出
74LS04
10K 10K
10K
T1
T2
1K
-12V
+5V
图 12.8 TTL→RS -232C的电平转换电路图 12.9 RS-232C→ TTL 的电平转换电路
TTL
输出
RS-232C
输入
10K
1K
T1
+5V
图 12.10 利用 MC1488/MC1489的 TTL→RS -232C电平转换计算机串行接口
UART
MC
1488
MC
1489
RS-232C
连接器
2
3
TXD
RXD
+12V
-12V
+5V
12.2.2 RS-485 接口标准
1,RS-422A 接口标准
RS-232C虽然是目前应用较广泛的一种串行通信接口,
但其最大的缺点是,
不能进行远距离传输
且是采用单端驱动单端接收电路,即采用公共地线的方式 ( 多根信号线共地 ),其缺点是不能区分由驱动电路产生的有用信号和外部引入的干扰信号,两地之间的电位差 ( 如果存在的话 ) 将成为通信错误的根源 。
采用平衡驱动,差分接收,取消信号地线,是解决这一问题的有效途径,这就是 EIA的另一个系列标准 RS-422A的产生背景 。
RS-422A标准的特点:
① 采用的平衡驱动、差分接收电路,
抗共模干扰信号能力很强,其对逻辑电平的定义是根据两条传输线 A,B
之间的电位差值来决定的,如当 AA′
线的电平比 BB′线的电平低 0.2V时表示逻辑,0”。
RS-422A标准的特点:
② RS- 422A的最大传输速率可达
10Mb/s( 当传输距离为 15m时),最大传输距离可达 1200m( 当传输率为
90Kb/s时),而相比之下,RS-232C
的最大传输率为 20Kb/s,最大传输距离为 15m( 50英尺)。
③ 允许驱动器输出电压为 +2V~+6V,
接收器输入电平灵敏度为 +0.2V。 采用四根线传输信号( 2根用于发送,2根用于接收),可以实现多站互联通信,
但标准规定电路中只有一个发送器,
可以有多达 10个接收器。
RS-422A标准的特点:
2,RS-485 接口标准在许多应用环境中,要求用较少的信号线来实现通信,或者要求在同一通信网络中能允许有多个发送器,由此导致了目前应用广泛的 RS-485串行接口总线的产生。它实际上是 RS-422A的变形,即 RS-422A为全双工模式,而 RS-485为半双工模式,这一改动,对实现多站互连提供了很大的方便。
图 12.12给了点对点通信时,RS-485与 RS-422A的连接形式电路。
RXD
使能( EN)
TXDRXD
TXD
使能( EN)
RS-485
RS-422A
图 12.12 RS-485与 RS-422的连接形式比较
12.2.3 USB 接口标准
USB( Universal Serial Bus通用串行总线 ) 是一种新型的串行接口标准 。 1994年,由 Intel等七家著名的计算机和通信公司共同开发,1996年推出 USB1.0版本,目前已发展到 2.0
版本 。 USB的产生主要是为了适应随着多媒体技术的广泛应用,计算机需连接的外设越来越多,希望为这些不同的设备,
提供一个通用的标准串行接口的需要 。
1,USB 的特点
( 1)为所有的带有 USB接口的外设提供了连接到计算机的单一的,易于操作的标准连接方式。
( 2)支持,即插即用,。
( 3)支持热插拔,即设备接入或拔出时,不必打开机箱,也不必切断主机电源。
( 4)提供多种速率以适应不同类型的设备,USB1.0版的数据传输率分为 1.5Mb/s低速传输和 12Mb/s全速传输两种,USB2.0版的速率则可高达 480Mb/s。
( 5)占用主机资源少却支持多设备的连接,USB采用星形层次结构和 Hub技术,理论上允许最多支持
127台物理外设的连接,而总共只占用相当于一台传统设备所需的资源( I/O端口地址、中断口等)。
( 6)可为低功耗外设提供电源,可提供 +5V电压,
500mA电流的电源 。
2,USB 系统的硬件结构
······
······
根 Hub
主控制器主 机显示器 键盘打印机 扬声器 Hub
USB功能设备 USB功能设备
USB功能设备
3,USB 系统的软件结构
USB设备驱动程序
USB驱动程序主控制器驱动程序
( 1) USB设备驱动程序位于 USB系统软件的最上层,是 USB系统软件与 USB应用程序的接口,用来实现对特定的 USB设备 ( 如:显示器等 ) 的管理和驱动 。
( 2) USB驱动程序用来实现 USB总线的驱动,带宽的分配,管道的建立和控制管道的管理等功能,通常操作系统 ( 如 Windows 98) 可提供 USB
驱动程序 。
( 3)主控制器驱动程序用来管理和控制 USB主控制器硬件,一般 USB主控制器是一个可编程的硬件接口,其驱动程序则用来实现与主控制器通信以及对其控制等功能 。
4,USB 的传输方式
USB是一种协议总线,即外设与主机之间通过 USB
接口进行通信时需要遵循的一系列规范和约定。这里介绍其中的传输方式,
( 1)数据块传输方式:
用于传输大批数据,这种数据的实时性要求不是太高,
但要确保数据的正确性,典型的应用是支持像打印机、数码相机等设备的数据输入 /输出。
( 2)中断传输方式:
用于数据传输量小,但具有突发性特点的一类设备。典型的应用是鼠标、键盘、游戏棒等手动输入设备。
( 3) 等时传输方式,
用于周期性和传输速率不变的数据传输设备。典型的如视频设备、数字声音设备、数码相机等,这类传输要求传输速率恒定,时间性强,可以忽略传送错误(没有安排差错校验)。
( 4) 控制传输方式,
用于主机与外设之间的控制、状态、配臵等信息的传输。
因此,它传输的是控制信息流,而不是数据流。这种方式为主机与外设之间提供了一个控制通道,例如,USB设备接入时,主机将通过控制传输对此设备进行配臵。
5,USB 设备开发简介为一个特定的设备配臵一个 USB接口,以便使其能够通过 USB接口与主机相连接,即所谓 USB设备的开发,一般包括三个方面的工作:设备端硬件接口设计、设备内部对 USB接口的驱动程序和主机端设备驱动程序的开发。 其中后两项工作,即双方的 USB驱动程序的开发,需在深入理解 USB通信协议的基础上,针对 USB设备工作机制以及
USB设备驱动开发模型进行软件设计与开发。这里仅对 设备端的硬件接口设计 作简单介绍。
目前,对 USB设备接口设计有两种可选的方案,
如下所述。
( 1) 普通单片机加专用 USB接口芯片,
常见 USB接口芯片有,Philips公司的
PDIUSBD12芯片,National Semiconductor公司的 USBN9602 芯片,以及 Lucent 公司的
USB820/825等 。 采用这种方式开发 USB设备的优点是可以基于用户自己熟悉的单片机,利用现有的单片机开发系统进行开发,缺点是:
硬件设计较复杂,调试麻烦 。
( 2) 专用 USB控制器芯片,
即带有 USB接口的单片机 。 如与 Intel 8051
单片机兼容的 EZ-USB( Cypress公司 ),它在
8051单片机上所集成的智能 USB引擎可以完成
USB协议所规定的 80%以上的通信工作,大大地减轻了 USB设备开发人员的开发工作量 。 缺点是:需要购买新的开发系统,投资较大 。
12.3 16550可编程串行接口芯片美国国家半导体公司 ( National Semiconductor)
的 PC 16550D是一个通用的异步接收器 /发送器 UART
芯片,它与 IBM早期推出的个人计算机 IBM PC/XT所使用的 UART芯片 INS 8250 兼容,但最高波特率提高到 1,5 Mb/s,且具有接收器和发送器 FIFO( first-in
first-out先进先出 ) 缓冲区,每个 FIFO缓冲区长度均为 16个字节 。 目前 16550在 PC机的外围芯片组中得到了广泛的应用,本节以 16550为例来说明 UART芯片的功能,特点和用法 。
12.3.1 16550的功能描述
1.发送器,由发送保持寄存器,发送移位寄存器和发送同步控制三部分组成 。 数据发送时,接收 CPU送来的并行数据,再添加上起始位,校验位和停止位以后,
由 SOUT引脚依次串行发送出去 。
2.接收器,由接收移位寄存器,接收缓冲寄存器和接收同步控制器三部分组成 。 它将由 SIN引脚输入的串行数据逐位移入,去掉起始位,停止位和校验位后转换成并行数据,且进行奇 /偶然校验后,提供给 CPU。
3.控制器:
( 1)波特率发生器控制电路:
由波特率发生器、分频系数(亦称除数)寄存器组成,用于产生串行通信时所需要的波特率时钟信号。若 16550是以 18.432MHZ外部时钟源作为基准时钟,则 16位二进制的分频系数与所要求的波特率的关系可由下式表示:
分频系数 =18432000÷(波特率× 16) ( 12.1)
式 ( 12.1) 中除以 16是因为接收或发送的时钟频率为相应波持率的 16倍,
( 2)通信线控制寄存器和通信线状态寄存器:
这里的控制寄存器用来接收 CPU写入的控制字,并依此控制字来控制串行通信的数据格式;状态寄存器则是反映 16550在数据发送和接收时的状态,供 CPU读取 。
( 3)中断控制逻辑:
由中断允许寄存器,中断识别寄存器和中断控制电路等三部分组成,
用来实现中断申请,优先权排队等管理功能 。
( 4)调制 /解调器控制电路:
这部分电路对外可提供一组 Modem控制信号,使得 16550可直接与
Modem连接,实现远程通信 。
( 5)与 CPU的接口电路:
16550与 Intel微处理器完全相容,可以与 8088/8086 CPU直接连接,
接口电路含八位的双向三态数据总线缓冲器和片选及读写控制逻辑,用于与 CPU双向交换各种信息 。
1D0
D1
D2
D3
D4
D5
D6
D7
RCLK
SIN
SOUT
CS0
CS1
CS2
BAUDOUT
XIN
XOUT
WR
WR
VSS
20
40
21
Vcc
RI
DCD
DSR
CTS
MR
OUT1
DTR
RTS
OUT2
INTR
RxRDY
A0
A1
A2
ADS
TxRDY
DDIS
RD
RD
16550
12.3.2 16550的引脚及其功能
1.数据线
D0~D7,八位双向三态数据线,与 CPU的数据总线连接,用于实现
16550与 CPU之间的通信,包括数据,控制字及状态信息的双向传输 。
2.地址线:
用来实现让 CPU对 16550片内寄存器的寻址,含有:
CS0,CS1,CS2,片选信号,当输入的 CS0,CS1为高电平,CS2
为低电平时,16550芯片被 CPU选中。
A0~A2,片内寄存器选择线,CPU用此来选择要访问的 16550的内部寄存器中的某一个。
ADS,地址选通信号,用于锁存三个片选信号和 A2~A0的输入状态,若在对 16550读写过程中,A2~A0稳定(例如用在 Intel微处理器上),ADS可直接接地。
3.读 /写控制逻辑线:
DDIS,驱动器禁止信号输出,每当 CPU从 16550读取数据时,DDIS=0。 其余时候均为高电平,禁止挂在 CPU与
16550之间的数据线上的收发器与 16550通信。
RD,RD,读控制信号 ( 两者可任意用一个 ),用于控制
16550内部寄存器中读出数据或状态信息 。
WR,WR,写控制信号 ( 两者可任意用一个 ),用于控制向 16550内部的寄存器写入命令字或数据 。
Xin,Xout,时钟信号输入引脚,有两种方式可以通过这两引脚产生 16550的内部基准时钟,一种方式是将石英晶体振荡器直接连接在这两个引脚之间,另一种是将外部时钟信号连接到 Xin引脚上。
MR,主复位信号,用于对 16550复位操作,一般应将此引脚连接到系统 RESET信号上,使 16550与系统同时复位。
INTR,中断请求信号,由此引脚向 CPU申请中断。
OUT1,OUT2,用户自定义的输出信号,可由用户编程来改变这两个引脚输出电平,作何用途,由用户自己设计 。
RXRDY,接收器就绪,输出信号 。
BAUDOUT,波特输出信号,是 16550内部发送器的波特率发生器产生的发送时钟信号。
RCLK,接收器时钟输入,此信号将作为 16650接收器的基准时钟信号,一般将其与 BAUDOUT连接在一起,则
16550通信中的发送波特率与接收波特率是相同的。
TXRDY,发送器就绪,输出信号 。
4.串行数据输入 /输出线:
SIN,SOUT,串行数据信号,分别用于接收串行数据和发送串行数据。
5,Modem控制逻辑,
RTS,请求发送,输出,表明 16550希望发送数据给 Modem。
DTR,数据终端准备好,输出,通知 Modem,表明 16550已准备就绪。
DCD,载波检测,输入,表明 Modem已收到数据载波信号。
RI,振铃指示,输入,表明 Modem 已收到电话线上的振铃信号。
DSR,数据通信装置准备好,输入,是对 DTR的应答信号,
表明 Modem已准备就绪。
CTS,允许发送,输入,是对 RTS的应答信号,表明 Modem
已作好接收数据的准备,16550可以发送数据。
12.3.3 16550的内部可编程寄存器及控制字格式从用户的角度来看,16550内部有 11个可寻址访问的功能寄存器,但只用 3根寄存器选择线
A2~A0来寻址,因此必然有两个寄存器共用一个端口地址的情况,对它们的区分是由 DLAB位(除数锁存器访问)和读、写信号来实现的,如表 12-
2所示。
表中 DLAB是通信线控制寄存器的最高位
( D7),x表示取值任意( 0或 1均可)。按照其用途,可以将表 12.2中的寄存器分为如下 5组 。
表 12.2 16550的内部功能寄存器
DLAB A2A1A0 寻址寄存器 缩写
0
0
0
X
X
X
X
X
X
1
1
0 0 0
0 0 0
0 0 1
0 1 0
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
0 0 0
0 0 1
接收寄存器( 读 )
发送保持寄存器( 写 )
中断允许寄存器中断识别寄存器( 读 )
FIFO控制寄存器( 写 )
通信线控制寄存器
Modem控制寄存器通信线状态寄存器
Modem状态寄存器除数寄存器(低字节)
除数寄存器(高字节)
RBR
THR
IER
IIR
FFCR
LCR
MCR
LSR
MSR
DL
DH
1.通信控制和状态寄存器
( 1)通信线控制寄存器( LCR)
WL0?WL1?STB?PEN?EPS?SP?SBRK?DLABLCR
D7 D0
寄存器寻址位 中止字符控制 奇偶校验方式选择停止位个数 数据位长度
0:选择收、发数据寄存器等
1:选择除数寄存器
0:正常通信
1:连续发送中止信号
001:设置奇校验
011:设置偶校验
101:校验位恒为 1
111:校验位恒为 0
其他,无校验
0,1位
1,1.5位
(若数据位长度为 5位时)
或 2位
(若数据位长度为 6,7或 8位)
00,5位
01,6位
10,7位
11,8位
( 2)通信线状态寄存器( LSR)
DR?OE?PE?FE?BI?TH?TE?ER
1:至少有一个错误 1:发送移位寄存器空
1:发送保持寄存器空
(就绪)
1:接收间隔
1:帧错误
1:奇偶校验错误
1:超限错误
1:已有接收数据
LCR
D7 D0
2.用于波特率发生器的除数寄存器这是一个 16位的除数寄存器,占用两个端口地址,
如表 12.2所示,该寄存器用于对输入 16550的基准时钟进行分频,以产生串行通信接收或发送时的移位时钟。
CPU写入到此寄存器的除数值便是分频系数。除数值的大小与基准时钟和所需的波特率直接相关,表 12.3给出了 16550以 18.432MHZ为基准时钟时,几种常用波特率所需的除数值。实际上,表中的除数值即分频率数可以用式( 12.1)直接计算出来。
表 12.3 常用波特率与除数寄存器的设置波特率 除数值 对应除数寄存器的值高字节 低字节
110
300
1200
2400
4800
9600
19200
38400
57600
115200
10473
3840
960
480
240
120
60
30
20
10
28H
0FH
03H
01H
00H
00H
00H
00H
00H
00H
E9H
00H
C0H
E0H
F0H
78H
3CH
1EH
14H
0AH
3.Modem的控制和状态寄存器
( 1) Modem控制寄存器 MCR
DTR?RTS?OUT1?OUT2?Loop?0?0?0MCR
D7 D0
必须为全 0
本控制字的作用,
*决定连接到 Modem的通信联络信号 DTR,RTS是否为有效状态
*决定 16550是否工作在自诊断测试方式。当 D4=1时,用来测试
16550工作是否正常。一般情况下,应设置 D4=0,则 16550为正常接收 /发送方式。
*决定通用输出信号 OUT2,OUT1的输出电平
( 2) Modem状态寄存器 MSR
MSR用来反映 Modem送入的联络应答信号的状态以及这些信号的变化信息。
DCTS?DDSR?TERI?DDCD?CTS?DSR?RI?DCD
1:表示收到
,载波检测,
信号
1:表示收到
,振铃指示,
信号
1:表示收到
,数据设备准备好,信号
1:表示收到
,允许发送,
信号
1:表示
DCD信号状态发生变化
1:表示 RI信号状态发生变化
1:表示 DSR
信号状态发生变化
1:表示 CTS
信号状态发生变化
MSR
D7 D0
4.中断控制用寄存器
16550内部有两个与中断控制连接有关的寄存器,具有很强的中断控制的能力。 16550支持四级中断,这四级中断按优先权从高到低顺序排列依次为,接收出错中断、接收缓冲器满中断、发送保持器空中断,Modem状态发生变化中断 。四个中断源共用一条中断请求线
INTR向 CPU申请中断。
①中断允许寄存器 IER
ER?ET?EL?EM?0?0?0?0
Modem状态变化中断允许位 接收数据出错中断允许位发送保持器空中断允许位接收缓冲器满中断允许位
IER
D7 D0
②中断识别寄存器 IIR
D0
有无中断标志位
0:有中断
1:无中断
IP?ID2?ID1?0?0?0?0?0IIR
D7
Modem状态改变?4?0?0
发送保持器空?3?1?0
接收缓冲器满?2?0?1
接收出错?1?1?1
中断类型?优先级?ID
2
ID
1
IIR用 D0位( IP) 表示是否有中断请求,ID1,ID0两位编码表示当前请求的优先权最高的中断。
4.中断控制用寄存器
(1)发送保持寄存器 THR
THR用来保存 CPU送来的并行数据,并转送到发送移位寄存器,将此并行数据转换成串行数据,
且加上起始位、校验位和停止位,再从 SOUT引脚串行输出。
(2)接收缓冲寄存器 RBR
从 SIN引脚输入的串行数据被送到接收移位寄存器,去掉起始位、校验位和停止位以后,转换成并行数据并存入 RBR中,等待 CPU来接收。
(3)FIFO控制寄存器
16550的一个主要优点是它具有的内部接收器和发送器 FIFO存储器,每个 FIFO存储器均为 16字节,
这种先进先出的 16个字的接收 /发送缓冲器装臵,使得 16550大大地降低了对 CPU响应串行数据接收 /发送中断的速度要求,适合于高速串行通信系统中使用。
FFCR则用于对发送器和接收器的 FIFO的控制。
其格式如图 12.22所示。
EN?REVC?XMIT?DMA?0?0?RT2?RT1FFCR
D7 D0
接收器 FIFO产生中断的条件 DMA方式控制位接收器清除 FIFO允许位
0:不是 DMA
方式
1,DMA方式
00,FIFO中有 1字节数据
01,FIFO中有 4字节数据
10,FIFO中有 8字节数据
11,FIFO中有 16字节数据
0:无效
1:清除接收器 FIFO
0:禁止
FIFO
1,允许
FIFO
发送器清除
0:无效
1:清除接收器 FIFO
图 12.22 FIFO控制寄存器
12.3.4 16550的初始化编程
① 为确定通信波特率设置除数寄存器。
②对通信线路控制寄存器设置,以确定异步通信的字符格式 。
③设置 FIFO控制寄存器。
④设置中断允许寄存器,以确定 CPU与 16550进行数据传送时,
是否采用中断传送方式。
⑤设置 Modem控制寄存器。
一般情况下,应设臵为 03H,即使 16550输出 DTR和 RTS
两个信号为有效电平(若系统中未使用这 2个信号,这样的设臵也不会带来问题)。此外,在 PC机系统中,常使用 16550
输出引脚 OUT2来控制其中断请求信号 INTR的输出,如图
12.23所示。若要使用中断,则 OUT2位应臵为,1”,这样对此寄存器的控制字则应为 0BH。
16650
INTR
OUT2
&
8259A的 IRi
图 12.23 16550的中断请求信号与 8259A的连接例,设 16550的端口地址为 3F8~ 3FFH( 即为 PC机的 COM1串行口地址),欲使 16550以 9600波特率进行串行通信,字符格式为 7
个数据位,2个停止位、奇校验方式,允许所有中断,则相应的初始化程序为:
MOV DX,03FBH ; DX指向 16550的通信线控制寄存器地址
MOV AL,80H ; 置 DLAB=1
OUT DX,AL
MOV DX,03F8H ; 除数寄存器(低字节)地址
MOV AL,78H ; 对应波特率为 9600的除数为 0078H
OUT DX,AL ; 送除数低字节
INC DX ; 指向除数寄存器(高字节)地址
MOV AL,0
OUT DX,AL ; 送除数高字节
MOV AL,0EH ; 通信控制寄存器控制字,0→ DLAB; 7位 数据
MOV DX,03FBH ; 奇校验,2个停止位
OUT DX,AL
MOV DX,03FAH ; DX指向 FIFO控制寄存器
MOV AL,87H ; FIFO控制字:允许 FIFO并清除接收器和发送器; FIFO,设置接收器 FIFO中有 8个字节时申请中断。
OUT DX,AL
MOV DX,03F9H ; 指向中断允许寄存器地址
MOV AL,0FH ; 中断允许控制字:允许所有的中断
OUT DX,AL
MOV DX,03FCH ; 指向 Modem控制寄存器
MOV AL,0BH ; Modem控制字:使 OUT2,DTR,RTS输出
OUT DX,AL ; 均为有效 ( 低电平 )
下面的程序为从 COM1串行口发送一个字符的子程序,
设待发送的字符已在 CL中 。
SEND,MOV DX,03FDH ; DX指向 16550的通信线;状态寄存器 LSR地址
IN AL,DX ; 读 LSR的状态
TEST AL,20H ; 发送保持寄存器空?
JZ SEND ; 不空,继续等待
MOV DX,3F8H ; DX指向 16550的发送;保持寄存器 THR地址
MOV AL,CL ; 取待发送字符送 AL
OUT DX,AL ; 发送
RET
2.查询方式通信
(1)查询方式发送
(2)查询方式接收下面的程序为从 COM1串行口接收一个字符的子程序,
接收的字符暂存于 AL中 。
RECV,MOV DX,03FDH ; DX指向 16550的通信线;状态寄存器 LSR地址
IN AL,DX ; 读 LSR的状态
TEST AL,0EH ; 测试有无错误
JNZ ERROR ; 有错误,转出错处理
TEST AL,01H ; 已收到字符否?
JZ RECV ; 未收到,继续等待
MOV DX,3F8H ; DX指向 16550的接收寄存器 RBR地址
IN AL,DX ; 接收字符
RET
ERROR,… 出错处理