汇编与接口技术: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.tpcf.cn/pingmian/87701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ajax的初步学习

一、什么是 Ajax? Ajax (Asynchronous JavaScript and XML) 是一种无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。 主要特性: 异步性 (Asynchronous…

OOM电商系统订单缓存泄漏,这是泄漏还是溢出

电商系统订单缓存泄漏的本质分析一、明确概念区别内存泄漏(Memory Leak)定义:对象已经不再被使用,但由于被错误引用而无法被垃圾回收特点:内存使用量随时间持续增长,最终可能导致OOM类比:像浴缸…

二进制安全-汇编语言-02-寄存器

二、寄存器 水滴石穿 一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连 内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系 简单说,在CPU中: 运算器进行信息处理寄存器进…

Java——初始guava(1)

基于 Google Guava 官方教程的解答 📚 Guava 提供了哪些 JDK 不具备的 API? Guava 扩展了 JDK 的集合框架,提供了多种 JDK 没有的实用 API: 不可变集合(Immutable Collections) ImmutableList、ImmutableSet、ImmutableMap 等特性:创建后不可修改,线程安全,性能优于…

day53

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.datasets import load_iris import warnings # 忽略不必要的警…

c++ python 共享内存

一、目的 是为了c来读取并解码传递给python,Python做测试非常方便,c 和 python之间必须定好协议,整体使用c 来解码,共享内存传递给python 二、主类 主类,串联decoder,注意decoder并没有直接在显存里面穿…

react函数组件的props,ref,state。

react开发我们会把页面分为一个个组件,组件是独立而且可复用的重复代码片段。具体来说组件可以是一个按钮,一个输入框。react组件有两种定义方法,一种是函数组件,一种是类组件。我们这里说一下函数组件之间父子之间如何传递props参…

基于ARM+FPGA实现的BISS-C协议解决方案,适用于高精度光栅位移传感器等

模块简介 本资源提供了专为FPGA设计的BISS-C接口协议发送模块源码。BISS-C模式作为一种高速、同步的串行通信协议,广泛应用于高精度光栅位移传感器的数据传输中,特别适用于需要精确位置信息的应用场景。此模式遵循主从架构,其中FPGA作为主控制…

spring中@Transactional注解和事务的实战理解附代码

文章目录 前言一、事务是什么?二、事务的特性2.1隔离性2.2事务的隔离级别 三、Transactional注解Transactional注解简介基本用法常用属性配置事务传播行为事务隔离级别异常处理与回滚性能优化建议 四、 事务不生效的可能原因方法访问权限非public自调用问题异常被捕…

替代进口SCA7606【智芯微】国产高精度电流传感器 工业新能源电网专用

SCA7606(智芯微)产品解析与推广文案一、产品概述SCA7606 是 智芯微电子(ZXMICRO) 推出的一款 高精度数字隔离式电流传感器芯片,采用 霍尔效应数字输出 技术,专为 工业控制、新能源、智能电网 等领域的电流检…

Java 与 Vue 全栈开发:“一课一得“ 学习笔记系统实战

一、项目背景与核心价值 "一课一得" 是一个面向学习者的笔记管理平台,旨在帮助用户系统化记录、整理和回顾学习内容。项目采用前后端分离架构:前端基于 Vue.js 构建交互式界面,后端使用 Java Spring Boot 实现业务逻辑&#xff0c…

百度文心大模型 4.5 开源深度测评:技术架构、部署实战与生态协同全解析

声明:本文只做实际测评,并非广告 1.前言 2025 年 6 月 30 日,百度做出一项重大举措,将文心大模型 4.5 系列正式开源,并选择国内领先的开源平台 GitCode 作为首发平台。该模型也是百度在2025年3月16日发布的自研的新一…

力扣_链表_python版本

一、206. 反转链表代码: class Solution:def reverseList(self, head):dummy ListNode()cur headwhile cur:last cur.nextcur.next dummy.nextdummy.next curcur lastreturn dummy.next二、92. 反转链表 IIclass Solution:def reverseBetween(self, head: Opt…

[netty5: WebSocketProtocolHandler]-源码分析

在阅读这篇文章前,推荐先阅读:[netty5: MessageToMessageCodec & MessageToMessageEncoder & MessageToMessageDecoder]-源码分析 WebSocketProtocolHandler WebSocketProtocolHandler 是 WebSocket 处理的基础抽象类,负责管理 Web…

[2025CVPR]一种新颖的视觉与记忆双适配器(Visual and Memory Dual Adapter, VMDA)

引言 多模态目标跟踪(Multi-modal Object Tracking)旨在通过结合RGB模态与其他辅助模态(如热红外、深度、事件数据)来增强可见光传感器的感知能力,尤其在复杂场景下显著提升跟踪鲁棒性。然而,现有方法在频…

理想汽车6月交付36279辆 第二季度共交付111074辆

理想汽车-W(02015)发布公告,2025年6月,理想汽车交付新车36279辆,第二季度共交付111074辆。截至2025年6月30日,理想汽车历史累计交付量为133.78万辆。 在成立十周年之际,理想汽车已连续两年成为人民币20万元以上中高端市…

MobileNets: 高效的卷积神经网络用于移动视觉应用

摘要 我们提出了一类高效的模型,称为MobileNets,专门用于移动和嵌入式视觉应用。MobileNets基于一种简化的架构,利用深度可分离卷积构建轻量级的深度神经网络。我们引入了两个简单的全局超参数,能够有效地在延迟和准确性之间进行…

SDP服务发现协议:动态查询设备能力的底层逻辑(面试深度解析)

SDP的底层逻辑揭示了物联网设备交互的本质——先建立认知,再开展协作。 一、SDP 核心知识点高频考点解析 1.1 SDP 的定位与作用 考点:SDP 在蓝牙协议栈中的位置及核心功能 解析:SDP(Service Discovery Protocol,服务发现协议)位于蓝牙协议栈的中间层,依赖 L2CAP 协议传…

CppCon 2018 学习:GIT, CMAKE, CONAN

提到的: “THE MOST COMMON C TOOLSET” VERSION CONTROL SYSTEM BUILDING PACKAGE MANAGEMENT 这些是 C 项目开发中最核心的工具链组成部分。下面我将逐一解释每部分的作用、常见工具,以及它们如何协同构建现代 C 项目。 1. VERSION CONTROL SYSTEM&am…

使用tensorflow的线性回归的例子(五)

我们使用Iris数据,Sepal length为y值而Petal width为x值。import matplotlib.pyplot as pltimport numpy as npimport tensorflow as tffrom sklearn import datasetsfrom tensorflow.python.framework import opsops.reset_default_graph()# Load the data# iris.d…