Download presentation
Presentation is loading. Please wait.
1
第7章 常用数字接口电路
2
掌握二种可编程接口芯片的应用 了解串行通信的一般概念
主要内容: 掌握二种可编程接口芯片的应用 了解串行通信的一般概念
3
7.1 接口电路概述 CPU与外设之间信息交换的通道 信息缓冲、信息变换、电平转换、联络控制 分类:
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 8253 D7-D0 通道0 A1 A0 A1 A0 通道1 WR IOW IOR 片选信号 RD CS 通道2
CLK0 GATE0 OUT0 DB D7-D0 通道0 A1 A0 A1 A0 CLK1 GATE1 OUT1 通道1 WR IOW IOR 片选信号 RD CLK1 GATE1 OUT1 CS 通道2 8253
9
外部引线及内部结构 连接系统端的主要引线: D7~D0 CS RD WR A1,A0 用于选择四个编址部件之一 A1 A0 选 择
计数通道0 计数通道1 计数通道2 控制寄存器 引线结构
10
外部引线及内部结构 计数通道的主要引线(每通道均相同): CLKn 时钟脉冲输入,计数器的计时基准。
GATEn 门控信号输入,控制计数器的启停。 OUTn 计数器输出信号,不同工作方式下 产生不同波形。 (n = 0~2)
11
8253的内部结构 编址部件0 编址部件1 编址部件3 编址部件2
12
编程结构—程序员的观点 16位初值寄存器 计数器(3个)——包括 16位计数寄存器 控制寄存器—— 存放控制命令字(只写)
占用4个地址— 3个计数器,1个控制寄存器 (减法计数器)
13
定时/计数的工作过程 1. 设置8253的工作方式 2. 设置计数初值到初值寄存器 3. 第一个CLK信号使初值寄存器的内容置入 计数寄存器
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输出负脉冲,并连续重复此过程。 方式2 方式3 (频率发生器) 工作波形 软、硬件启动,自动重复计数。 装入初值后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(软件触发选通) 方式5(硬件触发选通) 计数过程中,GATE端应保持高电平。
每写入一次初值,计数一个周期,然后停止计数。 每个计数周期结束时(减到0时),OUT端输出一个TCLK宽度的负脉冲。 计数过程中修改初值不影响本轮计数过程。 方式5(硬件触发选通) 写入初值时,GATE端应保持低电平。 GATE每出现一次正脉冲,计数一个周期,然后停止计数。
22
8253工作方式一览表 工作方式一览表
23
四、控制字 用于确定各计数器的工作方式。 8253必须先初始化才能正常工作。 每个计数器都必须初始化一次。
CPU通过OUT指令把控制字写入控制寄存器。 格 式
24
五、8253的应用 与系统的连接 设置工作方式 置计数初值 编程
25
与系统的连接示意图 8253 8253占用4个接口地址: 计数器0 计数器1 计数器2 控制寄存器 DB D0~D7 IOW WR
CLK 共三组 IOR GATE RD OUT A1 A1 A0 A0 高位地址 A15-A2 译码器 CS (决定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
确定控制字: CNT0:方式2,16位计数值 CNT1:方式3,低8位计数值 CNT2:方式0, 16位计数值
29
8253应用举例(续) ? 线路连接图: +5V 8253 GATE0 DB D0~D7 GATE1 2MHz GATE2 IOW WR
CLK0 ? IOR RD CLK1 A1 A1 CLK2 A0 A0 OUT0 OUT1 译码器 CS OUT2
30
8253应用举例 初始化程序 CNT0: MOV AL, AH MOV DX, 0123H OUT DX, AL MOV AL, 34H
8253应用举例 初始化程序 CNT0: MOV DX, 0123H MOV AL, 34H OUT DX, AL MOV DX, 0120H MOV AX, 20000 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
扩展定时/计数范围 8253 OUT1 1Hz GATE1 +5V CLK1 1KHz OUT0 GATE0 +5V CLK0 1MHz
34
8253小结 包含3个16位计数器通道 4个编址部件:CNT0/1/2和控制寄存器 每个计数器通道工作前必须初始化: 控制字和计数初值
6种工作方式 每种工作方式:启动方式、输出波形、是否可重复计数等各不相同
35
§7.3 并行接口8255 特点: 含3个独立的8位并行输入/输出端口,各端口均具有数据的控制和锁存能力
可通过编程设置各端口的工作方式和数据传送方向(入/出/双向)。
36
一、引线 共40个引脚
37
引线(续) 连接系统端的主要引线: D0~D7 CS RD WR A0,A1 RESET——复位信号,接系统总线的RESET
端口B 端口C 控制寄存器
38
引线(续) 连接外设端的引脚: PA0~PA7 PB0~PB7 PC0~PC7 分别对应A、B、C三个8位输入/输出端口
39
二、结构 端口A 端口C的高4位 A组 B组 端口B 端口C的低4位
40
8255与系统的连接示意图 8255 外 设 DB D0~D7 A口 D0~D7 IOW WR 系统总线 IOR RD C口 A1 A1
译码器 A15~A2 CS
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口的选通控制信号。
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 输出:
例如:方式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下输入和输出的组合。
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
8255 +12V DB PA0 RD PA7 WR A1 +5V PB0 A0 K CS PB7 8253 DB 8259A PIC
继电器 8255 Q1 R1 +12V DB PA0 • RD • • D1 PA7 WR A1 R2 +5V PB0 A0 • • • K • • 384H~387H • CS PB7 INTR 8253 DB 中断请求信号 8259A PIC OUT1 RD CLK1 WR A1 OUT0 A0 CLK0 2MHz 388H~38BH CS
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
58
8253的初始化 置计数初值: 设置工作方式: MOV DX,388H MOV DX,38BH MOV AX,1000 MOV AL,36H
OUT DX,AL MOV AL,AH MOV DX,389H MOV AL,200 设置工作方式: MOV DX,38BH MOV AL,36H OUT DX,AL MOV AL,56H 36H = CNT0 16位 方式3
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可编程串行通信接口 * 了解: 串行通信的一般概念 串行通信的接口标准 可编程串行异步通信接口8250(UART)
工作方式、同步方式、数据格式、物理标准 串行通信的接口标准 EIA RS-232C 可编程串行异步通信接口8250(UART) 连接、编程、应用 UART: Universal Asynchronous Receiver Transmitter
62
7.4.1串行通信基本概念 串行通信: ●每个时间单位仅传送一位信息; ●每个字符(字节)的各位依次传送; ●字符之间的间隔不定。 优点:
●传输线少,成本低,传输距离远
63
1.串行通信工作方式 单工通信——只能由一方发送,例:广播 半双工通信——某一时刻只能由一方发送,例:对讲机
全双工通信——双方可同时传输,例:电话 同步通信——双方对每一位的收发时序完全一致,统一时钟 异步通信——收发双方时钟不统一
64
单工/双工操作 B站 A站 单工方式: 发送器 接收器 发送器/接收器 发送器/接收器 半双工方式: 全双工方式: 发送器/接收器
65
*2. 调制与解调 电话网络-模拟信号,计算机-数字信号。 远距离通信时需要通过普通电话网络传输 调制—把数字信号承载到载波信号上
*2. 调制与解调 电话网络-模拟信号,计算机-数字信号。 远距离通信时需要通过普通电话网络传输 数字信号:频带宽 电话网络:频带窄 要使数字信号在电话网络上传输,需要进行信号变换—把数字信号承载到模拟信号上传输,这个模拟信号称为载波信号。 调制—把数字信号承载到载波信号上 解调—从载波信号中恢复出数字信号 调制解调器:实现调制与解调的设备
66
三种调制方式 用载波信号的不同幅度代表‘1’和‘0’ 用载波信号的不同频率代表‘1’和‘0’
根据载波 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
三种调制方式的调制波形图 数字数据 1 1 1 1 数字信号 调幅 调频 调相
68
3. 数据校验 串行通信主要用于远距离数据传输。 解决方法:差错控制技术——检测、纠正 常用的数据校验方法: 奇偶校验:
问题:干扰、衰减,信号畸变 解决方法:差错控制技术——检测、纠正 常用的数据校验方法: 奇偶校验: 以字符为单位进行校验 发送方使发送的每个字节中’1’的个数为奇数或偶数;接收方检查收到的每个字节中’1’的个数是否符合双方的事先约定。 奇偶校验可以检查出一个字节中发生的单个错误。 奇偶校验不能自动纠错,发现错误后需“重传”。
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) MSB LSB
(发送时钟与接收时钟完全同步) 数据(62H) 1 1 1 MSB LSB 同步传输先发送高位(MSB)
74
异步通信的时钟定时方法 发送方利用发送时钟来决定发送每个位的时刻
接收方检测起始位的下降沿,并用它来同步接收时钟,然后利用接收时钟从每一位的中间接收该位 接收/发送 时钟 数据 (62H) 1 1 1 0/1 LSB MSB 停止位 奇偶 校验位 异步传输先发送低位(LSB) 起始位
75
异步通信时数据位的检测 发送/接收时钟周期:Tc,数据位间隔:Td Tc = Td / K, 其中K称为波特率因子(16,32,64)
起始位 波特率因子K=16 Td Tc 1 连续 8 个 0 第9个仍为 0 以后每隔16个Tc检测一次数据的其他位
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 TD RD RD RTS 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。
86
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系统的连接 8250 D7-D0 # IOR 电平转换 /驱动器 # IOW 1488 1489 INTR 系 统
SOUT SIN RTS DTR DSR DCD CTS RI D7-D0 DISTR DOSTR INTR MR A0 A1 A2 ADS CS2 CS1 CS0 # IOR # IOW 8250 INTR 系 统 总 线 到RS232接口 RESET A0 A1 A2 XTAL1 XTAL2 BAUDOUT RCLK CS XTAL +5V
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 除数值= /(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=写除数寄存器 10=7位数据位 11=8位数据位 0=正常操作 1=SOUT强制为1 (Break符号) 0=1位停止位 1=2位停止位 xx0=无校验 001=奇校验 011=偶校验 101=恒为1 111=恒为0
93
8250的内部寄存器(续) 线路状态寄存器(LSR)—BASE+5 反映传输时的通信线状态 0 D6 D5 D4 D3 D2 D1 D0
发送移位寄存器空 接收缓冲寄存器满 发送保持寄存器空 溢出错 检测到Break 奇偶错 格式错(停止位个数不符)
94
8250的内部寄存器(续) 发送保持寄存器(THR)——BASE+0 接收缓冲寄存器(RBR)——BASE+0
要发送的数据写入此寄存器。当发送移位寄存器TSR空时,THR中的内容移入TSR被发送出去。 只有THR空时,CPU才能写入下一个要发送的数据 接收缓冲寄存器(RBR)——BASE+0 RSR收到一个完整的数据后,就将其送入RBR中。CPU可从RBR中读取收到的数据。 RBR只能缓冲一个数据,当CPU未能及时取走上一个数据,下一个数据又送入RBR时,会产生溢出错
95
8250的内部寄存器(续) 中断允许寄存器(IER)——BASE+1 决定哪类中断可以产生(也可禁止所有中断产生)
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信号
设置循环自检状态 D4 D3 D2 D1 D0 OUT2 RTS DTR LOOP OUT1
98
反映了自上次读MSR后这4个引脚是否发生了变化
8250的内部寄存器(续) Modem状态寄存器(MSR)—BASE+6 反映RS232接口的状态 D7 D6 D5 D4 D3 D2 D1 D0 △RLSD △DSR △RI △CTS RLSD RI DSR CTS 反映4个引脚的当前状态(反相值) 反映了自上次读MSR后这4个引脚是否发生了变化 (1=发生了变化)
99
8250发送数据的工作过程 1)CPU(数据)→8250的THR ;
2)TSR移空时,THR → TSR,LSR中“数据发送保持寄存器空” 状态位置位 ; 3)TSR根据LCR中规定的格式从低到高逐位发送数据 ; 4)LSR中“数据发送保持寄存器空” 状态位可用来产生中断,也可查询该状态位,以实现数据的连续发送。 状态 数据 4) 1) 4) 2) INT LSR THR 并行数据 2) 串行数据输出 LCR TSR 3)
100
8250接收数据的工作过程 1)SIN引脚上的串行数据逐位进入RSR;
2)RSR根据LSR中规定的数据位数确定是否收到了一个完整的数据,收到后将数据→RBR; 3)RBR收到RSR的数据后,将LSR寄存器中“接收缓冲寄存器满”的状态位置位; 4)LSR中“接收缓冲寄存器满”状态位可用来产生中断,也可查询该状态位,以实现数据的连续接收。 状态 数据 4) 3) INT LSR RBR 2) 并行数据 串行数据输入 LCR RSR 1)
101
3. 8250 的初始化流程 初始化程序程序例子见P338-339 流程图见右图 使LCR的最高位=1 写除数寄存器 写LCR寄存器,同时
写MCR寄存器 写IER寄存器
102
用BIOS功能初始化8250 PC机有两个串行接口: BIOS通过中断14H提供串行通信功能 INT14H仅提供了查询方式的通信服务
COM1(基地址3F8H), COM2(基地址2F8H) BIOS通过中断14H提供串行通信功能 功能0:初始化串行接口 功能1:发送一个字符 功能2:接收一个字符 功能3:读串行接口状态 INT14H仅提供了查询方式的通信服务 要使用中断方式进行发送和接收必须自行编程
103
用BIOS功能初始化8250 功能0(初始化)的入口参数为: 初始化参数定义如下: AH=0 AL=初始化参数 MOV AH, 0
DX=串口编号(0=COM1, 1=COM2) 初始化参数定义如下: MOV AH, 0 MOV AL, 初始化参数 MOV DX, 0 INT H D7 D6 D5 D4 D3 D2 D1 D0 波特率 100=1200 101=2400 110=4800 111=9600 奇偶校验 x0=无校验 01=奇校验 11=偶校验 停止位 0=1位 1=2位 数据位数 00=5位 01=6位 10=7位 11=8位
104
8250的数据发送程序(查询) LEA SI, DATA_BUFFER MOV CX, DATA_BYTES
L1: MOV DX, BASE ;LSR地址 IN AL, DX TEST AL, B ;THR空? JZ L1 LODSB MOV DX, BASE ;THR地址 OUT DX, AL LOOP L1 … … N THR空? Y 输出一个字节 N 输出完? Y
105
8250的数据接收程序(查询) LEA DI, DATA_BUFFER MOV CX, DATA_BYTES
L1: MOV DX, BASE ; LSR地址 IN AL, DX TEST AL, B ; 有错误? JNZ ERROR TEST AL, B ; 收到数据? JZ L1 MOV DX, BASE ; RBR地址 STOSB LOOP L1 … … Y 有错误? N 错误处理 N 收到数据? Y 读入数据 N 接收完? Y
106
用BIOS功能发送/接收数据 通过COM1接收数据: 通过COM1发送数据: LEA DI, DATA_BUFFER
MOV CX, DATA_BYTES L1: MOV AH, ; 功能3 MOV DX, ; COM1 INT H ; 读接口状态 TEST AH, B ;有错误? JNZ ERROR TEST AH, B ;有数据? JZ L1 MOV AH, ; 功能2 INT H ; 接收数据 STOSB ; 保存数据 LOOP L1 通过COM1发送数据: LEA SI, DATA_BUFFER MOV CX, DATA_BYTES L1: MOV AH, ; 功能1 MOV DX, ; COM1 LODSB ; 数据在AL中 INT H ; 发送 LOOP L1 … …
107
作业:P342 7.3 7.4 7.6 7.10 7.11 谢谢大家!
Similar presentations