574 lines
22 KiB
Markdown
574 lines
22 KiB
Markdown
---
|
||
tags: [试题, 接口与通讯技术]
|
||
create time: 2026-06-26 22:20
|
||
---
|
||
|
||
# 试题 C — 武汉科技大学《接口与通讯技术》
|
||
|
||
## 概述
|
||
|
||
- **课程**:接口与通讯技术(A 卷)
|
||
- **学校**:武汉科技大学
|
||
- **题型**:填空题、单项选择题、判断题、程序设计题、应用题
|
||
- **知识点**:8253/8254、8255A、8259A、ISA/EISA 总线、ADC0809、8086 中断系统
|
||
|
||
> [!tip] 学习建议
|
||
> 本卷判断题涉及 ISA/EISA 总线细节,程序设计题覆盖 8253 方波与 255A 端口输出。建议重点理解 8086 中断向量表布局和 8259A 初始化流程。
|
||
|
||
## 正文
|
||
|
||
### 一、填空(每空 1 分,共 20 分)
|
||
|
||
1. ISA 总线与 EISA 总线的数据总线宽度分别为( )位和( )位。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:(1)16 (2)32
|
||
>
|
||
> 解析:ISA 总线(Industry Standard Architecture)数据总线宽度为 16 位;EISA 总线(Extended ISA)是对 ISA 的扩展,数据总线宽度为 32 位。
|
||
|
||
2. 16 位 I/O 端口寻址中,I/O 端口地址范围是( );其地址线至少需要( )根。若 A₉ = 1,则选中 I/O 端口地址范围为( )。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:(1)0000H~FFFFH (2)16 (3)200H~3FFH
|
||
>
|
||
> 解析:16 位 I/O 端口地址范围为 0000H~FFFFH,需要 16 根地址线。A₉ = 1 时,地址范围对应高 10 位中第 9 位为 1,即 200H~3FFH(10 位地址空间中 A₉=1 的部分)。
|
||
|
||
3. 在 8086 CPU 中,引脚信号( )和( )决定了数据在总线上传送的方向。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:(1)DT/R (2)DEN
|
||
>
|
||
> 解析:DT/R(Data Transmit/Receive)控制数据传送方向,高电平为发送,低电平为接收;DEN(Data Enable)为数据允许信号,控制数据收发器的使能。
|
||
|
||
4. 在 8259A 初始化中,中断请求触发方式有( )触发和( )触发两种方式。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:(1)边沿 (2)电平
|
||
>
|
||
> 解析:8259A 的 ICW1 的 D3 位(LTIM)决定触发方式:0 为边沿触发(上升沿有效),1 为电平触发(高电平有效)。
|
||
|
||
5. 在 8086 的中断向量表中,4 个字节分别存放( )和( )。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:(1)中断服务程序的偏移地址(IP) (2)中断服务程序的段地址(CS)
|
||
>
|
||
> 解析:8086 中断向量表中每个中断类型占 4 个字节,低 2 字节存放中断服务程序的偏移地址(IP),高 2 字节存放段基地址(CS)。
|
||
|
||
6. 在 EISA 总线的数据传输过程中,若需要插入等待周期,则插入的是( )周期。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:等待
|
||
>
|
||
> 解析:在 EISA 总线传输中,当低速设备来不及处理数据时,可通过插入等待周期(Wait State)来延长总线周期,以便设备完成数据操作。
|
||
|
||
7. 8253 的内部结构包含( )个计数器,每个计数器都有( )条输入线和( )条输出线。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:(1)3 (2)1 (3)1
|
||
>
|
||
> 解析:8253 内部有 3 个独立的 16 位计数器(计数器 0、1、2),每个计数器有 1 条时钟输入线(CLK)和 1 条输出线(OUT),另有 1 条门控信号线(GATE)。
|
||
|
||
8. 在 8086 CPU 中,地址 8000H:3000H 对应的物理地址为( )。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:83000H
|
||
>
|
||
> 解析:物理地址 = 段地址 × 16 + 偏移地址 = 8000H × 10H + 3000H = 80000H + 3000H = 83000H。
|
||
|
||
9. 8255 的端口 A 有( )种工作方式,端口 B 有( )种工作方式,端口 C 有( )种工作方式。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:(1)3 (2)2 (3)1
|
||
>
|
||
> 解析:8255A 的端口 A 可工作在方式 0(基本 I/O)、方式 1(选通 I/O)、方式 2(双向传输)共 3 种;端口 B 可工作在方式 0 和方式 1 共 2 种;端口 C 仅工作在方式 0(基本 I/O),但可被分为高 4 位和低 4 位两组独立使用。
|
||
|
||
10. ISA 总线是 EISA 总线的( )位版本,EISA 总线的地址线为( )位。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:(1)16 (2)32
|
||
>
|
||
> 解析:ISA 总线数据总线为 16 位,是 EISA 总线的 16 位版本。EISA 总线地址线为 32 位,可寻址 4GB 地址空间。
|
||
|
||
### 二、单项选择题(每题 2 分,共 20 分)
|
||
|
||
1. 在微型计算机系统中,CPU 访问 I/O 接口的方式有以下哪几种( )。
|
||
|
||
- A. 独立编址方式和统一编址方式
|
||
- B. 独立编址方式
|
||
- C. 统一编址方式
|
||
- D. 以上都不对
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:A
|
||
>
|
||
> 解析:CPU 访问 I/O 接口有两种方式:独立编址方式(I/O 端口有独立的地址空间,使用专门的 I/O 指令)和统一编址方式(存储器映射方式,I/O 端口与存储器共享地址空间)。
|
||
|
||
2. 8253 内部计数器是( )。
|
||
|
||
- A. 8 位计数器
|
||
- B. 16 位计数器
|
||
- C. 10 位计数器
|
||
- D. 20 位计数器
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:B
|
||
>
|
||
> 解析:8253 的每个计数器都是 16 位计数器,计数范围为 0~65535,可分两次读写(先低字节后高字节)。
|
||
|
||
3. 8253 的 3 个计数器中,( )计数器是 16 位的。
|
||
|
||
- A. 计数器 0
|
||
- B. 计数器 1
|
||
- C. 计数器 2
|
||
- D. 3 个计数器都是 16 位
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:D
|
||
>
|
||
> 解析:8253 的 3 个计数器(计数器 0、计数器 1、计数器 2)都是 16 位计数器,结构完全相同。
|
||
|
||
4. 下列对 8259A 初始化的叙述中,( )是不正确的。
|
||
|
||
- A. ICW₁ 写入偶地址端口
|
||
- B. 8259A 初始化编程必须按顺序写入 ICW₁、ICW₂、ICW₃、ICW₄
|
||
- C. ICW₁ 写入奇地址端口
|
||
- D. ICW₄ 是中断命令字
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:C
|
||
>
|
||
> 解析:8259A 初始化时,ICW1 写入偶地址端口(A0=0),ICW2/ICW3/ICW4 写入奇地址端口(A0=1)。因此 C 选项"ICW1 写入奇地址端口"是错误的。
|
||
|
||
5. 8255A 控制字的最高位 D₇ = 1 表示( )。
|
||
|
||
- A. 方式控制字
|
||
- B. 位控制字
|
||
- C. 状态控制字
|
||
- D. 以上都不对
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:A
|
||
>
|
||
> 解析:8255A 的控制字中,D7=1 表示方式控制字(用于设置各端口的工作方式),D7=0 表示位控制字(用于对端口 C 的某一位进行置位/复位操作)。
|
||
|
||
6. 在 8086 系统中,已知 DS = 2000H,SS = 5000H,SP = 3000H,则堆栈栈顶的物理地址为( )。
|
||
|
||
- A. 23000H
|
||
- B. 53000H
|
||
- C. 35000H
|
||
- D. 7000H
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:B
|
||
>
|
||
> 解析:堆栈栈顶的物理地址 = SS × 16 + SP = 5000H × 10H + 3000H = 50000H + 3000H = 53000H。堆栈段由 SS 和 SP 共同决定,与 DS 无关。
|
||
|
||
7. 下列对中断描述错误的是( )。
|
||
|
||
- A. 单片机中,NMI 的中断请求无法被屏蔽
|
||
- B. 单片机中,8 级中断中,IR₀ 的优先级最高
|
||
- C. 中断服务结束时,必须执行 EOI 命令来清除 ISR 中相应的位
|
||
- D. 8086 系统中地址 0000H~003FH 是非屏蔽中断
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:D
|
||
>
|
||
> 解析:在 8086 系统中,地址 00000H~0003FH 是中断向量表区域,存放的是中断类型 0~15 的中断向量(共 16 个中断类型),并非仅是非屏蔽中断。这些类型中既包含除法错(类型 0)、NMI(类型 2)等非屏蔽中断,也包含可屏蔽中断(如类型 8~15 对应 8259A 的 IR0~IR7)。因此 D 选项描述错误。
|
||
|
||
8. 在使用 8259A 进行中断控制时,若 CPU 在执行中断服务程序期间,又有新的中断请求到来,则系统响应中断的条件是( )。
|
||
|
||
- A. 新的中断请求优先级高于正在执行的中断服务程序
|
||
- B. 新的中断请求优先级低于正在执行的中断服务程序
|
||
- C. 无条件响应
|
||
- D. 无条件不响应
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:A
|
||
>
|
||
> 解析:在 8259A 的全嵌套方式下,CPU 只有在新的中断请求优先级高于当前正在服务的中断时才会响应(即允许中断嵌套)。若优先级相同或更低,则不会响应。
|
||
|
||
9. 8253 方式控制字中某位为 0 时,表示采用( )。
|
||
|
||
- A. 二进制计数
|
||
- B. BCD 码计数
|
||
- C. 十进制计数
|
||
- D. 16 进制计数
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:A
|
||
>
|
||
> 解析:8253 方式控制字的 D0 位为计数方式选择位,D0=0 采用二进制计数(16 位二进制),D0=1 采用 BCD 码计数(4 位十进制)。
|
||
|
||
10. 在 EISA 总线中,数据总线的宽度为( )。
|
||
|
||
- A. 8 位
|
||
- B. 16 位
|
||
- C. 32 位
|
||
- D. 64 位
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:C
|
||
>
|
||
> 解析:EISA(Extended Industry Standard Architecture)总线的数据总线宽度为 32 位,是对 ISA 总线(16 位)的扩展。
|
||
|
||
### 三、判断题(每题 2 分,共 20 分)
|
||
|
||
1. 在 8086 CPU 中,当执行 MOV 指令时,会产生总线周期。( )
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:×(错误)
|
||
>
|
||
> 解析:当 MOV 指令在寄存器之间传送数据时(如 MOV AX, BX),操作在 CPU 内部完成,不产生总线周期。只有当 MOV 指令涉及存储器或 I/O 端口操作时才会产生总线周期。因此题目中笼统地说"执行 MOV 指令时会产生总线周期"是错误的。
|
||
|
||
2. 8253 的内部计数器是减计数器。( )
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:√(正确)
|
||
>
|
||
> 解析:8253 的内部计数器采用递减计数方式,即装入初始值后,每来一个时钟脉冲计数值减 1,减到 0 时产生输出信号。
|
||
|
||
3. 在 EISA 总线中,数据总线的宽度为 16 位。( )
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:×(错误)
|
||
>
|
||
> 解析:EISA 总线的数据总线宽度为 32 位,不是 16 位。16 位数据总线是 ISA 总线的特征。
|
||
|
||
4. 单片机中,且该中断为非屏蔽中断,NMI 的中断请求无法被屏蔽。( )
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:√(正确)
|
||
>
|
||
> 解析:NMI(Non-Maskable Interrupt)即非屏蔽中断,其请求无法通过软件手段(如 CLI 指令或中断屏蔽位)进行屏蔽。只要 NMI 引脚出现有效信号,CPU 就必须响应。
|
||
|
||
5. 在 8086 中断向量表中,地址 0000H~003FH 是可屏蔽中断,地址 0040H~03FFH 是非屏蔽中断。( )
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:×(错误)
|
||
>
|
||
> 解析:8086 中断向量表位于 00000H~003FFH,共 1KB。其中 00000H~0003FH 存放中断类型 0~15 的向量,包含非屏蔽中断(NMI,类型 2)和部分可屏蔽中断向量(类型 8~15);00040H~003FFH 存放中断类型 16~255 的向量。题目将地址区域与中断类型的对应关系完全说反了。
|
||
|
||
6. 8253 内部计数器的输入时钟频率为 1MHz,当计数初值为 10000 时,输出方波频率为 100Hz。( )
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:√(正确)
|
||
>
|
||
> 解析:输出频率 = 输入时钟频率 / 计数初值 = 1MHz / 10000 = 100Hz。在方式 3(方波发生器)下,计数初值即为分频系数,计算正确。
|
||
|
||
7. 在使用 8259A 进行中断控制时,若 CPU 在执行中断服务程序期间,又有新的中断请求到来,则系统响应中断的条件是新的中断请求优先级高于正在执行的中断服务程序。( )
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:√(正确)
|
||
>
|
||
> 解析:在全嵌套方式下,8259A 只有在新的中断请求优先级高于当前正在服务的中断时,才会向 CPU 发出中断请求。CPU 响应后,高优先级中断可以打断低优先级中断服务程序的执行。
|
||
|
||
8. 在 EISA 总线中,数据总线的宽度为 32 位。( )
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:√(正确)
|
||
>
|
||
> 解析:EISA(Extended ISA)总线是对 ISA 总线的扩展,数据总线宽度为 32 位,是 ISA 总线(16 位)的 2 倍。
|
||
|
||
9. 在 8086 CPU 中,当执行 MOV 指令时,不会产生总线周期。( )
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:√(正确)
|
||
>
|
||
> 解析:当 MOV 指令在寄存器之间传送数据时(如 MOV AX, BX),操作完全在 CPU 内部完成,不需要访问总线,因此不会产生总线周期。本题强调的是寄存器间的 MOV 操作。
|
||
|
||
10. 8253 方式控制字的最高位为 D₇,当 D₇ = 1 时,表示采用 BCD 码计数。( )
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:×(错误)
|
||
>
|
||
> 解析:8253 方式控制字中,BCD 计数方式由最低位 D0 控制:D0=1 为 BCD 码计数,D0=0 为二进制计数。D7 位是计数器选择位的一部分(D7D6 用于选择计数器 0/1/2),与 BCD 计数方式无关。
|
||
|
||
### 四、程序设计题(每题 5 分,共 20 分)
|
||
|
||
1. 在一个数据段中定义了如下字符串,请编程序在字符串中查找第一个 'A' 字符并统计 'A' 的个数。已知字符串首地址为 STRING,字符串长度为 100。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:
|
||
>
|
||
> ```asm
|
||
> DATA SEGMENT
|
||
> STRING DB 'Hello, Assembly language programming...', 0 ; 示例字符串
|
||
> LEN EQU 100 ; 字符串长度
|
||
> COUNT DB 0 ; 统计 'A' 的个数
|
||
> DATA ENDS
|
||
>
|
||
> CODE SEGMENT
|
||
> ASSUME CS:CODE, DS:DATA
|
||
>
|
||
> START:
|
||
> MOV AX, DATA
|
||
> MOV DS, AX
|
||
>
|
||
> LEA SI, STRING ; SI 指向字符串首地址
|
||
> MOV CX, LEN ; 计数器 = 字符串长度
|
||
> MOV BL, 0 ; BL 存储 'A' 的出现次数
|
||
> MOV DL, 'A' ; DL 存储要查找的字符
|
||
>
|
||
> SCAN:
|
||
> MOV AL, [SI] ; 取当前字符
|
||
> CMP AL, DL ; 与 'A' 比较
|
||
> JNE NEXT ; 不相等则跳过
|
||
> INC BL ; 相等则计数加 1
|
||
>
|
||
> NEXT:
|
||
> INC SI ; 指向下一个字符
|
||
> LOOP SCAN ; CX 减 1,未到 0 则继续
|
||
>
|
||
> MOV COUNT, BL ; 保存统计结果
|
||
>
|
||
> MOV AH, 4CH
|
||
> INT 21H ; 返回 DOS
|
||
> CODE ENDS
|
||
> END START
|
||
> ```
|
||
>
|
||
> 解析:程序通过逐个扫描字符串中的字符,与目标字符 'A' 进行比较。使用 LOOP 指令实现循环控制,CX 初值为字符串长度 100。每次匹配成功则 BL 加 1,扫描完成后将统计结果存入 COUNT 变量。
|
||
|
||
2. 用 8253 产生方波,方波频率为 1kHz,已知输入时钟频率为 1.19318MHz,写出初始化程序。端口地址为 40H~43H。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:
|
||
>
|
||
> 计数初值 = 1193180 / 1000 ≈ 1193 = 04A9H
|
||
>
|
||
> 控制字:计数器 0、先低后高、方式 3(方波)、二进制计数 → 36H
|
||
>
|
||
> ```asm
|
||
> MOV AL, 36H ; 控制字:计数器0,方式3,二进制计数
|
||
> OUT 43H, AL ; 写入控制寄存器
|
||
>
|
||
> MOV AX, 04A9H ; 计数初值 = 1193
|
||
> OUT 40H, AL ; 先写低字节
|
||
> MOV AL, AH
|
||
> OUT 40H, AL ; 再写高字节
|
||
> ```
|
||
>
|
||
> 解析:使用 8253 计数器 0 工作在方式 3(方波发生器),计数初值 = 输入时钟频率 / 输出频率 = 1193180 / 1000 ≈ 1193 = 04A9H。控制字 36H 表示:选择计数器 0(D7D6=00)、先读写低字节再读写高字节(D5D4=11)、方式 3(D3D2=11)、二进制计数(D0=0)。
|
||
|
||
3. 用 8255 的端口 A 输出方波信号(A₀ = 0),要求方波频率为 1kHz,写出初始化程序。已知 8255 端口地址为 60H~63H。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:
|
||
>
|
||
> 8255 控制字:A 口方式 0 输出 → 80H
|
||
>
|
||
> 方波周期 = 1/1kHz = 1ms,高/低电平各 0.5ms。通过软件延时实现。
|
||
>
|
||
> ```asm
|
||
> ; 8255 初始化
|
||
> MOV AL, 80H ; 控制字:A口方式0输出
|
||
> OUT 63H, AL ; 写入控制寄存器
|
||
>
|
||
> ; 产生方波
|
||
> WAVE:
|
||
> MOV AL, 01H ; PA0 = 1(高电平)
|
||
> OUT 60H, AL
|
||
>
|
||
> MOV CX, 250 ; 延时 0.5ms(根据时钟频率调整)
|
||
> DELAY1:
|
||
> LOOP DELAY1
|
||
>
|
||
> MOV AL, 00H ; PA0 = 0(低电平)
|
||
> OUT 60H, AL
|
||
>
|
||
> MOV CX, 250 ; 延时 0.5ms
|
||
> DELAY2:
|
||
> LOOP DELAY2
|
||
>
|
||
> JMP WAVE ; 循环产生方波
|
||
> ```
|
||
>
|
||
> 解析:8255A 工作在方式 0(基本 I/O),A 口配置为输出,控制字为 80H(D7=1 方式控制字,D6D5=00 方式 0,D4=0 输出)。通过交替向 PA0 输出高/低电平并配合软件延时 LOOP 指令实现 1kHz 方波。方波周期 1ms,高/低电平各持续 0.5ms。
|
||
|
||
4. 用 8253 的计数器 0 输出频率为 1kHz 的方波,已知输入时钟频率为 1.19318MHz,写出初始化程序。端口地址为 40H~43H。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:
|
||
>
|
||
> 计数初值 = 1193180 / 1000 ≈ 1193 = 04A9H
|
||
>
|
||
> 控制字 = 36H(计数器 0、先低后高、方式 3、二进制)
|
||
>
|
||
> ```asm
|
||
> MOV AL, 36H ; 控制字:计数器0,方式3,二进制计数
|
||
> OUT 43H, AL ; 写入控制寄存器
|
||
>
|
||
> MOV AX, 04A9H ; 计数初值 = 1193
|
||
> OUT 40H, AL ; 先写低字节
|
||
> MOV AL, AH
|
||
> OUT 40H, AL ; 再写高字节
|
||
> ```
|
||
>
|
||
> 解析:本题与第 2 题参数相同,考查 8253 方式 3 方波产生的初始化编程。计数初值 = 1193180 / 1000 = 1193.18,取整为 1193 = 04A9H。控制字 36H 选择计数器 0、先低后高读写、方式 3(方波发生器)、二进制计数方式。
|
||
|
||
> [!note] 说明
|
||
> 本题与第 2 题参数相同,考查 8253 方式 3 方波产生的初始化编程。
|
||
|
||
### 五、应用题(共 20 分)
|
||
|
||
1. **(5 分)** 某 CPU 通过锁存器与 LED 显示器(共阴极接法)相连,已知锁存器端口地址为 200H,现要求显示数字 '5'(即 7 段码为 6DH),请编写完整的汇编程序。
|
||
|
||
> [!note] 附注
|
||
> 共阴极接法的 7 段码表(LEDSEG)的偏移地址为:数字 0~9 对应的段码依次为 3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:
|
||
>
|
||
> 共阴极 LED 显示器的段码为共阳极取反。数字 '5' 的 7 段码为 6DH(即 a=1, b=0, c=1, d=1, e=0, f=1, g=1)。
|
||
>
|
||
> ```asm
|
||
> DATA SEGMENT
|
||
> PORT EQU 200H ; 锁存器端口地址
|
||
> DATA ENDS
|
||
>
|
||
> CODE SEGMENT
|
||
> ASSUME CS:CODE, DS:DATA
|
||
> START:
|
||
> MOV AX, DATA
|
||
> MOV DS, AX
|
||
>
|
||
> MOV DX, PORT ; 锁存器端口地址
|
||
> MOV AL, 6DH ; 数字 '5' 的 7 段码
|
||
> OUT DX, AL ; 输出到锁存器显示
|
||
>
|
||
> MOV AH, 4CH
|
||
> INT 21H ; 返回 DOS
|
||
> CODE ENDS
|
||
> END START
|
||
> ```
|
||
>
|
||
> 解析:共阴极 LED 显示器中,某段亮对应段码位为 1。数字 '5' 需要点亮 a、c、d、f、g 段,对应二进制 01101101 = 6DH。程序将段码通过 OUT 指令送到锁存器端口 200H,锁存器保持数据驱动 LED 显示。
|
||
|
||
2. **(5 分)** 已知 8259A 的端口地址为 20H 和 21H,要求:
|
||
|
||
(1)编写初始化程序,设中断向量表中类型号为 80H 的中断入口地址为 3000H:1000H。
|
||
|
||
(2)编写中断服务程序(中断服务程序入口地址为 INT80H)。
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:
|
||
>
|
||
> **(1)8259A 初始化程序:**
|
||
>
|
||
> ```asm
|
||
> ; 8259A 初始化
|
||
> ; 端口地址:20H(偶地址,A0=0),21H(奇地址,A0=1)
|
||
>
|
||
> MOV AL, 13H ; ICW1:边沿触发,单片,需要ICW4
|
||
> OUT 20H, AL
|
||
>
|
||
> MOV AL, 80H ; ICW2:中断类型号基址 = 80H
|
||
> OUT 21H, AL
|
||
>
|
||
> MOV AL, 03H ; ICW4:8086模式,非自动EOI
|
||
> OUT 21H, AL
|
||
> ```
|
||
>
|
||
> **(2)设置中断向量表:**
|
||
>
|
||
> ```asm
|
||
> ; 将中断服务程序入口地址写入中断向量表
|
||
> ; 类型号 80H → 向量表地址 = 80H × 4 = 200H
|
||
>
|
||
> XOR AX, AX
|
||
> MOV ES, AX ; ES = 0,指向中断向量表段
|
||
>
|
||
> MOV WORD PTR ES:[200H], 1000H ; IP = 1000H
|
||
> MOV WORD PTR ES:[202H], 3000H ; CS = 3000H
|
||
> ```
|
||
>
|
||
> **(3)中断服务程序:**
|
||
>
|
||
> ```asm
|
||
> INT80H PROC FAR
|
||
> PUSH AX
|
||
> PUSH BX
|
||
> PUSH CX
|
||
> PUSH DX
|
||
> ; --- 中断处理逻辑(根据具体需求编写)---
|
||
> ; ...
|
||
> MOV AL, 20H ; EOI 命令
|
||
> OUT 20H, AL ; 发送 EOI 到 8259A
|
||
> POP DX
|
||
> POP CX
|
||
> POP BX
|
||
> POP AX
|
||
> IRET ; 中断返回
|
||
> INT80H ENDP
|
||
> ```
|
||
>
|
||
> 解析:8259A 初始化需按顺序写入 ICW1(设置触发方式和级联模式)、ICW2(中断类型号高 5 位)、ICW4(8086 模式)。中断向量表中类型号 N 的入口地址位于 N×4 处,低 2 字节为 IP,高 2 字节为 CS。中断服务程序需保护现场、处理中断、发送 EOI 命令、恢复现场并 IRET 返回。
|
||
|
||
3. **(10 分)** 在 8086 CPU 的系统中,利用 8255A 的端口 A 输出矩形波,要求在端口 A 的 PA₀ 产生矩形波。
|
||
|
||
> [!info] 波形参数
|
||
> 高电平持续时间为 5ms,低电平持续时间为 3ms。
|
||
|
||
已知 8255A 的端口地址为 60H~63H,8255A 的时钟频率为 1MHz。
|
||
|
||
要求:
|
||
|
||
(1)编写 8255A 的初始化程序。(4 分)
|
||
|
||
(2)编写产生矩形波的程序。(6 分)
|
||
|
||
> [!info] 8255A 控制字格式
|
||
> - D₇:1 为方式控制字,0 为位控字
|
||
> - D₆D₅:端口 A 方式选择(00=方式 0,01=方式 1,10=方式 2)
|
||
> - D₄:端口 A 输入/输出(1=输入,0=输出)
|
||
> - D₃:端口 C 高 4 位输入/输出(1=输入,0=输出)
|
||
> - D₂:端口 B 方式选择(0=方式 0,1=方式 1)
|
||
> - D₁:端口 B 输入/输出(1=输入,0=输出)
|
||
> - D₀:端口 C 低 4 位输入/输出(1=输入,0=输出)
|
||
|
||
> [!success]- 答案与解析
|
||
> 答案:
|
||
>
|
||
> **(1)8255A 初始化程序:**
|
||
>
|
||
> 控制字:A 口方式 0 输出 → D7=1, D6D5=00, D4=0, 其余随意 → 80H
|
||
>
|
||
> ```asm
|
||
> MOV AL, 80H ; 控制字:A口方式0输出
|
||
> OUT 63H, AL ; 写入控制寄存器
|
||
> ```
|
||
>
|
||
> **(2)矩形波产生程序:**
|
||
>
|
||
> ```asm
|
||
> WAVE:
|
||
> MOV AL, 01H ; PA0 = 1(高电平)
|
||
> OUT 60H, AL
|
||
>
|
||
> ; 延时 5ms
|
||
> MOV CX, 5000
|
||
> DELAY_H:
|
||
> NOP
|
||
> LOOP DELAY_H
|
||
>
|
||
> MOV AL, 00H ; PA0 = 0(低电平)
|
||
> OUT 60H, AL
|
||
>
|
||
> ; 延时 3ms
|
||
> MOV CX, 3000
|
||
> DELAY_L:
|
||
> NOP
|
||
> LOOP DELAY_L
|
||
>
|
||
> JMP WAVE ; 循环产生矩形波
|
||
> ```
|
||
>
|
||
> 解析:8255A 工作在方式 0(基本 I/O),A 口配置为输出,控制字为 80H。矩形波通过交替输出高/低电平并配合软件延时实现。在 1MHz 时钟下,每条指令约 1us,5ms 需约 5000 次循环,3ms 需约 3000 次循环。高电平持续时间(5ms)大于低电平(3ms),形成占空比约 62.5% 的矩形波。
|
||
|
||
---
|
||
|
||
## 关联笔记
|
||
- [[接口与通讯技术/8255A可编程并行接口]]
|
||
- [[接口与通讯技术/8254定时计数器]]
|
||
- [[接口与通讯技术/8259A中断控制器]]
|