8259中断控制

匿名 (未验证) 提交于 2019-12-03 00:29:01

8259


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

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

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

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

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

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

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

寄存器

口地址

功能描述

ICW1

ICW1

(只写)

0020H

00A0H

初始化命令字1

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

ICW2

ICW2

(只写)

0021H

00A1H

初始化命令字2

包含了8259IR01IR1

ICW3

(只写)

0021H

初始化命令字3

用于识别从8259IR82598259IR2

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所示。

2寄存器(ICW2)说明见图4.7所示。

3寄存器(ICW3)说明,主片见图4.8,从片见图4.9。

4寄存器(ICW4)说明见图4.10。

1寄存器(OCW1)说明见图4.11。

2寄存器(OCW2)说明如图4.12所示。

3寄存器(OCW3)说明如图4.13所示。

POLL)说明如图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

说明

未开放

可用

未开放

未开放

未开放

未开放

未开放

未开放

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

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”,说明响应了中断。

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

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

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

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

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

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

入口: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指定缓冲区中并以回车结束


文章来源: 8259中断控制
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!