当前位置: 首页 > news >正文

汇编与接口技术:8259中断实验

一、实验目的

该实验使学生掌握8259向量中断方式的硬件连接和软件编程的方法,同时使同学掌握中断和其它接口芯片配合来完成某一特定任务的方法。

二、实验内容

1、手动产生单脉冲作为中断请求信号连接到MIRQ3上和SIRT10上。每按一次开关产生一次中断,在屏幕上显示’TPCA INTERRUPT’,中断10次后程序退出。

连线:              总线/MIRQx              接   单脉冲1/正脉冲

                        总线/SIRQx               接   单脉冲2/正脉冲

编程提示

(1) 系统中断主中断MIRQ3

(2) 系统中断从中断SIRQ10

接口部分连线图以及终端显示图如下:

; Experiment 3.1

DATA SEGMENT

    MESS1 DB 'CHIEF: TPCA INTERRUPT!',0DH,0AH,'$'  ;主芯片输出的信息

    MESS2 DB 'SECONDARY: TPCA INTERRUPT!',0DH,0AH,'$' ;从芯片输出的信息

DATA ENDS

CODE SEGMENT

    ASSUME CS:CODE,DS:DATA

START:

       

    ; 修改,即改变中断向量表

    PUSH DS

    MOV AX,CS

    MOV DS,AX

    MOV DX,OFFSET CHIEF_INTR

    MOV AX,250BH

    INT 21H

   

    ; 修改,即改变中断向量表

    MOV DX,OFFSET SECOND_INTR

    MOV AX,2572H

    INT 21H

    POP DS

   

    ; 打开 IRQ3,IRQ2,IRQ10

    IN AL,21H; OCW1端口

    AND AL,0F3H; 打开 IRQ2 IRQ3 11110011

    OUT 21H,AL

    IN AL,0A1H; OCW1端口

    AND AL,0FBH; 打开 IRQ10 11111011

    OUT 0A1H,AL

    ; 设置中断次数

    MOV CX,10

   

    ;打开CPU中断并进入事件循环

   

AGAIN:

    STI

    CMP CX,0

    JNZ AGAIN

   

EXIT:

    ; 恢复中断词;关闭中断

    IN AL,21H

    OR AL,00001100B

    OUT 21H,AL

    IN AL,0A1H

    OR AL,00000100B

    OUT 0A1H,AL

   

    MOV AH,4CH

    INT 21H

CHIEF_INTR PROC FAR

    PUSH DX

    PUSH AX

   

    MOV AX,DATA

    MOV DS,AX

   

    ; 输出消息字符串

    MOV DX,OFFSET MESS1

    MOV AH,09

    INT 21H

   

    ; 发出中断结束命令

    MOV AL,20H ;EOI命令

    OUT 20H,AL ;OCW2端口

   

    DEC CX

   

    STI

    POP AX

    POP DX

   

    IRET

CHIEF_INTR ENDP

SECOND_INTR PROC FAR

    PUSH DX

    PUSH AX

   

    MOV AX,DATA

    MOV DS,AX

    MOV DX,OFFSET MESS2

    MOV AH,09

    INT 21H

   

    ; EOI (对主芯片和从芯片都要执行)

    ; 因为从芯片依附于主芯片

    MOV AL,20H

    OUT 20H,AL ;eoi 主和从芯片

    OUT 0A0H,AL

   

    DEC CX

   

    STI

    POP AX

    POP DX

    IRET

SECOND_INTR ENDP

   

CODE ENDS

 END START  

流程图:

2、8255的PC6作为中断源连接到MIRQ3上,每向8259A发出中断请求,使LED指示等交替点亮和熄灭。中断5次后程序退出

DATA SEGMENT

DATA ENDS

CODE    SEGMENT

    ASSUME CS:CODE,DS:DATA

START:    

    MOV AX,DATA

    MOV DS,AX    ; 数据段的装载          

    CLI                          ;关中断

    CLD                          ;方向

               

;写中断向量

    PUSH DS; 保护断点

    MOV AX,SEG INT_35;段地址

    MOV DS,AX;

    MOV DX,OFFSET INT_35;偏移地址

    MOV AX,250bh;

    INT 21H; DOS 功能号25h:设置中断向量ds:dx =中断向量,al=中断类型号

    POP DS;

;写屏蔽字

    CLI; 关中断

    IN  AL,21H                   ;读IMR

    AND AL,11110111B             ;设置OCW1,开放IR3中断

    OUT 21H,AL                   ;写中断屏蔽字OCW1

   

    MOV BL,0             ; 初始LED0小灯泡

    MOV CX,5                      ;循环次数

   

    STI                          ;开中断    

AGAIN1:    

    ;PC6产生上升沿

    MOV DX,283H;

    MOV AL,10000000B; 先初始化, PC6设为输出信号

    OUT DX,AL;

   

    MOV DX,283h;

    MOV AL,00001100B; PC6输出低电平

    OUT DX,AL;

    NOP;

    NOP;

    MOV AL,00001101B; PC6输出高电平

    OUT DX,AL;

    NOP;

    NOP;

    CALL DELAY

    LOOP AGAIN1                    ;一直等待中断

   

    IN  AL,21H                   ;读IMR

    OR AL,00001000B             ;设置OCW1,关闭IR3中断

    OUT 21H,AL                   ;写中断屏蔽字OCW1

   

    MOV AX,DATA; 数据段的恢复

    MOV DS,AX

    MOV AH,4CH                   ;结束,返回DOS

    INT 21H

   

DELAY PROC ; 双重循环的延时子程序

    PUSH CX;

    MOV CX,0100H

AGAIN:

    MOV DX,0FFFFH

DELAY1:

    DEC DX

    JNZ DELAY1

    LOOP AGAIN

    POP CX;

RET

DELAY ENDP

       

INT_35    PROC NEAR                ;中断服务程序

    PUSH DX                      ;保护现场

    PUSH AX

    PUSH CX

    CLI                          ;关中断

    MOV AX,DATA

    MOV DS,AX

   

; 小灯泡亮

    MOV DX,283H;

    MOV AL,10000000B;  A端口,0方式输出

    OUT DX,AL;                

     

    ;XOR BL,11111111B;异或运算,最后一位取反

    MOV AL,0FFH; LED0

    MOV DX,281H;

    OUT DX,AL; 输出到LED0

    CALL DELAY

    CALL DELAY

    MOV AL, 0H

    OUT DX, AL

    MOV AL,20H                   ;写OCW2,送中断结束命令EOI

    OUT 20H,AL

   

    STI                          ;开中断

    POP CX                       ;恢复现场

    POP AX

    POP DX

    IRET                         ;中断返回

INT_35    ENDP

CODE ENDS

END START

流程图:

编程提示

(1) 要对8259设置中断矢量,打开中断(包括CPU中断和8259A中断);如果选择非自动结束,则需要在中断结束前(中断服务程序的最后)发中断结束命令。

(2) 中断服务程序的主要功能是交替点亮和熄灭LED指示灯(即第1次进中断点亮LED,第2次进中断则熄灭LED)。

(3)8255使用前需要在主程序中初始化。

(4)  8255的PC6作为中断源,应采用上升沿触发方式(由低到高的变化)为了能够进行下次中断,PC6必须变为低电平。

(5) 为了能使LED的闪烁可见,在中断各申请之间加入延迟程序。

、实验步骤

  1. 根据原理图正确连接实验线路(需要连接粗黑线)。
  2. 正确理解实验原理。
  3. 编写实验程序,并上机调试,观察实验结果。

四、实验总结

这次实验的目标是熟悉8259向量中断方式的硬件连接和软件编程,以及如何将中断与其他接口芯片一起用来完成特定的任务。以下是我在实验过程中遇到的问题、解决方法以及收获:

  1. 问题1:在设置8259中断向量时,我对如何配置硬件和编写软件感到困惑。

  1. 解决办法1:通过查阅相关资料和教科书,我了解到了8259的工作原理和如何配置中断向量。我学习了如何在软件中打开中断(包括CPU和8259A中断),以及如何在中断结束前发送中断结束命令(如果选择的是非自动结束方式)。

  1. 问题2:在使用8255时,我遇到了一些初始化问题。

  1. 解决办法2:我查阅了有关8255的教材相关部分,并学习了如何在主程序中初始化8255,设置为适当的模式,并配置I/O端口。

  1. 问题3:我发现在没有延迟程序的情况下,LED的闪烁过快,无法看清。

  1. 解决办法3:我编写了一个简单的延迟程序,并在每次中断请求之间调用它,使LED的闪烁变得可见。

通过这次实验,我不仅了解了8259向量中断方式和8255的使用,还理解了中断和其他接口芯片如何一起工作,以完成特定的任务。解决实验中的问题使我对这些设备的工作原理有了更深的理解,也提高了我的硬件和软件编程能力。此外,我还学会了如何通过编程控制物理设备(如LED),这让我更加明白理论知识和实践操作的联系,对我的学习产生了积极的影响。

五、思考题

如何理解采用中断方式进行实时控制,请举一些可能的应用例子。

中断(Interrupt)方式进行实时控制是在计算机系统中,为了对某些紧急情况进行快速响应而采用的一种技术。当计算机执行到中断指令时,会立即停止当前正在执行的任务,跳转到一个预定的地址执行特定的程序,即中断服务程序。一旦这个程序执行完毕,计算机就会返回被打断的任务,继续执行。

中断方式进行实时控制的特点包括:

  1. 实时性:可以实时响应外部事件。
  2. 高效性:只有在需要处理外部事件时,才会暂停当前任务,执行中断服务程序,这样可以提高系统效率。
  3. 灵活性:可以灵活地处理多种外部事件。

以下是一些采用中断方式进行实时控制的应用例子:

  1. 键盘输入:当用户按下一个键时,键盘会发送一个中断信号给CPU,CPU会暂停当前的任务,执行键盘输入的中断服务程序,处理键盘输入的事件,然后再返回到原来的任务。

  1. 硬盘读写:当CPU需要从硬盘读取数据或向硬盘写入数据时,硬盘会发送一个中断信号给CPU,CPU会暂停当前的任务,执行硬盘读写的中断服务程序,处理硬盘读写的事件,然后再返回到原来的任务。

  1. 网络通信:在网络通信中,当收到一个网络包时,网络设备会发送一个中断信号给CPU,CPU会暂停当前的任务,执行网络通信的中断服务程序,处理网络包的事件,然后再返回到原来的任务。

  1. 嵌入式系统:在嵌入式系统中,中断方式进行实时控制广泛应用于各种感应器和执行器的实时响应,比如温度传感器检测到温度过高时,会通过中断通知CPU进行散热控制;或者在自动驾驶系统中,当雷达检测到前方障碍物时,可以通过中断方式通知CPU进行急刹车等操作。

这些应用中,中断方式进行实时控制都体现了其实时性、高效性和灵活性的优点。

http://www.lryc.cn/news/581712.html

相关文章:

  • 高效处理大体积Excel文件的Java技术方案解析
  • 从0写自己的操作系统(4)实现简单的任务切换
  • FileZilla二次开发实战指南:C++架构解析与界面功能扩展
  • 在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控
  • 【机器学习笔记Ⅰ】13 正则化代价函数
  • [2025CVPR]一种新颖的视觉与记忆双适配器(Visual and Memory Dual Adapter, VMDA)
  • SSL 终结(SSL Termination)深度解析:从原理到实践的全维度指南
  • Python Bcrypt详解:从原理到实战的安全密码存储方案
  • 用户中心Vue3项目开发2.0
  • 2048小游戏实现
  • 线性代数--AI数学基础复习
  • 深度学习6(多分类+交叉熵损失原理+手写数字识别案例TensorFlow)
  • Chunking-free RAG
  • Web-API-day2 间歇函数setInterval与事件监听addEvenListener
  • 【Note】《Kafka: The Definitive Guide》第四章:Kafka 消费者全面解析:如何从 Kafka 高效读取消息
  • Apache Spark 4.0:将大数据分析提升到新的水平
  • A O P
  • 金融级B端页面风控设计:操作留痕与异常预警的可视化方案
  • 深度学习篇---深度学习常见的应用场景
  • 容声W60以光水离子科技实现食材“主动养鲜”
  • [Qt] visual studio code 安装 Qt插件
  • FastAPI + Tortoise-ORM + Aerich 实现数据库迁移管理(MySQL 实践)
  • 深度学习 必然用到的 线性代数知识
  • 嵌入式 数据结构学习(五) 栈与队列的实现与应用
  • React Ref 指南:原理、实现与实践
  • 【PyTorch】PyTorch中torch.nn模块的卷积层
  • 零基础,使用Idea工具写一个邮件报警程序
  • Solidity——什么是状态变量
  • 计算机网络:(七)网络层(上)网络层中重要的概念与网际协议 IP
  • Kafka “假死“现象深度解析与解决方案