实验 中断特性及8259应用编程实验

一、   实验目的

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

2、          掌握8259可编程中断控制器的应用编程

3、          掌握8259连方式编程

二、   实验设备

1、          TDN86/88实验系统

2、          排线、导线若干

三、   实验内容及步骤

18259A可编程中断控制器介绍及资源说明

8259A可以管理8级中断,可以将中断源优先级排队,辨别中断源,提供中断矢量。在级连使用时,可以构成64级中断系统。

8259A的编程,就是根据需求,向8259A芯片中写入初始化命令字ICW1-ICW4以及操作命令字OCW1-OCW3

系统提供了两片8259A芯片,一片是与控制系统公用,(在实验板的左下方),级连时作为主片,口地址为20h21h,另一片在实验板中上方,口地址为00h01h

中断源用实验板中的R-S触发器(在实验板的右侧)产生,四个引脚,kk1+kk1-kk2+kk2-

 

28259A编程说明

            a)8259A初始化编程

           

            b)、系统的8259A初始化参数:

                     ICW113hICW208hICW3:不用,ICW40Dh

                     即单片、要ICW4、向量从8开始,缓冲方式、正常EOI

c)、系统的8259A0号,4号中断被系统使用,(时钟和串口使用),

       编程的时候,不要用它们,也不要屏蔽它们。其他中断都可以使用。

              d)、由于系统加载程序是从0000:2000开始,所以中断服务程序的地址

                     偏移量要注意处理一下,偏移量加上2000 h

 

3、          实验:单片8259A的中断实验

       a)、实验线路图:

             

       b)、程序流程图

由于用的是系统的8259A片,系统已经初始化过了,这个程序不

       用再次初始化了)

             

             

 

c)、参考程序8259A1.asm

STACK SEGMENT STACK

       DW 64 DUP(?)

STACK ENDS

 

CODE SEGMENT

       ASSUME CS:CODE

start:     

       PUSH DS

;设置irq7中断服务程序地址

;中断服务地址放在0000:003c0000:003f

       MOV AX,0000H

       MOV DS,AX

       MOV AX,OFFSET IRQ7

       ADD AX,2000H

       MOV SI,003CH

       MOV [SI],AX

       MOV AX,0000H

       MOV SI,003EH

       MOV [SI],AX

       CLI

       POP DS

;IMR,去掉对irq7的屏蔽,再写入 IMR 

       IN AL,21H

       AND AL,7FH

       OUT 21H,AL

;设置中断服务次数 

       MOV CX,000AH

A1:

       CMP CX,0000H

       JNZ A2

;10次服务后,重设IMR,屏蔽Irq7

       IN AL,21H

       OR AL,80H

       OUT 21H,AL

       STI    ;开中断

       HLT    ;处理器暂停,等待PC机操作

A2:

       STI     ;循环,等待中断

       JMP A1

 

;中断服务中,调用bios 显示功能,显示7和于一空格,中断次数减一

IRQ7    proc  near

       MOV AX,0137H

       INT 10H

       MOV AX,0120H

       INT 10H

       DEC CX

;正常EOI,通知8259A此次服务结束    

       MOV AL,20H

       OUT 20H,AL

       CLI

       IRET

IRQ7 endp          

CODE ENDS

     END START

       d)、实验步骤:

              1)、接好试验线路

              2、编写修改程序,编译连接,加载到0000:2000

              3)、运行程序g=0000:2000

              4)、按动KK2开关,屏幕上将有“7 ”显示,直到10,按“停止”结束程序,返回控制。

 

4、          实验二:单片8259,两个外部中断,试验中断优先级

a)、实验线路图:

 

b)、程序思路:

    设置irq6,irq7中断服务地址,重新初始化8259A,主程序不停的显示“MAIN ”;响应中断后,中断服务程序会显示“6 ”和“7 ”。

      要实现中断抢先,8259A中不能屏蔽该中断,cpu要响应中断(即STI, cpu响应中断后,会自动关闭中断,所以,中断服务程序中要STI指令开中。

       中断服务程序中可以多加几个延时段,可以更清楚地看清中断抢先。

c)、参考程序8259A2.asm

 

 

STACK SEGMENT STACK

       DW 64 DUP(?)

STACK ENDS

 

DATA SEGMENT

;字符串"MAIN "

TABLE DB 4DH,41H,49H,4EH,20H,00H

DATA ENDS

      

CODE SEGMENT

       ASSUME CS:CODE,DS:DATA

 

START: 

       MOV AX,DATA

       MOV DS,AX

       PUSH DS

;设置IRQ6 IRQ7地址    

       MOV AX,0000H

       MOV DS,AX

       MOV AX,OFFSET IRQ6

       ADD AX,2000H

       MOV SI,0038H

       MOV [SI],AX

       MOV AX,0000H

       MOV SI,003AH

       MOV [SI],AX    

       MOV AX,OFFSET IRQ7

       ADD AX,2000H

       MOV SI,003CH

       MOV [SI],AX

       MOV AX,0000H

       MOV SI,003EH

       MOV [SI],AX

       POP DS

;初始化8259A主片

;ICW1   

    MOV AL,13H

       OUT 20H,AL

;ICW2   

       MOV AL,08H

       OUT 21H,AL

;ICW4   

    MOV AL,0dH

       OUT 21H,AL

;OCW1 

    MOV AL,2eH

       OUT 21H,AL

;开中,CPU响应中断    

       STI

;主程序一直显示MAIN 

A1:

       MOV CX,0007H

       MOV AX,010DH

       INT 10H

A2:

       MOV AH,06H    

       MOV BX,OFFSET TABLE

       INT 10H

       CALL DALLY

       LOOP A2

       JMP A1

;IRQ6,开中断,延时,显示"6 "      

IRQ6    proc near

;CPU还能响应中断,当前中断服务可以被高优先级中断打断

       STI

       call dally

       call dally

       CALL DALLY

       MOV AX,0136H

       INT 10H

       MOV AL,20H

       OUT 20H,AL

       IRET

IRQ6    endp   

;IRQ7,开中断,延时,显示"7 "             

IRQ7    proc near

       STI

       call dally

       call dally

       CALL DALLY

       MOV AX,0137H

       INT 10H

       MOV AL,20H

       OUT 20H,AL

       IRET

IRQ7    endp   

;延时程序段      

DALLY  proc near

       PUSH CX

       PUSH AX

       MOV CX,0040H

A3: MOV AX,056CH

A4: DEC AX

       JNE A4

       LOOP A3

       POP AX

       POP CX

    RET

DALLY   endp       

CODE   ENDS

       END START

       d)、实验步骤:

              1、画出以上程序图

              2、连接实验线路图

3、编译连接程序,加载到0000:2000

       4、运行程序,G=0000:2000,按动KK1,kk2,观察屏幕显示;在触发IRQ7

屏幕还没有显示“7 ”之前,触发IRQ6,观察结果,说明原因。

(验证中断抢先)

注:程序设置的中断触发方式是边沿触发,KK1,KK2由接的“+”

“-”不同,可能在按下时触发,也可能是在弹开时触发,总称触发。

 

5、          实验三:两片级连,响应从片引入的中断

a)、实验连接图:

       b)、程序思路:

              初始化主片,从片,设置中断向量地址,开中响应中断。

              中断服务程序,显示“7 ”。

       c)、参考程序:8259A3.asm

              STACK SEGMENT STACK

                     DW 64 DUP(?)

STACK ENDS

      

CODE SEGMENT

                     ASSUME CS:CODE

             

START: 

;重设8259,先关中

                     CLI

;初始化设置主片

;ICW1

              MOV AL,11H

              OUT 20H,AL

;ICW2   

              MOV AL,08H

              OUT 21H,AL

;ICW3   

              MOV AL,80H

              OUT 21H,AL

;ICW4   

              MOV AL,1dH

              OUT 21H,AL

;OCW1 

              MOV AL,6fH

              OUT 21H,AL

;初始化、设置从片 

;ICW1

              MOV AL,11H

              OUT 00H,AL

;ICW2   

              MOV AL,30H

              OUT 01H,AL

;ICW3   

              MOV AL,07H

              OUT 01H,AL

;ICW4   

              MOV AL,09H

              OUT 01H,AL

;OCW1 

              MOV AL,7FH

              OUT 01H,AL

             

              PUSH DS

;设置中断服务地址 

              MOV AX,0000H

              MOV DS,AX

              MOV AX,OFFSET IRQ7

              ADD AX,2000H

              MOV SI,00DCH

              MOV [SI],AX

              MOV AX,0000H

              MOV SI,00DEH

              MOV [SI],AX

              POP DS

;开中响应中断  

A1:

              STI

              HLT

              JMP A1

;中断服务中,显示"7 "  

IRQ7    proc near

              MOV AX,0137H

              INT 10H

              MOV AX,0120H

              INT 10H

;正常EOI结束,分别给主从片发EOI    

              MOV AL,20H

              OUT 00H,AL

              OUT 20H,AL

              IRET

IRQ7    endp   

CODE   ENDS

              END START

d)、实验步骤:

              1、写出程序流程图

2、连接实验线路,连好后,拔下接从片INTA的排线,开启实验系统电

源进入正常状态后,再接上此排线。否则,不能进入正常状态(“>”提示符)

       3、编译连接程序,加载到0000:2000

4、运行程序,G=0000:2000,按动 kk1,观察屏幕输出。

 

6思考实验:(选作)

       级连方式,从片上接两个中断源,要求实现从片上的中断抢先。

       参考连接图:

      

思路:

1、主片要设为特殊嵌套方式

2、中断服务程序中要及时开中