⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chapter8.htm

📁 我们学校教授的课件 很好的学习助手啊 里面讲的很详细 汉好
💻 HTM
📖 第 1 页 / 共 5 页
字号:
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)使中断请求寄存器IRR的锁存功能无效,不再接收IR<sub>7</sub>~IR<sub>0</sub>上的中断请求信号,直到第二个负脉冲到达时,才又使IRR的锁存功能有效。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)使当前中断服务寄存器ISR中的相应位置1,以便为中断优先级裁决器以后的工作提供判断依据。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">3)使中断请求寄存器IRR中的相应位清零。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  第二个负脉冲到达时,8259A执行如下操作:</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)将中断类型寄存器(ICW<sub>2</sub>)中的数据送数据总线的D<sub>7</sub>~D<sub>0</sub>,CPU以此数据作为中断类型码。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)如果方式控制字ICW<sub>4</sub>中的中断自动结束位AEOI=1,则在第二个<span
  style="text-decoration: overline">INTA</span>负脉冲结束时,8259A会将第一个<span
  style="text-decoration: overline">INTA</span>负脉冲到来时置1的ISR中的对应位清零,从而允许任何级别的中断进入。</font></p>
</blockquote>

<h3 align="left"><font face="宋体" size="5" color="#FFFFFF">三、8259A的工作方式</font></h3>

<blockquote>
  <h4 align="left"><font face="宋体" size="5" color="#FFFFFF">1、设置优先级的方式</font></h4>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)全嵌套方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  该方式是8259A最常用的方式,若只是对8259A设置了初始化命令字,而没有设置操作命令字OCW<sub>2</sub>,则8259A默认工作在全嵌套方式,即:</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  中断请求按优先级IR<sub>0</sub>~IR<sub>7</sub>处理,IR<sub>0</sub>级中断的优先级最高。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)特殊全嵌套方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  特殊全嵌套方式与全嵌套方式基本相同,只是特殊全嵌套方式允许对同级中断响应。一般用在级联体系的主片8259A中。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">3)优先级自动循环方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  初始的中断优先级序列为IR<sub>0</sub>~IR<sub>7</sub>,IR<sub>0</sub>级别最高。当某一个设备的IR<sub>n</sub>受到中断服务之后,其优先级自动降为最低,而IR<sub>n+1</sub>的优先级自动升为最高。该方式由OCW<sub>2</sub>设置。当系统中有多个中断源优先级相等时,可以设置为此种工作方式。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">4)优先级特殊循环方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  与优先级自动循环方式相比,只是初始最低优先级的IR由编程设定(OCW<sub>2</sub>),从而也设定了最高优先级。</font></p>
  <h4 align="left"><font face="宋体" size="5" color="#FFFFFF">2、屏蔽中断源的方式</font></h4>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)普通屏蔽方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 8259A的每一个中断请求输入端都可以通过对中断屏蔽寄存器(OCW<sub>1</sub>)的相应位置1而受到屏蔽,使得该中断请求不能通过8259A到达CPU。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)特殊屏蔽方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  在某些中断处理子程序中,希望开放比本身的优先级别低(所有级别)的中断请求,可以使用OCW<sub>3</sub>设置特殊屏蔽方式。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  设置了特殊屏蔽方式后,再用中断屏蔽寄存器OCW<sub>1</sub>屏蔽某一数位(当前响应的中断所对应的数位)时,会同时清除当前中断服务寄存器ISR中的对应位,使8259A看起来好象不在处理任何中断,从而即使有最低级的中断请求,也能够得到响应。</font></p>
  <h4 align="left"><font face="宋体" size="5" color="#FFFFFF">3、结束中断处理的方式</font></h4>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  当中断处理结束时,必须使IS<sub>n</sub>清0,否则,8259A的中断控制功能就会不正常。使IS<sub>n</sub>清0的动作就是中断结束处理。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)中断自动结束方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  只用在单片8259A和中断无嵌套的情况。该方式通过ICW4设置。系统一进入中断过程,当第二个<span
  style="text-decoration: overline">INTA</span>负脉冲到达8259A后,8259A会自动清除当前中断服务寄存器ISR中的对应数位IS<sub>n</sub>。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)中断非自动结束方式</font></p>
  <blockquote>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">a、一般的中断结束方式</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
    该方式用在全嵌套方式下,CPU向8259A输出OCW<sub>2</sub>命令字,即可以将对应的IS<sub>n</sub>清0,从而结束中断过程。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">b、特殊的中断结束方式</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
    在非全嵌套方式下,需要采用特殊的中断结束方式。在该方式下,发送出的特殊中断结束命令(OCW2)中,指出了要清除的当前中断服务寄存器中的具体哪一个数位。</font></p>
  </blockquote>
  <h4 align="left"><font face="宋体" size="5" color="#FFFFFF">4、连接系统总线的方式(由ICW4设置)</font></h4>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)缓冲方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 在多片8259A级联的较大系统中,8259A的数据线总是通过总线驱动器和系统的数据总线相连,称为8259A工作在缓冲方式。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 当8259A工作在缓冲方式时,<span
  style="text-decoration: overline">SP</span>/<span style="text-decoration: overline">EN</span>引脚为输出,作为数据总线驱动器的启动信号。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)非缓冲方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  当系统中只有一片8259A,或有多片8259A,但数量较少、系统较小时,8259A的数据线可以和系统的数据总线直接相连,称为8259A工作在非缓冲方式。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 当8259A工作在非缓冲方式时,<span
  style="text-decoration: overline">SP</span>/<span style="text-decoration: overline">EN</span>引脚为输入,决定本片8259A是主片还是从片,<span
  style="text-decoration: overline">SP</span>/<span style="text-decoration: overline">EN</span>=1,则为主片,<span
  style="text-decoration: overline">SP</span>/<span style="text-decoration: overline">EN</span>=0,则为从片。只有单片8259A的非缓冲方式系统中,<span
  style="text-decoration: overline">SP</span>/<span style="text-decoration: overline">EN</span>必须接高电平。</font></p>
  <h4 align="left"><font face="宋体" size="5" color="#FFFFFF">5、引入中断请求的方式</font></h4>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)边沿触发方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 8259A将中断请求输入端出现的上升沿作为中断请求信号。由ICW1设置。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)电平触发方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 8259A将中断请求输入端出现的高电平作为中断请求信号。由ICW1设置。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  要求当中断输入端出现一个中断请求并得到响应后,输入端必须及时撤掉高电平,以避免不应该有的第二次中断。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">3)中断查询方式</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  中断查询方式的特点:</font></p>
  <blockquote>
    <blockquote>
      <p align="left"><font face="宋体" size="5" color="#FFFFFF">a、外部设备仍然通过8259A向CPU要求中断服务,但是8259A不使用INT引脚向CPU发出中断请求信号。</font></p>
      <p align="left"><font face="宋体" size="5" color="#FFFFFF">b、CPU内部的IF=0,禁止外部对CPU的中断请求。</font></p>
      <p align="left"><font face="宋体" size="5" color="#FFFFFF">c、CPU使用软件查询8259A内部寄存器的值,从而确认中断源,实现对设备的中断服务。</font></p>
    </blockquote>
  </blockquote>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; CPU通过OCW3设置查询命令,随后可以读取当前中断服务寄存器(偶地址端口)中的值,该值指出了当前中断请求的最高优先级。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  中断查询方式一般用在多于64级中断的场合,除了需要有8259A之外,还要有一些附加电路帮助完成最后的查询任务。</font></p>
</blockquote>

<h3 align="left"><font face="宋体" size="5" color="#FFFFFF">四、8259A的初始化命令字和操作命令字</font></h3>

<blockquote>
  <h4 align="left"><font face="宋体" size="5" color="#FFFFFF">1、8259A的初始化命令字</font></h4>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 
  初始化命令字是在系统开机时由初始化程序填写的,在整个系统工作过程中保持不变。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">&nbsp;&nbsp;&nbsp; 共有4个初始化命令字,其中,ICW<sub>1</sub>写入到偶地址端口,ICW<sub>2</sub>~ICW<sub>4</sub>写入到奇地址端口。</font></p>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">1)芯片控制初始化命令字ICW<sub>1</sub></font></p>
</blockquote>

<p align="center"><img src="icw1.gif" width="573" height="121" alt="icw1.gif (2363 bytes)"></p>

<blockquote>
  <blockquote>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">A<sub>0</sub>=0,偶地址端口。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">D<sub>7</sub>~D<sub>5</sub>:8086/8088系统中不用,使用在8080/8085系统中。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">D<sub>4</sub>=1,ICW<sub>1</sub>的标识位,以与OCW<sub>2</sub>和OCW<sub>3</sub>相区别。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">D<sub>3</sub>(LTIM):设定中断请求信号的形式。LTIM=0,设定中断请求信号为边沿触发方式,LTIM=1,设定中断请求信号为电平触发方式。</font></p>
  </blockquote>
  <blockquote>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">D<sub>2</sub>(ADI):在8086/8088系统中不用。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">D<sub>1</sub>(SNGL):指出是否为单片8259A,SNGL=1,只有单片8259A;SNGL=0,系统中有多片8259A。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">D<sub>0</sub>(IC<sub>4</sub>):指出是否需要设置ICW<sub>4</sub>。D<sub>0</sub>(IC<sub>4</sub>)=1,需要设置ICW<sub>4</sub>;D<sub>0</sub>(IC<sub>4</sub>)=0,不需要设置ICW<sub>4</sub>。在8086/8088系统中,必须需要ICW<sub>4</sub>,所以D<sub>0</sub>(IC<sub>4</sub>)必定为1。</font></p>
  </blockquote>
  <p align="left"><font face="宋体" size="5" color="#FFFFFF">2)中断类型码初始化命令字ICW<sub>2</sub></font></p>
</blockquote>

<p align="center"><img src="icw2.gif" width="573" height="121" alt="icw2.gif (2097 bytes)"></p>

<blockquote>
  <blockquote>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">A<sub>0</sub>=1,写入奇地址端口。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">D<sub>7</sub>~D<sub>3</sub>,为中断类型码的高5位,中断类型码的低3位取决于中断源所连接的IR<sub>7</sub>~IR<sub>0</sub>引脚。</font></p>
    <p align="left"><font face="宋体" size="5" color="#FFFFFF">D<sub>2</sub>~D<sub>0</sub>,与中断类型码的确定无关。</font></p>
  </blockquote>
</blockquote>
<div align="center"><center>

<table border="1" width="67%">
  <tr>
    <td width="22%" rowspan="2" align="center" bgcolor="#6B8352"><big><big>中断引脚</big></big></td>
    <td width="83%" colspan="8" align="center" bgcolor="#6B8352"><big><big>中断类型码</big></big></td>
  </tr>
  <tr>
    <td width="9%" align="center" bgcolor="#6B8352"><big><big>D<sub>7</sub></big></big></td>
    <td width="9%" align="center" bgcolor="#6B8352"><big><big>D<sub>6</sub></big></big></td>
    <td width="9%" align="center" bgcolor="#6B8352"><big><big>D<sub>5</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#6B8352"><big><big>D<sub>4</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#6B8352"><big><big>D<sub>3</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#6B8352"><big><big>D<sub>2</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#6B8352"><big><big>D<sub>1</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#6B8352"><big><big>D<sub>0</sub></big></big></td>
  </tr>
  <tr>
    <td width="22%" align="center" bgcolor="#004040"><big><big>IR<sub>0</sub></big></big></td>
    <td width="9%" align="center" bgcolor="#004040"><big><big>T<sub>7</sub></big></big></td>
    <td width="9%" align="center" bgcolor="#004040"><big><big>T<sub>6</sub></big></big></td>
    <td width="9%" align="center" bgcolor="#004040"><big><big>T<sub>5</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#004040"><big><big>T<sub>4</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#004040"><big><big>T<sub>3</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#004040"><big><big>0</big></big></td>
    <td width="10%" align="center" bgcolor="#004040"><big><big>0</big></big></td>
    <td width="10%" align="center" bgcolor="#004040"><big><big>0</big></big></td>
  </tr>
  <tr>
    <td width="22%" align="center" bgcolor="#004040"><big><big>IR<sub>1</sub></big></big></td>
    <td width="9%" align="center" bgcolor="#004040"><big><big>T<sub>7</sub></big></big></td>
    <td width="9%" align="center" bgcolor="#004040"><big><big>T<sub>6</sub></big></big></td>
    <td width="9%" align="center" bgcolor="#004040"><big><big>T<sub>5</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#004040"><big><big>T<sub>4</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#004040"><big><big>T<sub>3</sub></big></big></td>
    <td width="10%" align="center" bgcolor="#004040"><big><big>0</big></big></td>
    <td width="10%" align="center" bgcolor="#004040"><big><big>0</big></big></td>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -