二、可编程串行通信接口芯片 8251A
1.8251A基本性能
(1)两种传送方式:同步和异步传送
(2)同步传送,5~8位 /字符,内部或外部同步可自动插人同步字符
(3)异步传送,5~8位 /字符,时钟速率为通信波特率的 1,16或 64倍
(4)可自动产生、检测和处理终止字符,
可产生 1,1.5或 2位的停止位
(5)波特率在同步方式时为 0~ 64Kbps,
异步方式时为 0~ 19.2Kbps
(6)全双工、双缓冲器发送器和接收器
(7)出错检测:具有奇偶、溢出和帧错误等检测电路
2.8251A的内部结构
3.8251A的接口信号
( 1) 8251A与 CPU接口信号
① 片选信号
CS*为低电平时,8251A被选中
② 数据信号
D7~ D0与系统的数据总线相连
③ 读写控制信号
RD*为读信号
WR*为写信号
C/D*为控制 /数据信号
④ 收发联络信号
TXRDY为发送器准备好信号
TXE 发送器空信号
RXRDY 接收器准备好信号
SYNDET/BD 同步检测信号
( 2) 8251A与外部设备之间的连接信号
① 收发联络信号
DTR*数据终端准备好信号
DSR*数据设备准备好信号
RTS*请求发送信号
CTS*清除请求发送信号
② 数据信号
TXD 发送器数据输出信号
RXD 接收器数据输入信号
( 3)时钟、电源和地
CLK:工作时钟,由外部时钟源提供 。 为芯片内部电路提供定时,它不等于发送和接收数据的时钟 。
Vcc:电源输入
GND:地
4.8251A的编程
8251A的初始化流程图
8251A的编程包括两个方面的内容:
由 CPU发出控制字,即方式命令字和操作命令控制字
由 8251A向 CPU送出的状态字
( 1)方式命令字
( 2)操作命令字 (用于控制发 /收即数据传送方向 )
( 3)状态寄存器格式 (用于确定 8251A的工作方式 )
例,若 要 查 询 8251A 接 收 器 是 否 准 备 好
(3F8H,3F9H),可用下列程序实现:
MOV DX,3F9H ;状态口
NEXT,IN AL,DX ;读状态口
AND AL,02H ;查询 D1=1?
JZ NEXT ;未准备好,;转 NEXT等待
MOV DX,3F8H ;数据口地址;送 DX
IN AL,DX
三,8251A应用举例
1.异步方式下初始化程序例 【 8-8】 设 8251A工作于异步方式,波特率系数为 16,具有 7位数据位,1 位停止位,偶校验,发送,接收允许,设端口地址为 3F8H和
3F9H,试编程初始化 。
分析:根据题目要求,可以确定方式命令字为:
01111010B,即 7AH 。 而 操 作 命 令 字 为
00110111B,即 37H
初始化程序如下:
MOV DX,3F9H
MOV AL,7AH ;送方式命令字
OUT DX,AL
MOV AL,37H ;设操作命令字
OUT DX,AL
2.同步方式下初始化程序例 【 8-9】 设 8251A工作于同步方式,控制口的端口地址为 3F9H,采用双同步字符,奇校验,7 位数据位,试编程初始化 。
分析:根据题目要求,可以确定方式命令字为
00011000B,即 18H。而操作命令字为
10110111B即 B7H。它使 8251A对同步字符进行检索;同时使状态寄存器中 3个出错标志复位;此外,
使 8251A的发送器启动,接收器也启动;控制字还通知 8251A,CPU当前已经准备好进行数据传输。
MOV DX,3F9H ; 命令端口地址给 DX
MOV AL,00011000B ;方式命令字
OUT DX,AL
MOV AL,16H
OUT DX,AL ;送第一个同步字符 16H
OUT DX,AL ;送第二个同步字符 16H
MOV AL,B7H ;设置操作命令字
OUT DX,AL
3.两台微机之间进行双机串行通信的举例例 【 8-10】 通过 8251A实现两台微机相互通信的硬件连接图如图 8-25所示。利用两片 8251A通过标准串行接口 RS-
232C实现两台 8086微机之间的异步串行通信。设两台微机中 8251A的命令端口地址为均 3F9H,数据端口地址均为
3F8H。
分析:设系统采用查询方式控制串行通信的过程 。
初始化程序由两部分组成:
① 将一方定义为发送方,发送方 CPU查询到 TxRDY有效时,则 CPU向 8251A并行输出一个待发送的字节数据;
② 将对方定义为接收方,接收方 CPU查询到 RxRDY有效时,则从 8251A输入一个已接收到的字节数据,直到全部数据传送完毕为止 。
发送程序如下:
START,MOV DX,3F9H
MOV AL,7FH ;异步方式,8位数据,;一位停止位,偶校验
OUT DX,AL ;波特率因子为 64,允许;发送
MOV AL,11H ;操作命令字
OUT DX,AL
MOV DI,1000H ;设置地址指针
MOV CX,40H ;设置计数器初值
L1,MOV DX,3F9H
IN AL,DX
AND AL,01H ;查询 TxRDY是否有效
JZ L1 ;无效则等待
MOV DX,3F8H
MOV AL,[DI] ;向 8251A输出一个字节数据
OUT DX,AL
INC DI ;修改地址指针
LOOP L1 ;未传送完,则继续下一个
HLT
接收程序如下:
BEGIN,MOV DX,3F9H
MOV AL,7FH ;异步方式,8位数据,1位停止位
OUT DX,AL ;偶校验,波特率因子 64,允许接收
MOV AL,14H ;操作命令字 ( 置 ER,RxE为 1)
OUT DX,AL
MOV SI,2000H ;设置地址指针
MOV CX,40H ;设置计数器初值
L2,MOV DX,3F9H
IN AL,DX ;读取状态字
TEST AL,38H ;查询接收器是否有错 。
JNZ ERR ;有错则转错误处理
AND AL,02H ;无误则查状态位 D1( RxRDY)
JZ L2 ;接收未准备好则等待
MOV DX,3F8H
IN AL,DX ;接受准备好,则接收 1个字;节数据
MOV [ SI],AL
INC SI ;修改接收数据区地址
LOOP L2
JMP L3
ERR,CALL ERR-OUT( 略 )
L3,MOV AX,4C00H ;已接收完,返回 DOS
INT 21H