ascill
00110000 | 48 | 30 | 0 |
---|---|---|---|
01000001 | 65 | 41 | A |
01100001 | 97 | 61 | a |
第七章 输入/输出系统
一、接口电路的作用
二、端口的概念、分类
能与 CPU 交换信息的寄存器 称为 I/O 寄存器,简称“端口”。
按端口的寄存器存放信息的物理意义来分,端口可分为 3 类:
1)数据端口 2)状态端口 3)控制端口
三、端口有两种编址方式。
⑴ 统一编址 ⑵ I/O 端口独立编址
PC系列机采用端口独立编址。
四、最常用的I/O指令
1、直接寻址 I/O 指令(8 位端口地址)
IN AL, n
OUT n, AL
2、DX 间接寻址 I/O 指令(当端口地址>8 位)
IN AL, DX
OUT DX, AL
五、微机系统与 I/O 端口的信息交换
4 种方式:无条件传送,查询方式,中断方式,DMA 方式
无条件传送
查询方式
中断方式
DMA方式
直接存储器存取(Direct Memory Access):利用硬件完成高速外设与系统RAM之间的信息交换。
与 CPU 相连,DMA 请求 -> CPU 让出控制权
DMAC
DMA 控制器,是实现DMA传送的核心芯片。
优点:传送速度快。
缺点:硬件电路比较复杂。
DMA 传送方式 vs 中断方式
- 响应时间:
- CPU接到“中断请求”后,需要等到当前指令执行完毕才响应。
- CPU接到 DMAC 的“总线请求”后,只要当前指令的当前总线周期执行完毕就响应!
- 数据传送速度:DMAC传送更快!
I/O 设备信息交互的 4 种方式比较
优点 | 缺点 | |
---|---|---|
无条件传送方式 | 实现简单:可以直接使用输入缓冲器或锁存器与数据线相连,程序设计简单 | 传送不能太频繁 (保证每次传送设备都处在就绪状态) |
查询方式 | 比无条件传送方式可靠, 时间确定 | 降低了 CPU 的工作效率, 不具有实时性 |
中断控制方式 | 提高了 CPU 的工作效率,具备实时性,可并行工作,不用反复查询外设的工作状态。 | 每次进行数据传输,都要保存现场,时间不确定、 有抖动 |
DMA 方式 | 按数据块传输,不经过 CPU,不需要保护现场 | 硬件更复杂(DMA控制器) |
第八章 中断系统
一、中断概念
二、中断指令
STI 开中断
CLI 关中断
INT n 软件中断
IRET 终端服务子程序最后一条命令,中断返回
要求掌握:
- 中断指令在中断程序设计中何时使用?
- CPU执行中断指令后,完成哪些操作?
- STL、CLI 只对可屏蔽中断请求有效。
例题:
CPU 执行 IRET 指令后,从栈顶弹出_字节数据,分别赋给_、__和__。
三、中断分类
PC 机 256 种中断,可分为以下 3 类:
- 异常
- 软件中断(内部中断)
- 如
INT n
- 如
- 硬件中断(外部中断)
- ※可屏蔽中断:如
INTR
- 非屏蔽中断:如
NMI
- ※可屏蔽中断:如
部分中断号对应的中断如下:
0型中断 | 除法错中断 |
---|---|
1型中断 | 单步或陷阱中断 |
2型中断 | 非屏蔽硬件中断 |
3型中断 | 断点中断 |
4型中断 | 溢出中断 |
5型中断 | 屏幕打印 |
08H〜0FH型中断 | 可屏蔽硬件中断 |
10H—1FH型中断 | BIOS 中断 |
20H〜3FH型中断 | DOS 中断 |
1、可屏蔽(硬件)中断 (08-0FH型)(INTR)
中断级别
要求掌握的可屏蔽中断
- 用户中断:
- 中断源
- 中断向量
71H
,0AH
- 用户可置换的中断向量
71H
,0AH
- 日时钟中断:
- 中断源
- 中断向量:
08H
,1CH
- 用户可置换的中断向量:
08H
,1CH
(重点掌握**1CH**
,看后面题)
- 键盘中断(只要掌握原理)
- 中断源
- 中断向量
09H
- 由 9 型服务程序写入键代码,用户用
INT 16H
访问键盘缓冲区(键盘缓冲区是 9 型硬中断和INT 16H
软中断之间交换信息的缓冲区。)
可屏蔽中断的实现
是通过 8259 中断控制器连至 CPU 的 INTR。
背诵!
响应可屏蔽中断的条件
- 有可屏蔽中断请求,没有DMA请求,没有非屏蔽中断请求;
- CPU 一条指令执行完毕;
- CPU 处于开中断状态(I 标 = 1);
2、非屏蔽(硬件)中断 (2型)(NMI)
响应非屏蔽中断的条件
- 有非屏蔽中断请求,没有DMA请求
- 一条指令执行完
四、中断向量
定义:实模式下,中断服务子程序的入口地址。
它由 2 部分组成: ①服务程序所在代码段的段基址 ②服务程序入口的偏移地址
在实模式下,CPU把256种中断向量组成一张表设置在系统的 RAM 最低端的 1K 单元(0〜3FFH)
n 型中断向量存放在内存单元地址 4n~4n+3 这四个单元:
例题:
实模式下,从内存地址 0000H: 0048H 开始的连续 4 个单元中存放的内容为 00H,38H,30H,50H,则该地址所对应的中断类型码为12H_,该中断所对应的中断服务子程序的入口地址为50309h*10+3800h__。
五、中断向量的写入(编程)
CLI ;开中断
PUSH DS
PUSHA
;向 DS DX 分别写服务段基址和偏移地址
MOV AX, SEG SERVICE ;SERVICE 服务段基址
MOV DS, AX
MOV DX, OFFSET SERVICE ;SERVICE 服务段偏移地址
;调用 DOS 子程序,n 型中断向量
MOV AH, 25H
MOV AL, n
INT 21H
POPA
POP DS
STI ;关中断
六、硬件中断和软件中断的不同点
- 1、中断的引发方式不同
- 硬件中断是由 CPU 以外的设备发出的接到引脚 INTR 和 NMI 上的中断请求信号而引发的。
- 而软件中断是由于 CPU 执行
INT n
指令而引发的。
- 2、CPU获取中断类型码的方式不同
- 可屏蔽硬件中断,中断类型码是由中断控制器 8259A 提供;
- 非屏蔽硬件中断,终端类型码自动生成
- 软件中断,中断类型码是由软件中断指令
INT n
本身提供的。
- 3、CPU响应的条件不同(屏蔽)
- 可屏蔽硬件中断是可以被屏蔽的,只有在 CPU 开中断时,才能响应;
- 非屏蔽硬件中断和软件中断不能被屏蔽。
- 4、中断处理程序的结束方式不同
- 在硬件可屏蔽中断服务程序中,中断处理结束后,首先需要向 8259A 发出中断结束命令,然后执行IRET指令,中断返回。
- 而在软件中断服务程序中,中断 处理结束后只需执行 IRET 指令。
七、程序设计示例
第十章 串行通信
一、基本概念
串行通信方式:串行异步通信、串行同步通信
异步串行通信的数据传输方式:单工通信、半双工通信、全双工通信(各自特点?)
异步串行通信一帧数据的格式及通信速率的计算
- 为实现通信,收发双方数据帧格式和通信速率要保持一致
- 例:异步通信一帧数据格式中,按照发送的次序,先传送__,紧接着是,数据位后依次为__,_。(见上方图)
RS-232 信号采用负逻辑
“1” -> [-15V,-3V]
“0” -> [+3V,+15V]
无联络线时候连线:23(看单双) | 7
有联络线时候连线:23(看单双) | 45 | 6 20 | 7
COM 默认是主串口
二、8250 芯片
8250内部寄存器的功能。
通过 A2A1A0 选中,3 选 10 可行是因为有地址复用。 2数据寄存器:发送保持/接收缓冲 3状态~:通信线状态/MODEM状态/中断识别 5命令字:通信线控制/除数*2/中断允许/MODEM控制
三、8250 编程
1、8250的初始化编程
8250 初始化步骤:B98B9C
- 设置通信线寄存器(3FBH)(
D7=1,D6543210=0000000,即 80H
,使访问除数寄存器)- 确定通信速率(根据波特率计算出除数高/低 8 位 -> 除数寄存器高/低 8 位)
- 记住!
- 设置除数寄存器:先写高 8 位(3F9H)再写低 8 位(3F8H)
- 设置通信线寄存器(3FBH)(
D7=0
,使访问非除数寄存器;此时其它位看附录,设置数据格式) - 设置中断允许寄存器(3F9H)
- D7654 = 0000
- 查询方式,则全部
Di = 0
,禁止中断 - 中断方式,看附录使其中一个
Di = 1
- 设置 MODEM 控制寄存器(3FCH)(注意括号内的文字附录没给出!)
- D4
D4 = 1
使 OUT1 = 0,内环方式D4 = 0
使 OUT1 = 1,正常通信
- D3:OUT2 输出电平
D3 = 1
使 OUT2 = 0(中断方式,允许 8250 送出中断请求)D3 = 0
使 OUT2 = 1(查询方式)
- D2:OUT1 输出电平(系统机上没有使用 D2,置 0/1 均可)
- 除了“使用联络线”时:
D1 = 1
、D0 = 1
,其余情况均置 0 ,一直置 1 也是没问题的!- D1:RTS 引脚输出电平
D1 = 1
使 RTS1 = 0D1 = 0
使 RTS1 = 1
- D0:DTR 引脚输出电平
D0 = 1
使 DTR1 = 0D0 = 0
使 DTR1 = 1
- D1:RTS 引脚输出电平
- D4
8250 关注主串口(3F)和辅串口(2F) 主串口初始化速记:B98B9C
我的补充:
MODEM 控制字的设置(3FCH),题目如果提到使用联络线,或者使用 BIOS 通信软件实现的单工通信,则必须相应开启 D1、D0 (=1)。如果题目没提到,D1、D0 开启与否并不影响,所以视频 P1 几题的答案严格意义上来讲是没有问题的,不更正也是正确的。可见 MOOC 7.3.2 出镜版 4:16 秒例题的讲解[)抱拳][抱拳]请指正。
2、8250 的应用编程
串行通信程序设计包括硬件连接和软件编程。
8250 查询方式下接收和发送程序(编程)
- 在发送数据前,读通信线状态寄存器(状态口)获取发送保持或移位寄存器(数据口)是否空闲;
- 在接收数据前,读通信线状态寄存器(状态口)获取接收缓冲寄存器(数据口)是否已经收到1帧数据;
8250 采用中断方式交换信息
应采取以下措施:
- 8250:
中断允许寄存器相应位 = 1
; - 8250:MODEM 控制寄存器
D3 = 1
,即OUT2 = 0
,打通8250的中断请求通道; - 8259:相应中断屏蔽位开放(主 8259A 的 IR3,IR4);
- CPU:处于开中断(STI)
其它
例题
F 奇校验 10/4800
;尚未核对
I8250 PR0C
M0V DX, 3FBH
M0V AL, 80H
0UT DX,AL ;寻址位置1
M0V DX, 3F9H
M0V AL, 00H
0UT DX,AL ;写除数高8位
M0V DX, 3F8H
M0V AL, 18H
0UT DX,AL ;写除数低8位
MOV DX,3FBH
MOV AL,OAH
OUT DX,AL ;无校验传送,8位数据
MOV DX,3F9H
MOV AL,O1H
OUT DX,AL
MOV DX,3FCH
MOV AL,O 8H
OUT DX,AL
RET
第十一章 并行 I/O 接口
一、8255A 定时器/计数器
1、内部结构、端口地址以及与系统总线的连接
地址
顺序:A、B、C、控口,和总线 A1A0的选择顺序一致
2、3 种工作方式(方式0〜方式2)的工作特点和 I/O 过程
3、读/写操作
控制寄存器不能读!!!
在方式1中C口哪几个引脚作为信号联络线?各信号联络线的含义?
例:8255的数据口中,_A口可工作在双向方式。
例:8255A的B口初始化定义为选通型(方式1)输入,对8255A采用查询方式,必须先查询IBF;若采用中断方式,必须先置 PC 2__为”1”,并且利用INTR_作为中断请求信号线。
二、8255A 初始化编程
调 AB、调 C(就是附录给的顺序),没提到就统统给 0
方式 0 - 基本型
方式 1 - 选通型
方式 2 - 双向
- 确定A、B、C、控口地址
- 设置(各口工作)方式选择控制字(附录有)
D7 = 1
恒定(表示此时方式选择控制)- 调 A:
- D6D5 -> 端口 A 方式(0/1/2)
- D4 -> 端口 A 输入1/输出0
- D3 -> 端口 C7-4 输入1/输出0
- 调 B:
- D2 -> 端口 B方式(0/1)
- D1 -> 端口 B 输入1/输出0
- D0 -> 端口 C3-0 输入1/输出0
- 设置 C 口按位置 0/1 控制字(附录有)调 C
2、工作在方式 1、2 时
对控口地址设置两次
- 方式选择命令字 -> 控制口
- 允许中断(或禁止中断)的命令字 -> 控制口
方式 1
如果采用查询方式,且数据口定义为输入口:先用 IN 指令读入 C 口的内容,查询其中的 IBF=1
时,表示CPU 可以继续用 IN 指令从数据口读入外设送来的数据。
如果采用查询方式,且数据口定义为输出口:先用 IN 指令读入 C 口的内容,查询 OBF=1
时,表示 CPU 可以用 OUT 指令向数据口写数据以送给外设。
3、例题
第十二章 8254 定时/计数器
一、8254 定时器/计数器的基本结构
掌握三个 16 位计数器、控制寄存器,和计数器的外部引脚功能(GATE, CLK, OUT)
例:8254计数器电路中,GATE = 0
表示_停止计数
例:8254 计数器电路中,GATE = 1
表示 允许计数 。
例:8254 计数器电路中,GATE的上升沿
表示 启动计数
6 种工作方式(方式 0 ~ 方式 5)
方式 2、3 初值自动重装,其余 4 种方式没有初值自动重装功能。
只有方式 1 和方式 5 是硬件启动。
重点:方式2、方式3 (包括计数过程、波形、周期和启动方式)
方式 2 vs 方式 3
例题1
设 8254 计数器 1 工作于方式 3,输入时钟 1000Hz,计数初值为 10H,且采用二进制计数方式,则一个周期内计数器 1 输出信号的高电平和低电平分别为_8和__ms
例题2
不可以,需对程序第四行的进行修改,正确的程序为:MOV DX, 210H
3 160(BCD码 初值10H即10,1.6K/10=160) 100(初值为二进制,10H对应16,1.6K/16=100)
=> 频率、初值相互转换!
213H, 0110X111B, 211H, 10H, RET(只能用 BCD 码,因为只给了一次写入的空位)
掌握8254在微型计算机系统中的应用
外扩 8254 和PC机系统中 8254
例:8254的三个计数器在PC系列中是如何应用的?
- 计数器 0 用于定时(约 55ms)中断。
- 计数器 1 用于动态存储器刷新定时。
- 计数器 2 用于产生约 900Hz 的方波送至扬声器。
二、8254编程
选择一个计数器,并确定其工作方式和计数值(或计数初值)的读/写顺序。
初始化
1、2、3、控口 -> 地址
- 向控制寄存器写入方式选择命令字(控口地址)(按附录顺序即可)
- D7D6:计数器选择
- 补充:GATEi、CLKi、OUTi -> 题目提到这个
i = ?
变相告诉了计数器的选择。
- 补充:GATEi、CLKi、OUTi -> 题目提到这个
- D5D4:读写方式
- D3D2D1:工作方式选择(要背各个方式特点,见上)
- D0:二进制/BCD
- D7D6:计数器选择
- 向选择的计数器写入计数初值(计数初值=fclk/fout)(计数器地址)
- 根据 D0 :数据格式的选择
- 根据 D5D4:读写方式
- 注意方式 3 先 低8 后 高 8
- 注意要通过 AL 去 OUT
- 使用 BCD 码时注意是 16 进制的表示
锁存命令
原因:读操作在微机系统中不能直接两次读出低高 8 位!!
解决:借助锁存器!
- 向控制寄存器写入方式选择命令字 -> 锁存 (控口地址)
- D7D6:计数器选择(同上)
D5D4 = 00
恒定,启动锁存!- D3D2D1、D0 失效!
- AL 读低 8 位,(计数器地址),用 CL 暂存
- AL 读高 8 位,(计数器地址),用 CH 暂存
- 得到 CX 即为当前计数值
示例:
4、例题
关注一下控口地址的翻译
I8254 PROC
MOV DX, 213H
MOV AL, 00110110B
OUT DX, AL
MOV DX, 210H
MOV AX, 2000
OUT DX, AL
MOV AL, AH
OUT DX, AL
RET
I8254 ENDP