8259A中断实验报告

实验十一  8259A中断实验

一、实验目的

1、学习8086/8088与8259A的连接与控制方法,掌握其工作原理。

2、完成程序设计题,学会编写中断服务程序。

二、实验原理

8259A是一种可编程序中断控制器,与8088/86微机兼容,能处理8级向量优先权中断,亦可以通过级联构成64级向量优先权中断系统。具有可编程控制中断方式,并能分别屏蔽各个中断请求。通过4个初始化命令字(ICW1——ICW4)及3个操作命令字(OCW1——OCW3)使用8259A可编程序中断控制器。

     三、实验内容

用8066/86控制8259可编程中断控制器,实现对外部中断的响应和处理。要求程序中对每次中断进行计数,并将计数结果用8255的PA口输出到LED显示。

四、实验方法与步骤

(1)根据要求编写程序

mode      equ    82h

pa8255    equ    8000h

ctl8255   equ    8003h

icw1      equ    00010011b

icw2      equ    00100000b

icw4      equ    00000001b

ocw1      equ    11111110b

cs8259a   equ    09000h

cs8259b   equ    09001h

data      segment

cnt       db     0

data      ends

code      segment

          assume cs:code,ds:data

ienter proc near

       push ax

       push dx

       mov dx,pa8255

       inc cnt

       mov al ,cnt

       out dx,al

       mov dx,cs9259a

       mov al,20h

       out dx,al

       pop dx

       pop ax

 iret

ienter endp

iinit proc near

      mov dx ,cs8259a

      mov al ,icw1

      out dx ,al

      mov dx, cs8259b

      mov al,icw2

      out dx,al

      mov al,icw4

      out dx,al

      mov al,ocw1

      out dx,al

      ret

 iinit endp

 start proc near

       mov dx,ctl8255

       mov al,mode

       out dx,al

       cli

       mov ax,0

       mov ds,ax

       mov bx,4*icw2

       mov ax,code

       shl ax,4

       add ax,offset ienter

       mov [bx],ax

       mov ax,0

       inc bx

       inc bx

       mov [bx],ax

       call iinit

       mov ax,data

       mov ds,ax

       mov cnt,0

       mov al,cnt

       mov dx,pa8255

       out dx,al

       sti

 lp:

      nop

      jmp lp

      start endp

      code ends

      end start

       

(2)根据电路连线。

(3)将程序下载到电路,观察情况。

五、实验结果与数据处理

每按下一次按键,灯就会亮。并且按照0,1,2……的顺序亮。

20121107_165434

六、感想

该实验使我们熟悉了8259A中断的工作方式和初始化命令字ICW及操作命令字OCW的作用,学习并掌握了8088/8086与8259A的连接与控制方法。实验中,总会遇上电脑与硬件总是连不上的情况,我们听从老师的建议,将程序和实验箱都关闭再重新启动或者是换一个电源,这才能够连上。

    七、实验方法与步骤

     程序设计:修改上述程序,使没中断10次计数器加1,并将计数结果从8255的PB口输出到LED显示。完成电路设计及程序的编制,进行调试并验证结果。

(1)根据要求编写程序

     mode      equ    82h

pa8255    equ    8000h

ctl8255   equ    8003h

icw1      equ    00010011b

icw2      equ    00100000b

icw4      equ    00000001b

ocw1      equ    11111110b

cs8259a   equ    09000h

cs8259b   equ    09001h

data      segment

cnt       db     0

bnt       db     0

data      ends

code      segment

          assume cs:code,ds:data

ienter proc near

       push ax

       push dx

       mov dx,pa8255

       inc cnt

       cmp cnt,0ah

       jb  jieshu

       inc bnt

       mov al ,bnt

       mov cnt,0

       out dx,al

 jieshu:  mov dx,cs8259a

        mov al ,20h

       out dx,al

       pop dx

       pop ax

 iret

ienter endp

iinit proc near

      mov dx ,cs8259a

      mov al ,icw1

      out dx ,al

      mov dx, cs8259b

      mov al,icw2

      out dx,al

      mov al,icw4

      out dx,al

      mov al,ocw1

      out dx,al

      ret

 iinit endp

 start proc near

       mov dx,ctl8255

       mov al,mode

       out dx,al

       cli

       mov ax,0

       mov ds,ax

       mov bx,4*icw2

       mov ax,code

       shl ax,4

       add ax,offset ienter

       mov [bx],ax

       mov ax,0

       inc bx

       inc bx

       mov [bx],ax

       call iinit

       mov ax,data

       mov ds,ax

       mov cnt,0

       mov al,cnt

       mov dx,pa8255

       out dx,al

       sti

 lp:

      nop

      jmp lp

      start endp

      code ends

      end start

(2)根据电路连线。

(3)将程序下载到电路,观察情况。

八、实验结果与数据处理

每按10下按键,灯亮一次。并且按照0,1,2……的顺序亮。

九、感想

该实验使我们熟悉了8259A中断的工作方式和初始化命令字ICW及操作命令字OCW的作用,学习并掌握了8088/8086与8259A的连接与控制方法。我们新设置了一个变量bnt,cnt作为计数器。每一次cnt与10比较,若小于10则结束,准备下一次中断。若等于10则bnt加1,输出。

 

第二篇:8259A中断控制器

8259A的内部结构及引脚信号
1.8259A的内部结构
8259A的内部结构图如图5.8所示。它有8根中断请求输入线IR7~IR0,内部有8个主要的功能块。其中3个寄存器是可编程的,即用户可用程序访问它们,这3个寄存器都是8位的。
    (1)中断请求寄存器IRR(Interrupt Request Register)
    IRR用来存放中断请求。某位为l表示相应的中断请求线IR有请求,为O表示该引脚无请求。将IRR某位置1的方式称为触发方式。有两种触发方式:边沿触发和电平触发,前者是利用IR线由低到高的跳变,后者要求IR线为高电平并保持到第一个中断响应信号INTA结束之前。在电平触发方式下,要求中断请求得到响应之后请求输入端必须及时撤除高电平。如果在CPU进入中断处理过程并且开放中断前未去掉高电平信号,则可能引起不应该发生的第二次中断。相比之下,边沿触发方式用起来要方便一些。触发方式由初始化命令字ICWl来设置。


     (2)中断屏蔽寄存器IMR(Interrupt Mask Register)
    IMR存放着8个屏蔽位信息,某位为0表示对应的中断源未被屏蔽,为1表示对应的中断源被屏蔽。被屏蔽的中断源的请求不能参与中断判优,也就不可能向cPu提出中断请求。
    (3)正在服务寄存器ISR(In-Service Register)
    ISR存放着当前正在服务的所有中断级。某位为1表示相应的中断正在服务中。ISR中可能有多位为l,这表明当前出现了中断嵌套。
    (4)控制逻辑
    控制逻辑含一组初始化命令寄存器和一组操作命令寄存器,按预置的工作方式(初始化命令字)或程序员的干预(操作命令字)来管理8259A的全部工作。
(5)优先权判决电路
    优先权判决电路对保存在IRR中的各种中断请求以及IMR的内容进行判断,确定出最高优先级,如果当前没有正在服务的中断或者它比当前正在服务的级别高,则在CPU中断响应期间把它选通至ISR。简言之,在中断响应期间,优先权判决电路找出应该服务的中断,将ISR相应位置位。
  (6)级联缓冲器/比较器
  级联是指使多片8259A连接起来,管理更多级中断。该功能部件在级联方式的主片一从片结构中用来存放和比较系统中各从片标识(ID)。
  (7)数据总线缓冲器
  数据总线缓冲器是8259A与系统数据总线的接口,它是双向三态缓冲器。所有CPU对8259A编程时的控制命令字都是通过它写入的;且8259A的状态信息以及中断响应期间的中断向量也是通过它提供给CPU。
  作为一个能与系统数据总线直接相连的芯片,都应设置数据总线缓冲器。在该芯片被选中时提供与系统数据总线的传送通道;在该芯片未被选中时使芯片内部的数据线与系统数据总线“脱开”(呈现高阻抗),这样不影响CPU与其他芯片的联系。
  (8)读/写控制逻辑
  该电路接收CPU的读/写命令,完成命令字的写入和状态字的读出等操作。
2.8259A的引脚
  8259A是28个引脚的双列直插式芯片,其引脚如图5.9 所示。
   D7~D0为数据线,双向,三态,可与系统数据总线直接相连。
  IR7~IR0为中断请求输入线,接收来自外界的中断请求。
  INT为送至CPU的中断请求输出线。高电平有效。
  iNTA为中断响应输入线,接收CPU在中断响应周期中发来的中断响应信号。
  RD读命令线,低电平有效。有效时,使信息由8259A读至CPU。
  WR是写命令线,低电平有效。有效时,控制信息由CPU写入8259A。
  A0是片内端口选择输入线。对8259A内部寄存器的操作需要通过端口进行。一片
8259A占用两个端口地址,用A0来选择。一般情况下,A0直接接系统地址总线的最低位A0,在8086系统中,一般接系统地址总线的A1。
    CAS2~CASO为级联信号线,当8259A作为主片时,这三条线是输出线;作为从片时,则为输入线。
    SP/EN为从片编程/允许缓冲器信号,这是一个多功能引脚。这里涉及到缓冲器方式的概念,在此先作一些解释。8259A的数据线引脚设计是可与系统数据总线直接相连,但有时有一片或多片8259A希望有自己的局部数据总线,这时需要在8259A的数据线与系统数据总线之间加一个缓冲器,因为数据传送是双向的,所以,该缓冲器也应是双向的。在缓冲器方式下,SE/EN为输出信号,用作允许缓冲器接收和发送的控制信号(EN)。当不处于缓冲方式时,它为输入信号,用来指明该8259A是主片(sP=1)还是从片(sP=0)。
    在一个系统中可将多片(最多9片)8259A级联,但只能有一片是主片,其他都为从片。
所谓主片,是INT线接至CPU的INTR端的8259A。从片的INT线都接到主片的IR输入端。
图5.10是8259A级联(非缓冲器方式)的示意图。

 8259A的工作方式
    8259A对中断的管理涉及多个方面,因此它有多种工作方式,如中断嵌套方式、优先级管理方式、中断结束方式、中断屏蔽方式等。由于8259A是一个可编程的芯片,所以这些方式都可以通过编程方法设置,用户可根据自己的需要选择相应的工作方式。
1.编程角度看8259A
  用户(程序员)在使用一个可编程接口或控制芯片时,一般是从编程角度看,对8259A也是如此,它有10个可编程寄存器,可分成两组。一组是在内部结构框图(图5.8)中明显表示的,它们是中断请求寄存器IRR、中断屏蔽寄存器IMR和正在服务寄存器ISR。这3个寄存器的作用前面已经介绍了。另一组在内部结构框图中没有被表示,属于内部寄存器,它们是4个初始化命令寄存器和3个操作命令寄存器。初始化命令寄存器用来存放初始化命令字,4个初始化命令字分别为Icwl~ICW4(Initial Command Word)。在对8259A进行初始化编程时,要根据需要写入相应的初始化命令字。一旦初始化完成,8259A就按照这些初始化命令字来管理外部的8级中断。在8259A工作期间,可通过操作命令字对它进行必要的干预,使其改变某方面的工作方式。操作命令字有三种:OCWl~OCW3(Operation Commancd
word),它们被存放在操作命令寄存器中。
  2.中断嵌套方式
  8259A的嵌套方式有两种:一般全嵌套方式和特殊全嵌套方式。
  1)一般全嵌套方式
  一般全嵌套方式是8259A最常用和最基本的一种嵌套方式,如果对8259A初始化后没有用操作命令字设置为其他嵌套方式,则8259A就自动按一般全嵌套方式工作。在这种方式下,在为某中断服务期间禁止同级和较低级的中断请求,而较高级的中断请求仍可经INT端向CPU提出。
  2)特殊全嵌套方式
  特殊全嵌套方式与一般全嵌套方式的区别在于:在为某中断服务期间不禁止同级的中断请求,即允许同级的和较高级的中断进入。这种方式所要解决的问题是:在多片级联的情况下,当某从片的中断得到响应、进入中断服务期间,来自该从片的更高级的中断请求仍能为主8259A所识别(对主8259A来说,同一从8259A的8个中断都是一个级别),并向CPU提出请求。所以,在级联的情况下,主片应设置为特殊全嵌套方式,从片一般设置为一般全嵌套方式。
  3.优先级方式
  1)固定优先级
  这是大多数应用中采用的优先级方式。在该方式下,各中断源的优先级是固定的:IR0最高,IRl次之,然后依次降低级别。
  2)优先级自动循环方式
    在该方式下,某一中断源的请求被响应后,其优先级自动降为最低,其他中断源的优先级也随之改变。例如,IR4提出请求并得到响应后,自动降为最低优先级,IR5变为最高优先级,优先级从高向低依次为:IR5、IR6、IR7、IR0、IRl、IR2、IR3、1R14。
    8259A设置为优先级自动循环方式后,最初的优先级是:IR0最高、IR7最低,其他依次类推。
    该方式适用于系统中多个中断源的优先级相等(难以分清它们的级别)的情况,使得各中断源的请求得到响应的机会均等。
  3)优先级特殊循环方式
  该方式是通过编程(OCW2)人为地指定某个中断源的优先级降为最低,其他中断源的级别也随之改变。
4.中断结束方式
    当某一个中断请求被CPU响应后,该中断在ISR中的相应位被置位,表示CPU正在为该中断服务。在中断服务结束、中断返回之前的适当时刻应将该ISR位复位,否则8259A就不能响应该中断源新的请求。这项工作称为中断结束处理。中断结束的方式分自动结束和非自动结束两种,而非自动结束方式又有一般中断结束和特殊中断结束之分。
    1)自动中断结束方式
    该方式需要通过ICW4设置。设置成该方式后,对每一个中断,在中断响应时(对8086/8088,是在第二个中断响应周期的INTA的后沿时),由8259A自动将ISR对应位清除。当然,为该中断的服务并不因此而受到影响。这种方式是为没有经验的程序员忘了在中断服务程序中给出中断结束命令而设立的。
  2)一般中断结束方式
  这种方式配合一般全嵌套方式使用。采用这种方式反映在程序中是在具体的中断服务已做完、返回之前向8259A发一个一般中断结束命令,8259A就将ISR中当前已置l的最高位复位。因为在一般全嵌套方式下,ISR中当前已置1的级别最高的位对应了最后一次被响应和被处理的中断,也就是当前正在处理的中断,所以,将该位复位相当于结束了当前正在处理的中断。
    3)特殊中断结束方式
    在特殊全嵌套方式下,不能确定ISR中哪一位是最后置位的,即哪一个中断请求是最后被响应的,这时就要采用特殊中断结束方式。采用这种方式反映在程序中就是要发一条特殊中断结束命令,这个命令中指出了要清除哪个ISR位。特殊中断结束方式可理解成人为地将ISR中某一位复位。而一般中断结束方式要复位的ISR位是8259A自动寻找的。
    在此,对级联系统中的从片的中断结束处理作一些说明。在将主片设置成特殊全嵌套方式的情况下,从片可能出现中断嵌套,在从片的某中断服务结束时,必须用软件检查被服务的中断是否为该从片惟一的中断。为此,先向从8259A发一个一般的中断结束命令,清除已完成服务的ISR中优先级最高的位,然后再读出ISR的内容,检查它是否为0,如果为0,则向主8259A发一个中断结束命令,清除(主8259A)ISR中与该从片相对应的位(这一步不能忘记);如果从8259A的ISR的内容不为0,则不向主8259A发中断结束命令,该中断返回后,CPU继续为该从片被打断的中断服务。
  5.屏蔽中断源的方式   
  8259A有两种屏蔽中断源方式:普通屏蔽方式和特殊屏蔽方式。前者用得较多,后者仅用于一些特殊应用场合。
  1)普通屏蔽方式
  在普通屏蔽方式下,将中断屏蔽寄存器IMR的某位置1,则它所对应的中断就被屏蔽,从而使这个中断请求不能由8259A送到CPU。如果IMR某位置0,则允许该中断起作用。
  2)特殊屏蔽方式
  有些应用场合,希望一个中断服务程序能动态改变系统的优先权结构。例如,在执行中断服务程序的某一部分时,希望禁止较低级的中断请求,而在执行中断服务程序的另一部分时,又能够开放比本身级别低的中断。
  为达到这样的目的,自然会想到使IMR中本身对应的位置l,使本级中断受到屏蔽,从而为开放较低的中断提供可能。但是,这样做有一个问题:每当一个中断请求被响应时,就会使ISR对应位置1,只要没有发出中断结束命令,8259A就会禁止所有比它低的中断。所以,尽管当前处理的较高级的中断被屏蔽,但由于ISR位未被复位,较低级的中断请求在发出中断结束命令之前仍然不会得到响应。
  引进了特殊屏蔽方式。设置了此方式后,使IMR某位置l,就会同时使ISR的相应位复位。这样,可真正开放级别较低的中断。当然未被屏蔽的更高级中断也可以得到响应。

相关推荐