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
第 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