ascill

00110000 48 30 0
01000001 65 41 A
01100001 97 61 a

第七章 输入/输出系统

一、接口电路的作用

接口是 CPU 和外设交换信息的中转站。

二、端口的概念、分类

能与 CPU 交换信息的寄存器 称为 I/O 寄存器,简称“端口”。
按端口的寄存器存放信息的物理意义来分,端口可分为 3 类:
1)数据端口 2)状态端口 3)控制端口

三、端口有两种编址方式。

⑴ 统一编址 ⑵ I/O 端口独立编址
PC系列机采用端口独立编址。

四、最常用的I/O指令

1、直接寻址 I/O 指令(8 位端口地址)

  1. IN AL, n
  2. 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 中断方式

  1. 响应时间:
    1. CPU接到“中断请求”后,需要等到当前指令执行完毕才响应。
    2. CPU接到 DMAC 的“总线请求”后,只要当前指令的当前总线周期执行完毕就响应!
  2. 数据传送速度:DMAC传送更快!

I/O 设备信息交互的 4 种方式比较


优点 缺点
无条件传送方式 实现简单:可以直接使用输入缓冲器或锁存器与数据线相连,程序设计简单 传送不能太频繁
(保证每次传送设备都处在就绪状态)
查询方式 比无条件传送方式可靠, 时间确定 降低了 CPU 的工作效率不具有实时性
中断控制方式 提高了 CPU 的工作效率,具备实时性,可并行工作,不用反复查询外设的工作状态。 每次进行数据传输,都要保存现场,时间不确定、 有抖动
DMA 方式 按数据块传输,不经过 CPU,不需要保护现场 硬件更复杂(DMA控制器)

第八章 中断系统

一、中断概念

二、中断指令

STI 开中断
CLI 关中断
INT n 软件中断
IRET 终端服务子程序最后一条命令,中断返回

要求掌握:

  1. 中断指令在中断程序设计中何时使用?
  2. CPU执行中断指令后,完成哪些操作?
  3. STL、CLI 只对可屏蔽中断请求有效。

例题:
CPU 执行 IRET 指令后,从栈顶弹出_字节数据,分别赋给_____
image.png

三、中断分类

PC 机 256 种中断,可分为以下 3 类:

  1. 异常
  2. 软件中断(内部中断)
    1. INT n
  3. 硬件中断(外部中断)
    1. ※可屏蔽中断:如 INTR
    2. 非屏蔽中断:如 NMI

部分中断号对应的中断如下:

0型中断 除法错中断
1型中断 单步或陷阱中断
2型中断 非屏蔽硬件中断
3型中断 断点中断
4型中断 溢出中断
5型中断 屏幕打印
08H〜0FH型中断 可屏蔽硬件中断
10H—1FH型中断 BIOS 中断
20H〜3FH型中断 DOS 中断

1、可屏蔽(硬件)中断 (08-0FH型)(INTR)

中断级别

image.png

要求掌握的可屏蔽中断

  1. 用户中断:
    1. 中断源
    2. 中断向量 71H,0AH
    3. 用户可置换的中断向量71H,0AH
  2. 日时钟中断:
    1. 中断源
    2. 中断向量:08H,1CH
    3. 用户可置换的中断向量:08H,1CH重点掌握 **1CH**,看后面题)
  3. 键盘中断(只要掌握原理)
    1. 中断源
    2. 中断向量 09H
    3. 由 9 型服务程序写入键代码,用户用 INT 16H 访问键盘缓冲区(键盘缓冲区是 9 型硬中断和 INT 16H 软中断之间交换信息的缓冲区。)

可屏蔽中断的实现

是通过 8259 中断控制器连至 CPU 的 INTR。
背诵!
image.png

响应可屏蔽中断的条件

  1. 有可屏蔽中断请求,没有DMA请求,没有非屏蔽中断请求;
  2. CPU 一条指令执行完毕;
  3. CPU 处于开中断状态(I 标 = 1);

2、非屏蔽(硬件)中断 (2型)(NMI)

响应非屏蔽中断的条件

  1. 有非屏蔽中断请求,没有DMA请求
  2. 一条指令执行完

四、中断向量

定义:实模式下,中断服务子程序的入口地址。

它由 2 部分组成: ①服务程序所在代码段的段基址 ②服务程序入口的偏移地址

在实模式下,CPU把256种中断向量组成一张表设置在系统的 RAM 最低端的 1K 单元(0〜3FFH)
n 型中断向量存放在内存单元地址 4n~4n+3 这四个单元:
image.png

例题:
实模式下,从内存地址 0000H: 0048H 开始的连续 4 个单元中存放的内容为 00H,38H,30H,50H,则该地址所对应的中断类型码为12H_,该中断所对应的中断服务子程序的入口地址为50309h*10+3800h__

五、中断向量的写入(编程)

17320063F674BA93B27CA04F887A27D4.png

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 指令。

七、程序设计示例

image.png

第十章 串行通信

一、基本概念

串行通信方式:串行异步通信、串行同步通信

同步:严格时钟、同步字符
异步:起始位和停止位(稍慢)
1B074EF00B8DB05631BAB4C5CD55CC23.png

异步串行通信的数据传输方式:单工通信、半双工通信、全双工通信(各自特点?)

异步串行通信一帧数据的格式及通信速率的计算

  1. 为实现通信,收发双方数据帧格式和通信速率要保持一致
  2. 例:异步通信一帧数据格式中,按照发送的次序,先传送__,紧接着是,数据位后依次为___。(见上方图)

    RS-232 信号采用负逻辑

    “1” -> [-15V,-3V]
    “0” -> [+3V,+15V]

无联络线时候连线:23(看单双) | 7
有联络线时候连线:23(看单双) | 45 | 6 20 | 7
65E7104F6B8B5A2AB8E84A752C96BCF6.png
1C3A894B26F132AFCE1DE6E19C0F0595.png
COM 默认是主串口
A7368AFF9BE5D61FF6625045A8EC1099.png

二、8250 芯片

8250内部寄存器的功能。

通过 A2A1A0 选中,3 选 10 可行是因为有地址复用。 2数据寄存器:发送保持/接收缓冲 3状态~:通信线状态/MODEM状态/中断识别 5命令字:通信线控制/除数*2/中断允许/MODEM控制

三、8250 编程

1、8250的初始化编程

8250 初始化步骤:B98B9C

  1. 设置通信线寄存器(3FBH)(D7=1,D6543210=0000000,即 80H,使访问除数寄存器)
    1. 确定通信速率(根据波特率计算出除数高/低 8 位 -> 除数寄存器高/低 8 位)
    2. 记住!E494171CF6E3FFFCF09E5DDA49EB9E8C.png
  2. 设置除数寄存器:先写高 8 位(3F9H)再写低 8 位(3F8H)
  3. 设置通信线寄存器(3FBH)(D7=0,使访问非除数寄存器;此时其它位看附录,设置数据格式)
  4. 设置中断允许寄存器(3F9H)
    1. D7654 = 0000
    2. 查询方式,则全部Di = 0,禁止中断
    3. 中断方式,看附录使其中一个Di = 1
  5. 设置 MODEM 控制寄存器(3FCH)(注意括号内的文字附录没给出!)
    1. D4
      1. D4 = 1使 OUT1 = 0,内环方式
      2. D4 = 0使 OUT1 = 1,正常通信
    2. D3:OUT2 输出电平
      1. D3 = 1使 OUT2 = 0(中断方式,允许 8250 送出中断请求
      2. D3 = 0使 OUT2 = 1(查询方式)
    3. D2:OUT1 输出电平(系统机上没有使用 D2,置 0/1 均可
    4. 除了“使用联络线”时D1 = 1D0 = 1,其余情况均置 0 ,一直置 1 也是没问题的!
      1. D1:RTS 引脚输出电平
        1. D1 = 1使 RTS1 = 0
        2. D1 = 0使 RTS1 = 1
      2. D0:DTR 引脚输出电平
        1. D0 = 1使 DTR1 = 0
        2. D0 = 0使 DTR1 = 1

浩然学长补充:

8250 关注主串口(3F)和辅串口(2F) 主串口初始化速记:B98B9C

我的补充:

MODEM 控制字的设置(3FCH),题目如果提到使用联络线,或者使用 BIOS 通信软件实现的单工通信,则必须相应开启 D1、D0 (=1)。如果题目没提到,D1、D0 开启与否并不影响,所以视频 P1 几题的答案严格意义上来讲是没有问题的,不更正也是正确的。可见 MOOC 7.3.2 出镜版 4:16 秒例题的讲解[)抱拳][抱拳]请指正。

2、8250 的应用编程

串行通信程序设计包括硬件连接和软件编程。

8250 查询方式下接收和发送程序(编程)

  • 在发送数据前,读通信线状态寄存器(状态口)获取发送保持或移位寄存器(数据口)是否空闲;
  • 02EE5D03D5F96431D0B005678F5A211E.png
  • 在接收数据前,读通信线状态寄存器(状态口)获取接收缓冲寄存器(数据口)是否已经收到1帧数据;
  • 7116968688D2049F59BAF3F83FABE558.png

8250 采用中断方式交换信息

应采取以下措施:

  1. 8250:中断允许寄存器相应位 = 1
  2. 8250:MODEM 控制寄存器 D3 = 1,即 OUT2 = 0,打通8250的中断请求通道;
  3. 8259:相应中断屏蔽位开放(主 8259A 的 IR3,IR4);
  4. CPU:处于开中断(STI)

其它

image.png

例题

image.png
image.png
F 奇校验 10/4800
image.png

;尚未核对
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的选择顺序一致
image.pngimage.png

2、3 种工作方式(方式0〜方式2)的工作特点和 I/O 过程

image.png

3、读/写操作

image.png
控制寄存器不能读!!!

在方式1中C口哪几个引脚作为信号联络线?各信号联络线的含义?

例:8255的数据口中,_A口可工作在双向方式。
例:8255A的B口初始化定义为选通型(方式1)输入,对8255A采用查询方式,必须先查询IBF;若采用中断方式,必须先置 PC 2__为”1”,并且利用INTR_作为中断请求信号线。

二、8255A 初始化编程

调 AB、调 C(就是附录给的顺序),没提到就统统给 0

方式 0 - 基本型
方式 1 - 选通型
方式 2 - 双向

  1. 确定A、B、C、控口地址
  2. 设置(各口工作)方式选择控制字(附录有)
    1. D7 = 1恒定(表示此时方式选择控制)
    2. 调 A
      1. D6D5 -> 端口 A 方式(0/1/2)
      2. D4 -> 端口 A 输入1/输出0
      3. D3 -> 端口 C7-4 输入1/输出0
    3. 调 B
      1. D2 -> 端口 B方式(0/1)
      2. D1 -> 端口 B 输入1/输出0
      3. D0 -> 端口 C3-0 输入1/输出0
  3. 设置 C 口按位置 0/1 控制字(附录有)调 C
    1. D7654 = 0000 恒定
    2. D321:允许哪个口?中断查询/被查/送信? -> 设置 PCi 线 及对应方式
      1. 看附录图,i取值:
      2. image.png
      3. A口输入:456
      4. A口输出:673
      5. B口输入/出:210
      6. 数字顺序意义:中断和查询、被查、送信
    3. D0:中断1/查询0(附录没有)

      1、工作在方式 0 时

      方式选择命令字 -> 控制口
      直接采用 IN/OUT 指令对其进行读写

2、工作在方式 1、2 时

对控口地址设置两次

  1. 方式选择命令字 -> 控制口
  2. 允许中断(或禁止中断)的命令字 -> 控制口

方式 1

如果采用查询方式,且数据口定义为输入口:先用 IN 指令读入 C 口的内容,查询其中的 IBF=1 时,表示CPU 可以继续用 IN 指令从数据口读入外设送来的数据。
如果采用查询方式,且数据口定义为输出口:先用 IN 指令读入 C 口的内容,查询 OBF=1 时,表示 CPU 可以用 OUT 指令向数据口写数据以送给外设。

3、例题

image.png
image.png
image.png

image.png
image.png

image.png
image.png

第十二章 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

image.png

例题1

设 8254 计数器 1 工作于方式 3,输入时钟 1000Hz,计数初值为 10H,且采用二进制计数方式,则一个周期内计数器 1 输出信号的高电平和低电平分别为_8__ms

例题2

image.png
不可以,需对程序第四行的进行修改,正确的程序为:MOV DX, 210H
3 160(BCD码 初值10H即10,1.6K/10=160) 100(初值为二进制,10H对应16,1.6K/16=100)
=> 频率、初值相互转换!
image.png
213H, 0110X111B, 211H, 10H, RET(只能用 BCD 码,因为只给了一次写入的空位)

掌握8254在微型计算机系统中的应用

外扩 8254 和PC机系统中 8254
例:8254的三个计数器在PC系列中是如何应用的?

  • 计数器 0 用于定时(约 55ms)中断。
  • 计数器 1 用于动态存储器刷新定时。
  • 计数器 2 用于产生约 900Hz 的方波送至扬声器。

二、8254编程

选择一个计数器,并确定其工作方式和计数值(或计数初值)的读/写顺序。

初始化

1、2、3、控口 -> 地址

  1. 向控制寄存器写入方式选择命令字(控口地址)(按附录顺序即可
    1. D7D6:计数器选择
      1. 补充:GATEi、CLKi、OUTi -> 题目提到这个 i = ? 变相告诉了计数器的选择。
    2. D5D4:读写方式
    3. D3D2D1:工作方式选择(要背各个方式特点,见上)
    4. D0:二进制/BCD
  2. 向选择的计数器写入计数初值(计数初值=fclk/fout)(计数器地址
    1. 根据 D0 :数据格式的选择
    2. 根据 D5D4:读写方式
      1. 注意方式 3 先 低8 后 高 8
      2. 注意要通过 AL 去 OUTE2C0508D0502DD83C4C7E2666A2EF152.png
      3. 使用 BCD 码时注意是 16 进制的表示4314D242CA339DDDDD069098643D12A3.png

锁存命令

原因:读操作在微机系统中不能直接两次读出低高 8 位!!
解决:借助锁存器!
image.png

  1. 向控制寄存器写入方式选择命令字 -> 锁存 (控口地址
    1. D7D6:计数器选择(同上)
    2. D5D4 = 00恒定,启动锁存!
    3. D3D2D1、D0 失效!
  2. AL 读低 8 位,(计数器地址),用 CL 暂存
  3. AL 读高 8 位,(计数器地址),用 CH 暂存
  4. 得到 CX 即为当前计数值

示例:
1D3029247FA7AA30F8AB7D23976FA4EC.png

4、例题

关注一下控口地址的翻译
image.png

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