微机原理 期末复习

复习记录

大部分芯片内容集中在初始化,汇编命令只需要掌握初始化中用到的即可。 (代码注释为 AIGC,可能有误,尽量自己对照对应表格学习)

概念

相关定义

微处理器

指采用大规模集成技术,集成在一片芯片上的包括运算器和控制器的中央处理器。即:CPU

内部结构image.png

  • 算逻部件
    作用:处理各种数据信息

  • 累加器和通用寄存器组
    作用:保存参加运算的数据及运算中间结果,也存放地址

  • 程序计数器,指令寄存器和译码器

CPU 功能

  • 可以进行算数和逻辑运算
  • 可保存少量数据
  • 能对指令进行译码并执行规定的动作
  • 能和存储器,外设交换数据
  • 提供整个系统所需要的定时和控制
  • 可以响应其他部件发来的中断请求

微型计算机

以微处理器为核心,配上大规模集成电路的随机存取存储器 RAM、只读存储器 ROM、I/O 接口电路和相应的辅助电路而构成的微型化的计算机装置,是具有完整运行功能的计算机。

image.png

采用总线结构,系统中各功能部件之间的相互关系变为各个部件面向总线的单一关系。一个部件只要符合总线标准,就可以连接到采用这种总线标准的系统中,拓展系统功能。

DB:双向;位数(宽度)= 微处理器位数;传输指令代码、状态量、数据
AB:单向;位数决定 CPU 可直接寻址的内存范围
CB:双向

微型计算机系统

以微型计算机为主体,配上系统软件和相应的外部设备(如打印机、显示器、磁盘机和磁带机等)及其他专用电路、电源、面板、机架之后,就成了微型计算机系统

微处理器、微型计算机和微型计算机系统的关系

image.png

微型计算机系统的总线结构

总线:计算机传递信息的一组通信线

  1. 单总线:一组总线;双总线:两组总线;三总线:三组总线

  2. 单向总线;双向总线

  3. 微处理器内部总线:连接内部寄存器组、累加器、算逻单元和控制部件

单机内总线:计算机内部系统板和插件板之间进行通信的总线

外总线:(多机之间)微型计算机和其他设备或控制对象之间进行通信的总线


8086 芯片

一、8086 的编程结构

微处理器的性能指标

字长:CPU 能同时处理的数据位数(即数据总线的宽度)。字长 16 位,即为 16 位机。

主频:CPU 的时钟频率。

8086:16 位机; 8088:准 16 位机。

8086/8088:20 根地址总线,寻址空间 1MB。

编程结构

就是指从程序员和使用者的角度看到的结构。

这种结构与 CPU 内部的物理结构和实际布局是有区别的。

CPU物理结构:

  • 算逻部件 ALU
  • 寄存器组:
    包括:通用寄存器组;指示变址寄存器;段寄存器组;程序计数器 IP;标记寄存器
  • 预取指令队列缓冲器
  • 地址形成部件
  • 控制部件:
    包括:指令寄存器;指令译码;总线周期编码器;定时和控制部件;总线周期

8086的编程结构:

从功能上看,8086 分为:总线接口部件 BIU,执行部件 EU。

总线接口部件 BIU

功能:

  • 与存储器,IO 端口传送数据
  • 取指:内存 -> 指令队列
  • 执行指令:内存或外设端口 -> EU;EU 的操作结果 -> 内存单元或外设端口

组成:

  • 4 个 16 位段地址寄存器,即 CS,DS,ES,SS。
  • 16 位的指令指针寄存器 IP。
  • 20 位的地址加法器。
  • 6 字节的指令队列缓冲器(8088 为 4 个字节)。

8086/8088 执行指令的同时,从内存中取出一条或几条指令,放在缓冲队列,执行完一条指令后,可以立即执行下一条,提高了 CPU 的效率。

地址加法器用 16 位寄存器提供的信息计算出 20 位的物理地址。

8086/8088 储存器如何分段?
程序以逻辑地址编址,而不是用物理地址。

执行部件 EU

功能:
负责指令的执行

组成:

  • 4 个通用寄存器,即 AX,BX,CX,DX。
  • 4 个专用寄存器,即基数指针寄存器 BP,堆栈指针寄存器 SP,源变址寄存器 SI,目的变址寄存器 DI。
  • 标志寄存器
  • 算数逻辑部件 ALU

标志寄存器

状态标志:

  • CF:进位标志,加法产生进位或减法出现错位为 1。
  • ZF:零标志,指令执行结果为 0,ZF = 1。
  • SF:符号标志,0 为正,1 为负,为结果的最高位。
  • OF:溢出标志,有符号运算溢出时,OF = 1。
  • PF:奇偶标志,低 8 位中 1 的个数为偶数,PF = 1。
  • AF:辅助进位,低 4 位产生进位或借位时 AF = 1。

控制标志:

  • DF:方向标志,DF = 0 时,地址递增,反之递减。
  • IF:中断允许标志,IF = 1 时允许中断。
  • TF:陷阱标志,TF = 1 时每执行一条指令就触发一次单步中断 INT 1。

BIU 和 EU 的动作管理

二者并非同步工作。

  1. 每当 8086 的指令队列中有 2 个空字节(8088 有 1 个),BIU 就自动把指令取到指令队列。
  2. 取指和访存的冲突。
  3. 指令队列满
  4. 执行转移,调用和返回指令时,指令队列的操作。

8086/8088 系统与传统计算器工作方式的区别

传统计算机的工作步骤:取指和执行是串行的。

8086/8088 的工作步骤:取指和执行是并行的。

8086 总线周期的概念

取指令或传送数据,就需要 CPU 的总线接口部件执行一个总线周期。

在 8086/8088 中,一个基本的总线周期由 4 个时钟周期组成,时钟周期是 CPU 的基本时间计算单位,他由计算机主频决定。

T1 状态:输出地址,让外设知道要访问哪里。
T2 状态:确定读写方向,发出控制信号,告诉外设是读还是写,准备数据传输。
T3 状态:数据传输,读写数据正在进行,可能需要等待。
T4 状态:结束本周期,收尾。

二、8086 的工作模式

最大最小模式

最小模式:就是在系统中只有 8086/8088 一个微处理器,在这种系统中,所有的总线控制信号都直接由 8086/8088 产生,因此,系统中的总线控制电路可减到最少。

最大模式:用在中等或大型的 8086/8088 系统中,在最大模式系统中,其中一个主处理器就是 8086/8088, 其他的处理器被称为协处理器,协助主处理器工作。

8086 的操作与时序

系统的复位与启动

内部寄存器 复位时的值
标志寄存器 清零
指令指针(IP) 0000H
CS 寄存器 FFFFH
DS 寄存器 0000H
SS 寄存器 0000H
ES 寄存器 0000H
指令队列
其他寄存器 0000H

复位后,从 FFFF0H 处开始执行程序。

由于标志寄存器被清零,IF = 0,从 INTR 引脚进入的可屏蔽中断都得不到允许。

中断操作和中断系统

8086 的中断分类

8086/8088 可以处理 256 种不同的中断,每个中断对应一个类型码,所以 256 种中断对应的中断类型码为 0 ~ 256

  1. 硬件中端
    a、非屏蔽中断 NMI
    b、可屏蔽中断 INTR(受 IF 控制)
  2. 软件中断(由 INT n 触发)

中断向量和中断向量表

中断向量:

  • 就是中断处理子程序的入口地址,每个中断类型对应一个中断向量。一个中断向量占 4 个储存单元。

其中,前 2 个单元存放中断处理子程序入口地址的偏移量,低位在前,高位在后,后 2 个单元存放中断处理子程序入口地址的段地址,同样也在低前高后。

$256 * 4 = 1024$, 占用 0 段的 0000~03FFH 区域


汇编

重点掌握寻址方式,具体命令根据之后芯片初始化掌握即可。

寻址方式

  1. 立即数寻址方式:直接跟具体的值
    MOV AL, 05H;
    MOV AX, 0102H;

  2. 寄存器寻址方式:操作数放在 CPU 的内存寄存器中
    MOV AX, 1234H;
    MOV BX, AX;

  3. 储存器寻址方式:指令中给出操作数的贮存地址信息,段地址在默认的或用段超越前缀指定的段寄存器中。

    • 直接寻址方式:有效地址在指令中直接给出。 MOV AX, [2000H];
      MOV AX, ES:[2000H];
    • 寄存器间接寻址方式:有效地址存放在基址寄存器 BX 或变址寄存器 SI,DI 中
      MOV AX, [SI];
    • 寄存器相对寻址方式:有效地址是寄存器内容与有效位移量之和
      MOV AX, [DI + 06H];
      MOV AX, [BP + 06H];
    • 基址变址寻址方式:有效地址由基址寄存器(BX/BP)的内容加上变址寄存器(SI/DI)的内容构成。 MOV AX, [BX + SI];
      MOV AX, [BP + DI];
      MOV AX, DS:[BP + DI];
    • 相对基址变址寻址方式:有效地址是基址寄存器(BX/BP),变址寄存器(SI/DI)与一个位移量之和
      MOV AX, [BX + SI + 06H];

例题

已知寄存器与内存内容如下:

  • 寄存器:

    • (BX) = 2000H
    • (BP) = 2000H
    • (SI) = 1000H
    • (DS) = 3000H
    • (SS) = 4000H
  • 内存内容(物理地址):

地址 内容 地址 内容
32000H 00H 32001H 11H
32006H 22H 32007H 33H
33000H 66H 33001H 77H
33006H 88H 33007H 99H
42006H 44H 42007H 55H

执行以下指令,分别求出 AX 的值

1
2
3
4
5
6
7
8
(1) MOV AX,1234H
(2) MOV AX,BX
(3) MOV AX,[2000H]
(4) MOV AX,[BX]
(5) MOV AX,[BX+06H]
(6) MOV AX,[BP+06H]
(7) MOV AX,[BX+SI]
(8) MOV AX,[BX+SI+06H]

半导体储存器及其接口

半导体储存器的分类

分为随机存取存储器(RAM),只读存储器(ROM)

随机存取存储器

组成单元 速度 集成度 应用
SRAM(静态RAM) 触发器 小容量系统
DRAM(动态RAM) 极间电容 大容量系统
NVRAM(非易失RAM) 带微型电池 小容量非易失

只读存储器

  • 掩膜ROM:信息制作在芯片中,不可更改
  • PROM:允许一次编程,此后不可更改
  • EPROM:用紫外光擦除,擦除后可编程,并允许用户多次擦除和编程
  • EEPROM:采用加电方法在线进行擦除和编程,也可多次擦写
  • Flash Memory:能够快速擦鞋的EEPROM,但只能按块擦除

常见题型:

2732 扩展

用2732(4K * 8)扩展16K * 8的ROM (1)共需多少片2732? (2)每个芯片需要多少根地址线进行片内译码? (3)画出硬件扩展电路并写出每个芯片的地址覆盖范围。地址从0000H开始

  1. 直接相除,$16K * 8 / (4K * 8) = 4$
    需要 4 片

  2. 一块 2732 有 4K 个储存单元,对 4096 个单元逐个寻址
    $2^{12} = 4096$, 所以需要 12 根地址线(A0 ~ A11)进行片内译码
    因为整体需要做到 16K, 4 片 2732,所以还需要 2 根高位地址线(A12,A13)专门用来片选。

  3. image.png
    第一块:0000H ~ 0FFFH
    第二块:1000H ~ 1FFFH
    第三块:2000H ~ 2FFFH
    第四块:3000H ~ 3FFFH

2114 扩展

用1K * 4的2114芯片组成4K * 8的存储器系统。 1)需要多少片2114
2)共需多少根地址线
3)画出硬件电路图,并写出每组芯片的地址覆盖范围。

  1. 同上。直接相除。
    $4K * 8 / (1K * 4) = 8$,需要 8 片。

  2. 一块 2114 有 1K 个储存单元,对 1024 个单元逐个寻址
    $2^{10} = 1024$,需要 10 根地址线(A0 ~ A9)进行片内译码。
    因为一共有 4 组(2 片 4 位拓宽成 8 位),所以只需要 2 根高地址线(A10,A11)用于片选。

  3. image.png
    第一组:0000H ~ 03FFH
    第二组:0400H ~ 07FFH
    第三组:0800H ~ 0BFFH
    第四组:0C00H ~ 0FFFH


基本输入输出接口

数据传送方式

传送方式 CPU 是否参与逐字节传送 速度 硬件复杂度 适用范围
无条件传送 完全参与 最慢 最简单 少量,简单 I/O
查询传送 完全参与 简单 速度不高,时间稀疏
中断传送 不参与实际传送,只在中断时处理 较快 中等 中速外设,键盘,串口
DMA 直接储存器访问 不参与 很快 很复杂,需要 DMAC 大量高速数据,如磁盘
I/O 处理机 不参与 最高 最复杂 主机负载重,大型机/服务器
  • 无条件传送 原理:CPU 执行 IN/OUT 指令,无条件进行数据传送。
    优点:最简单,不需要复杂硬件。
    缺点:CPU 完全被占用;不能保证外设准备好 (可能读写无效数据);速度极低
    适用范围:极简单,偶发性IO,如 LED,拔码开关等

  • 查询传送 原理:CPU 不断查询外设状态寄存器,准备好再访问
    优点:比无条件传送可靠(有状态判断);硬件简单
    缺点:CPU 需要轮询等待(效率仍低);不适合告诉外设
    适用范围:轻量,速度要求不高的外设,如简单串口接收

  • 中断驱动传送 原理:外设准备好时发中断 -> CPU 响应 -> 进行数据传送
    优点:CPU 不必等待,可执行其他任务;使用多任务系统;响应及时
    缺点:中断频繁增加 CPU 开销;对系统时序有要求
    适用范围:键盘,鼠标,串口,定时器等

  • DMA 直接存储器访问 原理:DMA 控制器(DMAC)向 CPU 申请系统总线 -> 获得总线后,外设直接与内存交换数据
    优点:数据传送不经过 CPU (高速),CPU 负担大大减轻;适合块数据传输
    缺点:硬件较复杂;CPU 会被暂停总线;双方必须协调总线使用
    适用范围:高速,大批量数据传输,如磁盘、硬盘等

  • I/O 处理机 原理:独立的 I/O CPU (通道) 执行“通道程序”,自主负责数据传送、缓冲、排队等任务
    优点:CPU 几乎完全从 I/O 中解放;I/O 子系统并行运行;最适合大型系统
    缺点:硬件最复杂;主要用于大型机架构
    适用范围:大型机、服务器、高性能系统

8237A

端口地址的对应关系

A3 A2 A1 A0 功能说明
0 0 0 0 通道 0 基地址/当前地址寄存器
0 0 0 1 通道 0 基字节/当前字节寄存器
0 0 1 0 通道 1 基地址/当前地址寄存器
0 0 1 1 通道 1 基字节/当前字节寄存器
0 1 0 0 通道 2 基地址/当前地址寄存器
0 1 0 1 通道 2 基字节/当前字节寄存器
0 1 1 0 通道 3 基地址/当前地址寄存器
0 1 1 1 通道 3 基字节/当前字节寄存器

控制器寄存器访问控制表

CS A3 A2 A1 A0 IOR̅ IOW̅ 功能
0 1 0 0 0 0 1 读状态寄存器
0 1 0 0 1 1 0 写控制寄存器
0 1 0 0 1 0 0 写请求寄存器
0 1 0 1 0 1 0 写单通道屏蔽寄存器
0 1 0 1 1 1 0 写方式寄存器
0 1 1 0 0 1 0 先/后触发器清 0
0 1 1 0 1 0 1 读暂存寄存器
0 1 1 0 1 0 0 总清
0 1 1 1 0 1 0 清屏蔽寄存器
0 1 1 1 1 1 0 写 4 通道屏蔽寄存器

DMA 通道的 DMA 传送编程

通常分为五步

  1. 将存储器起始地址写入地址寄存器(如果采用地址减量工作,则是结尾地址)
  2. 将本次 DMA 传送的数据个数写入字节数寄存器(个数要减 1)
  3. 确定通道的工作方式,写入方式寄存器
  4. 写入屏蔽寄存器复位通道屏蔽位,允许 DMA 请求
  5. 写命令字

例题

用0通道从磁盘输入32KB的数据块,传送至内存8000H开始的区域(增量传送),采用块传送方式,传送完不自动预置,固定优先级,外设的DREQ和DACK均为高电平有效。8237的口址为00~0FH

代码如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
MOV AL,00H
OUT 00H,AL        ; 设置 DMA 通道 0 基地址低字节 = 00H(目的地址 8000H 的低 8 位)

MOV AL,80H
OUT 00H,AL        ; 设置 DMA 通道 0 基地址高字节 = 80H(目的地址 8000H 的高 8 位)

MOV AL,0FFH
OUT 01H,AL        ; 设置 DMA 通道 0 计数器低字节 = FFH
                  ;(32KB = 8192 字 = 8000H 字节 → 计数器 = 字数 - 1 = 8000H -1 = 7FFFH →低字节 FFH)

MOV AL,7FH
OUT 01H,AL        ; 设置 DMA 通道 0 计数器高字节 = 7FH
                  ; 完整计数值 = 7FFFH → 32KB 传送字节数

MOV AL,84H
OUT 0BH,AL        ; 写 DMA 方式寄存器(Mode Register)
                  ; 84H = 1000 0100B
                  ; D7~D6 = 10 → 固定优先级
                  ; D5~D4 = 00 → 通道 0
                  ; D3 = 0 → 写(从外设 → 内存)
                  ; D2~D0 = 100 → 块传送,不自动预置,增量方式

MOV AL,00H
OUT 0AH,AL        ; 清除通道屏蔽寄存器 → 使能通道 0(允许通道 0 工作)

MOV AL,80H
OUT 08H,AL        ; 向外设屏蔽寄存器写 80H
                  ; 设置 DREQ/DACK 为高电平有效(8237A 默认输入 ACTIVE HIGH)

8259A

8259A 的基本功能

  • 一片 8259A 可以管理 8 级中断,可扩展至 64 级
  • 每一级中断都可以单独被屏蔽或允许
  • 在中断响应周期,可提供相应的中断类型号
  • 8259A 设计有多种工作方式,可通过编程选择

8259A 的工作方式

1、设置优先级的方式

  1. 全嵌套方式:最常用,其中断请求按优先级 IR0 ~ IR7 处理,0 级中断优先级最高
  2. 特殊全嵌套方式:和 1 基本相同,本质区别是同级可以中断。应用于 8259A 级联系统中。
  3. 优先级自动循环方式:用在系统中多个中断源有限级相等的场合。一个中断受到服务后有限级自动降到最低。
    初始优先级:IR0, IR1, …, IR7
  4. 优先级特殊循环方式:与 3 的不同在于,初始的最低优先级由编程确定

2、屏蔽中断源方式

  1. 普通屏蔽方式
  2. 特殊屏蔽方式:可把正在运行的中断屏蔽

3、结束中断处理的方式(即令 ISn 位清零)

  1. 中断自动结束方式
  2. 一般的中断结束方式
  3. 特殊的中断结束方式

4、连接系统总线的方式

  1. 缓冲方式
  2. 非缓冲方式

5、引入中断请求的方式

  1. 边沿触发方式
  2. 点平触发方式
  3. 中断查询方式

8259A 的初始化命令字和操作命令字

两个端口地址,一奇一偶

偶地址对应:ICW1,OCW2,OCW3

奇地址对应:ICW2,ICW3,ICW4,OCW1

1、8259A 的初始化命令字(须按顺序填写)

  1. ICW1:芯片控制初始化命令字
    image.png
  2. ICW2:设置中断类型码
    image.png
  3. ICW3:标志主片/从片,写入奇地址
    image.png 若某一引脚连有从片,则对应位为 1,否则为 0
    image.png 后三位决定从片的输出端INT连在主片的哪个中断请求输入引脚上
  4. ICW4:方式控制初始化,写入奇地址,只有 ICW1 的 D0=1 时,才设置 ICW4
    image.png

例题

设端口地址为20H,21H,边缘触发,打印机连到8259A的IR7上,采用非缓冲方式,中断类型码为0FH

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CLI                     ; 关中断,初始化 8259A 前必须禁止 CPU 响应中断

MOV AL,13H
OUT 20H,AL              ; 发送 ICW1 到主片:
                        ; 13H = 0001 0011B
                        ; D4 = 1 → 需要 ICW4
                        ; D3 = 0 → 边沿触发方式
                        ; D1 = 1 → 单片 8259A(不级联)
                        ; D0 = 1 → 必须为 1(初始化命令)

MOV AL,0FH
OUT 21H,AL              ; 发送 ICW2(中断类型码 = 0FH)
                        ; 表示主片的 IR0~IR7 对应的中断向量从 0FH 开始:
                        ; IR0 → 0FH
                        ; IR1 → 10H
                        ; ...
                        ; IR7 → 16H(打印机使用 IR7,因此类型码 = 16H)

MOV AL,01H
OUT 21H,AL              ; 发送 ICW4:
                        ; 01H = 0000 0001B
                        ; D0 = 1 → 8086/8088 模式
                        ; 非缓冲(默认),普通嵌套,不使用自动结束

主片的端口地址为20H,21H,中断类型码为08-0FH 从片的端口地址为A0H,A1H,中断类型码为70-77H
从片连接在主片的IR2上。
采用缓冲方式,边缘触发

主片:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CLI
                        ; 关闭中断,初始化 8259A 前必须禁止 CPU 响应中断

MOV AL,11H
OUT 20H,AL              ; ICW1(主片)
                        ; 11H = 0001 0001B
                        ; D4=1 → 需要 ICW4
                        ; D3=0 → 边沿触发
                        ; D2=0 → 级联模式(非单片)
                        ; D0=1 → 必须为 1(初始化命令)

MOV AL,08H
OUT 21H,AL              ; ICW2(主片)
                        ; 中断向量基地址 = 08H
                        ; 主片 IR0~IR7 对应 08H~0FH

MOV AL,04H
OUT 21H,AL              ; ICW3(主片)
                        ; 04H = 0000 0100B
                        ; 仅 IR2 = 1 → 表示从片连接在主片 IR2

MOV AL,1DH
OUT 21H,AL              ; ICW4(主片)
                        ; 1DH = 0001 1101B
                        ; D0=1 → 8086/8088 模式
                        ; D1=0 → 非自动结束
                        ; D2=1 → 缓冲方式
                        ; D3=1 → 主片(Buffer Master)
                        ; D4=1 → 特殊全嵌套模式(SN)

从片:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
MOV AL,11H
OUT 0A0H,AL             ; ICW1(从片)
                        ; 同主片:边沿触发,需要 ICW4,级联方式

MOV AL,70H
OUT 0A1H,AL             ; ICW2(从片)
                        ; 中断向量基地址 = 70H
                        ; 从片 IR0~IR7 对应 70H~77H

MOV AL,02H
OUT 0A1H,AL             ; ICW3(从片)
                        ; 02H = 0000 0010B
                        ; 表示从片自身接到主片的 IR2(ID=2)

MOV AL,09H
OUT 0A1H,AL             ; ICW4(从片)
                        ; 09H = 0000 1001B
                        ; D0=1 → 8086/8088 模式
                        ; D2=1 → 缓冲方式
                        ; D3=0 → 从片(Buffer Slave)
                        ; D1=0 → 非自动结束

8255A

外设数据端口

  • 端口A:$PA_0 - PA_7$ A组,支持工作方式 0, 1, 2
    常作数据端口,功能最强大

  • 端口B:$PB_0 - PB_7$ B组,支持工作方式 0, 1
    常作数据端口

  • 端口C:$PC_0 - PC_7$ 仅支持工作方式 0
    A组控制高 4 位 $PC_4 - PC_7$
    B组控制低 4 位 $PC_0 - PC_3$
    可作数据,状态和控制端口
    分两个 4 位,每位可独立操作
    控制最灵活,最难掌握

初始化

8255 的初始化只需要写控制字即可

image.png

要求:端口地址:fff8h-fffeh A端口:方式1输入
C端口上半部:输出,C口下半部:输入
B端口:方式0输出

方式控制字:10110001B或B1H

1
2
3
mov dx,0fffeh    ; 控制端口地址 FFFEH
mov al,0b1h      ; 方式控制字 B1H
out dx,al        ; 输出到控制端口

控制灯

端口地址为60h,61h,62h,63h,利用开关控制灯

image.png

1
2
3
4
5
6
7
8
MOV AL,82H          ; 控制字 82H:端口A方式0输出,端口B方式0输出,
                    ; 端口C下半部输出、上半部输出(用于键盘/指示灯控制)
OUT 63H,AL          ; 将控制字写入 8255A 的控制端口(63H)

TT:
IN AL,61H           ; 从端口B(61H) 读取开关状态(或键盘/输入设备状态)
OUT 60H,AL          ; 将读到的值直接输出到端口A(60H),实现“灯跟着开关变”
JMP TT              ; 无限循环,持续监视输入并实时输出

8253

6 种工作方式

  1. 计数中断结束
  2. 可编程单稳脉冲
  3. 频率发生器(分频器)
  4. 方波发生器
  5. 软件触发选通信号
  6. 硬件触发选通信号

image.png

例题

8253的端口地址为308H,30AH,30CH,30EH,3个通道使用同一个输入时钟,频率=2MHZ,要求如下: 用计数器0采用硬件触发,输出宽度=时钟周期的单脉冲,定时常数为36
用计数器1输出频率为2KHZ的对称方波
用计数器2产生宽度为0.6ms的单脉冲

CLK0、CLK1、CLK2 都接同一个 2MHz 时钟源,因此时钟周期 $T = 1/2 MHz = 0.5 μs$

计数器 0 采用方式 5,BCD 计数,将 36 转化成 BCD 码,0011 0110B 36H,只需要写入低字节,所以控制字 00011011B = 1BH

计数器 1 采用方式 3,BCD 计数,计数常数 $2MHz / 2KHz = 1000 = 1000H$,需要写入高低两个字节,控制字为 0111 0111B = 77H

计数器 2 采用方式 1,BCD 计数,常数为 $0.6ms / 0.5μs = 1200 = 1200H$,同上写入高低两字节,控制字 1011 0011B = B3H

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
; 计数器0:方式5,BCD,N0 = 36
mov dx,30eh        ; 控制字口
mov al,1bh         ; SC0, 低字节,方式5,BCD
out dx,al

mov dx,308h        ; 计数器0端口
mov al,36h         ; 36(十进制) 的 BCD 码
out dx,al          ; 只装低字节

; 计数器1:方式3,BCD,N1 = 1000
mov dx,30eh
mov al,77h         ; SC1,先低后高,方式3,BCD
out dx,al

mov dx,30ah        ; 计数器1端口
mov al,00h         ; N1 低字节 = 00H
out dx,al
mov al,10h         ; N1 高字节 = 10H(BCD“10”)
out dx,al

; 计数器2:方式1,BCD,N2 = 1200
mov dx,30eh
mov al,0b3h        ; SC2,先低后高,方式1,BCD
out dx,al

mov dx,30ch        ; 计数器2端口
mov al,00h         ; N2 低字节 = 00H
out dx,al
mov al,12h         ; N2 高字节 = 12H(BCD“12”)
out dx,al

串行通信接口

异步通信与同步通信

异步通信

串行通信时的数据、控制和状态信息都使用同一根信号线传送。

收发双方必须遵守共同的通信协议(通信规程),才能解决传送速率、信息格式。位同步、字符同步、数据校验等问题。

串行异步通信以字符为单位进行传输,其通信协议是起止式异步通信协议。

同步通信

以一个数据块为传送单位,每个数据块附加 1 个或 2 个同步字符,最后以校验字符结束

同步通信的数据传输效率和传输速率较高,但硬件电路比较复杂

串行同步通信主要应用在网络当中

最常使用高级数据链路控制协议 HDLC

image.png

8251

异步模式下的初始化

端口地址为50H,52H 模式字:字符为7位,1个偶校验,2个停止位,波特率因子为16
控制字:清除出错标志,请求发送信号有效,DTR有效,以通知modem,TxEN有效,RxE有效

1
2
3
4
5
MOV AL,0FAH           ; 将模式字 0FAH(控制字)加载到 AL 寄存器
OUT 52H,AL             ; 将模式字 0FAH 写入控制寄存器(52H),配置字符格式,校验,停止位,波特率因子等

MOV AL,37H            ; 将控制字 37H 加载到 AL 寄存器
OUT 52H,AL             ; 将控制字 37H 写入控制寄存器(52H),设置:清除错误标志,发送请求信号,DTR,TxEN,RxE

同步模式下的初始化

模式字:同步字符数目为2,内同步,偶校验,7位数据位(38H),同步字符为16H 控制字:检索同步字符,清除出错标志,请求发送信号有效,DTR有效,以通知modem,TxEN有效,RxE有效

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
MOV AL,38H             ; 将模式字 38H 加载到 AL 寄存器
OUT 52H, AL            ; 将模式字 38H 写入控制寄存器(52H),配置同步方式、数据位、校验位、字符数等

MOV AL,16H             ; 将同步字符 16H 加载到 AL 寄存器
OUT 52H, AL            ; 将同步字符 16H 写入控制寄存器(52H),设置同步字符

OUT 52H, AL            ; 再次写入同步字符 16H,保持同步设置

MOV AL,0B7H            ; 将控制字 0B7H 加载到 AL 寄存器
OUT 52H, AL            ; 将控制字 0B7H 写入控制寄存器(52H),配置发送使能、接收使能、清除错误等

"""

五大芯片初始化步骤简略版

仅供参考,只用于速通

8237A

  1. 存储器起始地址写入地址寄存器

  2. 本次传入字节个数(要减一)写入字节数寄存器

  3. 工作方式字写入方式寄存器

  4. 写屏蔽器

  5. 写命令字

8259A

单片和主片需要 CLI

单片初始化:依次写 ICW1,ICW2,ICW4

双片初始化:依次写 ICW1,ICW2,ICW3,ICW4(主片的$D_4$为 1)

8255A

初始化

将控制字写入端口(最高那位)

LED 控制

先写控制字;

TT 程序中:用 IN 从输入口读入 AL,输出到输出口

8253

3 个计数器步骤相同,都需要先计算出常数

然后先在最后一个端口传方法字,再在自己对应端口传常数

8251

异步:模式字 + 控制字

同步:模式字 + 同步字符(有几个输出几个)+ 控制字

Licensed under CC BY-NC-SA 4.0
最后更新于 Nov 27, 2025 21:34 +0800
发表了95篇文章 · 总计15万2千字
永远相信美好的事情即将发生。
使用 Hugo 构建
主题 StackJimmy 设计