8259中断控制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/as1072966956/article/details/80718551

8259中断控制实验


1  实验目的

1. 掌握8259中断控制器的工作原理。

2. 学习8259的应用编程方法。

3. 掌握8259级联方式的使用方法。

2  实验设备

PC机一台,TD-PITE实验装置一套。

3  实验内容及步骤

1.  中断控制器8259简介

Intel 386EX芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器,一个为主控制器,一个为从控制器。该中断控制单元就功能而言与工业上标准的82C59A是一致的,操作方法也相同。从片的INT连接到主片的IR2信号上构成两片8259的级联。

TD-PITE实验系统中,将主控制器的IR6、IR7以及从控制器的IR1开放出来供实验使用,主片8259的IR4供系统串口使用。8259的内部连接及外部管脚引出如图4.5:

4.5  8259内部连续及外部管脚引出图

4.1列出了中断控制单元的寄存器相关信息。

4.1  ICU寄存器列表

寄存器

口地址

功能描述

ICW1(主)

ICW1(从)

(只写)

0020H

00A0H

初始化命令字1

决定中断请求信号为电平触发还是边沿触发。

ICW2(主)

ICW2(从)

(只写)

0021H

00A1H

初始化命令字2

包含了8259的基址中断向量号,基址中断向量是IR0的向量号,基址加1就是IR1的向量号,依此类推。

ICW3(主)

(只写)

0021H

初始化命令字3

用于识别从8259设备连接到主控制器的IR信号,内部的从8259连接到主8259IR2信号上。

ICW3(从)

(只写)

00A1H

初始化命令字3

表明内部从控制器级联到主片的IR2信号上。

ICW4(主)

ICW4(从)

(只写)

0021H

00A1H

初始化命令字4

选择特殊全嵌套或全嵌套模式,使能中断自动结束方式。

OCW1(主)

OCW1(从)

(读/写)

0021H

00A1H

操作命令字1

中断屏蔽操作寄存器,可屏蔽相应的中断信号。

OCW2(主)

OCW2(从)

(只写)

0020H

00A0H

操作命令字2

改变中断优先级和发送中断结束命令。

OCW3(主)

OCW3(从)

(只写)

0020H

00A0H

操作命令字3

使能特殊屏蔽方式,设置中断查询方式,允许读出中断请求寄存器和当前中断服务寄存器。

IRR(主)

IRR(从)

(只读)

0020H

00A0H

中断请求:

指出挂起的中断请求。

ISR(主)

ISR(从)

(只读)

0020H

00A0H

当前中断服务:

指出当前正在被服务的中断请求。

POLL(主)

 

POLL(从)

(只读)

0020H

0021H

00A0H

00A1H

查询状态字:

表明连接到8259上的设备是否需要服务,如果有中断请求,该字表明当前优先级最高的中断请求。

 

初始化命令字1寄存器(ICW1)说明见图4.6所示。

4.6  初始化命令字1寄存器

 

初始化命令字2寄存器(ICW2)说明见图4.7所示。

4.7  初始化命令字2寄存器

初始化命令字3寄存器(ICW3)说明,主片见图4.8,从片见图4.9。

4.8  主片初始化命令字3寄存器

4.9  从片初始化命令字3寄存器

 

初始化命令字4寄存器(ICW4)说明见图4.10。

4.10  初始化命令字4寄存器

操作命令字1寄存器(OCW1)说明见图4.11。

4.11  操作命令字1寄存器

操作命令字2寄存器(OCW2)说明如图4.12所示。

4.12  操作命令字2寄存器

操作命令字3寄存器(OCW3)说明如图4.13所示。

4.13  操作命令字3寄存器

查询状态字(POLL)说明如图4.14所示。

4.14  程序状态字寄存器

在对8259进行编程时,首先必须进行初始化。一般先使用CLI指令将所有的可屏蔽中断禁止,然后写入初始化命令字。8259有一个状态机控制对寄存器的访问,不正确的初始化顺序会造成异常初始化。在初始化主片8259时,写入初始化命令字的顺序是:ICW1、ICW2、ICW3、然后是ICW4,初始化从片8259的顺序与初始化主片8259的顺序是相同的。

系统启动时,主片8259已被初始化,且4号中断源IR4)提供给与PC联机的串口通信使用,其它中断源被屏蔽。中断矢量地址与中断号之间的关系如下表所示:

 

主片中断序号

0

1

2

3

4

5

6

7

功能调用

08H

09H

0AH

0BH

0CH

0DH

0EH

0FH

矢量地址

20H23H

24H27H

28H2BH

2CH2FH

30H33H

34H37H

38H3BH

3CH3FH

说明

未开放

未开放

未开放

未开放

串口

未开放

可用

可用

从片中断序号

0

1

2

3

4

5

6

7

功能调用

30H

31H

32H

33H

34H

35H

36H

37H

矢量地址

C0HC3H

C4HC7H

C8HCBH

CCHCFH

D0HD3H

D4HD7H

D8HDBH

DCHDFH

说明

未开放

可用

未开放

未开放

未开放

未开放

未开放

未开放

 

2.  8259单中断实验

实验接线图如图4.15所示,单次脉冲输出与主片8259的IR7相连,每按动一次单次脉冲,产生一次外部中断,在显示屏上输出一个字符“7”。

 

           4.15  8259单中断实验接线图

实验程序清单(INT1.ASM)

 

SSTACK	SEGMENT STACK
		DW 32 DUP(?)
SSTACK	ENDS

CODE   	SEGMENT
	   	ASSUME CS:CODE
START: 	PUSH DS
		MOV AX, 0000H
		MOV DS, AX
		MOV AX, OFFSET MIR7		;取中断入口地址
		MOV SI, 003CH				;中断矢量地址
		MOV [SI], AX				;填IRQ7的偏移矢量
		MOV AX, CS				;段地址
		MOV SI, 003EH
		MOV [SI], AX				;填IRQ7的段地址矢量
		CLI                         ;中断屏蔽clear interrupt
		POP DS
		;初始化主片8259
		MOV AL, 11H				;0001 0001 级联,边沿触发,要ICW4
		OUT 20H, AL				;ICW1
		MOV AL, 08H				;0000 1000 中断类型号从8开始
		OUT 21H, AL				;ICW2
		MOV AL, 04H				;0000 0100 
		OUT 21H, AL				;ICW3
		MOV AL, 01H				;0000 0001 非缓冲方式,8086/8088配置
		OUT 21H, AL				;ICW4
		MOV AL, 6FH				;OCW1 0110 1111 IR7,IR4引脚的中断开放
		OUT 21H, AL
		STI                         ;恢复中断 set interrupt

AA1:		NOP                         ;空指令
		JMP AA1					;无限循环

MIR7:	STI                         
		CALL DELAY                  ;延时
		MOV AX, 0037H               ;37H
		INT 10H					;显示字符7
		MOV AX, 0020H                
		INT 10H
		MOV AL, 20H
		OUT 20H, AL				;中断结束命令
		IRET		
DELAY:	PUSH CX
		MOV CX, 0F00H
AA0:		PUSH AX
		POP  AX
		LOOP AA0
		POP CX
		RET		
CODE		ENDS
		END  START

 

实验步骤

1)按图4.15连接实验线路。

2)编写实验程序,经编译、链接无误后装入系统。

3)运行程序,重复按单次脉冲开关KK1+,显示屏会显示字符“7”,说明响应了中断。

 

3.  8259级联实验

实验接线图如图4.16所示,KK1+连接到主片8259的IR7上,KK2+连接到从片8259的IR1上,当按一次KK1+时,显示屏上显示字符“M7”,按一次KK2+时,显示字符“S1”。编写程序。

 

      4.16  8259级联实验

 

实验程序清单(INTCAS1.ASM)

SSTACK	SEGMENT STACK
		DW 32 DUP(?)
SSTACK	ENDS

CODE   	SEGMENT
	   	ASSUME CS:CODE

START: 	PUSH DS
		MOV AX, 0000H
		MOV DS, AX
		MOV AX, OFFSET MIR7		;取中断入口地址
		MOV SI, 003CH				;中断矢量地址
		MOV [SI], AX				;填IRQ7的偏移矢量
		MOV AX, CS				;段地址
		MOV SI, 003EH
		MOV [SI], AX				;填IRQ7的段地址矢量		
		MOV AX, OFFSET SIR1		;取STR1的偏移地址
		MOV SI, 00C4H
		MOV [SI], AX
		MOV AX, CS
		MOV SI, 00C6H
		MOV [SI], AX
		CLI
		POP DS
		;初始化主片8259
		MOV AL, 11H				;0001 0001 级联,边沿触发,要ICW4
		OUT 20H, AL				;ICW1
		MOV AL, 08H				;0000 1000 中断类型号从8开始
		OUT 21H, AL				;ICW2
		MOV AL, 04H				;0000 0100 
		OUT 21H, AL				;ICW3
		MOV AL, 01H				;0000 0001 非缓冲方式,8086/8088配置
		OUT 21H, AL				;ICW4

		;初始化从片8259
		MOV AL, 11H				;0001 0001 级联,边沿触发,要ICW4
		OUT 0A0H, AL				;ICW1
		MOV AL, 30H				;0011 0000 终端类型号从30H开始
		OUT 0A1H, AL				;ICW2
		MOV AL, 02H				;0000 0010 通过IR1引脚连接主片
		OUT 0A1H, AL				;ICW3
		MOV AL, 01H				;0000 0001 非缓冲方式,8086/8088配置
		OUT 0A1H, AL				;ICW4
		MOV AL, 0FDH
		OUT 0A1H,AL				;OCW1 = 1111 1101	允许IR1中断请求	
		MOV AL, 6BH       			;0110 1011
		OUT 21H, AL				;主8259 OCW1
		STI

AA1:		NOP
		JMP AA1

MIR7:	CALL DELAY
		MOV AX, 014DH
		INT 10H					;M
		MOV AX, 0037H
		INT 10H					;显示字符7
		MOV AX, 0020H
		INT 10H
		MOV AL, 20H
		OUT 20H, AL				;中断结束命令
		IRET

SIR1:	CALL DELAY 				;延时
		MOV AX, 0053H
		INT 10H					;S
		MOV AX, 0031H
		INT 10H					;显示字符1
		MOV AX, 0020H
		INT 10H
		MOV AL, 20H
		OUT 0A0H, AL
		OUT 20H, AL
		IRET

DELAY:	PUSH CX
		MOV CX, 0F00H

AA0:		PUSH AX
		POP  AX
		LOOP AA0
		POP CX
		RET
CODE		ENDS
		END  START

 

实验步骤

1)按图4.16连接实验线路。

2)输入程序,编译、链接无误后装入系统。

3)运行程序,按动KK1+或KK2+,观察实验结果,验证实验程序的正确性。

4)若同时按下KK1+和KK2+,观察实验结果,解释实验现象。

 

 

附表  输入/输出接口编址

 

信号线

编址空间

主片8259

 

20H、21H

从片8259

 

A0H、A1H

扩展I/O接口

IOY0

0600H~063FH

IOY1

0640H~067FH

IOY2

0680H~06BFH

IOY3

06C0H~06FFH

附表  INT 10H 使用说明

入口:AH=01H,AL=数据

功能:写AL中的数据到屏上

入口:AH=06H,DS:BX=字串首址,且字串尾用00H填充

功能:显示一字串,直到遇到00H为止

附表 INT 21H使用说明

入口:AH=00H或AH=4CH

功能:程序终止

入口:AH=01H

功能:读键盘输入到AL中并回显

入口:AH=02H,DL=数据

功能:写DL中的数据到显示屏

入口:AH=08H

功能:读键盘输入到AL中无回显

入口:AH=09H,DS:DX=字符串首地址,字符串以 '$' 结束

功能:显示字符串,直到遇到 '$' 为止

入口:AH=0AH,DS:DX=缓冲区首地址,(DS:DX)=缓冲区最大字符数,

(DS:DX+1)=实际输入字符数,(DS:DX+2)=输入字符串起始地址

功能:读键盘输入的字符串到DS:DX指定缓冲区中并以回车结束


没有更多推荐了,返回首页