一、實驗目的
該實驗使學生掌握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的閃爍可見,在中斷各申請之間加入延遲程序。
三、實驗步驟
- 根據原理圖正確連接實驗線路(需要連接粗黑線)。
- 正確理解實驗原理。
- 編寫實驗程序,并上機調試,觀察實驗結果。
四、實驗總結
這次實驗的目標是熟悉8259向量中斷方式的硬件連接和軟件編程,以及如何將中斷與其他接口芯片一起用來完成特定的任務。以下是我在實驗過程中遇到的問題、解決方法以及收獲:
- 問題1:在設置8259中斷向量時,我對如何配置硬件和編寫軟件感到困惑。
- 解決辦法1:通過查閱相關資料和教科書,我了解到了8259的工作原理和如何配置中斷向量。我學習了如何在軟件中打開中斷(包括CPU和8259A中斷),以及如何在中斷結束前發送中斷結束命令(如果選擇的是非自動結束方式)。
- 問題2:在使用8255時,我遇到了一些初始化問題。
- 解決辦法2:我查閱了有關8255的教材相關部分,并學習了如何在主程序中初始化8255,設置為適當的模式,并配置I/O端口。
- 問題3:我發現在沒有延遲程序的情況下,LED的閃爍過快,無法看清。
- 解決辦法3:我編寫了一個簡單的延遲程序,并在每次中斷請求之間調用它,使LED的閃爍變得可見。
通過這次實驗,我不僅了解了8259向量中斷方式和8255的使用,還理解了中斷和其他接口芯片如何一起工作,以完成特定的任務。解決實驗中的問題使我對這些設備的工作原理有了更深的理解,也提高了我的硬件和軟件編程能力。此外,我還學會了如何通過編程控制物理設備(如LED),這讓我更加明白理論知識和實踐操作的聯系,對我的學習產生了積極的影響。
五、思考題
如何理解采用中斷方式進行實時控制,請舉一些可能的應用例子。
中斷(Interrupt)方式進行實時控制是在計算機系統中,為了對某些緊急情況進行快速響應而采用的一種技術。當計算機執行到中斷指令時,會立即停止當前正在執行的任務,跳轉到一個預定的地址執行特定的程序,即中斷服務程序。一旦這個程序執行完畢,計算機就會返回被打斷的任務,繼續執行。
中斷方式進行實時控制的特點包括:
- 實時性:可以實時響應外部事件。
- 高效性:只有在需要處理外部事件時,才會暫停當前任務,執行中斷服務程序,這樣可以提高系統效率。
- 靈活性:可以靈活地處理多種外部事件。
以下是一些采用中斷方式進行實時控制的應用例子:
- 鍵盤輸入:當用戶按下一個鍵時,鍵盤會發送一個中斷信號給CPU,CPU會暫停當前的任務,執行鍵盤輸入的中斷服務程序,處理鍵盤輸入的事件,然后再返回到原來的任務。
- 硬盤讀寫:當CPU需要從硬盤讀取數據或向硬盤寫入數據時,硬盤會發送一個中斷信號給CPU,CPU會暫停當前的任務,執行硬盤讀寫的中斷服務程序,處理硬盤讀寫的事件,然后再返回到原來的任務。
- 網絡通信:在網絡通信中,當收到一個網絡包時,網絡設備會發送一個中斷信號給CPU,CPU會暫停當前的任務,執行網絡通信的中斷服務程序,處理網絡包的事件,然后再返回到原來的任務。
- 嵌入式系統:在嵌入式系統中,中斷方式進行實時控制廣泛應用于各種感應器和執行器的實時響應,比如溫度傳感器檢測到溫度過高時,會通過中斷通知CPU進行散熱控制;或者在自動駕駛系統中,當雷達檢測到前方障礙物時,可以通過中斷方式通知CPU進行急剎車等操作。
這些應用中,中斷方式進行實時控制都體現了其實時性、高效性和靈活性的優點。