1
第 7章
常用数字接口电路
2
主要内容:
掌握二种可编程接口芯片的应用
了解串行通信的一般概念
3
7.1 接口电路概述
? CPU与外设之间信息交换的通道
? 信息缓冲, 信息变换, 电平转换, 联络控制
? 分类:
? 8086系统中最常用的数字接口电路芯片:
– 8253,8255,8250
功能 传送方式 传送的信息类型
输入接口 并行接口 数字量的输入 /输出接口
输出接口 串行接口 模拟量的输入 /输出接口
4
7.2 可编程定时 /计数器 8253
掌握,
? 引线功能及计数启动方法
? 6种工作方式及其输出波形
? 8253的使用,
– 芯片与系统的连接
– 芯片的初始化编程
5
定时 /计数器的用途
?可以实现定时与计数两个功能,可用于
–系统时钟
–DRAM刷新定时
–定时采样
–实时控制
–脉冲的计数
– 。。。
6
如何实现定时?
?软件方法:用一段程序实现延时
? 利用 程序循环 延迟指定的时间
? 缺点,CPU占用率?延时精度?兼容?
?硬件方法:定时 /计数器电路
? 利用 脉冲计数 在设定的时间输出定时信号
● 8253是一种硬件定时 /计数器芯片
7
一、外部引线及内部结构
?8253概貌
–3个 16位的定时 /计数器(通道)
–24引脚双列直插式
–最高计数频率 2MHz
–TTL电平兼容
–单电源 +5V供电
8
外部引线及内部结构
DB D7-D0
8253
A1
A0
WR
RD
CS 通道 2
通道 1
通道 0
CLK0
GATE0
OUT0
CLK1
GATE1
OUT1
CLK1
GATE1
OUT1
A1
A0
IOW
IOR
片选信号
9
外部引线及内部结构
连接 系统端 的主要引线:
?D7~ D0
?CS
?RD
?WR
?A1,A0
– 用于选择四个编址部件之一
引线结构
A1 A0 选 择
0 0 计数通道 0
0 1 计数通道 1
1 0 计数通道 2
1 1 控制寄存器
10
外部引线及内部结构
计数通道 的主要引线 (每通道均相同):
?CLKn 时钟脉冲输入,计数器的计时基准。
?GATEn 门控信号输入,控制计数器的启停。
?OUTn 计数器输出 信号,不同工作方式下
产生不同波形。
( n = 0~ 2)
11
8253的内部结构
W R
A
0
A
1
C S
数 据
总 线 缓
冲 器
读 / 写
逻 辑
控 制
寄 存 器
计 数 器
0
计 数 器
1
计 数 器
2
G A T E
1
D
0
D
7
~
R D
C L K
1
O U T
1
C L K
2
G A T E
2
O U T
2
C L K
0
G A T E
0
O U T
0



线
编址部件 0
编址部件 1
编址部件 2编址部件 3
12
编程结构 —程序员的观点
? 计数器 (3个 )—— 包括
? 控制寄存器 —— 存放控制命令字(只写)
? 占用 4个地址 — 3个计数器,1个控制寄存器
16位初值寄存器
16位计数寄存器
(减法计数器)
13
定时 /计数的工作过程
1,设置 8253的工作方式
2,设置计数初值到初值寄存器
3,第一个 CLK信号使初值寄存器的内容置入
计数寄存器
4,以后每来一个 CLK信号,计数寄存器减 1
5,减到 0时,OUT端输出一特殊波形的信号
注:以上计数过程中还受到 GATE信号的控制
14
二、计数启动方式
软件启动过程
硬件启动过程
GATE端保持为高电平
写入计数初值 后的第 2个
CLK脉冲的下降沿开始计数
GATE端有一个上升沿
对应 CLK脉冲的下降沿开始计数
程序指令启动 ———— 软件启动
外部电路信号启动 —— 硬件启动
15
三、工作方式
? 方式 0—— 计数结束中断
? 方式 1—— 可重复触发的单稳态触发器
? 方式 2—— 频率发生器
? 方式 3—— 方波发生器
? 方式 4—— 软件触发选通
? 方式 5—— 硬件触发选通
16
工作方式
方式 0
方式 1
软件启动,不自动重复计数。
装入初值后 OUT端变低电平,
计数结束 OUT输出高电平。
硬件启动,不自动重复计数。
装入初值后 OUT端变高电平,
计数开始 OUT端变为低电平,
计数结束后又变高。
工作波形
(计数结束中断 )
(单稳态触发器 )
17
工作方式
方式 2
方式 3
软、硬件启动,自动重复计数 。
装入初值后 OUT端变高电平,计数到
最后一个 CLK时 OUT输出负脉冲,并
连续重复此过程。
软、硬件启动,自动重复计数 。
装入初值后 OUT端变高电平,
然后 OUT连续输出对称方波:
工作波形
(频率发生器 )
(方波发生器 )
前 N/2或( N+1) /2 个 CLK,OUT为高,
后 N/2或( N-1) /2 个 CLK,OUT为低。
18
工作方式
方式 4
方式 5
软件启动,不自动重复计数。
装入初值后输出端变高电平,
计数结束输出一个 CLK宽度的负脉冲
硬件启动,不自动重复计数。
OUT端波形与方式 4相同
(软件触发选通 )
(硬件触发选通 )
工作波形
19
各种工作方式特点
? 方式 0(计数结束中断)
–计数过程中,GATE端应保持 高电平 。
–每写入一次初值计数一个周期,然后停止计数。
– OUT端输出是一个约 (N+1)TCLK宽度的负脉冲。
–计数过程中可随时修改初值重新开始计数。
? 方式 1(单稳态触发器)
–门控信号 GATE端的跳变触发计数,可重复触发。
–若下一次 GATE上升沿提前到达,则 OUT端负脉冲
拉宽为两次计数过程之和。
–计数过程中写入新初值不影响本次计数。
20
各种工作方式特点
? 方式 2(频率发生器)
– GATE为计数的控制信号,GATE变低计数停止,再
变高时的下一个 CLK下降沿,从初值开始重新计数。
–每个计数周期结束时(减到 1时),OUT端输出一个
TCLK宽度的负脉冲。
–计数过程 自动重复 进行。
–计数过程中修改初值不影响本轮计数过程。
? 方式 3(方波发生器)
– OUT输出方波,前半周期为高,后半周期为低。
–计数过程中修改初值不影响 本半轮 计数过程。
–其余的与方式 2 类似。
21
各种工作方式特点
? 方式 4(软件触发选通)
– 计数过程中,GATE端应保持 高电平 。
– 每写入一次初值,计数一个周期,然后停止计数。
– 每个计数周期结束时(减到 0时),OUT端输出一个 TCLK宽度
的负脉冲。
– 计数过程中修改初值不影响本轮计数过程。
? 方式 5(硬件触发选通)
– 写入初值时,GATE端应保持 低电平 。
– GATE每出现一次正脉冲,计数一个周期,然后停止计数。
– 每个计数周期结束时(减到 0时),OUT端输出一个 TCLK宽度
的负脉冲。
– 计数过程中修改初值不影响本轮计数过程。
22
8253工作方式一览表
工作方式一览表
23
四、控制字
? 用于确定各计数器的工作方式。
? 8253必须先 初始化 才能正常工作。
? 每个计数器都必须初始化一次。
? CPU通过 OUT指令把控制字写入控制寄存器 。
格 式
24
五,8253的应用
? 与系统的连接
? 设置工作方式
? 置计数初值 编程
25
与系统的连接示意图
CLK
GATE
OUT
D0~D7
WR
RD
A1
A0
CS
DB
IOW
IOR
A1
A0
译码器高位地址 A15-A2
8253
共三组
8253占用 4个接口
地址:
?计数器 0
?计数器 1
?计数器 2
?控制寄存器
(决定 8253的基地址 )
26
初始化程序流程
写控制字
写计数值低 8位
写计数值高 8位*
非必须
写入顺序:
?可 按计数器分别写
入控制字和初值。
?也可先写所有计数
器控制字,再写入
它们的初值
27
8253应用举例
? 采用 8253作定时 /计数器,其接口地址为
0120H~0123H。
? 输入 8253的时钟频率为 2MHz。
? 计数器 0,每 10ms输出 1个 CLK脉冲宽的负脉冲
计数器 1,产生 10KHz的连续方波信号
计数器 2,启动计数 5ms后 OUT输出高电平。
? 画线路连接图,并编写初始化程序。
28
8253应用举例(续)
? 确定计数初值:
CNT0,10ms/0.5us = 20000
CNT1,2MHz/10KHz = 200
CNT2,5ms/0.5us = 10000
? 确定控制字:
CNT0,方式 2,16位计数值 00 11 010 0
CNT1,方式 3,低 8位计数值 01 01 011 0
CNT2,方式 0,16位计数值 10 11 000 0
29
8253应用举例(续)
CLK0
GATE0
OUT1
D0~D7
WR
RD
A1
A0
CS
DB
IOW
IOR
A1
A0
译码器
8253
CLK2
GATE1
GATE2
+5V
CLK1
2MHz
OUT0
OUT2

线路连接图:
30
8253应用 举 例 初始化程序
CNT0:
MOV DX,0123H
MOV AL,34H
OUT DX,AL
MOV DX,0120H
MOV AX,20000
OUT DX,AL
MOV AL,AH
OUT DX,AL
CNT1:
……
CNT2:
……
31
*如何读出当前计数值
? 第 1种方法 —— 在计数过程中读计数值
–先 锁存当前计数值,再用两条输入指
令将 16位计数值读出。
? 第 2种方法 —— 停止计数器再读
–用 GATE信号 使计数器停止,再规定
RL1和 RL0的读写格式,然后读出。
32
*扩展定时 /计数范围
当定时长度不够时,可把 2个或 3个计数
通道 串联 起来使用,甚至可把多个 8253串
联起来使用。
例如,CLK频率为 1MHz,要求在 OUT1
端产生频率 1Hz的脉冲。
这时可将计数器 0,1串联,工作方式都
均为方式 3,计数初值均为 1000。连接方法
见下页。
33
扩展定时 /计数范围
1MHz
1KHz
1Hz
34
8253小结
? 包含 3个 16位计数器通道
? 4个编址部件,CNT0/1/2和控制寄存器
? 每个计数器通道工作前必须初始化:
–控制字和计数初值
? 6种工作方式
? 每种工作方式:启动方式、输出波形、
是否可重复计数等各不相同
35
§ 7.3 并行接口 8255
特点:
? 含 3个独立的 8位并行输入 /输出端口,
各端口均具有数据的控制和锁存能力
? 可通过编程设置各端口的工作方式和
数据传送方向(入 /出 /双向)。
36
一、引线
WR
D 0
D 1
D 2
D 3
D 4
D 5
D 6
D7
V CC
PB 7
RD
CS
GND
A 1
A 0
PA 4
PA 5
PA 6
PA 7
PB 5
PB 6
PB 4
PB 3
R E S E T
PB 1
PB 2
PB 0
PC 3
PC 2
PC 1
PC 0
PC 4
PC 5
PC 6
PC 7
PA 3
PA 2
PA 1
PA 0
5
1
10
15
35
40
30
25
21
共 40个引脚
37
引线(续)
连接系统端的主要引线:
? D0~ D7
? CS
? RD
? WR
? A0,A1
? RESET—— 复位信号,接系统总线的 RESET
A1 A0 选择
0 0 端口 A
0 1 端口 B
1 0 端口 C
1 1 控制寄存器
38
引线(续)
连接外设端的引脚:
? PA0~PA7
? PB0~PB7
? PC0~PC7
分别对应 A,B,C三
个 8位输入 /输出端口
三个端口可通过 编程 分别指定为输入或输出口。
其中,C口即可用作独立的输入 /输出口,也可用作
A,B口的 控制信号 输出或 状态信号 输入。
39
二、结构
A组
B组
端口 A
端口 C的高 4位
端口 B
端口 C的低 4位
40
8255与系统的连接示意图
D0~D7
WR
RD
A1
A0
CS
DB
IOW
IOR
A1
A0
译码器
8255
A口
B口
C口
D0~D7
外 设
A15~ A2



线
41
三,8255工作方式
基本输入 /输出方式(方式 0)
选通工作方式(方式 1)
双向传送方式(方式 2)(仅 A口)
某端口工作于哪一种方式,可通过软件编程来
指定。即向 8255写入方式控制字来决定其工作方
式,见下页。
42
方式控制字及位控字
? 可以利用软件编程确定 8255的 3个端口
工作于何种方式下;
? 8255的 C端口可以 按位操作 。当其工作
于方式 0下且作为输出口时,对于那些作
为输出的位需要设置初始状态( 1/0)。
43
方式控制字与位控字格式
? 控制字 —— 确定 3个端口的工作方式
? 位控字 —— 确定 C口某一位的初始状态,
或用于设置 INTE位 (方式 1,2)。
44
工作方式 0
? 8255相当于三个独立的 8位简单接口。
? 各端口既可设置为输入口,也可设置为输
出口,但不能同时实现输入及输出。
? C端口即可以是一个 8位的简单接口,也可
以分为两个独立的 4位端口。
? 设置为输出口时有锁存能力,设置为输入
口时无锁存能力。
45
方式 0的应用,
? 用于连接简单外设。
? 适用于:
– 无条件输入输出方式。
– 查询 输入输出 方式,把 A,B口作为 8位数据
的输入或输出口,C口的高 /低 4位分别定义
为 A,B口的控制位和状态位。
46
工作方式 1
? 利用一组选通控制信号控制 A端口和 B端
口的数据输入输出。
? A,B口作输入或输出口,C口的部分位
固定用作 A,B口的选通控制信号。
? A口,B口在作为 输入 和 输出 时的选通信
号不同。
输入 输出
47
C口的信号功能(方式 1输入)
? STB#—— 选通信号。它将外设数据送入 8255的输入锁
存器。
? IBF—— 输入锁存器满。通知外设不能送下一个数据。
此信号由 STB的前沿产生。 CPU用 IN指令取走数据后,
此信号被清除。
? INTR—— 中断请求。 STB#的后沿产生,用于中断
CPU,让 CPU读走输入锁存器中的数据。
? INTE—— 中断允许位,是否允许发出 INTR请求。 INTE
=1和 IBF为高电平时,允许发出 INTR请求。
48
C口的信号功能(方式 1输出)
? OBF#—— 通知外设取走数据。
? ACK#—— 外设响应信号,表示已从数据
端口取走数据。此信号使 OBF变高。
? INTR—— ACK#上升沿产生,通知 CPU
输出下一个数据(通常接到 8259)。
? INTE—— 中断允许位,INTE=1和 OBF#
为高电平时,允许产生 INTR信号。
49
注意:
? INTE的状态可利用 C口的位控方式来设置:
– 输入:
?A口的 INTE:写入 PC4
?B口的 INTE:写入 PC2
– 输出:
?A口的 INTE:写入 PC6
?B口的 INTE:写入 PC2
? 例如:方式 1输入允许 A口中断,则应按如下方
法设置 INTEA。
MOV DX,控制寄存器地址
MOV AL,0xxx1001B ;1=允许中断,0=禁止中断
OUT DX,AL
50
方式 1的应用,
? 主要用于中断控制方式下的输入输出。
? C口除部分位用作选通信号外,其余位可工作
在方式 0下,作为输入或输出线。
特别是 A,B均为方式 1时仅使用 C口的 6条线,
余下二条线可作为单独的输入输出线,用程序
指定其数据传送方向。
51
工作方式 2
? 双向方式 —— 既是输入口,又是输出口。
? 利用 C口的 5条线提供传输联络信号。
? 类似于 A口方式 1下输入和输出的组合。
? 只有 A口可工作在方式 2下。
? INTE1为 PC.bit6,INTE2为 PC.bit4。
52
方式 2的应用:
? 可用于中断控制输入输出方式。
? 当 A口工作于方式 2时,B口可工作于方
式 1(此时 C口的剩余位都用作 B口选通
控制线); B口也可工作于方式 0(此时
C口的剩余位也只能用作方式 0下的输入
输出线)。
8255工作方式小结
53
四,8255芯片的应用
芯片与系统的连接
芯片的初始化
相应的控制程序
例 7-3
54
8255应用举例 1
? 利用 8255实现开关检测和继电器控制电
路;
? 当开关闭合时,使继电器通电动作;开
关断开时,继电器不动作;
? 系统每隔 100ms检测一次开关状态,实
现相应的继电器控制;
? 初始状态下继电器不动作。
55
CS
A0
A1
WR
RD
DB PA0
PA7
??
?
PB0
PB7
??
?
+5V
??
?
+12V
K
继电器
384H~387H
388H~38BH CS
A0
A1
OUT1
CLK1
2MHzCLK0
OUT0
8259A
PIC
WR
RD
DB
8253
8255
中断请求信号
INTR
Q1R
1
R2
D1
56
题目分析:
? 使 8255的 A端口和 B端口均工作于方式 0;
? 8253计数器 0和计数器 1均工作于方式 3,利用 OUT0的
输出作为计数器 1的时钟信号,其输出频率为 2KHz,
OUT1输出频率为 10Hz(周期 100ms);
? OUT1作为中断信号,每 100ms产生一次中断;
? CPU响应中断后检测开关状态,控制继电器的动作;
? 8253两个计数器的计数初值分别为:
CNT0,2MHz/2KHz =1000 ( 16位)
CNT1,100ms/0.5ms=200 ( 8位)
57
8255的初始化
MOV DX,387H
MOV AL,82H ; 1 00 0 0 0 1 0
OUT DX,AL
XOR AL,AL ; A口输出全 0
MOV DX,384H
OUT DX,AL
58
8253的初始化
? 设置工作方式:
MOV DX,38BH
MOV AL,36H
OUT DX,AL
MOV AL,56H
OUT DX,AL
36H = 00 11 011 0
CNT0 16位 方式 3
? 置 计数初值:
MOV DX,388H
MOV AX,1000
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,389H
MOV AL,200
OUT DX,AL
59
8255的控制程序 (中断处理 )
(中断初始化程序略 )
8253中断服务程序中的 8255控制程序段如下:
……
MOV DX,385H ; PB口地址
IN AL,DX ;读 PB0状态
NOT AL ;变反
MOV DX,384H ;输出到继电器
OUT DX,AL
……
60
8255应用举例 2
? 习题 P342,第 12题(译码器输入改为
A15-A2):
定时采集开关状态,并显示到数码管上
61
§ 7.4可编程串行通信接口
了解:
?串行通信的一般概念
– 工作方式、同步方式、数据格式、物理标准
?串行通信的接口标准
– EIA RS-232C
?可编程串行异步通信接口 8250( UART)
– 连接、编程、应用
UART,Universal Asynchronous Receiver Transmitter
*
62
7.4.1串行通信基本概念
串行通信:
● 每个时间单位仅传送一位信息;
● 每个字符 (字节 )的各位依次传送;
● 字符之间的间隔不定。
优点:
● 传输线少,成本低,传输距离远
63
1.串行通信工作方式
单工通信 —— 只能由一方发送,例:广播
半双工通信 —— 某一时刻只能由一方发送,例:对讲机
全双工通信 —— 双方可同时传输,例:电话
同步通信 —— 双方对每一位的收发时序完全一致,统一时钟
异步通信 —— 收发双方时钟不统一
64
单工 /双工操作
发送器 接收器
发送器 /
接收器
发送器 /
接收器
发送器 /
接收器
发送器 /
接收器
单工方式:
半双工方式:
全双工方式:
A站 B站
65
?电话网络- 模拟信号,计算机- 数字信号 。
?远距离通信时需要通过普通电话网络传输
– 数字信号:频带宽
– 电话网络:频带窄
– 要使数字信号在电话网络上传输,需要进行信号变
换 — 把数字信号承载到模拟信号上传输,这个模拟信
号称为 载波 信号。
?调制 — 把数字信号承载到载波信号上
?解调 — 从载波信号中恢复出数字信号
?调制解调器:实现调制与解调的设备
*2,调制与解调
66
三种调制方式
根据载波 Acos(?t + ?)的三个参数:幅度、频率、相位,产
生常用的三种调制技术:
– 幅移键控法 Amplitude-Shift Keying (ASK)
– 频移键控法 Frequency-Shift Keying (FSK)
– 相移键控法 Phase-Shift Keying (PSK)
?ASK (又称为调幅 )
用载波信号的不同 幅度 代表‘ 1’和‘ 0’
?FSK (又称为调频 )
用载波信号的不同 频率 代表‘ 1’和‘ 0’
?PSK (又称为调相 )
用载波信号的 相位变化 代表‘ 1’和‘ 0’(有变化为’ 1’,无变化为 ’0’)
67
0 0 1 1 0 1 00 0 1 0
调幅
调频
调相
数字信号
数字数据
三种调制方式的调制波形图
68
? 串行通信主要用于远距离数据传输。
– 问题:干扰、衰减,信号畸变
? 解决方法:差错控制技术 —— 检测、纠正
? 常用的数据校验方法:
– 奇偶校验:
?以字符为单位进行校验
?发送方使发送的每个字节中’ 1’的个数为奇数或偶
数;接收方检查收到的每个字节中’ 1’的个数是否
符合双方的事先约定。
?奇偶校验可以检查出一个字节中发生的单个错误。
?奇偶校验不能自动纠错,发现错误后需“重传”。
3,数据校验
69
– 循环冗余校验 CRC (循环冗余码 /多项式编码 )
?以数据块(帧,Frame)为单位进行校验
?编码思想:将 数据块构成的 位串看成是系数为 0或 1的多项式
– 如 110001,可表示成多项式 x5 + x4 + 1
– 数据块构成的 多项式除以另一个多项式 G(x),得到的余数
多项式 R(x)就称为 CRC码(或称为校验和),而 G(x)则称
为生成多项式。
?CRC校验的 检错方式:
–收发双方约定一个生成多项式 G(x),发送方在帧
的末尾加上校验和,使带有校验和的帧的多项式
能被 G(x)整除;接收方收到后,用 G(x)去除它,
若余数为 0,则传输正确,否则传输有错。
数据校验
70
? CRC校验和计算方法
– 若 G(x)为 r阶,原帧为 m位,其多项式为 M(x),则在原
帧后面添加 r个 0,帧成为 m+r位,相应多项式 2rM(x)
– 按 模 2除 法 用 2rM(x)除以 G(x):商 Q(x),余 R(x)
即 2rM(x) = G(x)Q(x)+R(x)
– 按 模 2加 法 把 2rM(x)与余数 R(x)相加,结果就是要传送
的带校验和的帧的多项式 T(x)
T(x) = 2rM(x) + R(x)
– 实际上,T(x) = 2rM(x) + R(x) = [ G(x)Q(x) + R(x) ] + R(x)
= G(x)Q(x) (模 2运算 )
所以,若接收的 T(x)正确,则它肯定能被 G(x)除尽。
数据校验
71
数据校验
–CRC校验码的检错能力:
?可检出所有奇数个错
?可检出所有单位 /双位错
?可检出所有 ≤G(x) 长度的突发错
–常用的生成多项式:
?CRC12 = x12+x11+x3+x2+1
?CRC16 = x16+x15+x2+1
?CRC32 =x32+x26+x23+x22+x16+x11+x10
+x8+x7+x5+x4+x2+x+1
72
4.同步通信与异步通信
? 所有串行通信都需要一个时钟信号来作为数据的
定时参考。发送器和接收器用时钟来决定何时发
送和读取每一个数据位。
? 根据传输时采用的是统一时钟还是本地局部时钟,
分为 同步传输 和 异步传输 两种。
– 同步传输用 一个时钟脉冲 确定一个数据位,异步传输
用 多个时钟脉冲 确定一个数据位 (如 16个 )
– 同步传输以数据块 (当作,位流,看待 )为单位传输,
异步传输以字符为单位传输,但都称为 帧 (Frame)
73
同步通信的时钟定时方法
数据( 62H) 0 1 1 0 0 0 1 0
同步传输先发送高位 (MSB)
发送方 在时钟信号的下降沿发送字节
接收方 在时钟信号的上升沿接收字节
时钟
(发送时钟与接收
时钟完全同步)
LSBMSB
74
异步通信的时钟定时方法
数据
( 62H) 0 0 0 0 1 1
停止位
异步传输先发送低位 (LSB)
发送方 利用发送时钟来决定发送每个位的时刻
接收方 检测起始位的下降沿,并用它来同步接收时
钟,然后利用接收时钟从每一位的中间接收该位
1
起始位
LSB MSB
0
奇偶
校验位
0 0/1 1 1
接收 /发送
时钟
75
异步通信时数据位的检测
起始位
波特率因子 K=16
Td
Tc
1 1 1 0 0 0 0 0 0 0 0 0
连续 8 个 0 第 9个仍为 0
以后每隔 16个 Tc检测
一次数据的其他位
发送 /接收时钟周期,Tc,数据位间隔,Td
Tc = Td / K,其中 K称为波特率因子 ( 16,32,64)
76
异步通信 的一般 格式
每个字符由 起始位, 数据位, 校验位, 停止位 构成。
起始位和停止位用于字符的同步。
起始位
最低位 最高位
5~ 8个数据位
可选的奇偶校验位 1,11/2或 2个停止位
77
7.4.2 串行通信的接口标准
? 机械特性:连接器的尺寸、引脚分布
? 信号特性:信号电平、通信速率
? 功能特性:引脚功能、控制时序
最常见的串行通信标准是 RS-232C。
78
RS-232C标准
?外形为 25针或 9针的 D型连接器
?通信速率:波特率 Baud(符号数 /s)
– 100,300,600,1200,2400,4800
9600,19.2K,33.6K,56K
?信号电平:
– 逻辑,1”,-3V~ -15V
– 逻辑,0”,+3V~ +15V
– TTL电平与 RS232电平转换:
?TTL→RS232,MC1488
?RS232→TTL,MC1489
79
主要引脚的功能
80
信号时序(接收)
? 设备握手
– DTR,PC→M (保持,表示 PC已可以工作)
– DSR,PC←M (保持,表示 M已可以工作)
? 监视载波信号
– DCD,PC←M← 载波(表示数据链已建立)
? 接收数据
– RD,PC←M← 数据调制信号
? 结束通信
– DCD消失,PC撤除 DTR,Modem撤除 DSR
81
信号时序(发送)
? 设备握手
– DTR,PC→M (保持)
– DSR,PC←M (保持)
? 请求发送
– RTS,PC→M (保持),M→ 载波,在对方产生 DCD
– CTS,PC←M (保持)
? 发送数据
– TD,PC→M→ 数据调制信号
? 结束通信
– PC撤除 RTS/DTR
– Modem撤除 CTS/DSR,停止发送载波
82
RS-232C接口连接方式
83
RS-232C接口连接方式(续)
? 一种简化的连接方式( Null Modem)
– 适用于双机直连
TD
RD
RTS
CTS
DCD
GND
DTR
DSR
RI
TD
RD
RTS
CTS
DCD
GND
DTR
DSR
RI
84
7.4.3 可编程串行通信接口 8250
主要内容:
1) 8250的引脚及功能
2)与系统的连接
3)内部结构与内部寄存器
4) 8250的编程
85
1,8250 的引脚及功能
? 面向系统的引脚:
? D0~ D7
双向数据线。与系统数据总线 DB相连接,用以传送
数据、控制信息和状态信息。
? CS0,CS1,CS2
片选信号,当它们同时有效时,该 8250芯片被选中。
? CSOUT
片选输出信号。当 8250的 CS0,CS1和 CS2同时有效
时,CSOUT为高电平。
? MR
主复位信号,复位后 8250的状态见 P331表 7-5。
? A0~ A2
8250内部寄存器的选择信号。不同的编码
对应于不同的寄存器。
? ADS
地址选通信号。有效时可将 CS0,CS1,CS2及 A0-A2锁
存于 8250内部。不需要锁存时,ADS可直接接地。
? DISTR
读选通信号。通常与系统总线的 IOR信号相连接。
? DOSTR
写选通信号。通常与系统总线的 IOW信号相连接。
? INTR
中断请求信号。当允许 8250中断时,接收出错、接收
数据寄存器满、发送数据寄存器空以及 MODEM的状态
均能够产生有效的 INTR信号。
87
8250 的引脚及功能 (续 )
? 面向通信设备的引脚信号
? SIN,SOUT,串行输入 /输出端
? CTS,RTS,DTR,DSR:(同 RS232标准中的信号)
? RLSD,即 RS232C标准中的 DCD信号
? RI:(同 RS232标准中的信号)
? OUT1,OUT2,可由用户编程确定其状态的输出端
? BAUDOUT,波特率信号输出(频率 =fCLK/分频值)
? XTAL1,XTAL2,接外部晶振,作为基准时钟 fCLK
? RCLK,接收时钟输入(可直接与 BAUDOUT相连)
88
4.3
89
8250与 8088系统的连接



线
D7-D0
DISTR
DOSTR
INTR
MR
A0
A1
A2
ADS
DISTR
DOSTR
CS2
CS1
CS0
+5V
CS
D7-D0
# IOR
# IOW
INTR
RESET
A0
A1
A2
电平转换
/驱动器
1488
1489
到 RS232接口
XTAL1
XTAL2
BAUDOUT
RCLK
SOUT
SIN
RTS
DTR
DSR
DCD
CTS
RI
8
2
5
0
XTAL
90
2,8250的内部寄存器
? 共 10个可编程(寻址)的寄存器
– 线路控制寄存器( LCR) —— BASE+3
– 线路状态寄存器( LSR) —— BASE+5
– 发送保持寄存器( THR) —— BASE+0(写)
– 接收缓冲寄存器( RBR) —— BASE+0(读)
– 除数锁存器低 8位( DLL) —— BASE+0( DL=1)
– 除数锁存器高 8位( DLH) —— BASE+1( DL=1)
– 中断允许寄存器( IER) —— BASE+1
– 中断识别寄存器( IIR) —— BASE+2
– Modem控制寄存器( MCR) —— BASE+4
– Modem状态寄存器( MSR) —— BASE+6
91
8250的内部寄存器(续)
? 除数锁存器( DLL,DLH) — BASE+0,1
– 用来保存分频系数,以获得所需的 波特率 。
? 波特率 可以简单地看成每秒传送多少二进制位
– PC机中基准时钟频率 fCLK=1.8432MHz,波特率因
子 K=16。所以,对于指定的波特率 B
除数值 =1843200/(B× 16)=115200/B
– 例如,通信速率为 9600波特时,除数值 =12。
– 注意:写除数前,必须把 LCR的最高位 (DL位 )置 1
92
8250的内部寄存器(续)
? 线路控制寄存器( LCR) — BASE+3
– 决定传输时的数据帧格式(通信双方必须一致)
D7 D6 D5 D4 D3 D2 D1 D0
DL位:
0=正常操作
1=写除数寄存器
0=正常操作
1= SOUT强制为 1
( Break符号) xx0=无校验
001=奇校验
011=偶校验
101=恒为 1
111=恒为 0
0= 1位停止位
1= 2位停止位
10= 7位数据位
11= 8位数据位
93
8250的内部寄存器(续)
?线路状态寄存器( LSR) — BASE+5
– 反映传输时的通信线状态
0 D6 D5 D4 D3 D2 D1 D0
发送移位寄存器空
发送保持寄存器空
检测到 Break
接收缓冲寄存器满
溢出错
奇偶错
格式错(停止位个数不符)
94
8250的内部寄存器(续)
? 发送保持寄存器( THR) —— BASE+0
– 要发送的数据写入此寄存器。当发送移位寄存器
TSR空时,THR中的内容移入 TSR被发送出去。
– 只有 THR空时,CPU才能写入下一个要发送的数据
? 接收缓冲寄存器( RBR) —— BASE+0
– RSR收到一个完整的数据后,就将其送入 RBR中。
CPU可从 RBR中读取收到的数据。
– RBR只能缓冲一个数据,当 CPU未能及时取走上一
个数据,下一个数据又送入 RBR时,会产生溢出错
95
8250的内部寄存器(续)
? 中断允许寄存器( IER) —— BASE+1
– 决定哪类中断可以产生(也可禁止所有中断产生)
0 0 0 0 D3 D2 D1 D0
1=允许 RBR满中断
1=允许 THR空中断
1=允许线路状态中断
(溢出错、奇偶错、格式错,Break)
1=允许 Modem状态中断
96
8250的内部寄存器(续)
? 中断识别寄存器( IIR) —— BASE+2
– 用于识别产生中断的原因
0 0 0 0 0 D2 D1 D0
0=无中断
1=有中断
00= Modem状态 中断(优先级最低)
01= THR空中断
10= RBR满中断
11=线路状态中断
97
8250的内部寄存器(续)
? Modem控制寄存器( MCR) — BASE+4
– 产生 RTS,DTR信号
– 产生 OUT1,OUT2信号
– 设置循环自检状态
0 0 0 D4 D3 D2 D1 D0
DTRRTS
OUT1
OUT2
LOOP
98
8250的内部寄存器(续)
? Modem状态寄存器( MSR) — BASE+6
– 反映 RS232接口的状态
△ CTS
△ DSR
△ RI
△ RLSD
CTS
D7 D6 D5 D4 D3 D2 D1 D0
RLSD RI DSR
反映 4个引脚的当
前状态(反相值)
反映了自上次读
MSR后这 4个引脚
是否发生了变化
(1=发生了变化 )
99
8250发送数据的工作过程
1) CPU(数据 )→ 8250的 THR ;
2) TSR移空时,THR → TSR,LSR中,数据发送保持寄存器空,
状态位置位 ;
3) TSR根据 LCR中规定的格式从低到高逐位发送数据 ;
4) LSR中,数据发送保持寄存器空, 状态位可用来产生中断,也
可查询该状态位,以实现数据的连续发送。
TSR
THR
串行数据输出
并行数据
LSRINT
LCR
数据状态
1)
2)
3)
2)4)4)
100
8250接收数据的工作过程
1) SIN引脚上的串行数据逐位进入 RSR;
2) RSR根据 LSR中规定的数据位数确定是否收到了一个完整的数据,
收到后将数据 →RBR ;
3) RBR收到 RSR的数据后,将 LSR寄存器中,接收缓冲寄存器满,
的状态位置位;
4) LSR中, 接收缓冲寄存器满, 状态位可用来产生中断,也可查询
该状态位,以实现数据的连续接收。
RSR
RBR
串行数据输入
并行数据
LSRINT
LCR
数据状态
1)
2)
3)4)
101
3,8250 的初始化流程
? 初始化程序程序
例子见 P338-339
? 流程图见右图
使 LCR的最高位= 1
写除数寄存器
写 LCR寄存器,同时
使 LCR的最高位= 0
写 MCR寄存器
写 IER寄存器
102
用 BIOS功能初始化 8250
? PC机有两个串行接口:
– COM1(基地址 3F8H),COM2(基地址 2F8H)
? BIOS通过中断 14H提供串行通信功能
– 功能 0:初始化串行接口
– 功能 1:发送一个字符
– 功能 2:接收一个字符
– 功能 3:读串行接口状态
? INT14H仅提供了查询方式的通信服务
– 要使用中断方式进行发送和接收必须自行编程
103
用 BIOS功能初始化 8250
? 功能 0(初始化)的入口参数为:
– AH=0
– AL=初始化参数
– DX=串口编号( 0=COM1,1=COM2)
? 初始化参数定义如下:
D7 D6 D5 D4 D3 D2 D1 D0
波特率
100= 1200
101= 2400
110= 4800
111= 9600
奇偶校验
x0=无校验
01=奇校验
11=偶校验
数据位数
00= 5位
01= 6位
10= 7位
11= 8位
停止位
0= 1位
1= 2位
MOV AH,0
MOV AL,初始化参数
MOV DX,0
INT 14H
104
8250的数据发送程序 (查询 )
LEA SI,DATA_BUFFER
MOV CX,DATA_BYTES
L1,MOV DX,BASE+5 ;LSR地址
IN AL,DX
TEST AL,00100000B ;THR空?
JZ L1
LODSB
MOV DX,BASE+0 ;THR地址
OUT DX,AL
LOOP L1
… …
THR空?
输出一个字节
输出完?
N
Y
Y
N
105
8250的数据接收程序 (查询 )
LEA DI,DATA_BUFFER
MOV CX,DATA_BYTES
L1,MOV DX,BASE+5 ; LSR地址
IN AL,DX
TEST AL,00011110B ; 有错误?
JNZ ERROR
TEST AL,00000001B ; 收到数据?
JZ L1
MOV DX,BASE+0 ; RBR地址
IN AL,DX
STOSB
LOOP L1
… …
有错误?
读入数据
收到数据?
N
Y
Y
N
错误处理
接收完?
N
Y
106
用 BIOS功能发送 /接收数据
通过 COM1发送数据:
LEA SI,DATA_BUFFER
MOV CX,DATA_BYTES
L1,MOV AH,1 ; 功能 1
MOV DX,0 ; COM1
LODSB ; 数据在 AL中
INT 14H ; 发送
LOOP L1
… …
通过 COM1接收数据:
LEA DI,DATA_BUFFER
MOV CX,DATA_BYTES
L1,MOV AH,3 ; 功能 3
MOV DX,0 ; COM1
INT 14H ; 读接口状态
TEST AH,00011110B ;有错误?
JNZ ERROR
TEST AH,00000001B ;有数据?
JZ L1
MOV AH,2 ; 功能 2
MOV DX,0 ; COM1
INT 14H ; 接收数据
STOSB ; 保存数据
LOOP L1
107
作业,P342
? 7.3
? 7.4
? 7.6
? 7.10
? 7.11