匯編與接口技術: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.pswp.cn/pingmian/87701.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87701.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87701.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋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…