第 5 章 可编程接口芯片(2)

80
第5第 第第第第第第第 (2) 5.3 第第第第第第第第第 5.4 第第第第第第第第第 16550 5.5 第第第第第第第第第 8251A

description

第 5 章 可编程接口芯片(2). 5.3 串行通信的基本概念 5.4 可编程串行通信接口16550 5.5 可编程串行通信接口8251 A. 5.3 串行通信的基本概念. 计算机与外部设备之间或计算机与计算机之间的信息交换称为 “ 通信 ” 。 通信方式可分为并行通信和串行通信两种: 并行通信:数据的各位同时传送 串行通信:按照一定的格式一位一位地顺序传送数据。信号在一根信号线上传输。. 计算机“主机”部件之间,如 CPU 与存储器、 CPU 与接口电路,多采用并行方式传输数据 串行数据传输主要出现在接口与外部设备、计算机与计算机之间。 - PowerPoint PPT Presentation

Transcript of 第 5 章 可编程接口芯片(2)

Page 1: 第 5 章  可编程接口芯片(2)

第 5 章 可编程接口芯片 (2)

5.3 串行通信的基本概念

5.4 可编程串行通信接口 16550

5.5 可编程串行通信接口 8251A

Page 2: 第 5 章  可编程接口芯片(2)

5.3 串行通信的基本概念

• 计算机与外部设备之间或计算机与计算机之间的信息交换称为“通信”。

• 通信方式可分为并行通信和串行通信两种: 并行通信:数据的各位同时传送 串行通信:按照一定的格式一位一位地顺序传

送数据。信号在一根信号线上传输。

Page 3: 第 5 章  可编程接口芯片(2)

• 计算机“主机”部件之间,如 CPU 与存储器、 CPU与接口电路,多采用并行方式传输数据

• 串行数据传输主要出现在接口与外部设备、计算机与计算机之间。

• 并行通信:数据有多少位,就需要多少根传输线,传送速度快。数据位数多、传输距离远时传输成本高。

• 串行通信:只需一对传输线,可以利用现有的电话线作为传输介质,降低传输线路的成本,远距离数据传送时更加突出。

Page 4: 第 5 章  可编程接口芯片(2)

图 5-23

Page 5: 第 5 章  可编程接口芯片(2)

5.3.1 串行数据通信

1 . 数据传送方式

( 1)单工方式只允许数据按照一个固定的方向传送

( 2)半双工方式收发双方均具备接收和发送数据的能力,只有一对

传输线,同一时刻只能有一个站发送

( 3)全双工方式有两对传输信号线,每个站任何时刻既可以发送,

又可以接收

Page 6: 第 5 章  可编程接口芯片(2)

图 5-24

Page 7: 第 5 章  可编程接口芯片(2)

2. 通信速率

( 1 )传输率每秒钟传送二进制数码的位数,单位:位 / 秒 (bps) 。

( 2 )波特率 每位传送时间的倒数 每次传送 1 位时,波特率大小和传输率相等 使用调相技术可以同时传输 2 位或 4 位,这时传输率

大于波特率 时钟频率可选为波特率的 1 倍、 16 倍或者 64 倍。

Page 8: 第 5 章  可编程接口芯片(2)

3. 信号的调制 / 解调

• 信号的调制: 用一个信号控制另一个信号的某个参数(幅值,频率,

相位) ,使之随之变化的过程称为调制。

• 信号的解调: 从已调制信号中还原出被调制信号的过程称为解调。

Page 9: 第 5 章  可编程接口芯片(2)

• 发送端,调制器把数字信号变成模拟信号送到传输线路上。

• 接收端,解调器把模拟信号还原成数字信号,送到数据处理设备。

• 调制器和解调器做在一起称为调制解调器,即MODEM 。

• 计算机称为数据终端设备 DTE ( Data Terminal Equipment )

• 调制解调器( MODEM )和其他通讯设备称为数据通信设备 DCE ( Data Communication Equipment )。

Page 10: 第 5 章  可编程接口芯片(2)

图 5-25

Page 11: 第 5 章  可编程接口芯片(2)

5.3.2 串行通信的方式

1. 同步传送方式 1) 发送方发送数据信号的同时发送一个用于同步的

时钟信号。2) 同步时钟信号的一个周期和一位数据是对应的。

在同步时钟信号一个周期的时间里,数据线上同步地发送 1bit数据。

3) 数据连续传送。若干个数据组成一个数据块。

Page 12: 第 5 章  可编程接口芯片(2)

同步通讯格式面向字符同步方式:

用一个或者两个同步字符作为数据块的开始。 同步字符由用户约定,经常采用 ASCII 码中代码为

16H 的“ SYNC (同步)”字符。 随后是由字符组成的信息, 字符之间没有间隔。

面向比特同步方式: 以二进制信息“ 01111110” 开始 随后是需要发送的各位二进制信息 最后以“ 01111110” 结束

Page 13: 第 5 章  可编程接口芯片(2)

图 5-26

Page 14: 第 5 章  可编程接口芯片(2)

2. 异步传送方式 • 异步传送的数据以字符为单位• 数据传输的速率由双方事先约定• 以“帧( Frame ”) 为传送单位• 一帧信息由 7~12 位二进制组成:

起始位: 1 位逻辑 0 数据位: 5 ~ 8 位,由收发双方约定,先发送低位。 奇偶校验位:可约定采用奇校验,偶校验,无校验传

输。 停止位: 1 位、 1.5 位或 2 位的逻辑 1 信号

Page 15: 第 5 章  可编程接口芯片(2)

图 5-27

Page 16: 第 5 章  可编程接口芯片(2)

5.3.3 串行通讯接口• 把计算机的并行数据转换成串行数据发送出去• 把接收到的外部串行数据转换成并行数据送入计算机

( 1) 数据总线收发器双向的并行数据通道,传送数据、状态和控制命令。

( 2)控制寄存器 接收 CPU 的各种控制信息。( 3)状态寄存器 串行通信过程中的状态信号

Page 17: 第 5 章  可编程接口芯片(2)

图 5-28

Page 18: 第 5 章  可编程接口芯片(2)

( 4)输入、输出移位寄存器 完成“并行”和“串行”二种数据的相互转换

( 5)数据输入寄存器输入移位寄存器每次接收一位外部输入的数据,接收的数据填满后,将完整的并行数据送入数据输入寄存器暂存。

( 6)数据输出寄存器接收来自 CPU 输出的数据,并行送往输出移位寄存器,逐位右移输出。

( 7)控制信号逻辑 接收 CPU 发来的控制信号,产生内部各寄存器的读写

信号。( 8)移位脉冲时钟 从外部输入时钟信号,用作发送和接收数据的移位时钟。

Page 19: 第 5 章  可编程接口芯片(2)

5.3.4 RS-232C 标准

• 为了使通信能够顺利地进行,通信双方必须就通信的规则事前进行约定,

• 约定好的并在通信过程中双方共同遵守的通信规则称为通信协议。

Page 20: 第 5 章  可编程接口芯片(2)

1 . 信号电平• RS-232C标准采用负逻辑• 逻辑“ 1” 在 -3V~-15V 之间• 逻辑“ 0” 在 +3V~+15V 之间• 通常使用 ±12V 作为 RS-232C 电平• MC1488 和 MC1489 进行 RS232 和 TTL 之间的电平转

换2 .信号定义• 表 5-6给出了 RS-232C 接口部分常用信号的定义。3 .接插件• 使用 25 个引脚或 9 个引脚的 D型接插件进行连接。

Page 21: 第 5 章  可编程接口芯片(2)

RTS

CTS

DSR

DCD

DTR

RI

符 号 方 向 功 能 9 针连接器引脚号

25 针连接器引脚号

TXD 输出 发送数据 3 2

RXD 输入 接收数据 2 3

输出 请求发送 7 4

输入 发送允许 8 5

输入 数据设备就绪 6 6

GND  信号地 5 7

输入 载波检测 1 8

输出 数据终端就绪 4 20

输入 响铃指示 9 22

Page 22: 第 5 章  可编程接口芯片(2)

5.4 可编程串行通信接口 16550

• 通用的可编程异步通信接口芯片。• 内部有时钟产生电路、可编程波特率发生器、

双缓冲通信数据寄存器和多种中断处理功能。• 对外有调制解调器控制信号,可直接与

MODEM 相连。• 与早期 IBM/PC 机使用的异步通信接口 8250兼容,最高波特率提高到 1.5Mb/s ,具有 16 字节FIFO (先进先出缓冲)发送和接收功能。

Page 23: 第 5 章  可编程接口芯片(2)

5.4.1 16550 的内部结构与外部引脚1. 数据总线缓冲器

• 连接 16550 与 CPU 数据总线2. 选择和读 / 写控制逻辑

• 接收来自 CPU 的地址、片选和控制信息,产生内部各端口的读写操作命令。

3. 发送器• 由发送保持寄存器、发送移位寄存器和发送同步控制

组成。• 待发送的数据写入发送保持寄存器。发送保持寄存器

的内容自动转存到发送移位寄存器,在发送器时钟的控制下,由 SOUT引脚发送出去。

Page 24: 第 5 章  可编程接口芯片(2)

4. 接收器• 由接收移位寄存器、接收缓冲寄存器和接收同步控制

器组成。• 在接收时钟控制下,由 SIN引脚输入的串行数据逐位

存入移位寄存器,转换后的并行数据存入接收缓冲寄存器,等待 CPU读取。

5. 调制 / 解调器控制电路• 提供一组控制信号,直接与调制解调器相连,完成远

程通信任务。6. 通信线控制寄存器和通信线状态寄存器

• 控制寄存器保存 CPU写入的通讯数据格式。• 状态寄存器提供串行数据发送和接收时的状态

Page 25: 第 5 章  可编程接口芯片(2)

7. 波特率发生控制电路• 由波特率发生器、分频系数寄存器组成。• 16550 对 18.432MHz 的输入时钟进行分频,产生所要

的发送器和接收器时钟信号。• 分频系数在初始化时分两次写入除数寄存器的高 8 位

和低 8 位,分频系数可由下式算出:• 除数 =18432000÷ (波特率 ×16 )

8. 中断控制逻辑• 由中断允许寄存器、中断识别寄存器和中断控制逻辑三部分组成。

• 实现中断优先权管理、中断申请等功能。

Page 26: 第 5 章  可编程接口芯片(2)

9. 16550 的引脚( 1 )数据信号 双向数据线 D7 ~ D0,与数据总线相连

( 2 )地址信号• 片选信号: CS0 、 CS1 、 CS2# 。 CS0=CS1=1 , CS2#=0

时,表明芯片被选中。• A2~A0 :具体访问哪个寄存器,由 A2~A0确定。• ADS# :地址选通信号 ADS# 为低电平时,锁存三个片

选信号以及 A2~A0的输入状态。

( 3 )读 / 写控制信号• 两对读写控制信号,每对信号功能相同,电平不同。• RD=1 或 RD#=0 中一个有效且 16550 被选中时,可读;• WR 和 WR#=0 中一个有效且 16550 被选中,可写。

Page 27: 第 5 章  可编程接口芯片(2)

图 5-30

16550

A2

INTR

CTS

A1

A0

RCLKSIN

SOUT

CS1

CS0

XOUT

XIN

DSR

RD

DCD

RD

RTS

D0D1D2D3D4D5D6D7

VCC

OUT1

ADS

OUT2

MR

RI

DDIS

DTR

TXRDY

CS2BAUDOUT

WRWRVSS

RXRDY

1 40

20 21

Page 28: 第 5 章  可编程接口芯片(2)

( 4 )中断控制和复位信号

• INTR :发送保持寄存器空或接收数据有效, 16550 的中断允许寄存器相应位置 1 时, 16550 的中断请求引脚INTR 变为高电平,用作中断请求信号。

• MR :复位信号,输入,它与系统 RESET 信号连接,系统复位同时也对 16550复位。

• OUT1 和 OUT2 :这两个输出引脚可以通过用户编程来改变输出电平。

图 5-31

Page 29: 第 5 章  可编程接口芯片(2)

( 5 )时钟信号• XIN 和 XOUT : 16550 的时钟信号输入引脚。• 从 XIN 输入的基准时钟,经过 16550内部波特率发生器

(分频器)分频后产生发送器时钟,并经过 BAUDOUT引脚输出。

• RCLK :接收时钟,输入,常与 BAUDOUT 相连。( 6 )与外设 / 调制解调器之间的联络信号• RTS#: 请求发送信号,输出。输出给外设或 MODEM• CTS#: 允许发送信号,输入。外设或 MODEM 对 RTS# 的

应答。• DTR#: 数据终端准备好。输出给外设或 MODEM

的, DTR#=0表示 16550 已经就绪。• DSR# :数据设备准备好。对 DTR 信号的应答, DSR#=0 ,表示外设或 MODEM 已经就绪。

Page 30: 第 5 章  可编程接口芯片(2)

• DCD#: 载波检测输入 , 表示MODEM 已经接收到载波信号

• RI#: 振铃指示输入信号 , 表示MODEM 已经接收到振铃信号。

• SIN :串行数据输入。• SOUT :串行数据输出。

( 7 )数据就绪信号• RXRDY :接收器就绪信号• TXRDY :发送器就绪信号。

Page 31: 第 5 章  可编程接口芯片(2)

5.4.2 16550 的内部寄存器

1. 16550 内部寄存器• 有 10 个可寻址的 8 位寄存器,由地址线 A0 ~ A2

和读 /写控制信号选择要访问的寄存器。• 内部寄存器分为三组:

数据传输:发送保持寄存器和接收缓冲寄存器。 工作方式、参数设置:通信线控制寄存器、除数寄存

器、 MODEM 控制寄存器和中断允许寄存器。 状态寄存器:通信线状态寄存器、 MODEM 状态寄存

器和中断识别寄存器。

Page 32: 第 5 章  可编程接口芯片(2)

DLAB A2 A1 A0 访问的寄存器 主串口地址 辅串口地址

0 0 0 0 接收缓冲器(读) 3F8H 2 F8H

0 0 0 0发 送 保 持 寄 存 器(写) 3F8H 2 F8H

0 0 0 1 中断允许寄存器 3F9H 2 F9H

× 0 1 0 中断识别 /FIFO 寄存器 3FAH 2 FAH

× 0 1 1 通信线控制寄存器 3FBH 2 FBH

× 1 0 0MODEM 控制寄存器 3FCH 2 FCH

× 1 0 1 通信线状态寄存器 3FDH 2 FDH

× 1 1 0MODEM 状态寄存器 3FEH 2 FEH

1 0 0 0除数寄存器(低字节) 3F8H 2 F8H

1 0 0 1除数寄存器(高字节) 3F9H 2 F9H

Page 33: 第 5 章  可编程接口芯片(2)

( 1 )发送保持寄存器( 3F8H/2F8H )• 保存 CPU 送来的并行数据,送到发送移位寄存器,发

送移位寄存器在发送器时钟的作用下,把并行数据转换成串行数据从 SOUT引脚输出。

• 只有在发送保持寄存器空时, CPU才可以向发送保持寄存器写入下一个要发送的数据。

( 2 )接收缓冲寄存器( 3F8H/2F8H )• 在接收时钟的作用下,从 SIN引脚输入的串行数据被

送到接收移位寄存器。• 去掉起始位、校验位和停止位后,串行数据转换成并

行数据并存入接收缓冲寄存器,等待 CPU 接收。

Page 34: 第 5 章  可编程接口芯片(2)

( 3 )通信线控制寄存器( 3FBH/2FBH )• 用来设置串行异步通信的数据格式• D7位: DLAB寻址位

D7=1 ,访问除数寄存器 D7=0 ,访问接收缓冲器、发送保持寄存器。

• D6 位: D6=1 ,发送方连续发送长时间中止信号(空号),空号发送的时间超过一个完整的字符传送时间时,接收方就认为发送方已中止发送。

• D3 ~ D5位:选择奇偶校验方式。• D2位:规定一帧数据中停止位的位数。• D0位、 D1位:定义一帧数据中数据位的位数。

Page 35: 第 5 章  可编程接口芯片(2)

图 5-32

通信线控制寄存器( 3FBH/2FBH )

Page 36: 第 5 章  可编程接口芯片(2)

( 4 )中断识别寄存器 / FIFO 控制寄存器 (3FAH/2FAH)• 16550内部有四级中断,但只有一根中断请求信号。中断发生

后, CPU 通过查询中断识别寄存器来辨别中断类型。• FIFO 控制寄存器和中断识别寄存器占用相同的端口地址。中断发生时读出该寄存器的内容,它作为中断识别寄存器来使用;写入 FIFO 控制字时,作为 FIFO 控制寄存器。

图 5-33

中断识别寄存器

Page 37: 第 5 章  可编程接口芯片(2)

图 5-34

( 5 )通信线状态寄存器( 3FDH/2FDH )

Page 38: 第 5 章  可编程接口芯片(2)

图 5-35

( 6 )中断允许寄存器( 3F9H/2F9H ) 低 4 位代表中断允许控制位,置 1 ,则允许相应的中断源请求中断,否则禁止中断。

Page 39: 第 5 章  可编程接口芯片(2)

( 7 ) MODEM 控制寄存器( 3FCH/2FCH )设置与调制解调器连接的联络信号:D7 ~ D5位规定为 0;D4位: =1 ,正常发送 / 接收;

=0 ,内部循环方式(用于芯片检测)。D0 ~ D3位的状态直接控制相关引脚的输出电平:

D0=1 ,使引脚 DTR#= 0 , DTR# 信号有效。 D1=1 ,使引脚 RTS#= 0 , RTS# 信号有效。 D2=1 ,使引脚OUT1 # = 0 ,该引脚留给用户使用。 D3=1 ,使引脚 OUT2 # = 0 ,使 16550 能送出中断请求。

Page 40: 第 5 章  可编程接口芯片(2)

DCTS

DCD

DSRCTS DDCD

TERI

DDSR

D7 D6 D5 D4 D3 D2 D1 D0

CTS# 发生变化

0= 无变化1= 有变化

DSR# 发生变化

0= 无变化1= 有变化

RI# 变化0= 无变化1= 有变化

DCD# 发生变化

0= 无变化1= 有变化

DCD# 引脚0= 引脚为 11= 引脚为 0

DSR# 引脚0= 引脚为 11= 引脚为 0

CTS# 引脚

0= 引脚为1

1= 引脚为0

RI

RI# 引脚0= 引脚为 11= 引脚为 0

( 8 ) MODEM 状态寄存器( 3FEH/2FEH )

图 5-36

Page 41: 第 5 章  可编程接口芯片(2)

( 9 )除数寄存器( 3F8H, 3F9H/2F8H, 2F9H )

• 16550 发送或接收的移位时钟,是在它的基准时钟( 18.432MHz )基础上分频而来的。

• 根据所需的波特率来确定分频系数,并在初始化时存入除数寄存器。

• 表 5-8给出了 9 种波特率所需设置的除数寄存器的值。

Page 42: 第 5 章  可编程接口芯片(2)

波特率 除数高 8 位 除数低 8 位1200 03H 0C0H

1800 02H 80H

2000 02H 40H

2400 01H 0E0H

3600 01H 40H

4800 00H 0F0H

7200 00H 0A0H

9600 00H 78H

19200 00H 3CH

表 5-8 波特率与分频系数对照表

Page 43: 第 5 章  可编程接口芯片(2)

5.4.3 串行通信接口 16550 的应用

1. 16550 的初始化• 计算机硬件或软件复位后,要对 16550 进行初

始化。• 初始化主要包括:

1) 对通信线控制寄存器进行设置,确定异步通信的数据格式。

2) 设置除数寄存器,确定通信速率。3) 对 FIFO 控制寄存器、中断允许寄存器和 MODEM

控制寄存器进行设置。

Page 44: 第 5 章  可编程接口芯片(2)

初始化步骤:

( 1 ) 80H 送通信线控制寄存器,使寻址位 D7=1 。

( 2 )除数高 8 位 / 低 8 为分别送除数寄存器高 8 位/ 低 8 位,确定通信速率。

( 3 )将 D7=0 的命令字写入通信线控制寄存器, 确定串行异步通信一帧数据帧的格式。

图 5-32

Page 45: 第 5 章  可编程接口芯片(2)

图 5-32

通信线控制寄存器( 3FBH/2FBH )

Page 46: 第 5 章  可编程接口芯片(2)

( 4 )设置 FIFO 控制寄存器( 3FAH ) 。• FIFO 控制寄存器与中断识别寄存器的地址都是 3FAH;读出时是中断识别寄存器;写入时是 FIFO 控制寄存器。 FIFO 控制寄存器中各位的功能如图 5-37 。

Page 47: 第 5 章  可编程接口芯片(2)

( 5 )设置中断允许寄存器( 3F9H/2F9H )• 设置成查询方式:中断允许寄存器中的命令字为 0。• 设置为中断方式:设置中断允许寄存器中的相应位为 1,该位所控制的中断请求允许中断。

Page 48: 第 5 章  可编程接口芯片(2)

( 6 )设置MODEM 控制寄存器( 3FCH/2FCH )D4=0 :设置 16550 为正常接收 / 发送方式。D4=1 :设置 16550 工作在内部循环自检方式。D3=0 : 16550 工作在查询方式。D3=1 : 16550 工作在中断方式。

MODEM 控制寄存器

Page 49: 第 5 章  可编程接口芯片(2)

例: 16550 端口地址为 3F8H-3FFH ,使 16550 以 19200 波特率进行异步通信,每字符为 8比特, 1 个停止位,采用奇校验,允许所有中断,则初始化程序为:MOV DX , 03FBH ; 16550 控制寄存器地址送DXMOV AL , 80H ;置 DLAB=1 ,设置除数寄存器OUT DX , ALMOV DX , 03F8H;除数低 8 位寄存器地址送 DXMOV AX , 003CH;波特率为 19200bpsOUT DX , AL ;送除数低 8 位MOV AL , AHINC DX ;产生除数高 8 位寄存器地址OUT DX , AL ;送除数高 8 位

Page 50: 第 5 章  可编程接口芯片(2)

MOV DX , 03FBH ; 16550 控制寄存器地址送 DX

MOV AL , 0BH ; 8 位数据位 , 奇校验 ,1 位停止位OUT DX , AL

MOV DX , 03FAH ; FIFO 控制寄存器地址送 DX

MOV AL , 47H ;允许 FIFO 并清除OUT DX , AL ; 设 FIFO 中断触发值为 4 字节MOV DX , 03F9H;中断允许寄存器地址送 DX

MOV AL , 0FH ;允许所有中断OUT DX , AL ; 设置中断允许控制字MOV DX , 03FCH ; MODEM 控制字寄存器地址MOV AL , 0BH ;正常收发, OUT1,OUT2 有效OUT DX , AL ;设置MODEM 控制字......

Page 51: 第 5 章  可编程接口芯片(2)

2. 16550 应用举例

• 两台计算机通过 16550实现异步通信• 16550 的接收和发送数据均采用查询工作方式• 通信波特率 9600bit/s

• 每字符为 8比特, 1 个停止位• 采用奇校验

Page 52: 第 5 章  可编程接口芯片(2)

; 计算机 A_____16550查询方式发送程序

DATA SEGMENT

SEND_DATA DB NUM1 , NUM2,… ;要发送的数据TIMES DW N ;发送的数据个数 DATA ENDS

CODE SEGMENT

ASSUME CS : CODE, DS : DATA

BEGIN1:MOV AX, DATA

MOV DS, AX

; 计算机 A_____16550查询方式发送程序

DATA SEGMENT

SEND_DATA DB NUM1 , NUM2,… ;要发送的数据TIMES DW N ;发送的数据个数 DATA ENDS

CODE SEGMENT

ASSUME CS : CODE, DS : DATA

BEGIN1:MOV AX, DATA

MOV DS, AX

Page 53: 第 5 章  可编程接口芯片(2)

;初始化 16550MOV DX , 03FBH ; 16550 控 制寄 存器 地址 送DX MOV AL, 80H ;置 DLAB=1 ,设置除数寄存器OUT DX, ALMOV DX, 03F8H ;除数寄存器地址送 DXMOV AX, 0078H ;波特率为 9600bit/sOUT DX, ALMOV AL, AH INC DXOUT DX, ALMOV DX , 03FBH ; 16550 控 制寄 存器 地址 送DXMOV AL, 0BH ; 8 位数据位 , 奇校验 ,1 位停止位OUT DX, AL

;初始化 16550MOV DX , 03FBH ; 16550 控 制寄 存器 地址 送DX MOV AL, 80H ;置 DLAB=1 ,设置除数寄存器OUT DX, ALMOV DX, 03F8H ;除数寄存器地址送 DXMOV AX, 0078H ;波特率为 9600bit/sOUT DX, ALMOV AL, AH INC DXOUT DX, ALMOV DX , 03FBH ; 16550 控 制寄 存器 地址 送DXMOV AL, 0BH ; 8 位数据位 , 奇校验 ,1 位停止位OUT DX, AL

Page 54: 第 5 章  可编程接口芯片(2)

……

CALL TRANS

……

MOV AH, 4CH ;程序结束,返回操作系统INT 21H

;查询方式发送子程序TRANS PROC NEAR

LEA BX, SEND_DATA

MOV CX, TIMES;要发送的数据个数送 CX

AGAIN: MOV DX, 03FDH ;通信状态寄存器地址送 DX

IN AL, DX

TEST AL, 20H ;检测发送器是否准备就绪JZ AGAIN

……

CALL TRANS

……

MOV AH, 4CH ;程序结束,返回操作系统INT 21H

;查询方式发送子程序TRANS PROC NEAR

LEA BX, SEND_DATA

MOV CX, TIMES;要发送的数据个数送 CX

AGAIN: MOV DX, 03FDH ;通信状态寄存器地址送 DX

IN AL, DX

TEST AL, 20H ;检测发送器是否准备就绪JZ AGAIN

Page 55: 第 5 章  可编程接口芯片(2)

MOV DX, 03F8H

MOV AL, [BX] ;取出发送区域的待发送数据OUT DX, AL

INC BX ;指向下一个待发送数据LOOP AGAIN ; N 个数据传送完了吗?RET

TRANS ENDP

CODE ENDS

END BEGIN1 

MOV DX, 03F8H

MOV AL, [BX] ;取出发送区域的待发送数据OUT DX, AL

INC BX ;指向下一个待发送数据LOOP AGAIN ; N 个数据传送完了吗?RET

TRANS ENDP

CODE ENDS

END BEGIN1 

Page 56: 第 5 章  可编程接口芯片(2)

; 计算机 B_____16550 查询方式接收程序DATA SEGMENT

REC_DATA DB 100 DUP ( ? ) ;存放接收的数据TIMES DW N ;要接收的数据个数DATA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DATA

BEGIN2:MOV AX, DATA

MOV DS, AX

;初始化 16550

MOV DX, 03FBH ; 16550 控制寄存器地址送 DX

MOV AL, 80H ;置 DLAB=1 ,设置除数寄存器 OUT DX, AL

; 计算机 B_____16550 查询方式接收程序DATA SEGMENT

REC_DATA DB 100 DUP ( ? ) ;存放接收的数据TIMES DW N ;要接收的数据个数DATA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DATA

BEGIN2:MOV AX, DATA

MOV DS, AX

;初始化 16550

MOV DX, 03FBH ; 16550 控制寄存器地址送 DX

MOV AL, 80H ;置 DLAB=1 ,设置除数寄存器 OUT DX, AL

Page 57: 第 5 章  可编程接口芯片(2)

MOV DX, 03F8H ;除数寄存器地址送 DX

MOV AX, 0078H ;波特率为 9600bit/s

OUT DX, AL

MOV AL, AH

INC DX

OUT DX, AL

MOV DX , 03FBH ; 16550 控制寄存器地址送 DX

MOV AL, 0BH ; 8 位数据位 , 奇校验 ,1 位停止位OUT DX, AL

……

CALL RECEIVE

……

MOV AH, 4CH ;程序结束,返回操作系统INT 21H

MOV DX, 03F8H ;除数寄存器地址送 DX

MOV AX, 0078H ;波特率为 9600bit/s

OUT DX, AL

MOV AL, AH

INC DX

OUT DX, AL

MOV DX , 03FBH ; 16550 控制寄存器地址送 DX

MOV AL, 0BH ; 8 位数据位 , 奇校验 ,1 位停止位OUT DX, AL

……

CALL RECEIVE

……

MOV AH, 4CH ;程序结束,返回操作系统INT 21H

Page 58: 第 5 章  可编程接口芯片(2)

;查询方式接收子程序RECEIVE PROC NEAR

LEA BX, REC_DATA ;接收缓冲区首址送 BX

MOV CX, TIMES ;要接收的数据个数送 CX

REPIN: MOV DX , 03FDH ;通信状态寄存器

地址IN AL, DX

TEST AL, 1EH ;检测接收的数据有无错误JNZ ERROR

TEST AL, 01H ;检测接收缓冲器中是否有数据JZ REPIN

;查询方式接收子程序RECEIVE PROC NEAR

LEA BX, REC_DATA ;接收缓冲区首址送 BX

MOV CX, TIMES ;要接收的数据个数送 CX

REPIN: MOV DX , 03FDH ;通信状态寄存器

地址IN AL, DX

TEST AL, 1EH ;检测接收的数据有无错误JNZ ERROR

TEST AL, 01H ;检测接收缓冲器中是否有数据JZ REPIN

Page 59: 第 5 章  可编程接口芯片(2)

MOV DX, 03F8H ;数据接收寄存器地址送 DXIN AL, DXMOV [BX], ALINC BXLOOP REPINCLC ;接收成功,清 CY 标志位JMP DONE

ERROR: STC ;接收不成功,置 CY 标志位

DONE :RET

RECEIVE ENDPCODE ENDS

END BEGIN2

MOV DX, 03F8H ;数据接收寄存器地址送 DXIN AL, DXMOV [BX], ALINC BXLOOP REPINCLC ;接收成功,清 CY 标志位JMP DONE

ERROR: STC ;接收不成功,置 CY 标志位

DONE :RET

RECEIVE ENDPCODE ENDS

END BEGIN2

Page 60: 第 5 章  可编程接口芯片(2)

5.5 可编程串行通信接口 8251A

( 1 )可用于串行异步通信,也可用于串行同步通信。 ( 2 )接收、发送数据分别有各自的缓冲器,可以进行全双

工通信。 ( 3 )提供与外部设备特别是调制解调器的联络信号,便于

直接和通信线路相连接。 ( 4 )每个字符的位数可以是 5 ~ 8 位,可以设定奇校验或

偶校验,也可以不设校验。校验位的插入、检错及剔除都由芯片自动完成。

( 5 )异步通信时,停止位可选 1 位、 1.5 位或 2 位,波特率为 0 ~ 19.2K ,时钟频率可设为波特率的 1 倍、 16 倍或 64 倍。

(6 )同步通信时,波特率的范围为 0 ~ 56K 波特。可设为单同步、双同步或者外同步,同步字符可由用户自行设定。

Page 61: 第 5 章  可编程接口芯片(2)

5.5.1 8251A 的外部引脚D0D1D2D3D4D5D6D7

RESETRDWRC/DCS

TxRDYTxE

RxRDY

TxDTxC

RxDRxCSTNDET

CTSRTSDSRDTR

CLK+5VGND

27281256782113101211151814

8251A

199

32516

17232224

20264

与CPU连接 与外设连接

1. 与 CPU 连接的引脚 D7~ D0 :数据线,与系统数据 总线相连。 RESET :复位信号,输入, 高电平有效。复位后 8251A 处于空闲状态 直至被初始化编程。 RD# :读选通信号,输入, 低电平有效。 WR#: 写选通信号,输入, 低电平有效。

Page 62: 第 5 章  可编程接口芯片(2)

C/D# :控制 / 数据端口选择输入线。 8251A 内部占用两个端口 地址,为“ 0” 时选择数据端口,传输数据(读或写), 为“ 1” 时选择控制端口, 传输的是控制字(写)或状态 信息(读)。由于该引脚信号用于选择内部端口,通 常把它和地址总线的 A0( 8088 )或 A1( 8086 )相连。

CS#: 选片信号,输入,低电平有效。为低电平时 CPU 才能 对 8251A 操作。

TxRDY :发送准备好状态,输出,高电平有效。发送寄存器 空且允许发送(脚电平为低,同时命令字中 TxEN 位 为 1 )时 TxRDY 为高电平。 CPU 向 8251A 写入一个字 符后 TxRDY 恢复为低电平。 TxRDY 可以用来向 8259A 申请发送中断。

Page 63: 第 5 章  可编程接口芯片(2)

TxE :发送缓冲器空闲状态,输出。高电平有效, TxE=1 ,表示发送缓冲器中没有要发送的 字符, CPU 把要发送的下一个数据写入 8251A 后, TxE 自动复位。

RxRDY :接收准备好状态,输入,高电平有效。 接收器接到一个字符后 RxRDY 为“ 1” , 字符被 CPU 读取后恢复为“ 0”。 RxRDY

可用来向 8259A 申请接收中断。

Page 64: 第 5 章  可编程接口芯片(2)

2. 与外设或调制解调器连接的引脚

TxD :发送数据输出。 CPU 并行输出给 8251A 的数据从这 个 引脚串行发送出去。 RxD :串行数据输入,高电平表示数字 1 ,低电平表示数字 0 。 SYNDET :同步状态输出,或者外同步信号输入。此引脚 仅对同步方式有意义。

Page 65: 第 5 章  可编程接口芯片(2)

以下 4 根引脚用来连接调制解调器DTR# :数据终端准备好,输出,低电平有效。 8251A 命令 字位 D1 为 1 时有效,用于向调制解调器表示数据终 端(计算机)已准备好。

DSR# :数据设备准备好,输入,低电平有效。调制解调 器准备好时有效,向 8251A 表示 MODEM (数据设 备)已准备就绪。 CPU 可通过读取状态寄存器的 D7 位检测该信号。

RTS# :请求发送信号,输出,低电平有效。 8251A 命令字 位 D5 为 1 时有效,请求调制解调器作好发送准备( 建立载波)。

CTS# :清除发送(允许传送)信号,输入,低电平有效。 调制解调器作好传送准备时有效,作为对 8251A 的 信号的响应。

Page 66: 第 5 章  可编程接口芯片(2)

注意:

如果 8251A 不使用调制解调器直接和外界 通信,应将 8251A的 DSR#、 CTS# 接地。

Page 67: 第 5 章  可编程接口芯片(2)

3. 时钟信号

CLK :时钟信号,输入,用于产生 8251A 内部时序。 CLK

的 周期为 0.42μs ~ 1.35μs 。 要求 CLK 的 频 率 至少应 是 接 收 、 发 送 时 钟 的 30 倍 ( 对 同 步 方 式 ) 或 4.5 倍 (对异步方式)。 RxC# :接收器时钟输入,它控制接收器接收字符的速率,在 它的上升沿采集串行数据输入线。的频率应等于波特率 (同步方式)或等于波特率的 1 倍 /16 倍 /64 倍(异步方式) TxC# :发送器时钟输入,在的下降沿数据由 8251A移位输出。 对频率的要求同 RxC#。

Page 68: 第 5 章  可编程接口芯片(2)

4 . 8251A 的工作过程( 1 )接收器的工作过程 异步方式中,接收器接收到有效的起始位后,开始接收后续的数据位、奇偶校验位和停止位。然后将数据送入寄存器。此后 RxRDY 输出高电平,表示已收到一字符, CPU可以来读取。

同步方式中,若程序设定 8251A 外同步接收,则SYNDET 脚用于输入外同步信号(来自MODEM), SYNDET 脚上的电平正跳变启动接收数据。若程序设定 8251A 内同步接收,则 8251A先搜索同步字符(同步字符事先由程序装在同步字符寄存器中)。 RxD 线上每收到一位信息就移入接收寄存器并和同步字符寄存器内容比较,若不相等则接收下一位后再比较,直到两者相等。此后 SYNDET 输出高电平,表示已搜索到同步字符。接下来便把接收到的数据逐个地装入接收数据寄存器。

Page 69: 第 5 章  可编程接口芯片(2)

4 . 8251A 的工作过程 (2)

( 2 )发送器的工作过程 异步方式中,发送器在数据前加上起始位,并

根据程序的设定在数据后加上校验位和停止位,组成“一帧”信息。然后从低位开始,从 TxD 引脚逐位发送。

同步方式中,发送器先发送同步字符,然后逐位地发送数据。若 CPU 没有及时把数据写入发送缓冲器,则 8251A 用同步字符填充,直至 CPU 写入新的数据。

Page 70: 第 5 章  可编程接口芯片(2)

5.5.2 8251A 的内部寄存器8251A 芯片占用 2 个端口地址,由 C/D# 引脚上输入的电平

进行选择。C/D#=0 数据端口

数据输入寄存器 读操作数据输出寄存器 写操作

C/D#=1 控制端口方式控制字寄存器 写操作命令字寄存器 写操作同步字符寄存器 写操作(仅同步方式)状态寄存器 读操作

Page 71: 第 5 章  可编程接口芯片(2)

1.    方式控制字寄存器

方式控制字确定 8251A 的通信方式(同步 / 异步)、校验方式(奇校验 / 偶校验 / 不校验)、数据位数( 5/6/7/8 位)及波特率参数等。方式控制字的格式如图 5-39所示。它应在复位后写入,且只需写入一次。

D7 D6 D5 D4 D3 D2 0 0

字符长度00 5位01 6位10 7位11 8位

01:奇校验11:偶校验X0:禁止校验

(a) 同步方式下的方式字

D7 D6 D5 D4 D3 D2 D1 D0

字符长度00 5位01 6位10 7位11 8位

01:奇校验11:偶校验X0:禁止校验

停止位:00:无效01 1: 个停止位10 1. 5: 个停止位11 2: 个停止位

(b) 异步方式下的方式字

0:内同步1:外同步

0:双同步字符1:单同步字符

波特率系数01: (1x)10: (16x)11: (64x)

Page 72: 第 5 章  可编程接口芯片(2)

2. 命令字寄存器命令控制字使 8251A 处于规定的状态以准备发送或接收

数据。它应在写入方式控制字后写入,用于控制 8251A 的工作,可以多次写入。

图 5-40 8251A 命令控制字格式

D7 D6 D5 D4 D3 D2 D1 D0

EN I R RTS ER SBRK RXE DTR TXEN

进入搜索方式1: 进行 SYNC 搜索

发送允许1: 允许 , 0 :禁止

数据终端准备好1: 迫使 DTR 输出 0

接收允许1: 允许, 0: 禁止

内部复位1:8251A 内部复位

发送断点字符1: 迫使 TxD 为低 , 0: 正常

请求发送1: 迫使 RTS 输出 0

出错复位1: 复位错误标志

Page 73: 第 5 章  可编程接口芯片(2)

3 . 同步字符寄存器

8251A 工作在“内同步”方式时,需要由程序员把使用的“同步字符”存入该寄存器,供搜寻同步字符使用。可以有“单同步字符”和“双同步字符”两种选择。

Page 74: 第 5 章  可编程接口芯片(2)

4 . 状态寄存器 状态寄存器存放 8251A 的状态信息,供 CPU 查询。

图 5-41 8251A 状态字格式

D7 D6 D5 D4 D3 D2 D1 D0

同引脚定义

DSRSYNDET FE OE PE TxE RxRDY TxRDY

1: 奇偶错帧格式出错1: 表 示 未 检测到有效停止位 溢出错

1: 表示未取走字符又输入了下个字符

Page 75: 第 5 章  可编程接口芯片(2)

5.5.3 8251A 的应用

8251A在使用前也要进行初始化。初始化要在 8251A处于复位状态时开始。

异步方式下 8251A 的初始化过程: ( 1 )       写入方式字; ( 2 )       写入控制字。 同步方式下 8251A 的初始化过程: ( 1 )       写入方式字; ( 2 )       写入同步字符( 1 个或 2 个); ( 3 )       写入控制字。

Page 76: 第 5 章  可编程接口芯片(2)

例:设 8251A 控制口地址 301H ,数据口地址 300H ,按下述要求对 8251A 进行初始化:

( 1 )异步工作方式,波特率系数为 64 (即数据传送速率是 时钟频率的 1/64 ),采用偶校验,总字符长度为 10 (一位起始位, 8 位数据位, 1 位停止位)。

( 2 )允许接收和发送,使错误位全部复位。( 3 )查询 8251A 状态字,接收准备就绪时,从 8251A 输

入 数据,否则等待。

Page 77: 第 5 章  可编程接口芯片(2)

MOV DX, 301H ; 8251A 控制口地址MOV AL, 01111111B ;方式控制字OUT DX, AL ;送方式控制字MOV AL, 00110111B ;操作命令字OUT DX, AL ;送操作控制字WT:MOV DX, 301HIN AL, DX ;读入状态字TEST AL, 02H ;检查 RxRDY=1?JZ WT ; RxRDY≠1, 接收未就绪 ,等待MOV DX, 300H IN AL, DX ;读入数据

MOV DX, 301H ; 8251A 控制口地址MOV AL, 01111111B ;方式控制字OUT DX, AL ;送方式控制字MOV AL, 00110111B ;操作命令字OUT DX, AL ;送操作控制字WT:MOV DX, 301HIN AL, DX ;读入状态字TEST AL, 02H ;检查 RxRDY=1?JZ WT ; RxRDY≠1, 接收未就绪 ,等待MOV DX, 300H IN AL, DX ;读入数据

Page 78: 第 5 章  可编程接口芯片(2)

习题 5

1. 8255A 的方式选择控制字和 C 口按位控制字的端口地址是否一样, 8255A怎样区分这两种控制字?写出 A 端口作为基本输入, B 端口作为基本输出的初始化程序。

2. 用 8255A 的 A 端口接 8 位二进制输入, B 端口和 C端口各接 8 只发光二极管显示二进制数。编写一段程序,把 A 端口的读入数据送 B 端口显示,而 C端口的各位则采用置 0/置 1 的方式显示 A 端口的值。

3. 用 8255A 用作两台计算机并行通信的接口电路,请画出采用查询式输入 / 输出方式工作的接口电路,并写出采用查询式输入 / 输出方式的程序。

Page 79: 第 5 章  可编程接口芯片(2)

4. 设计一个用 8255A 作为 8 个七段显示器的接口电路,并设计一个把内存地址为 ADDRA 的 8 个数字在这 8个七段显示器上显示的程序。

5. 8254 的定时 / 计数器的定时与计数方式有什么区别? 8254 在方式 0 工作时,各通道的 CLK 、 GATE 信号有什么作用?各通道的控制字地址都相同, 8254 是怎样区分的?

6. 设 8254 的端口地址为 0240H ~ 0243H ,通道 0 的输入 CLK 频率为 1MHz ,为使通道 0 输出 1KHz 的方波,编写初始化程序。如果让通道 0 与通道 1级联(即 OUT0 接 CLK1 )实现 1 秒钟定时,则初始化程序如何编制。

7. 编制一个使 PC 机的 8254产生 600Hz 方波的程序,并使该方波送至扬声器发声。

Page 80: 第 5 章  可编程接口芯片(2)

8. 在 RS-232C 接 口 标 准 中 , 引 脚TxD 、 RxD 、 RTS# 、 CTS# 、 DTR# 、 DSR# 的功能各是什么?

9. 16550 的通信控制寄存器中的寻址位有什么作用?在初始化编程时,应该怎样设置?

10. 编写 PC 机中 16550 采用查询方式输入 50 个字符的异步通信程序,设 16550 的端口地址为 3F8H ~3FFH ,数据格式为: 8 位数据位、 1 位偶校验位、2 位停止位,通信速率为 19.2Kbps 。