汇编与接口技术: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中断向量时,我对如何配置硬件和编写软件感到困惑。

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

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

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

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

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

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

五、思考题

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

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

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

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

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

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

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

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

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

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

相关推荐
小宋同学在不断学习26 分钟前
stm32-掌握SPI原理(一)
stm32·单片机·spi
is081529 分钟前
STM32的 syscalls.c 和 sysmem.c
c语言·stm32·嵌入式硬件
学不动CV了1 小时前
数据结构---链表结构体、指针深入理解(三)
c语言·arm开发·数据结构·stm32·单片机·链表
szxinmai主板定制专家2 小时前
【精密测量】基于ARM+FPGA的多路光栅信号采集方案
服务器·arm开发·人工智能·嵌入式硬件·fpga开发
liulilittle5 小时前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
brave and determined6 小时前
国产MCU学习Day6——CW32F030C8T6: I2C功能详解与应用案例
单片机·eeprom·i2c·cw32f030c8t6·cw32·cw32f030·中断读取eeprom
梁山1号6 小时前
【ESP32】3.串口的发送与接受
单片机·物联网
KaiGer6666 小时前
AUTOSAR进阶图解==>AUTOSAR_SWS_V2XFacilities
单片机·汽车·嵌入式·autosar
desssq8 小时前
SPI通信协议
单片机·嵌入式硬件