学海荡舟手机网
导航

主页 > 电子设备技术 > 电器电路基础 > > 详细内容

单片机的中断系统

 51中有5个中断源:两个外部中断(INTO和INTl),两个定时中断(定时器O、1)和一个串行中断。外部中断O和1,是从单片机外部由引脚引入的,在单片机上有两个引脚,名称为INT0、INTl。也就是P3.2、P3.3这两个引脚。我们要用的也是12、13脚。每个中断源都可以通过指令处理特殊寄存器IE中的相关中断允许控制位,分别使得中断源有效或无效。如用位操作指令SETBEA,SETBEX0或CLREXl来控制它。lE还包括一个中断允许总控制位EA,它能一次禁止所有中断。  

 下图为中断允许控制寄存器(1E)示意图。

7 6 5 4 3 2 1 O  
字节地址:A8H EA     ES ET1 TXl ETO EX0 lE

 中断允许控制位=1,允许中断
  
  中断允许控制位=0,禁止中断
  
  EAIEl7中断总允许控制位。EA=0,中断总禁止;EA=1,各中断由各自的控制位设定
  
  ES lE1.4串行口中断允许控制位
  
  ETl IE.3定时器1中断允许控制位
  
  EXl lE.2外部中断1允许控制位
  
  ET0 lE.1定时器O中断允许控制位
  
  EX0 IE1.0外部中断1允许控制位

 单片机里把各种中断规定了一个优先级。单片机采用了自然优先级和人工设置高、低优先级的策略.即可以由程序员设定哪些中断是高优先级、哪些中断是低优先级。由于只有两级,必有一些中断处于同一级别。处于同一级别的,就由自然优先级确定。五个中断源的自然优先级由高到低排列是:外中断咿定时器O一外中断1_+定时器1一串口通信。并且开机时,每个中断都处于低优先级,我们可以用指令对优先级进行设置。
  
  下图是对中断进行优先级设置的专用寄存器。

7 6 5 4 3 2 1 0  
字节地址:B8H     PT2 PS PT1 PXl PT0 PX0   lP

 PX0(1P.0),外部中断0优先级设定位;
  
  PTO(IP.1),定时/计数器TO优先级设定位;
  
  PXl(1P.2),外部中断1优先级设定位;
  
  PTl(IP.3),定时/计数器T1优先级设定位;
  
  PS(IP.4),串行口优先级设定位;

 比如要把定时/计数器T0、外中断1设为高优先级,其它为低优先级。则IP的首3位没用。设为O;PS、PTl、PX0为低优先级。设为O;PXl、PT0为高优先级,设为1;因此,IP的值就是06H。这样,如果5个中断请求同时发生。响应次序为:定时器0一外中断1-外中断O一实时器1一串行中断。

 单片机把中断的允许和优先级确定好以后,接着就是等待中断的请求了。中断的请求使用的是专用寄存器TCON。
  
  其中,ITO(TCON.0)为外部中断O触发方式控制位,可由软件进行置位和复位。当IT0=0时,为低触发方式。当IT0=1时,为边沿触发方式(下降沿有效)。
  
  IE0(TCON.1),外部中断O中断请求标志位。
  
  当有外部中断请求时,这里就会置1,这由硬件来完成;在CPU响应中断后。由硬件将IE0清0。
  
  lTl(TCON.2)为外部中断1触发方式控制位。
  
  lEl(TCON.3)为外部中断1中断请求标志位。
  
  TFO(TCON.5)为定时/计数器T0中断请求标志位。
  
  TFl(TCON.7)为定时/计数器T1中断请求标志位。

   有了中断请求以后,单片机怎样响应呢?

  其实单片机的CPU在每一个机器的结束期间都要顺序采样各个中断请求标志,看是否是“1”,如果是。就说明有了中断请求。所谓中断,其实就是查询,不过是每个周期都查一次而已。
  
  如果中断满足响应的条件,单片机会完成以下几个步骤:
  
  (1)保护断点。即保存将要执行的下一指令的地址,就是把这个地址送入堆栈。


  所以首先要保存将要执行的指令的地址。以便处理完中断后回到原来的地方继续往下执行程序。

      相关知识:

      何谓堆栈:在单片机的RAM中有这样一个用来存放数据的区域,这个区域存放数据的规则就是“先进后出。后进先出”。我们称之为“堆栈”。

      那么单片机中堆栈在什么地方呢

  单片机中能存放数据的区域很有限。
  
  我们不能专门分配一定的空间做堆栈,所以就在内存(RAM)中划出一些空间用于堆栈。但是用内存的哪一块呢?因为实际需求各不相同,有的人需要堆栈多一些,有的人则不需要那么多,所以单片机中堆栈的位置是可以不同的。具体在那里由用户根据自已的需要去定,而这种不同就体现在堆栈指针寄存器SP中值的变化,SP中的值等于27H就相当于一个指针指向27H单元。

     (2)寻找中断入口,清零相应的标志位。
  
  单片机根据5个不同的中断源所产生的中断,会自动转至相应的中断入口向量地址。程序编写时在这里处存放有中断处理程序,如果没把中断程序放在那儿,中断程序就不能被执行。也就是说不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。单片机中也采用这种方法,每个中断产生后都到一个固定的地方去寻找处理这个中断的程序。相应中断服务程序的入口地址如下:

  外中断0:00031H
  
  定时器0:000BH
  
  外中断1:0013H
  
  定时器1:001BH
  
  串口通信:0023H
  
  现在应当明白,为什么前面的程序一开始我们总是这样写:
  
  ORG 0000H
  
  LJMP START
  
  ORG 0030H
  
  MAIN:……
  
  这样写就是为了让出中断服务程序的入口地址。

  因为这里只留有8个字节的存储空间,不足以容纳一个中断服务子程序,所以放置一条跳转指令,以跳到在其他地址空间安放的中断服务子程序。如:
  
  ORG 0003H
  
  LJMP 1000H;将外中断JNTO的中断服务程序存放在。1000H地址单元开始的空间中。
  
  (3)执行中断处理程序,先保护现场。
  
  PUSH PSW
  
  PUSH  A
  
  PUSH DPTR
  
  再中断处理,最后恢复现场。
  
  POP    DPTR

  POP ACC
  
  POP PSW
  
  在中断服务程序中PUSH指令与POP指令必须成对使用,否则不能正确恢复现场。
  
  (4)中断返回,执行完中断服务程序后,见到RETI指令,单片机就从中断处返回到主程序,继续执行主程序。
  
  注意不能用RET指令代替RETI指令。
  
  两条指令的功能都是将堆栈中保存的断点地址从栈顶弹出,送回PC,CPIJ从原来的地方继续执行程序。但RET放在子程序的末尾,RETI放在中断服务程序的末尾。执行RETl指令时还将相应中断优先级状态清O,通知中断系统,中断服务程序已执行完毕,中断重新开放。中断系统如下图所示。

7542


  
  循迹小车板如下图所示。


        循迹小车PCB板


相关文章