第 8章 串并行通信接口技术第 8章 串并行通信接口技术
教学重点
串、并行接口的特点
8255A的工作方式和编程
8255A的 0,1方式及其应用
8251A,8250的初始化编程教学难点
8255A方式 1、方式 2与 CPU的连接和应用
8251A,8250与 CPU的连接和应用
8.1 概述微型计算机与 I/O设备的接口按照数据传送格式的不同,可分为并行接口和串行接口两种 。
实现并行通信的接口就是并行接口实现串行通信的接口就是串行接口并行通信与串行通信数据通信的基本方式可分为 并行通信 与 串行通信 两种:
并行通信,是指利用多条数据传输线将一个数据的各位同时传送 。 传输速度快,适用于短距离通信 。
串行通信,是指利用一条传输线将数据一位位地顺序传送 。 通信线路简单,利用电话或电报线路就可实现通信,降低成本,适用于远距离通信,但传输速度慢 。
以计算机的字长,通常是 8位,16位或 32
位为传输单位,一次传送一个字长的数据
适合于外部设备与微机之间进行近距离,
大量和快速的信息交换
例如:微机与并行接口打印机,磁盘驱动器
微机系统中最基本的信息交换方法
例如:系统板上各部件之间,接口电路板上各部件之间并行通信的特点串行通信的特点
将数据分解成二进制位用一条信号线,
既传送数据信息,又传送控制信息
要求数据格式固定,分为异步和同步数据格式
串行通信中对信号的逻辑定义与 TTL不兼容,需进行逻辑关系和逻辑电平转换
串行传送信息的速率需要控制,要求双方约定通信传输的波特率
8.2 可编程并行通信接口芯片 8255A
1,8255A有两个 8位 (端口 A与端口 B)和两个 4位 (端口
C高 /低 4位 )的并行输入 /输出端口
2,端口 A有三种工作方式:方式 0,方式 1,方式 2;
端口 B口有两种工作方式:方式 0,方式 1;可适应
CPU与 I /O接口的多种数据传送方式,如无条件传送,查询式传送和中断方式传送等
3,端口 C的使用较特殊,除工作在方式 0作为数据端口之外,当工作在方式 1和方式 2时,它的大部分引脚被用作联络信号,端口 C还可以进行按位置位
/复位操作一,8255A的主要特性二,8255A芯片的引脚信号
8255A的引脚信号如图 8-1所示。它为双列直插式封装,除了电源和地线以外,其外部引脚信号可分为两组,一组是面向
CPU的信号,一组是面向外设的信号。
1.面向 CPU一侧的引脚信号
⑴ D7~ D0,8位,双向,三态数据线
⑵ RESET,复位信号
⑶ CS*,片选信号
⑷ RD*,读信号
⑸ WR*,写信号
⑹ A1,A0,端口选择信号
A1 A0 RD* WR* CS* 输入操作( CPU读)
0
0
1
0
1
0
0
0
0
1
1
1
0
0
0
数据总线 ← 端口 A
数据总线 ← 端口 B
数据总线 ← 端口 C
0
0
1
1
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
输出操作 (CPU写 )
数据总线 → 端口 A
数据总线 → 端口 B
数据总线 → 端口 C
数据总线 → 控制端口
8255A的读 /写操作控制
2.面向外设一侧的引脚信号
端口 A,PA0~ PA7
A组,支持工作方式 0,1,2
端口 B,PB0~ PB7
B组,支持工作方式 0,1
端口 C,PC0~ PC7
仅支持工作方式 0
A组控制高 4位 PC4~ PC7
B组控制低 4位 PC0~ PC3
端口 A,PA0~ PA7
常作数据端口,功能最强大
端口 B,PB0~ PB7
常作数据端口
端口 C,PC0~ PC7
可作数据,状态和控制端口
分两个 4位,每位可独立操作
控制最灵活,最难掌握功能:
三,8255A的内部结构四,8255A工作方式字和编程
8255A有两种控制字:
工作方式选择控制字
端口 C的按位置位 /复位控制字
1.工作方式选择控制字 D7=1
2.按位置位 /复位控制字 (D7=0)
3.关于两个控制字的讨论工作方式命令 —— 指定 8255A的 3个端口的工作方式,必须初始化。
按位置位 /复位命令 —— 只对 PC口的输出进行控制,可放到初始化程序的任何地方。
特征位的设置 —— D7= 1,为工作方式命令; D7= 0为按位置位 /复位命令。
按位置位 /复位命令代码只能写入命令口。
4,8255A的初始化编程
初始化编程:一个方式控制字
采用控制 I/O地址,A1A0= 11
工作过程中:通过数据端口对外设数据进行读写
数据读写利用端口 A,B和 C的 I/O地址,
A1A0依次等于 00,01,10
IBM PC/XT机上,端口 A,B,C和控制端口的 I/O地址为 60H,61H,62H和 63H
(1)写入方式控制字:示例
要求:
A端口:方式 1输入
C端口上半部:输出,C口下半部:输入
B端口:方式 0输出
方式控制字,10110001B或 B1H
初始化的程序段:
MOV DX,303H ;假设控制端口为 303H
MOV AL,0B1H ;方式控制字
OUT DX,AL ;送到控制端口
(2)读写数据端口
初始化编程后:
当数据端口作为输入接口时,执行输入 IN指令将从输入设备得到外设数据
当数据端口作为输出接口时,执行输出 OUT
指令将把 CPU的数据送给输出设备
8255A具有锁存输出数据的能力
对输出方式的端口同样可以输入
不是读取外设数据
读取的是上次 CPU给外设的数据读写数据端口:示例
利用 8255A的输出锁存能力,可实现按位输出控制
对输出端口 B的 PB7位置位的程序段:
MOV DX,301H ;B端口假设为 301H
IN AL,DX ;读出 B端口原输出内容
OR AL,80H ;使 PB7= 1
OUT DX,AL ;输出新的内容
(3)读写端口 C:归纳 1
C端口被分成 两个 4位端口,两个端口只能以方式 0工作,可分别选择输入或输出
在控制上,C端口上半部和 A端口编为 A
组,C端口下半部和 B端口编为 B组
(3)读写端口 C:归纳 2
当 A和 B端口工作在方式 1或方式 2时,C
端口的部分或全部引脚将 被征用
其余引脚仍可设定工作在方式 0
(3) 读写端口 C:归纳 3
对端口 C的数据输出有两种办法
通过端口 C的 I/O地址,向 C端口直接 写入字节数据 。 这一数据被写进 C端口的输出锁存器,并从输出引脚输出,但对设置为输入的引脚无效
通过控制端口,向 C端口 写入位控字,使
C端口的某个引脚输出 1或 0,或置位复位内部的中断允许触发器
(3)读写端口 C:归纳 4
读取的 C端口数据有两种情况
未被 A和 B端口征用的引脚,将从定义为输入的端口读到引脚输入信息;将从定义为输出的端口读到输出锁存器中的信息
被 A和 B端口征用作为联络线的引脚,将读到反映 8255A状态的 状态字五,8255A的工作方式
方式 0,基本输入输出方式
适用于无条件传送和查询方式的接口电路
方式 1,选通输入输出方式
适用于查询和中断方式的接口电路
方式 2,双向选通传送方式
适用于与双向传送数据的外设
适用于查询和中断方式的接口电路
1.方式 0
方式 0的特点
0方式是一种基本输入 /输出方式在 0方式下,24根 I /O线全部由用户支配不设置专用的联络信号线单向 I /O
2,方式 1
方式 1为选通输入输出方式,需要专用的联络信号线,该方式通常用于查询(条件 )传送,数据的输入输出均有能力
PA和 PB为数据口,而 PC口的大部分引脚作专用的联络信号各联络信号线之间有固定的时序关系,传送时,
要严格按时序进行 输入 /输出操作过程中,产生固定的状态字,这些状态字可作为查询或中断请求字用。状态字从 PC口读取单向传送
( 1)端口 A方式 1作输入,
数据选通信号表示外设已经准备好数据输入缓冲器满信号表示 A口已经接收数据中断请求信号请求 CPU接收数据
PC4
PC5
PC3
PA7~PA0
INTEA
IBFA
INTRA
STBA
中断允许触发器
PC2
PC1
PC0
PB7~PB0
INTEB
IBFB
INTRB
STBB
数据选通信号表示外设已经准备好数据输入缓冲器满信号表示 A口已经接收数据中断请求信号请求 CPU接收数据中断允许触发器端口 B方式 1作输入:
方式 1输入联络信号定义
STB*—— 选通信号,低电平有效由外设提供的输入信号,当其有效时,将输入设备送来的数据锁存至 8255A的输入锁存器
IBF—— 输入缓冲器满信号,高电平有效
8255A输出的联络信号 。 当其有效时,表示数据已锁存在输入锁存器
INTR—— 中断请求信号,高电平有效
8255A输出的信号,可用于向 CPU提出中断请求,
要求 CPU读取外设数据
INTE —— 中断允许信号,高电平有效用 于 控制中断允许或中断屏蔽联络信号 端口 A 端口 C
STB* 对应 PC4 对应 PC2
IBF 对应 PC5 对应 PC1
INTR 对应 PC3 对应 PC0
INTE PC4置位 PC2置位
8255A方式 1作输入时的各联络信号对应关系
( 2) 8255A工作在方式 1下的输入时序
( 3)端口 A方式 1作输出:
外设响应信号表示外设已经接收到数据输出缓冲器满信号表示 CPU已经输出了数据中断请求信号请求 CPU再次输出数据
PC6
PC7
PC3
PA7~PA0
INTEA
OBFA
INTRA
ACKA
中断允许触发器端口 B方式 1作输出:
PC2
PC1
PC0
PB7~PB0
INTEB
OBFB
INTRB
ACKB
外设响应信号表示外设已经接收到数据输出缓冲器满信号表示 CPU已经输出了数据中断请求信号请求 CPU再次输出数据中断允许触发器方式 1输出联络信号
OBF*—— 输出缓冲器满信号,低有效
8255A输出给外设的一个控制信号,当其有效时,
表示 CPU已把数据输出给指定的端口,外设可以取走
ACK*—— 响应信号,低有效
外设的响应信号,指示 8255A的端口数据已由外设接受
INTR—— 中断请求信号,高有效
当输出设备已接受数据后,8255A输出此信号向
CPU提出中断请求,要求 CPU继续提供数据联络信号 端口 A 端口 B
OBF* 对应 PC7 对应 PC1
ACK 对应 PC6 对应 PC2
INTR 对应 PC3 对应 PC0
INTE PC6置位 PC2置位
8255A方式 1作输出时的各联络信号对应关系
( 4) 8255A工作在方式 1下的输入时序
3,方式 2( 双向选通方式)
方式 2将方式 1的选通输入输出功能组合成一个双向数据端口,可以发送数据和接收数据
只有端口 A可以工作于方式 2,需要利用端口 C的
5个信号线,其作用与方式 1相同
方式 2的数据输入过程与方式 1的输入方式一样
方式 2的数据输出过程与方式 1的输出方式有一点不同:数据输出时 8255A不是在 OBF*有效时向外设输出数据,而是在外设提供响应信号
ACK*时才送出数据
(1)方式 2的信号定义
PC6
PC7
PC3
PA7~PA0
INTE1
OBFA
INTRA
ACKA
PC4
PC5 IBFA
STBAINTE2
用 PC6设置 INTE1(输出)
用 PC4设置 INTE2(输入)
输入和输出中断通过或门输出 INTRA信号
( 2) 8255A工作在方式 2下的工作时序六,8255A的应用
1.开关量的检测例 【 8-3】 在工业控制过程中,经常需要检测某些开关的状态 。 例如,在某一系统中,有 8个开关 K7~ K0,要求不断地检测它们的通断状态,
并随时在发光二极管上显示 。 通过 8255A的端口 A读入开关状态信息,使端口 B,端口 C连接的发光二极管的状态与端口 A开关状态相呼应,
并重复执行 。 假设 8255A在系统中端口 A,B、
C及控制口的地址分别为 100H,101H,102H,
103H,试设计出硬件电路图,并编写程序 。
解,(1) 硬件电路如图 8-11所示
MOV DX,103H ;控制寄存器的地址送给 DX
MOV AL,90H ;控制字
OUT DX,AL ;写入控制字
L1,MOV DX,100H ;端口 A 地址的送给 DX
IN AL,DX ;从端口 A读入开关状态
MOV DX,101H ;指向端口 B端口
OUT DX,AL ;从端口 B输出,控制 LED
XOR AL,0FFH ; AL← AL取反
MOV DX,102H ;端口 C 的地址送给 DX
OUT DX,AL ;从端口 C输出
JMP L1 ;循环
(2) 相应的 8255A初始化程序为:
例 【 8-4】 利用 Intel 8255A对四相步进电机进行控制,如图 8-12所示 。 如果对步进电机施加一定规则的连续控制的脉冲电压,它可以连续不断地转动 。
每相的脉冲信号控制步进电机的某一相绕阻,若按照某一相序改变一次绕组的通电状态,对应转过一定的角度 ( 一个步距角 ) 。 当通电状态的改变完成一个循环时,转子转过一个齿距 。 四相步进电机可以在不同的通电方式下运行 。 常见的通电方式有单
( 单相绕组通电 ) 四拍 ( A-B-C-D-A-… ),双 ( 双绕组通电 ) 四拍 ( AB-BC-CD-DA-AB-… ),单双八拍 ( A-AB-B-BC-C-CD-D-DA-A-… ) 等等 。 按正
2.步进电机控制序方向送电则正转,按反序方向送电则反转,本例采用双四拍通电方式控制步进电机正转运行。
通过改变脉冲信号的频率,就可改变步进电机的转速。利用 Intel 8255A的 PA3~ PA0各控制一相,
端口 A工作在方式 0的输出。三态缓冲器 74LS244
的恒接地,该芯片处于直通状态,74LS244用作对三极管 TIP122的驱动。步进电机控制的相序和对应的控制字如表 8-5所示。假设 8255A的端口地址为 300H,301H,302H,303H,试编写连续正转的控制程序。
表 8-5 步进电机相序和控制编码控制顺序 相序号 控制编码
1 AB 03H
2 BC 06H
3 CD 0CH
4 DA 09H
工作方式控制字,10000000B=80H( 端口 A方式 0,输出 )
主要程序段为:
MOV AL,80H
MOV DX,303H ;控制字端口的地址送给 DX
OUT DX,AL
MOV DX,300H ;端口 A地址
L1,MOV AL,03H ; AB相送电
OUT DX,AL
CALL DELAY1 ;调用延迟子程序
MOV AL,06H ; BC相送电
OUT DX,AL
CALL DELAY1
MOV AL,0CH ; CD相送电
OUT DX,AL
CALL DELAY1
MOV AL,09H ; DA相送电
OUT DX,AL
CALL DELAY1
JMP L1
DELAY1,MOV CX,03FFFH ;延时
DELAY2,LOOP DELAY2
RET
3.打印机控制接口 (方式 0)
例 【 8-5】 查询式打印机接口及编程 。 打印机的工作时序如图 8-13所示 。 当 CPU准备输出打印的数据时,先查询打印机忙信号 (BUSY),如果打印机正在打印字符时,忙信号为 1(BUSY=1),
不能接收数据 。 当打印机不忙后,CPU对打印机接口输出 8位二进制数,并使选通信号 ( 简称 ) 为负脉冲时,将数据送入打印机中的数据端口 。
分析,8255A的控制字为,10000001B=81H
8255A工作在方式 0,端口 A,输出;端口 C高 4位输出,低 4
位输入 。
PC6置位,00001101B = 0DH
PC6复位,00001100B= 0CH
设待打印字符在内存的首地址为 2000H,编写打印机驱动程序如下:
MOV DX,247H ; 8255A控制端口地址; 247H送给 DX
MOV AL,81H ; 8255A控制字
OUT DX,AL
MOV AL,0DH
OUT DX,AL ;使 PC6置,1”,即 STB*= 1
MOV SI,2000H ;数据段内偏移地址送给 SI
MOV CX,0FFH ;打印字节数
NEXT,MOV DX,246H ; 8255A的 PC口地址
IN AL,DX ;读端口 C数据,查询 PC3= 0?
AND AL,08H
JNZ NEXT ;打印机忙,则等待
MOV DX,244H ;端口 A地址送给 DX
MOV AL,[ SI] ;从内存取出一个字节
OUT DX,AL
MOV DX,247H ;端口 C地址送给 DX
MOV AL,0CH ;设置 PC6为,0”,
OUT DX,AL ;使 STB*选通信号为低电平
NOP
NOP
NOP ;适当延时
MOV AL,0DH
OUT DX,AL ; STB*= 1
INC SI ;内存地址加 1
LOOP NEXT
例 【 8-6】 中断方式打印机接口及编程将上例中 8255A的工作方式改为方式 1,即端口 A工作在方式 1输出,外加一片中断控制器
8259A,端口 A的中断输出线 PC3通过 8259A向
CPU申请中断,可以构成中断方式打印接口电路,
如图 8-15所示 。 设 8255A的 4个端口地址分别为:
244H,245H,246H,247H,试编写打印机驱动程序 。
分析:用 PC7作为打印机的选通信号,打印机的作为外设给 8255A的应答信号 ( PC6),8255A的中断请求输出信号 PC3接至中断控制器 8259A的 IR3
8255A的控制字为,10101000B
PC6置位,00001101B 即 0DH,允许 8255A的端口 A方式 1输出中断假设 8259A 初始化时写入 ICW2 的值为 08H,则
8255A的端口 A的中断类型码是 0BH( 对应 IR3),
此中断类型码对应的中断向量应放到中断向量表从
002CH开始的 4个存储单元中主程序:
MAIN,MOV DX,247H
MOV AL,0A8H
OUT DX,AL ;设置 8255A的控制字
XOR AX,AX
MOV DS,AX
MOV AX,OFFSET RING
MOV [002CH],AX
MOV AX,SEG RING
MOV [002EH],AX
MOV DX,247H
MOV AL,0DH ; PC6为 1,允许端口 A方式 1;输出中断
OUT DX,AL
MOV DI,OFFSET BUFF ;设置地址指针
MOV CX,100 ;设置计数器初值
MOV DX,244H
MOV AL,[DI]
OUT DX,AL ;输出第一个字符
INC DI
STI
LOOP NEXT
JMP ABC
NEXT,HLT ;等待中断
LOOP NEXT
ABC,CLI
MOV AH,4CH
INT 21H
中断服务子程序如下:
RING,MOV DX,244H
MOV AL,[DI]
OUT DX,AL ;从端口 A输出一个字符
INC DI ;修改地址指针
STI
IRET ;中断返回
8.3 可编程串行通信接口芯片 8251A
一、串行通信的基本概念全双工方式站 A 站 B
站 A 站 B
站 A 站 B
半双工方式单工方式
1,数据传送方向
2.波特率与收 /发时钟
串行传输速率也称 波特率 ( Baud Rate)
每秒传输的二进制位数 bps
字符中每个二进制位持续的时间长度都一样,为数据传输速率的倒数
过去,串行异步通信的数据传输速率限制在 50
bps到 9600 bps之间 。 现在,可以达到 115200 bps
或更高
( 1)串行传输速率字符速率与波特率两者关系字符速率:每秒钟传输的字符数。
波特率:指单位时间内传送二进制数据的位数。单位为,b/s
例1,异步传输过程设每个字符对应 1个起始位,7个信息位,1个奇偶校验位和 1个停止位,如果波特率为 1200bps,
那么,每秒钟能传输的最大字符数为 1200/10=
120个例 2:同步传输用 1200bps的波特率工作,用 4个同步字符作为信息帧头部,但不用奇偶校验,那么,传输 100 个 字 符 所 用 的 时 间 为
7(100+4)/1200= 0.6067s,这就是说,每秒钟能传输的字符数可达到 100/0.6067=
165个 。
可见,在同样的传输率下,同步传输时实际字符传输率要比异步传输时高 。
( 2) 发送 /接收时钟发送 /接收时钟频率与 波特率之间的关系为:
发送 /接收时钟频率 =n?发送 /接收 波特率例:要求传输速率为 1200 bps
当选择 n=16时,表明一位数字信号中有 16个时钟脉冲,故发送 /接收时钟频率为:
1200?16=19.2kHz
其中 n称为波特因子,一般 n=1,16,32,64
3.串行通信的两种基本方式在串行通信中,有两种最基本的通信方式:
同步通信 ( Synchronous Data
Communication)
异 步 通 信 ( Asynchronous Data
Communication)
异步通信以一个字符为传输单位,用起始位表示字符的开始,用停止位表示字符结束
( 1)异步通信及其协议
串行通信时的数据,控制和状态信息都使用同一根信号线传送
收发双方必须遵守共同的通信协议 ( 通信规程 ),才能解决传送速率,信息格式,
位同步,字符同步,数据校验等问题
串行异步通信以字符为单位进行传输,其通信协议是 起止式异步通信协议
( 2)同步通信及其协议同步通信是以数据块(字符块)为单位传送的,每个数据块经过格式化之后,形成一帧数据,作为一个整体进行发送与接收,因此,传送一旦开始,要求每帧数据内部的每一位都要同步二、可编程串行通信接口芯片 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接收器是否准备好,可用下列程序实现:
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)
MOV 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
8.4 通用的异步接收发送芯片 8250
8250是一种可编程的串行异步通信接口芯片,它支持异步通信规程;芯片内设置时钟发生电路,可通过编程改变传送数据的波特率;它提供 MODEM的状态信息,极易通过 MODEM实现远程通信;
它具有数据回送功能,为调试自检提供方便
1,8250的寄存器及编程方法
8250内部有 10个 可访问的寄存器,除数寄存器是 16位的,占用两个连续的 8位端口
内部寄存器用引脚 A0~ A2来寻址;同时还要利用通信线路控制寄存器的最高位,即除数寄存器访问位 DLAB的 0和 1两种状态,
来区别公用 1个端口地址所访问的两个寄存器
8250内部寄存器端口地址适配器地址 DLAB A2A1A0 访问寄存器名称
3F8H 0 0 0 0 接收数据寄存器 ( 读 )发送保持寄存器 ( 写 )
3F9H 0 0 0 1 中断允许寄存器
3F8H 1 0 0 0 波特率除数锁存寄存器 ( 低字节 )
3F9H 1 0 0 1 波特率除数锁存寄存器 ( 高字节 )
3FAH? 0 1 0 中断识别寄存器
3FBH? 0 1 1 线路控制寄存器
3FCH? 1 0 0 MODEM控制寄存器
3FDH? 1 0 1 线路状态寄存器
3FEH? 1 1 0 MODEM状态寄存器
( 1) 发送保持寄存器 THR (3F8H),,写”
包含将要串行发送的并行数据
CPU
发送保持寄存器发送移位寄存器同步控制
8250
SOUT
( 1) 接收缓冲寄存器 RBR (3F8H),,读”
存放串行接收后转换成并行的数据
CPU
接收缓冲寄存器接收移位寄存器同步控制
8250
SIN
( 2)波特率除数寄存器 BRD(3F8H,3F9H)
除数寄存器保存设定的分频系数
BRD=基准时钟频率 ÷ ( 16× 波特率)
起 始 位时钟
( RCLK)
数据线
( SIN) T
16 T
16 T8 T
例 【 8-11】 计算波特率为 1200bps的波特率除数 。
当使用 UART的内部时钟为 1.8432MHz
时 ( 或由外部通过 XTAL1引脚输入 ),
BRD=1843200/( 16× 1200) =0060H
( 3) 通信线路控制寄存器 LCR( 3FBH)
DLAB D6 D5 D4 D3 D2 D1 D0
寄存器选择
0 正常值
1 除数寄存器中止字符
0 无作用
1 发送中止字符校验位设置
×× 0 无校验位
001 设置奇校验
011 设置偶校验
101 校验位为 1
111 校验位为 0
停止位个数
0 1位
1 1.5位 ( 数据位为 5位时 )
1 2位 ( 数据位为 6~ 8位时 )
数据位个数
00 5位
01 6位
10 7位
11 8位指定串行异步通信的字符格式例 【 8-13】 通信线路控制寄存器 ( LCR) 的编程,设置发送数据字长为 8位,2位停止位,
偶校验,其程序段为:
MOV DX,3FBH ; LCR的地址
MOV AL,00011111B ; LCR内容数;据格式参数
OUT DX,AL
( 4)通信线路状态寄存器 LSR( 3FDH)
0 D6 D5 D4 D3 D2 D1 D0
为 1,表示发送移位寄存器空;
当数据由发送保持寄存器移入发送移位寄存器时,该位为 0
提供串行异步通信的当前状态供 CPU读取和处理为 1,表示发送保持寄存器空,
当 CPU将字符写入发送保持寄存器后,该位为 0
为 1,表示正在传输中止字符为 1,表示出现帧错误为 1,表示出现奇偶错为 1,表示出现溢出错为 1,表示接收数据缓冲器收到一个数据,既接收数据准备好;
当 CPU读走数据后,该位为 0
为 1使 DTR*引脚为低否则为高
( 5) MODEM控制寄存器 MCR(3FCH)
设置 8250与数据通信设备之间联络应答的输出信号
0 0 0 LOOP OUT2 OUT1 RTS DTR
为 1使 RTS*引脚为低否则为高为 1使 OUT1*引脚为低否则为高为 1使 OUT2*引脚为低否则为高为 1使 8250为循环工作方式否则为正常工作方式例 【 8-14】 要使 MCR 的 DTR,RTS 有效,
OUT1,OUT2以及 LOOP无效,则编程如下:
MOV DX,3FCH ; MCR的地址,
MOV AL,00000011B ; MCR的控制字
OUT DX,AL
例 【 8-15】 要对 8250通过自发自收进行诊断,
则程序为,
MOV DX,3FCH ; MCR的地址
MOV AL,00010011B ; LOOP位置,1”
OUT DX,AL
( 6) MODEM状态寄存器 MSR(3FEH)
反映 4个控制输入信号的当前状态及其变化
MSR高 4位中某位为 1,说明相应输入信号当前为低有效,否则为高电平
MSR低 4位中某位为 1,则说明从上次 CPU读取该状态字后,相应输入信号已发生改变,从高变低或反之
MCR低 4位任一位置 1,均产生调制解调器状态中断,当 CPU读取该寄存器或复位后,低 4位被清零
( 7)中断允许寄存器 IER ( 3F9H)
8250设计有 2个中断寄存器和 4级中断
4级中断的优先权,是按照串行通信过程中事件的紧迫程度安排的,是固定不变的
用户可利用中断允许或禁止进行控制
中断允许寄存器的低 4位控制 8250这 4级中断是否被允许
某位为 1,则对应的中断被允许
否则,被禁止
8,中断识别 IIR( 3FAH)
保存正在请求中断的优先权最高的中断级别编码
0 0 0 0 0 ID1 ID0 IP 0 有中断
1 无中断
ID1ID0 优先权 中断类型
1 1
1 0
0 1
0 0
1
2
3
4
接收线路状态接收数据准备好发送保持寄存器空调制解调器状态
2,8250的内部结构
3,8250芯片引脚定义与功能
( 1)面向 CPU一侧的引脚( 1)
数据线 D7 ~ D0,在 CPU与 8250之间交换信息
地址线 A0~ A2:寻址 8250内部寄存器
片选线,8250设计了 3个片选输入信号 CS0、
CS1,CS2*和一个片选输出信号 CSOUT。 3个片选输入都有效时,才选中 8250 芯片,同时
CSOUT输出高电平有效 。
地址选通信号 ADS*:当该信号低有效时,锁存上述地址线和片选线的输入状态,保证读写期间的地址稳定
( 1)处理器接口引脚( 2)
读控制线
数据输入选通 DISTR( 高有效 ) 和 DISTR*( 低有效 )
有一个信号有效,CPU从 8250内部寄存器读出数据
相当于 I/O读信号
写控制线
数据输出选通 DOSTR( 高有效 ) 和 DOSTR*( 低有效 ) 有一个有效,CPU就将数据写入 8250内部寄存器
相当于 I/O写信号
8250读写控制信号有两对,每对信号作用完全相同,只不过有效电平不同而己
( 1)处理器接口引脚( 3)
驱动器禁止信号 DDIS,CPU从 8250读取数据时,DDIS引脚输出低电平,用来禁止外部收发器对系统总线的驱动;其它时间,
DDIS为高电平
主复位线 MR:硬件复位信号 RESET
中断请求线 INTRPT,8250有 4级共 10个中断源,当任一个未被屏蔽的中断源有请求时,INTRPT输出高电平向 CPU请求中断
( 1) 输出线( 4)
OUT1*和 OUT2*:
两个一般用途的输出信号
由调制解调器控制寄存器的 D2和 D3使其输出低电平有效信号
复位使其恢复为高
( 2)面向外设引脚信号
8250
数据装置准备好 DSR*
数据终端准备好 DTR*
发送数据 SOUT
接收数据 SIN
请求发送 RTS*
允许发送 CTS*
信号地 GND
载波检测 RLSD*
振铃指示 RI*
( 3)时钟信号
时钟输入引脚 XTAL1,8250的基准工作时钟
时钟输出引脚 XTAL2,基准时钟信号的输出端
波特率输出引脚 BAUDOUT*:基准时钟经 8250
内部波特率发生器分频后产生发送时钟
接收时钟引脚 RCLK,接收外部提供的接收时钟信号;若采用发送时钟作为接收时钟,则只要将
RCLK引脚和 BAUDOUT*引脚直接相连
3,8250应用举例写通信控制字 D7=1
写除数低 8位写通信控制字写除数高 8位写 MODE控制字写中断允许字结束
8250的初始化过程例 【 8-17】 8250端口地址为 3F8H~ 3FFH,若 8250以波特率
9600bps,进行异步通信,每字符 8位,1位停止位,采用奇校验,允许所有中断,试编程初始化 。
解,MOV DX,3FBH ; 8250控制寄存器地址送 DX
MOV AL,80H ;置 DLAB=1,设置除数寄存器
OUT DX,AL
MOV DX,3F8H ;除数寄存器地址送 DX
MOV AL,0CH ;波特率为 9600bps
OUT DX,AL ;送除数低 8位
INC DX
MOV AL,00H ;送除数高 8位
OUT DX,AL
MOV DX,3FBH ; 8250控制寄存器地址送 DX
MOV AL,0BH ; 8位数据,奇校验,1位停止位
OUT DX,AL
MOV DX,3F9H ;中断允许寄存器地址送 DX
MOV AL,0FH ;设置中断允许控制字,允许所有中断
OUT DX,AL
MOV DX,3FCH ;设置 MODEM控制字
MOV AL,0FH
OUT DX,AL ; OUT1*,OUT2*均为 0
例 【 8-18】 两台 PC机用 RS-232C串口采用零 MODEM方式实现近距离串行通信 。 数据传送波特率为 9600bps,数据格式为 8位 /每字符,1位停止位,奇校验,双机 8250
端口地址均为 2F8H~ 2FFH。 试编写发送和接收程序,
其功能如下:
① 通信双方执行程序后,均等待键盘输入字符
② 双方只要按下一个键,键值在本机当前光标处显示,
而且传送到对方,在对方当前光标处显示出来
③ 双方只要按下 ESC键,则停止程序的执行,返回到
DOS状态
④ 通信双方如果出现通信错误,则屏幕显示,?,,
并继续等待键入新字符或接收新字符
MOV DX,2FBH ; 8250控制寄存器地址送 DX
MOV AL,80H ;置 DLAB=1,设置除数寄存器
OUT DX,AL
MOV DX,2F8H ;除数寄存器地址送 DX
MOV AL,0CH ;波特率为 9600bps
OUT DX,AL ;送除数低 8位
INC DX
MOV AL,00H ;送除数高 8位
OUT DX,AL
MOV DX,2FBH ; 8250控制寄存器地址送 DX
MOV AL,0BH ; 8位数据,奇校验,1位停止位
OUT DX,AL
MOV DX,2FCH
MOV AL,03H
OUT DX,AL
MOV DX,2F9H
MOV AL,00H
OUT DX,AL
FOREVER,MOV DX,2FDH
IN AL,DX ;读线路状态寄存器
TEST AL,1EH
JNZ ERROR ; 有错,转错误处理程序
TEST AL,01H ; 查接收缓冲器是否满
JNZ RECEIVE
TEST AL,20H ; 查发送缓冲器是否空
JNZ RECEIVE
MOV AH,01H ; 读键盘缓冲器内容,若有键按下,则 ZF=0,且 AL=字符码
INT 16H
JZ FOREVER
MOV AH,00H
INT 16H
MOV DX,2F8H
OUT DX,AL
MOV AH,02H ;显示字符
MOV DL,AL
INT 21H
CMP AL,27 ; 若按下 ESC键,则退出
JNZ NEXT
MOV AH,4CH
INC 21H
NEXT,JMP FOREVER
RECEIVE,MOV DX,2F8H
IN AL,DX
AND AL,7FH
CMP AL,27
JNZ DISP
MOV AH,4CH
INT 21H
DISP,PUSH AX
MOV BX,0
MOV AH,14
INT 10H
POP AX
CMP AL,0DH
JNZ FOREVER
MOV AL,0AH
MOV BX,0
MOV AH,14
INT 10H
JMP FOREVER
ERROR,MOV DX,3F8H
IN AL,DX
MOV AL,‘? ’
MOV BX,0
MOV AH,14
INT 10H
JMP FOREVER
第 8章教学要求
1.掌握并行通信和串行通信的基本概念,
2.掌握并行接口芯片 8255A的基本结构和特点
3.掌握串行接口芯片 8251A,8250
的基本结构和特点
4.熟悉 8255A的三种工作方式及其应用
5.掌握 8255A和 8251A,8250的控制字的含义
6.掌握串行通信的数据格式及编程习题 8
8.2 8.3 8.4 8.6 8.9 8.10
8.11 8.12
第 8章教学要求 (续)
教学重点
串、并行接口的特点
8255A的工作方式和编程
8255A的 0,1方式及其应用
8251A,8250的初始化编程教学难点
8255A方式 1、方式 2与 CPU的连接和应用
8251A,8250与 CPU的连接和应用
8.1 概述微型计算机与 I/O设备的接口按照数据传送格式的不同,可分为并行接口和串行接口两种 。
实现并行通信的接口就是并行接口实现串行通信的接口就是串行接口并行通信与串行通信数据通信的基本方式可分为 并行通信 与 串行通信 两种:
并行通信,是指利用多条数据传输线将一个数据的各位同时传送 。 传输速度快,适用于短距离通信 。
串行通信,是指利用一条传输线将数据一位位地顺序传送 。 通信线路简单,利用电话或电报线路就可实现通信,降低成本,适用于远距离通信,但传输速度慢 。
以计算机的字长,通常是 8位,16位或 32
位为传输单位,一次传送一个字长的数据
适合于外部设备与微机之间进行近距离,
大量和快速的信息交换
例如:微机与并行接口打印机,磁盘驱动器
微机系统中最基本的信息交换方法
例如:系统板上各部件之间,接口电路板上各部件之间并行通信的特点串行通信的特点
将数据分解成二进制位用一条信号线,
既传送数据信息,又传送控制信息
要求数据格式固定,分为异步和同步数据格式
串行通信中对信号的逻辑定义与 TTL不兼容,需进行逻辑关系和逻辑电平转换
串行传送信息的速率需要控制,要求双方约定通信传输的波特率
8.2 可编程并行通信接口芯片 8255A
1,8255A有两个 8位 (端口 A与端口 B)和两个 4位 (端口
C高 /低 4位 )的并行输入 /输出端口
2,端口 A有三种工作方式:方式 0,方式 1,方式 2;
端口 B口有两种工作方式:方式 0,方式 1;可适应
CPU与 I /O接口的多种数据传送方式,如无条件传送,查询式传送和中断方式传送等
3,端口 C的使用较特殊,除工作在方式 0作为数据端口之外,当工作在方式 1和方式 2时,它的大部分引脚被用作联络信号,端口 C还可以进行按位置位
/复位操作一,8255A的主要特性二,8255A芯片的引脚信号
8255A的引脚信号如图 8-1所示。它为双列直插式封装,除了电源和地线以外,其外部引脚信号可分为两组,一组是面向
CPU的信号,一组是面向外设的信号。
1.面向 CPU一侧的引脚信号
⑴ D7~ D0,8位,双向,三态数据线
⑵ RESET,复位信号
⑶ CS*,片选信号
⑷ RD*,读信号
⑸ WR*,写信号
⑹ A1,A0,端口选择信号
A1 A0 RD* WR* CS* 输入操作( CPU读)
0
0
1
0
1
0
0
0
0
1
1
1
0
0
0
数据总线 ← 端口 A
数据总线 ← 端口 B
数据总线 ← 端口 C
0
0
1
1
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
输出操作 (CPU写 )
数据总线 → 端口 A
数据总线 → 端口 B
数据总线 → 端口 C
数据总线 → 控制端口
8255A的读 /写操作控制
2.面向外设一侧的引脚信号
端口 A,PA0~ PA7
A组,支持工作方式 0,1,2
端口 B,PB0~ PB7
B组,支持工作方式 0,1
端口 C,PC0~ PC7
仅支持工作方式 0
A组控制高 4位 PC4~ PC7
B组控制低 4位 PC0~ PC3
端口 A,PA0~ PA7
常作数据端口,功能最强大
端口 B,PB0~ PB7
常作数据端口
端口 C,PC0~ PC7
可作数据,状态和控制端口
分两个 4位,每位可独立操作
控制最灵活,最难掌握功能:
三,8255A的内部结构四,8255A工作方式字和编程
8255A有两种控制字:
工作方式选择控制字
端口 C的按位置位 /复位控制字
1.工作方式选择控制字 D7=1
2.按位置位 /复位控制字 (D7=0)
3.关于两个控制字的讨论工作方式命令 —— 指定 8255A的 3个端口的工作方式,必须初始化。
按位置位 /复位命令 —— 只对 PC口的输出进行控制,可放到初始化程序的任何地方。
特征位的设置 —— D7= 1,为工作方式命令; D7= 0为按位置位 /复位命令。
按位置位 /复位命令代码只能写入命令口。
4,8255A的初始化编程
初始化编程:一个方式控制字
采用控制 I/O地址,A1A0= 11
工作过程中:通过数据端口对外设数据进行读写
数据读写利用端口 A,B和 C的 I/O地址,
A1A0依次等于 00,01,10
IBM PC/XT机上,端口 A,B,C和控制端口的 I/O地址为 60H,61H,62H和 63H
(1)写入方式控制字:示例
要求:
A端口:方式 1输入
C端口上半部:输出,C口下半部:输入
B端口:方式 0输出
方式控制字,10110001B或 B1H
初始化的程序段:
MOV DX,303H ;假设控制端口为 303H
MOV AL,0B1H ;方式控制字
OUT DX,AL ;送到控制端口
(2)读写数据端口
初始化编程后:
当数据端口作为输入接口时,执行输入 IN指令将从输入设备得到外设数据
当数据端口作为输出接口时,执行输出 OUT
指令将把 CPU的数据送给输出设备
8255A具有锁存输出数据的能力
对输出方式的端口同样可以输入
不是读取外设数据
读取的是上次 CPU给外设的数据读写数据端口:示例
利用 8255A的输出锁存能力,可实现按位输出控制
对输出端口 B的 PB7位置位的程序段:
MOV DX,301H ;B端口假设为 301H
IN AL,DX ;读出 B端口原输出内容
OR AL,80H ;使 PB7= 1
OUT DX,AL ;输出新的内容
(3)读写端口 C:归纳 1
C端口被分成 两个 4位端口,两个端口只能以方式 0工作,可分别选择输入或输出
在控制上,C端口上半部和 A端口编为 A
组,C端口下半部和 B端口编为 B组
(3)读写端口 C:归纳 2
当 A和 B端口工作在方式 1或方式 2时,C
端口的部分或全部引脚将 被征用
其余引脚仍可设定工作在方式 0
(3) 读写端口 C:归纳 3
对端口 C的数据输出有两种办法
通过端口 C的 I/O地址,向 C端口直接 写入字节数据 。 这一数据被写进 C端口的输出锁存器,并从输出引脚输出,但对设置为输入的引脚无效
通过控制端口,向 C端口 写入位控字,使
C端口的某个引脚输出 1或 0,或置位复位内部的中断允许触发器
(3)读写端口 C:归纳 4
读取的 C端口数据有两种情况
未被 A和 B端口征用的引脚,将从定义为输入的端口读到引脚输入信息;将从定义为输出的端口读到输出锁存器中的信息
被 A和 B端口征用作为联络线的引脚,将读到反映 8255A状态的 状态字五,8255A的工作方式
方式 0,基本输入输出方式
适用于无条件传送和查询方式的接口电路
方式 1,选通输入输出方式
适用于查询和中断方式的接口电路
方式 2,双向选通传送方式
适用于与双向传送数据的外设
适用于查询和中断方式的接口电路
1.方式 0
方式 0的特点
0方式是一种基本输入 /输出方式在 0方式下,24根 I /O线全部由用户支配不设置专用的联络信号线单向 I /O
2,方式 1
方式 1为选通输入输出方式,需要专用的联络信号线,该方式通常用于查询(条件 )传送,数据的输入输出均有能力
PA和 PB为数据口,而 PC口的大部分引脚作专用的联络信号各联络信号线之间有固定的时序关系,传送时,
要严格按时序进行 输入 /输出操作过程中,产生固定的状态字,这些状态字可作为查询或中断请求字用。状态字从 PC口读取单向传送
( 1)端口 A方式 1作输入,
数据选通信号表示外设已经准备好数据输入缓冲器满信号表示 A口已经接收数据中断请求信号请求 CPU接收数据
PC4
PC5
PC3
PA7~PA0
INTEA
IBFA
INTRA
STBA
中断允许触发器
PC2
PC1
PC0
PB7~PB0
INTEB
IBFB
INTRB
STBB
数据选通信号表示外设已经准备好数据输入缓冲器满信号表示 A口已经接收数据中断请求信号请求 CPU接收数据中断允许触发器端口 B方式 1作输入:
方式 1输入联络信号定义
STB*—— 选通信号,低电平有效由外设提供的输入信号,当其有效时,将输入设备送来的数据锁存至 8255A的输入锁存器
IBF—— 输入缓冲器满信号,高电平有效
8255A输出的联络信号 。 当其有效时,表示数据已锁存在输入锁存器
INTR—— 中断请求信号,高电平有效
8255A输出的信号,可用于向 CPU提出中断请求,
要求 CPU读取外设数据
INTE —— 中断允许信号,高电平有效用 于 控制中断允许或中断屏蔽联络信号 端口 A 端口 C
STB* 对应 PC4 对应 PC2
IBF 对应 PC5 对应 PC1
INTR 对应 PC3 对应 PC0
INTE PC4置位 PC2置位
8255A方式 1作输入时的各联络信号对应关系
( 2) 8255A工作在方式 1下的输入时序
( 3)端口 A方式 1作输出:
外设响应信号表示外设已经接收到数据输出缓冲器满信号表示 CPU已经输出了数据中断请求信号请求 CPU再次输出数据
PC6
PC7
PC3
PA7~PA0
INTEA
OBFA
INTRA
ACKA
中断允许触发器端口 B方式 1作输出:
PC2
PC1
PC0
PB7~PB0
INTEB
OBFB
INTRB
ACKB
外设响应信号表示外设已经接收到数据输出缓冲器满信号表示 CPU已经输出了数据中断请求信号请求 CPU再次输出数据中断允许触发器方式 1输出联络信号
OBF*—— 输出缓冲器满信号,低有效
8255A输出给外设的一个控制信号,当其有效时,
表示 CPU已把数据输出给指定的端口,外设可以取走
ACK*—— 响应信号,低有效
外设的响应信号,指示 8255A的端口数据已由外设接受
INTR—— 中断请求信号,高有效
当输出设备已接受数据后,8255A输出此信号向
CPU提出中断请求,要求 CPU继续提供数据联络信号 端口 A 端口 B
OBF* 对应 PC7 对应 PC1
ACK 对应 PC6 对应 PC2
INTR 对应 PC3 对应 PC0
INTE PC6置位 PC2置位
8255A方式 1作输出时的各联络信号对应关系
( 4) 8255A工作在方式 1下的输入时序
3,方式 2( 双向选通方式)
方式 2将方式 1的选通输入输出功能组合成一个双向数据端口,可以发送数据和接收数据
只有端口 A可以工作于方式 2,需要利用端口 C的
5个信号线,其作用与方式 1相同
方式 2的数据输入过程与方式 1的输入方式一样
方式 2的数据输出过程与方式 1的输出方式有一点不同:数据输出时 8255A不是在 OBF*有效时向外设输出数据,而是在外设提供响应信号
ACK*时才送出数据
(1)方式 2的信号定义
PC6
PC7
PC3
PA7~PA0
INTE1
OBFA
INTRA
ACKA
PC4
PC5 IBFA
STBAINTE2
用 PC6设置 INTE1(输出)
用 PC4设置 INTE2(输入)
输入和输出中断通过或门输出 INTRA信号
( 2) 8255A工作在方式 2下的工作时序六,8255A的应用
1.开关量的检测例 【 8-3】 在工业控制过程中,经常需要检测某些开关的状态 。 例如,在某一系统中,有 8个开关 K7~ K0,要求不断地检测它们的通断状态,
并随时在发光二极管上显示 。 通过 8255A的端口 A读入开关状态信息,使端口 B,端口 C连接的发光二极管的状态与端口 A开关状态相呼应,
并重复执行 。 假设 8255A在系统中端口 A,B、
C及控制口的地址分别为 100H,101H,102H,
103H,试设计出硬件电路图,并编写程序 。
解,(1) 硬件电路如图 8-11所示
MOV DX,103H ;控制寄存器的地址送给 DX
MOV AL,90H ;控制字
OUT DX,AL ;写入控制字
L1,MOV DX,100H ;端口 A 地址的送给 DX
IN AL,DX ;从端口 A读入开关状态
MOV DX,101H ;指向端口 B端口
OUT DX,AL ;从端口 B输出,控制 LED
XOR AL,0FFH ; AL← AL取反
MOV DX,102H ;端口 C 的地址送给 DX
OUT DX,AL ;从端口 C输出
JMP L1 ;循环
(2) 相应的 8255A初始化程序为:
例 【 8-4】 利用 Intel 8255A对四相步进电机进行控制,如图 8-12所示 。 如果对步进电机施加一定规则的连续控制的脉冲电压,它可以连续不断地转动 。
每相的脉冲信号控制步进电机的某一相绕阻,若按照某一相序改变一次绕组的通电状态,对应转过一定的角度 ( 一个步距角 ) 。 当通电状态的改变完成一个循环时,转子转过一个齿距 。 四相步进电机可以在不同的通电方式下运行 。 常见的通电方式有单
( 单相绕组通电 ) 四拍 ( A-B-C-D-A-… ),双 ( 双绕组通电 ) 四拍 ( AB-BC-CD-DA-AB-… ),单双八拍 ( A-AB-B-BC-C-CD-D-DA-A-… ) 等等 。 按正
2.步进电机控制序方向送电则正转,按反序方向送电则反转,本例采用双四拍通电方式控制步进电机正转运行。
通过改变脉冲信号的频率,就可改变步进电机的转速。利用 Intel 8255A的 PA3~ PA0各控制一相,
端口 A工作在方式 0的输出。三态缓冲器 74LS244
的恒接地,该芯片处于直通状态,74LS244用作对三极管 TIP122的驱动。步进电机控制的相序和对应的控制字如表 8-5所示。假设 8255A的端口地址为 300H,301H,302H,303H,试编写连续正转的控制程序。
表 8-5 步进电机相序和控制编码控制顺序 相序号 控制编码
1 AB 03H
2 BC 06H
3 CD 0CH
4 DA 09H
工作方式控制字,10000000B=80H( 端口 A方式 0,输出 )
主要程序段为:
MOV AL,80H
MOV DX,303H ;控制字端口的地址送给 DX
OUT DX,AL
MOV DX,300H ;端口 A地址
L1,MOV AL,03H ; AB相送电
OUT DX,AL
CALL DELAY1 ;调用延迟子程序
MOV AL,06H ; BC相送电
OUT DX,AL
CALL DELAY1
MOV AL,0CH ; CD相送电
OUT DX,AL
CALL DELAY1
MOV AL,09H ; DA相送电
OUT DX,AL
CALL DELAY1
JMP L1
DELAY1,MOV CX,03FFFH ;延时
DELAY2,LOOP DELAY2
RET
3.打印机控制接口 (方式 0)
例 【 8-5】 查询式打印机接口及编程 。 打印机的工作时序如图 8-13所示 。 当 CPU准备输出打印的数据时,先查询打印机忙信号 (BUSY),如果打印机正在打印字符时,忙信号为 1(BUSY=1),
不能接收数据 。 当打印机不忙后,CPU对打印机接口输出 8位二进制数,并使选通信号 ( 简称 ) 为负脉冲时,将数据送入打印机中的数据端口 。
分析,8255A的控制字为,10000001B=81H
8255A工作在方式 0,端口 A,输出;端口 C高 4位输出,低 4
位输入 。
PC6置位,00001101B = 0DH
PC6复位,00001100B= 0CH
设待打印字符在内存的首地址为 2000H,编写打印机驱动程序如下:
MOV DX,247H ; 8255A控制端口地址; 247H送给 DX
MOV AL,81H ; 8255A控制字
OUT DX,AL
MOV AL,0DH
OUT DX,AL ;使 PC6置,1”,即 STB*= 1
MOV SI,2000H ;数据段内偏移地址送给 SI
MOV CX,0FFH ;打印字节数
NEXT,MOV DX,246H ; 8255A的 PC口地址
IN AL,DX ;读端口 C数据,查询 PC3= 0?
AND AL,08H
JNZ NEXT ;打印机忙,则等待
MOV DX,244H ;端口 A地址送给 DX
MOV AL,[ SI] ;从内存取出一个字节
OUT DX,AL
MOV DX,247H ;端口 C地址送给 DX
MOV AL,0CH ;设置 PC6为,0”,
OUT DX,AL ;使 STB*选通信号为低电平
NOP
NOP
NOP ;适当延时
MOV AL,0DH
OUT DX,AL ; STB*= 1
INC SI ;内存地址加 1
LOOP NEXT
例 【 8-6】 中断方式打印机接口及编程将上例中 8255A的工作方式改为方式 1,即端口 A工作在方式 1输出,外加一片中断控制器
8259A,端口 A的中断输出线 PC3通过 8259A向
CPU申请中断,可以构成中断方式打印接口电路,
如图 8-15所示 。 设 8255A的 4个端口地址分别为:
244H,245H,246H,247H,试编写打印机驱动程序 。
分析:用 PC7作为打印机的选通信号,打印机的作为外设给 8255A的应答信号 ( PC6),8255A的中断请求输出信号 PC3接至中断控制器 8259A的 IR3
8255A的控制字为,10101000B
PC6置位,00001101B 即 0DH,允许 8255A的端口 A方式 1输出中断假设 8259A 初始化时写入 ICW2 的值为 08H,则
8255A的端口 A的中断类型码是 0BH( 对应 IR3),
此中断类型码对应的中断向量应放到中断向量表从
002CH开始的 4个存储单元中主程序:
MAIN,MOV DX,247H
MOV AL,0A8H
OUT DX,AL ;设置 8255A的控制字
XOR AX,AX
MOV DS,AX
MOV AX,OFFSET RING
MOV [002CH],AX
MOV AX,SEG RING
MOV [002EH],AX
MOV DX,247H
MOV AL,0DH ; PC6为 1,允许端口 A方式 1;输出中断
OUT DX,AL
MOV DI,OFFSET BUFF ;设置地址指针
MOV CX,100 ;设置计数器初值
MOV DX,244H
MOV AL,[DI]
OUT DX,AL ;输出第一个字符
INC DI
STI
LOOP NEXT
JMP ABC
NEXT,HLT ;等待中断
LOOP NEXT
ABC,CLI
MOV AH,4CH
INT 21H
中断服务子程序如下:
RING,MOV DX,244H
MOV AL,[DI]
OUT DX,AL ;从端口 A输出一个字符
INC DI ;修改地址指针
STI
IRET ;中断返回
8.3 可编程串行通信接口芯片 8251A
一、串行通信的基本概念全双工方式站 A 站 B
站 A 站 B
站 A 站 B
半双工方式单工方式
1,数据传送方向
2.波特率与收 /发时钟
串行传输速率也称 波特率 ( Baud Rate)
每秒传输的二进制位数 bps
字符中每个二进制位持续的时间长度都一样,为数据传输速率的倒数
过去,串行异步通信的数据传输速率限制在 50
bps到 9600 bps之间 。 现在,可以达到 115200 bps
或更高
( 1)串行传输速率字符速率与波特率两者关系字符速率:每秒钟传输的字符数。
波特率:指单位时间内传送二进制数据的位数。单位为,b/s
例1,异步传输过程设每个字符对应 1个起始位,7个信息位,1个奇偶校验位和 1个停止位,如果波特率为 1200bps,
那么,每秒钟能传输的最大字符数为 1200/10=
120个例 2:同步传输用 1200bps的波特率工作,用 4个同步字符作为信息帧头部,但不用奇偶校验,那么,传输 100 个 字 符 所 用 的 时 间 为
7(100+4)/1200= 0.6067s,这就是说,每秒钟能传输的字符数可达到 100/0.6067=
165个 。
可见,在同样的传输率下,同步传输时实际字符传输率要比异步传输时高 。
( 2) 发送 /接收时钟发送 /接收时钟频率与 波特率之间的关系为:
发送 /接收时钟频率 =n?发送 /接收 波特率例:要求传输速率为 1200 bps
当选择 n=16时,表明一位数字信号中有 16个时钟脉冲,故发送 /接收时钟频率为:
1200?16=19.2kHz
其中 n称为波特因子,一般 n=1,16,32,64
3.串行通信的两种基本方式在串行通信中,有两种最基本的通信方式:
同步通信 ( Synchronous Data
Communication)
异 步 通 信 ( Asynchronous Data
Communication)
异步通信以一个字符为传输单位,用起始位表示字符的开始,用停止位表示字符结束
( 1)异步通信及其协议
串行通信时的数据,控制和状态信息都使用同一根信号线传送
收发双方必须遵守共同的通信协议 ( 通信规程 ),才能解决传送速率,信息格式,
位同步,字符同步,数据校验等问题
串行异步通信以字符为单位进行传输,其通信协议是 起止式异步通信协议
( 2)同步通信及其协议同步通信是以数据块(字符块)为单位传送的,每个数据块经过格式化之后,形成一帧数据,作为一个整体进行发送与接收,因此,传送一旦开始,要求每帧数据内部的每一位都要同步二、可编程串行通信接口芯片 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接收器是否准备好,可用下列程序实现:
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)
MOV 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
8.4 通用的异步接收发送芯片 8250
8250是一种可编程的串行异步通信接口芯片,它支持异步通信规程;芯片内设置时钟发生电路,可通过编程改变传送数据的波特率;它提供 MODEM的状态信息,极易通过 MODEM实现远程通信;
它具有数据回送功能,为调试自检提供方便
1,8250的寄存器及编程方法
8250内部有 10个 可访问的寄存器,除数寄存器是 16位的,占用两个连续的 8位端口
内部寄存器用引脚 A0~ A2来寻址;同时还要利用通信线路控制寄存器的最高位,即除数寄存器访问位 DLAB的 0和 1两种状态,
来区别公用 1个端口地址所访问的两个寄存器
8250内部寄存器端口地址适配器地址 DLAB A2A1A0 访问寄存器名称
3F8H 0 0 0 0 接收数据寄存器 ( 读 )发送保持寄存器 ( 写 )
3F9H 0 0 0 1 中断允许寄存器
3F8H 1 0 0 0 波特率除数锁存寄存器 ( 低字节 )
3F9H 1 0 0 1 波特率除数锁存寄存器 ( 高字节 )
3FAH? 0 1 0 中断识别寄存器
3FBH? 0 1 1 线路控制寄存器
3FCH? 1 0 0 MODEM控制寄存器
3FDH? 1 0 1 线路状态寄存器
3FEH? 1 1 0 MODEM状态寄存器
( 1) 发送保持寄存器 THR (3F8H),,写”
包含将要串行发送的并行数据
CPU
发送保持寄存器发送移位寄存器同步控制
8250
SOUT
( 1) 接收缓冲寄存器 RBR (3F8H),,读”
存放串行接收后转换成并行的数据
CPU
接收缓冲寄存器接收移位寄存器同步控制
8250
SIN
( 2)波特率除数寄存器 BRD(3F8H,3F9H)
除数寄存器保存设定的分频系数
BRD=基准时钟频率 ÷ ( 16× 波特率)
起 始 位时钟
( RCLK)
数据线
( SIN) T
16 T
16 T8 T
例 【 8-11】 计算波特率为 1200bps的波特率除数 。
当使用 UART的内部时钟为 1.8432MHz
时 ( 或由外部通过 XTAL1引脚输入 ),
BRD=1843200/( 16× 1200) =0060H
( 3) 通信线路控制寄存器 LCR( 3FBH)
DLAB D6 D5 D4 D3 D2 D1 D0
寄存器选择
0 正常值
1 除数寄存器中止字符
0 无作用
1 发送中止字符校验位设置
×× 0 无校验位
001 设置奇校验
011 设置偶校验
101 校验位为 1
111 校验位为 0
停止位个数
0 1位
1 1.5位 ( 数据位为 5位时 )
1 2位 ( 数据位为 6~ 8位时 )
数据位个数
00 5位
01 6位
10 7位
11 8位指定串行异步通信的字符格式例 【 8-13】 通信线路控制寄存器 ( LCR) 的编程,设置发送数据字长为 8位,2位停止位,
偶校验,其程序段为:
MOV DX,3FBH ; LCR的地址
MOV AL,00011111B ; LCR内容数;据格式参数
OUT DX,AL
( 4)通信线路状态寄存器 LSR( 3FDH)
0 D6 D5 D4 D3 D2 D1 D0
为 1,表示发送移位寄存器空;
当数据由发送保持寄存器移入发送移位寄存器时,该位为 0
提供串行异步通信的当前状态供 CPU读取和处理为 1,表示发送保持寄存器空,
当 CPU将字符写入发送保持寄存器后,该位为 0
为 1,表示正在传输中止字符为 1,表示出现帧错误为 1,表示出现奇偶错为 1,表示出现溢出错为 1,表示接收数据缓冲器收到一个数据,既接收数据准备好;
当 CPU读走数据后,该位为 0
为 1使 DTR*引脚为低否则为高
( 5) MODEM控制寄存器 MCR(3FCH)
设置 8250与数据通信设备之间联络应答的输出信号
0 0 0 LOOP OUT2 OUT1 RTS DTR
为 1使 RTS*引脚为低否则为高为 1使 OUT1*引脚为低否则为高为 1使 OUT2*引脚为低否则为高为 1使 8250为循环工作方式否则为正常工作方式例 【 8-14】 要使 MCR 的 DTR,RTS 有效,
OUT1,OUT2以及 LOOP无效,则编程如下:
MOV DX,3FCH ; MCR的地址,
MOV AL,00000011B ; MCR的控制字
OUT DX,AL
例 【 8-15】 要对 8250通过自发自收进行诊断,
则程序为,
MOV DX,3FCH ; MCR的地址
MOV AL,00010011B ; LOOP位置,1”
OUT DX,AL
( 6) MODEM状态寄存器 MSR(3FEH)
反映 4个控制输入信号的当前状态及其变化
MSR高 4位中某位为 1,说明相应输入信号当前为低有效,否则为高电平
MSR低 4位中某位为 1,则说明从上次 CPU读取该状态字后,相应输入信号已发生改变,从高变低或反之
MCR低 4位任一位置 1,均产生调制解调器状态中断,当 CPU读取该寄存器或复位后,低 4位被清零
( 7)中断允许寄存器 IER ( 3F9H)
8250设计有 2个中断寄存器和 4级中断
4级中断的优先权,是按照串行通信过程中事件的紧迫程度安排的,是固定不变的
用户可利用中断允许或禁止进行控制
中断允许寄存器的低 4位控制 8250这 4级中断是否被允许
某位为 1,则对应的中断被允许
否则,被禁止
8,中断识别 IIR( 3FAH)
保存正在请求中断的优先权最高的中断级别编码
0 0 0 0 0 ID1 ID0 IP 0 有中断
1 无中断
ID1ID0 优先权 中断类型
1 1
1 0
0 1
0 0
1
2
3
4
接收线路状态接收数据准备好发送保持寄存器空调制解调器状态
2,8250的内部结构
3,8250芯片引脚定义与功能
( 1)面向 CPU一侧的引脚( 1)
数据线 D7 ~ D0,在 CPU与 8250之间交换信息
地址线 A0~ A2:寻址 8250内部寄存器
片选线,8250设计了 3个片选输入信号 CS0、
CS1,CS2*和一个片选输出信号 CSOUT。 3个片选输入都有效时,才选中 8250 芯片,同时
CSOUT输出高电平有效 。
地址选通信号 ADS*:当该信号低有效时,锁存上述地址线和片选线的输入状态,保证读写期间的地址稳定
( 1)处理器接口引脚( 2)
读控制线
数据输入选通 DISTR( 高有效 ) 和 DISTR*( 低有效 )
有一个信号有效,CPU从 8250内部寄存器读出数据
相当于 I/O读信号
写控制线
数据输出选通 DOSTR( 高有效 ) 和 DOSTR*( 低有效 ) 有一个有效,CPU就将数据写入 8250内部寄存器
相当于 I/O写信号
8250读写控制信号有两对,每对信号作用完全相同,只不过有效电平不同而己
( 1)处理器接口引脚( 3)
驱动器禁止信号 DDIS,CPU从 8250读取数据时,DDIS引脚输出低电平,用来禁止外部收发器对系统总线的驱动;其它时间,
DDIS为高电平
主复位线 MR:硬件复位信号 RESET
中断请求线 INTRPT,8250有 4级共 10个中断源,当任一个未被屏蔽的中断源有请求时,INTRPT输出高电平向 CPU请求中断
( 1) 输出线( 4)
OUT1*和 OUT2*:
两个一般用途的输出信号
由调制解调器控制寄存器的 D2和 D3使其输出低电平有效信号
复位使其恢复为高
( 2)面向外设引脚信号
8250
数据装置准备好 DSR*
数据终端准备好 DTR*
发送数据 SOUT
接收数据 SIN
请求发送 RTS*
允许发送 CTS*
信号地 GND
载波检测 RLSD*
振铃指示 RI*
( 3)时钟信号
时钟输入引脚 XTAL1,8250的基准工作时钟
时钟输出引脚 XTAL2,基准时钟信号的输出端
波特率输出引脚 BAUDOUT*:基准时钟经 8250
内部波特率发生器分频后产生发送时钟
接收时钟引脚 RCLK,接收外部提供的接收时钟信号;若采用发送时钟作为接收时钟,则只要将
RCLK引脚和 BAUDOUT*引脚直接相连
3,8250应用举例写通信控制字 D7=1
写除数低 8位写通信控制字写除数高 8位写 MODE控制字写中断允许字结束
8250的初始化过程例 【 8-17】 8250端口地址为 3F8H~ 3FFH,若 8250以波特率
9600bps,进行异步通信,每字符 8位,1位停止位,采用奇校验,允许所有中断,试编程初始化 。
解,MOV DX,3FBH ; 8250控制寄存器地址送 DX
MOV AL,80H ;置 DLAB=1,设置除数寄存器
OUT DX,AL
MOV DX,3F8H ;除数寄存器地址送 DX
MOV AL,0CH ;波特率为 9600bps
OUT DX,AL ;送除数低 8位
INC DX
MOV AL,00H ;送除数高 8位
OUT DX,AL
MOV DX,3FBH ; 8250控制寄存器地址送 DX
MOV AL,0BH ; 8位数据,奇校验,1位停止位
OUT DX,AL
MOV DX,3F9H ;中断允许寄存器地址送 DX
MOV AL,0FH ;设置中断允许控制字,允许所有中断
OUT DX,AL
MOV DX,3FCH ;设置 MODEM控制字
MOV AL,0FH
OUT DX,AL ; OUT1*,OUT2*均为 0
例 【 8-18】 两台 PC机用 RS-232C串口采用零 MODEM方式实现近距离串行通信 。 数据传送波特率为 9600bps,数据格式为 8位 /每字符,1位停止位,奇校验,双机 8250
端口地址均为 2F8H~ 2FFH。 试编写发送和接收程序,
其功能如下:
① 通信双方执行程序后,均等待键盘输入字符
② 双方只要按下一个键,键值在本机当前光标处显示,
而且传送到对方,在对方当前光标处显示出来
③ 双方只要按下 ESC键,则停止程序的执行,返回到
DOS状态
④ 通信双方如果出现通信错误,则屏幕显示,?,,
并继续等待键入新字符或接收新字符
MOV DX,2FBH ; 8250控制寄存器地址送 DX
MOV AL,80H ;置 DLAB=1,设置除数寄存器
OUT DX,AL
MOV DX,2F8H ;除数寄存器地址送 DX
MOV AL,0CH ;波特率为 9600bps
OUT DX,AL ;送除数低 8位
INC DX
MOV AL,00H ;送除数高 8位
OUT DX,AL
MOV DX,2FBH ; 8250控制寄存器地址送 DX
MOV AL,0BH ; 8位数据,奇校验,1位停止位
OUT DX,AL
MOV DX,2FCH
MOV AL,03H
OUT DX,AL
MOV DX,2F9H
MOV AL,00H
OUT DX,AL
FOREVER,MOV DX,2FDH
IN AL,DX ;读线路状态寄存器
TEST AL,1EH
JNZ ERROR ; 有错,转错误处理程序
TEST AL,01H ; 查接收缓冲器是否满
JNZ RECEIVE
TEST AL,20H ; 查发送缓冲器是否空
JNZ RECEIVE
MOV AH,01H ; 读键盘缓冲器内容,若有键按下,则 ZF=0,且 AL=字符码
INT 16H
JZ FOREVER
MOV AH,00H
INT 16H
MOV DX,2F8H
OUT DX,AL
MOV AH,02H ;显示字符
MOV DL,AL
INT 21H
CMP AL,27 ; 若按下 ESC键,则退出
JNZ NEXT
MOV AH,4CH
INC 21H
NEXT,JMP FOREVER
RECEIVE,MOV DX,2F8H
IN AL,DX
AND AL,7FH
CMP AL,27
JNZ DISP
MOV AH,4CH
INT 21H
DISP,PUSH AX
MOV BX,0
MOV AH,14
INT 10H
POP AX
CMP AL,0DH
JNZ FOREVER
MOV AL,0AH
MOV BX,0
MOV AH,14
INT 10H
JMP FOREVER
ERROR,MOV DX,3F8H
IN AL,DX
MOV AL,‘? ’
MOV BX,0
MOV AH,14
INT 10H
JMP FOREVER
第 8章教学要求
1.掌握并行通信和串行通信的基本概念,
2.掌握并行接口芯片 8255A的基本结构和特点
3.掌握串行接口芯片 8251A,8250
的基本结构和特点
4.熟悉 8255A的三种工作方式及其应用
5.掌握 8255A和 8251A,8250的控制字的含义
6.掌握串行通信的数据格式及编程习题 8
8.2 8.3 8.4 8.6 8.9 8.10
8.11 8.12
第 8章教学要求 (续)