【计算机原理与接口技术(UNIX)⑰】——微型计算机系统的串行通信 [ 8250 + 具体样例 + 上机实验]
时间:2023-06-19 02:37:00
? 通过对 【计算机与UNIX汇编原理 ① ~ ?】我们已经大致掌握了学习汇编程序设计的相关知识
接下来,我将其列名改为 计算机原理和接口技术(UNIX) 】,重点将放在 “计算机原理与接口技术” 上
串行通信程序设计-具体例子(上机试验:微机系统串行口试验) 文章末尾详细分析说明了简单的演示图。
文章目录
- 一、导语(并行与串行)
- 二、串行通信基础
-
- 2.1 串行异步通信
- 2.2 串行同步通信
- 2.3 串行数据传输模式
- 2.4 串行异步通信协议
-
- 2.4.1 一帧数据的格式
- 2.4.2 通信速率
- 2.4.3 调制和解调信号
- 2.4.4 串行通信接口标准 —— RS232C标准
-
- 2.4.4.1 定义控制信号(机械特性)
- 2.4.4.2 信号电平标准(电气特性)
- 三、可编程串行异步通信接口芯片 8250 ???
-
- 3.1 8250 的内部结构
- 3.2 8250 —— 内部10 重要的寄存器
-
- 3.2.1 第一类:数据传输(包括 2 种)
- 3.2.2 第二类:控制字寄存器 (有 4 种) ──> ④ MODEM 控制寄存器
- 3.2.3 第三类:状态寄存器(包括) 3 种)
- 3.3 8250 初始编程
- 四、串行通信程序设计的基本知识点
-
- 4.1 串行通信的外部环境
- 4.2 BIOS 通信软件
-
- 4.2.1 串口初始化【INT 14H 的 0 号功能】
- 4.2.2 发送一帧数据【INT 14H 的 1 号功能】
- 4.2.3 接收一帧数据【INT 14H 的 2 号功能】
- 4.2.4 测试通信线的状态【INT 14H 的 3 号功能】
- 五、串行通信程序设计-具体例子
-
- 5.1 样例一
- 5.2 样例二 —— 上机试验:微机系统串行口试验 ???
- 六、参考附录
英语通信:Communication
上一篇文章链接:计算机原理和接口技术(UNIX)?】——中断系统 [ 总结2.5万字,8259A ].
下一篇文章链接:计算机原理和接口技术(UNIX)?】——并行 I/O 接口 [ 芯片8255A ].
一、导语(并行与串行)
● CPU 与外部信息交换称为通信,而与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,与外部信息交换称为通信,并行通信和串行通信是 CPU 信息交换与外设的基本方式。它们之间的区别和细节如下图所示:
● 并行通信的优缺点:电路复杂,成本高,但传输速度快。主要用于计算机内部和近距离外设传输。
● 串行通信的优缺点:电路简单,成本低,但传输速度慢。主要用于远程传输、通信线路(如电话线、无线电等)。
● 数据传输速度:并行通信 > 串行同步通信 > 串行异步通信
二、串行通信基础
● 串行通信按串行数据的时钟控制方式可分为:串行同步通信、串行异步通信(这就是我们通常所说的串行通信)。
2.1 串行异步通信
● 串行异步通信:指一个字符(一帧数据)用起始和停止来完成收发同步。下图是串行异步通信的标准数据格式:
-
说明上图:
① 起始位:1
位逻辑“0”
② 数据位:5~8
0、1代码
③ 奇偶校验位:0~1
位:0或1
④ 停止位:1
、1.5
、2
位逻辑“1” -
简要说明操作流程:
① 串行异步通信时,一个字符从起始位开始,然后是数据位和奇偶校准位,最后以停止位结束,起始位后是数据的最低位。
② 当检测到一系列传输线时,接收设备将继续检测传输线1
然后检测一个0
,启动内部计数器开始计数,…(一波与数据传输相关的硬件运动)…,只有无帧错误和无奇偶验证错误的接收数据才是正确的。
③ 接收一个字符后,接收设备将继续测试传输线,并测试下一个字符起始信号的到来。
● 补充说明:在串行异步通信中,不要求双方使用严格的时钟同步,但为了确保一定的时钟精度,时钟信号的速率往往是数据信号的速度16
、32
或64
倍。
2.2 串行同步通信
● 串行同步通信:收发双方(严格要求时钟同步)的同步通信由同步字符完成。
● 串行异步通信需要在每个字符前后附加起始位和停止位,约为20%
传输效率低的附加信号位。
● 所有串行同步通信数据格式没有起始位和停止位,一次传送的字符个数可以变化。其数据格式演示如下:
- 对上图的说明:
① 串行同步通信时,接收设备首先搜索同步字符,接收同步字符后开始接收数据。
② 在传输过程中,发送设备和接收设备应完全同步。(如果由于某些原因接收泄漏,则后续数据接收错误,可通过验证字找到)
③ 接收一个字符后,接收设备将继续测试传输线,并测试下一个字符起始信号的到来。
2.3 串行数据传输模式
● 串行数据通信系统模型如下图所示:(MODEM
我们会学到,这就是我们常说的 ,有关上网的 “摸登” )
● 对于一个通信系统,必须考虑以下问题stron>:
① 信道的带宽和数据的传输速率。
② 信号的调制与解调。
③ 串行通信的信号格式等。
● 数据的传输方式:单工方式、半双工方式、全双工方式。
① 单工方式:只允许数据按照一个固定的方向传送。
② 半双工方式:要求收发双方均具备接收和发送数据的能力,由于只有一条信道,数据不能同时在两个方向上传送。
③ 全双工方式:收发双方可同时进行数据传送。
2.4 串行异步通信协议
● 为了能够正常通信,发送方和接收方都必须共同遵守一些通信协议,包括收、发双方的同步方式、差错检验方式、数据编码、数据传输速率等等。(就好像我们用美国人交流时,我们得用英语。这里遵守的“通信协议”即为:英语语法,我们也不能说的太快,不然对方听不清)
● 串行通信协议包括:串行异步通信协议和串行同步同步协议。这本书里我们只学习串行异步通信协议。
2.4.1 一帧数据的格式
● 一帧数据包括:起始位、数据位、奇偶校验位和停止位。收、发双方预置的帧数据格式必须一致。
① 起始位:传输线上若没有数据传输时,处于逻辑
1
状态。一帧字符开始传送时,首先发送起始位(即一位逻辑0
)。接收设备检测到逻辑0
信号后,开始接收数据。起始位的作用:使收、发双方在传送数据位前协调同步。
② 数据位:起始位之后是数据位,数据位从最低位开始发送,个数共
5~8
位。
③ 奇偶校验位:数据位发送完毕后,接着发送奇偶校验位。通信双方约定采用一致的奇偶校验方式,由发送方设置校验位,由接收方负责校验。奇校验:数据位与校验位中
1
的个数为奇数。偶校验:数据位与校验位中1
的个数为偶数。(当然也可以进行无校验传输)
④ 停止位:之后发送的是停止位。停止位可以是 1、1.5 或 2
位的逻辑1
信号。在传送完成一个字符(一帧数据),即发送完规定的停止位之后,到开始传送下一个字符(一帧数据)之间,可以有任意的空间间隔,这个空闲间隔用逻辑1
信号表示。(正因为这种通信方式中两个字符的间隔是任意的,因此称为串行异步通信方式)
● 样例:传送一个字符 “E”(ASCII码为:1000101B = 45H),包括 7 个数据位、1 个奇校验、2 个停止位。
● 数据帧格式如下:
● 说明:传输时,数据位是逆序传送。
2.4.2 通信速率
● 在数据通信中,往往使用 “数据通信速率” 的概念。
● 严格地说,数据通信中 “数据信号速率” 和 “数据通信速率” 是两个不同的概念。
● 数据信号速率:单位时间(每秒)传送信号的个数,单位为 “波特”,即1/s
。(故它又被称为 “波特率” 或 “信号速率” )
● 数据通信速率:单位时间(每秒)传送二进制比特的个数,单位为 “比特/秒”,即1bps
或1b/s
。(故它又被称为 “比特率” 或 “通信速率”)
● 本章中,所涉及的穿行数据通信均使用二进制信号传输(这时两者在数值上是相等的),因此并未严格区分 数据信号速率 和 数据通信速率。
● 收、发双方的数据帧格式也必须一致。
2.4.3 信号的调制和解调
● 数据通信传输的是数字信号,要求传送线的频带很宽,而我们在长距离传送时,有时是利用电话线传送的,而电话线的带宽为300 ~ 3000
Hz ,因此若直接传输数字信号,信号就要发生畸变。如下图所示:(红色波形信号)
● 因此,需用调制器将数字信号转换成模拟信号(不易发生畸变) ——> 再传输 ——> 再用解调器将其转换成数字信号。如下图所示:
● 图中的 “MODEM” 即是调制解调器,是一种计算机硬件。功能:既能调制信号,又能解调信号。如下图所示:【腾达d820b adsl2调制解调器 modem 上网猫 宽带猫 电信猫 电脑猫】
● 补充说明:
① 调制:用一个信号控制另一个信号的某个参数随之变化的过程,叫调制。这两个信号分别叫调制信号和被调信号,被调信号只作为传输过程中信息的载体,也叫载波。
② 解调: 将已经调制的信号恢复成原来的数字信号的过程。
③ 多数情况下,通信是双向的,调制器和解调器设计在一个装置中。
2.4.4 串行通信接口标准 —— RS232C标准
● 要进行串行通信,还要解决一个问题:计算机与 MODEM 怎样连接?
答:通过接口电路(即串行接口电路)来连接。如下图所示。
● 若要进行以上操作,那么这个接口的 机械特性、电气特性、功能特性 都要遵循一定的规范,也就是要遵循一个标准。
● 目前计算机通信使用最普遍的是 “RS-232C 标准” 。它对两方面作了规定:信号的电平标准和控制信号的定义。
2.4.4.1 控制信号的定义(机械特性)
● PC 系列机有两个串行口:即 COM1 和 COM2,都使用9
针和·25
针两种连接器,符合 RS-232C 接口标准。如下图所示·:
● 在微型计算机异步通信中常用的只有9
个引脚,下表给出了计算机异步通信接口常用的 RS-232C 信号标准:【右下图即是我们实验室展示的9
针的串行接口】
2.4.4.2 信号电平标准(电气特性)
● 标准规定:逻辑 “1
” 信号,电平在–3V ~ -15V
之间;逻辑 “0
” 信号,电平在+3V ~ +15V
之间。因此,使用 RS-232C 与微机接口时,需要将 TTL 电平(0 ~ 5V
)与 RS-232C 电平进行转换。
● 可用现成的转换芯片(如MC1488、MC1489等)转换,它俩的简化图如下图所示:
● 说明:
① MC1488:TTL电平 → RS232电平 (用于发送方)
② MC1489:TTL电平 ← RS232电平 (用于接收方)
三、可编程串行异步通信接口芯片 8250 ⭐️⭐️
● 8250 的简介:
① 它有40
个引脚,双列直插式封装,使用单一的+5V
电源。【如下图所示】
② 它能实现数据的 “串行——并行” 及 “并行——串行” 转换,支持异步通信协议。
③ 它的内部有时钟产生电路,波特率可变。
④ 它对外有调制解调器控制信号,可直接与 MODEM 相连,实现收、发控制。
⑤ 高档微型计算机使用多功能芯片,但其串行接口的功能与 8250 兼容。
3.1 8250 的内部结构
● 8250 内部包括数据总线缓冲器、发送器、接收器和调制解调控制电路等等。【就好比,一个政府机构,不仅有服务大厅、发送和接受情报的信息部等等】,它的内部结构图如下:
● 说明:看着上面的东西多罢了,后面会对上面大部分的东西都进行一一的学习,如下表所示:
① 8250 —— 数据总线缓冲器:接收来自 CPU 的各种控制信息,从而确定操作方式。
② 8250 —— 选择和控制逻辑:他是 8250 和 CPU 之间的数据通道。
③ 8250 —— 发送器:由 “发送保持寄存器”、“发送移位寄存器” 和 “发送同步控制” 这
3
部分构成。
[1] 发送保持寄存器:装载待发送的数据。
[2] 发送移位寄存器:数据发送时,“发送保持寄存器” 内的内容会自动转到这里面。
[3] 发送同步控制:能将 “发送移位寄存器” 里的内容添加起始位、校验位和停止位,并将数据转换为串行数据,经SOUT
引脚发送出去。
④ 8250 —— 接收器:由 “接收移位寄存器”、“接收缓冲寄存器” 和 “接收同步控制” 这
3
部分构成。
[1] 接收同步控制:能将来自引脚SIN
的串行数据逐位存入接收移位寄存器,并在存入的过程中进行自动校验,并去掉起始位、停止位和校验位。
[2] 接收移位寄存器:会自动将其内部的数据内容转到 “接收缓冲寄存器”。
[3] 接收缓冲寄存器:装载接收的数据,等待 CPU 读取。
⑤ 8250 —— 调制解调控制电路:使 8250 可直接与调制解制器相连的控制电路,以完成远程通信任务。
⑥ 8250 —— 通信线控制寄存器:指定串行通信的数据格式。
⑦ 8250 —— 通信线状态寄存器:提供串行数据发送和接收时的状态,供 CPU 读取和处理。
⑧ 8250 —— 波特率发生控制电路:由波特率发送器、存放分频系数低位和高位字节的除数寄存器构成。
● 对 ⑧ 的补充说明:8250 使用的是频率为1.8432MHz
的基准时钟输入信号,通过内部分频产生发送器时钟和接收器时钟。发送器时钟和接收器时钟的频率是 “数据传输波特率” 的16
倍。
⑨ 中断控制逻辑:由中断允许寄存器、中断识别寄存器和中断控制逻辑
3
部分组成。它主要对中断优先权、中断申请等进行管理。
3.2 8250 —— 内部10 个重要的寄存器
● 8250 内部寄存器从使用角度来说有10
个,分成3
类:
① 第一类用于数据实现数据传输,包含: 发送保持寄存器、接收缓冲寄存器
② 第二类用于工作方式、通信参数的设置,称为控制字寄存器,包含:通信线控制寄存器、除数寄存器(高位)、除数寄存器(低位)、中断允许寄存器、MODEM控制寄存器。
③ 第三类称为状态寄存器,包含:通信线状态寄存器、中断识别寄存器、MODEM状态寄存器。
● 8250 内部寄存器的端口地址如下:
3.2.1 第一类:数据传输(有 2 种)
① 发送保持寄存器(3F8H
/2F8H
):保存 CPU 传送来的并行数据,并转移至发送移位寄存器
◆ 注意:只有在发送保持寄存器空闲时,CPU 才能写入下一个数据。
② 接收缓冲寄存器(3F8H
/2F8H
):在接收移位寄存器的数据,经过去掉起始位、校验位和停止位,转换成并行数据,并转换为并行数据,最后存入接收缓冲寄存器,等待 CPU 接收。
◆ 注意:只有当一帧数据收完后,CPU 才能用IN
指令读接收缓冲寄存器
3.2.2 第二类:控制字寄存器 (有 4 种) ──> ④ MODEM 控制寄存器⭐️⭐️⭐️
① 通信线控制寄存器(3FBH
/2FBH
):主要用于指定串行异步通信的数据格式。
● 问题:如何设置寻址位?
[1] D7 = 1 表明后继写入合用端口的数据写入除数寄存器。
[2] D7 = 0 表明后继写入合用端口的数据写入非除数寄存器。(因为除数寄存器和其他一些寄存器,存在共用一个端口地址的情况,如下图所示)
● 举例一,把 N 这个数据写入除数寄存器高 8 位:【已附详细注释】
EG:
MOV DX, 3FBH ; 先把 (主串口)控制字寄存器 的地址交给 DX
MOV AL, 80H ; 再把 1000 0000B 传给 AL 【D_7 = 1 表明后面将会写入合用端口的数据,并传给除数寄存器。】
OUT DX, AL ; 将 AL 的数据传给地址端口为 DX 的寄存器
MOV DX, 3F9H ; 把 除数寄存器(高 8 位)的地址交给 DX
MOV AL, N ; 把 N 这个数据写入 AL
OUT DX, AL ; 将 AL 的数据传给地址端口为 DX 的寄存器
● 举例二,把 N 这个数据写入发送保持寄存器:
EG:
MOV DX, 3FBH
MOV AL, 01111111B ; D_7 = 0 表明后继将会写入合用端口的数据,并传给非除数寄存器。
OUT DX, AL
MOV DX, 3F8H ; 3F8H 正好对应的是 "发送保持寄存器", 前提是用 OUT。如果是 IN, 才是 “接收缓冲寄存器”
MOV AL, N
OUT DX, AL
② 除数寄存器(高8
位对应——3F9H
/2F9H
,低8
位对应——3F8H
/2F8H
):除数寄存器有16
位,由高8
位寄存器和低·8
位寄存器组成。
▶功能:存放初始化时编程时写入的分频系数
● 8250 对1.8432MHz
的时钟输入,采用分频的方法产生所要求的 “发送器时钟信号” 和 “接收器时钟信号”,分频系数(即下图的除数)由程序员分两次写入,分别写入除数寄存器的高8
位和低8
位。(注:高8
位送入 MSB ,低8
位送入 LSB )
除 数 ( 分 频 系 数 ) = 1843200 波 特 率 × 16 除数(分频系数) = \frac{1843200}{波特率\times 16} 除数(分频系数)=波特率×161843200
● 波特率与分频系数(即除数)的对照表如下:
◆ 说明:除数寄存器的值必须在 8250 初始化时预置。因此,必须先把通信线控制寄存器的最高位(DLAB)置为1
,然后分别写入除数寄存器的高8
位和低8
位。
③ 中断允许寄存器(3F9H
/2F9H
)
◆ 说明:当上述 4 种类型的中断有一种或多种出现时,8250 便输出INTPTR
信号。
● 该寄存器的 D7 ~ D4 位恒为0
。D3 ~ D0位表示 8250 的4
级中断是否被允许。
[1] D0=1,允许接收到一帧数据后,内部提出 “接收中断请求” 。
[2] D1=1,允许发送保持寄存器空时,内部提出 “发送中断请求” 。
[3] D2=1,允许接收出错时,内部提出 “接收数据错中断请求” 。
[4] D3=1,允许 MODEM 状态改变时,内部提出 “MODEM中断请求” 。
④ MODEM 控制寄存器(3FCH
/2FCH
) ⭐️⭐️⭐️:使 8250 可直接与调制解制器相连的控制电路,以完成远程通信任务。
[1] D0 位=1,使引脚 D T R ‾ = 0 \overline{DTR} = 0 DTR=0,从而使 RS-232C 引脚 D T R ‾ \overline{DTR} DTR 为0
。
[2] D1 位=1,使引脚 R T S ‾ = 0 \overline{RTS} = 0 RTS=0,从而使 RS-232C 引脚 R T S ‾ \overline{RTS} RTS 为0
。
[3] D2 位=1,使引脚 O U T 1 ‾ = 0 \overline{OUT_1} = 0 OUT1=0,PC 系统机上没有使用。
[4] D3 位=1,使引脚 O U T 2 ‾ = 0 \overline{OUT_2} = 0 OUT2=0,8250 能送出中断请求。
[5] D4 位通常置0,设置8250工作在正常收/发方式。(若 D4 位置1
,则 8250工作在内部自环方式,即发送移位寄存器的输出在芯片内部被回送到接收移位寄存器的输入。这样的话,我们就能编写程序测试 8250 的工作是否正常,即进行内环自测)
[6] D7 ~ D5 位恒为0
。
● 补充内容一:8250 的 D0、D1 位直接控制 RS232 的 D T R ‾ \overline{DTR} DTR 和 R S T ‾ \overline{RST} RST 引脚,向外部表明 8250 是否做好了 收/发 的准备。且在 PC机 中 O U T 1 ‾ \overline{OUT_1} OUT1 引脚没有用,所以初始化时 D2 = 0/1 皆可。如下图所示:【不太理解,后面问问老师】
● 补充内容二:引脚 O U T 1 ‾ \overline{OUT_1} OUT1, O U T 2 ‾ \overline{OUT_2} OUT2 外接器件由硬件决定。在 PC 机中, O U T 1 ‾ \overline{OUT_1} OUT1 未用, O U T 2 ‾ \overline{OUT_2} OUT2 用来作为中断请求信号INTRPT
的输出控制,如下图所示:
● 补充内容三:程序员欲与 8250 之间采用中断方式交换信息,应采取以下措施:
[1] 中断允许寄存器相应位置1
(用 8250)
[2] MODEM 控制寄存器 D3 = 1,即 O U T 2 ‾ = 0 \overline{OUT_2} = 0 OUT2=0,打通 8250 的中断请求通道。(用 8250)
[3] 825 9相应中断屏蔽位置1
。(用 主8259 的 IR3、IR4)
[4] CPU 处于开中断。(用STI
指令)
● 补充内容四:8250 的自发自收,如下图所示:
[1] 内环:自动将发送移位寄存器和接收移位寄存器短接。
[2] 外环:人为将 RS-232 接口芯片端子2
和端子3
用线连接起来。属正常通信
3.2.3 第三类:状态寄存器(有 3 种)
① 通信线状态寄存器(3FDH
/2FDH
):提供数据传输的状态信息,其各位含义如下:
[1] D0 位:接收数据准备好(接收缓冲器满)标志位。【D0 = 1 表示接收器已接收到一帧完整的数据,并已转换成并行数据,存入接收缓冲寄存器。(CPU接收数据时一定要查询)】
[2] D1 位:溢出错标志位。【D1 = 1,表示接收缓冲器中的字符未取走,8250 又接收到新输入的数据,造成前一数据被破坏】
[3] D2 位:奇偶错标志位。【D2 = 1,表示收到的数据有奇偶错】
[4] D3 位:帧错(接收格式错)标志位。【D3 = 1,表示接收的数据没有正确的停止位】
[5] D4 位:线路间断标志位。【D4 = 1,表示收到长时间 “0” 信号(即中止信号)】
[6] D5 位:发送保持寄存器空闲标志位。【D5 = 1,表示数据已从发送保持寄存器转移到发送移位寄存器,发送保持寄存器空闲,CPU可以写入新数据。当新数据送入发送保持寄存器后,D5 置0
】
[7] D6 位:发送移位寄存器空闲标志位。【D6 = 1,表示一帧数据已发送完毕。当下一个数据由发送保持寄存器移入发送移位寄存器时,该位被置0
】
[8] D7 位:恒为0
。
● 注意:D0 位(接收数据准备好)和 D5位(发送保持寄存器空)是串行接口最基本的标志位,它们决定了 CPU 能不能向 8250 进行读写操作,只有当 D0 = 1时,CPU 才能读数;只有当 D5 = 1 或 D6 = 1时,CPU 才能写数据。
● 说明:
寄存器中的各位置1
时,如相应的中断允许位也为1
,则:
[1] D0 = 1 , 产生接收中断
[2] D5 = 1 , 产生发送中断
[3] D1 ~ D4 = 1,产生 “字符错” 中断
● 执行下列操作后,寄存器中的相应位自动执行:
[1] 数据 → 发送保持寄存器(即 D5 = 0)
[2] 通信线状态寄存器内容 → AL(即 D1 ~ D4 = 0)
[3] 接收缓冲寄存器内容 → AL(即 D0 = 0)
[4] 发送保持寄存器内容 → 移位寄存器(即 D6 = 0)
EG:
MOV DX, 3FBH ; 先把 (主串口)控制字寄存器 的地址交给 DX
MOV AL, 80H ; 再把 1000 0000B 传给 AL 【D_7 = 1 表明后面将会写入合用端口的数据,并传给除数寄存器。】
OUT DX, AL ; 将 AL 的数据传给地址端口为 DX 的寄存器
MOV DX, 3F9H ; 把 除数寄存器(高 8 位)的地址交给 DX
MOV AL, N ; 把 N 这个数据写入 AL
OUT DX, AL ; 将 AL 的数据传给地址端口为 DX 的寄存器
● 样例一:利用主串口查询方式发送一个“A”
SCANT:
MOV DX, 3FDH ; 先把 (主串口)通信线状态寄存器 的地址交给 DX
IN AL, DX ; 把地址端口为 DX 的寄存器内的数据 → AL
TEST AL, 20H ; 20H = 00100 000B, 该行代码功能: 检测 D_5 位是否为 1 [即查询 发送保持寄存器 是否空闲]
JZ SCANT ; 不空闲就转 SCANT, 空闲就执行下一句(即D_5 = 1),
MOV DX, 3F8H ; 把 (主串口)发送保持寄存器 的地址交给 DX
MOV AL, 'A'
OUT DX, AL
● 样例二:利用辅串口查询方式接收一个字符
SCANR:
MOV DX, 2FDH ; 先把 (辅串口)通信线状态寄存器 的地址交给 DX
IN AL, DX ; 把地址端口为 DX 的寄存器内的数据 → AL
TEST AL, 01H ; 01H = 0000 0001B, 该行代码功能: 检测 D_0 位是否为 1 [即查询 接收缓冲寄存器 是否空闲]
JZ SCANR ; 不空闲就转 SCANT, 空闲就执行下一句(即D_0 = 1)
MOV DX, 2F8H ; 把 (辅串口)接收缓冲寄存器 的地址交给 DX
IN AL, DX
② 中断识别寄存器(3FAH
/2FAH
):用于识别是哪一个中断源引起的中断,然后再转入相应的处理程序。(因为 8250 仅能向 CPU 发出一个总的中断请求信号,而中断类型有多种)
● 对上图的说明:
[1] 中断识别寄存器的 D7 ~ D0 位恒为0
。
[2] D0 位表示有无中断待处理。【D0 = 1 表示没有中断待处理;D0 = 0 表示有中断待处理】
[3] D2 ~ D1 位表示4
种中断源识别码,其代表的中断源如下表所示:
● 用伪代码来说明上诉 4 个的使用方式:
MOV DX, 3FAH
IN AL, DX
CMP AL, 0
JZ "MODEM中断"
CMP AL, 2
JZ "发送中断"
CMP AL, 4
JZ "接收中断"
CMP AL, 6
JZ "字符错中断"
③ MODEM状态寄存器(3FEH
/2FEH
):反映 8250 与通信设备(如MODEM)之间联络信号的当前状态以及这些信号的变化情况。
● D7 ~ D4记录了4
个输入引脚的状态电平:
[1] D7=1 表示输入引脚 RLSD = 0,MODEM 收到来自电话线的载波信号。
[2] D~6=1 表示输入引脚 RI = 0,MODEM 收到振铃信号。
[3] D~5=1 表示输入引脚 DSR = 0, MODEM 做好了发送准备,请 8250 准备接收。
[4] D~4=1 表示输入引脚 CTS = 0,MODEM 做好了接收准备,8250 可以发送数据
● D3 ~ D0记录了上一次读取该寄存器后,上述引脚是否发生过电平变化:
[1] D3 = 1 表示输入引脚 RLSD 有电平变化。
[2] D2 = 1 表示输入引脚 RI 有电平变化。
[3] D1 = 1 表示输入引脚 DSR 有电平变化。
[4] D0 = 1 表示输入引脚 CTS 有电平变化。
3.3 8250 的初始化编程
● 如果采用直接对端口操作的方式,8250 的初始化编程步骤如下:
[1] 设置寻址位:80H
→ 通信线控制寄存器,使寻址位为1
。
[2] 确定通信速率:将除数高8
位/低8
位 → 除数寄存器高8
位/低8
位。
[3] 规定一帧的数据格式:将 D7 = 0 的控制字写入通信线控制寄存器。
[4] 设置中断允许控制字:若采用查询方式,则置0
;若采用中断方式,则置1
。
[5] 设置 MODEM 控制寄存器:若采用查询方式,则 D3 置0
;若采用中断方式,则 D3 置1
;若采用内环自验:则 D4 置1
;若为正常通信,则 D4 置0
。
● 样例一:编写子程序,对 PC 系列机主串口进行初始化,要求:
① 通信速率 = 1200 波特,一帧数据包括:8 个数据位,1 个停止位,无校验
② 查询方式,完成内环自检。
● 分析:
(1)∵ 速率 = 1200 波特,∴ 分频系数 = 1.8432M /(16 × 1200)=0060H(可以用计算器算,也可查表得到)
(2)一帧数据结构命令字:0000 0011B = 03H
(3) 中断允许命令字 = 0
(4) MODEM 控制字 = 0001 0000H = 10H● 初始化子程序如下:
I8250 PROC ;----"设置寻址位 = 1"---- MOV