中断允许寄存器-Interrupt Enable Register


要使用单片机的中断系统,通常要设置两个与其相关的寄存器:中断允许 和 中断优先级 寄存器

中断允许寄存器(IE: Interrupt Enable),用来设定各中断源的打开和关闭,字节地址为 A8H,可进行位寻址;

中断优先级寄存器(IP: Interrupt Priority),用来设置中断源的优先级别,字节地址为 B8H,可进行位寻址。

中断允许寄存器
位序号 D7 D6 D5 D4 D3 D2 D1 D0
位地址 AFH AEH ADH ACH ABH AAH A9H A8H
位符号 EA / ET2 ES ET1 EX1 ET0 EX0

 

寄存器的字节地址取值于该寄存器最低位的地址;

单片机复位后,各中断位的值将被置 0 ;

无效位的值将被忽略,所以下面示例中的 IE 可以取值 0xC2 或者 0x82。

 

位名称   开关值
允许 禁止
EA 中断总开关 1 0
ET2 T2 中断允许 1 0
ES 串行中断允许 1 0
ET1 T1 中断允许 1 0
EX1 INT1 中断允许 1 0
ET0 T0 中断允许 1 0
EX0 INT0 中断允许 1 0

 

假如我们要使用内部中断 T0 来处理某些任务时,只需要如下编码即可。

void main(void)
{
  IE = 0x82;//10000010B
}

void t0_interr() interrupt 1
{
  //TODO
}

以上为统一设置中断允许寄存器各个位的值,也可以分别设置各个位,效果是一样的。

void main(void)
{
  EA = 1;//允许中断
  ET0 = 1;//允许 T0 中断
}

void t0_interr() interrupt 1
{
  //TODO
}

 


 

中断优先级寄存器
位序号 D7 D6 D5 D4 D3 D2 D1 D0
位地址 BFH BEH BDH BCH BBH BAH B9H B8H
位符号 / / PT2 PS PT1 PX1 PT0 PX0

 

位名称   优先值
PT2 T2 中断优先选择位 1 0
PS 串口 TI/RI 中断优先选择位 1 0
PT1 T1 中断优先选择位 1 0
PX1 INT1 中断优先选择位 1 0
PT0 T0 中断优先选择位 1 0
PX0 INT0 中断优先选择位 1 0

 

假如要提高 T0 中断和 INT0 中断的优先级,其编码如下:

void main(void)
{
  IE = 0x83;//10000010B
  IP = 0x03;//00000011B
}

void int0_interr() interrupt 0
{
  //TODO
}

void t0_interr() interrupt 1
{
  //TODO
}

也可以单独设置,如下:

void main(void)
{
  EA = 1;//允许中断
  ET0 = 1;//允许 T0 中断
  INT0 = 1;//允许外部 INT0 中断
  PT0 = 1;//提高 T0 中断优先级
  PX0 = 1;//提高 INT0 中断优先级
}

void int0_interr() interrupt 0
{
  //TODO
}

void t0_interr() interrupt 1
{
  //TODO
}

 

如果两个相同优先级的中断源同时发出中断申请,则将按照默认自然优先级高低执行任务。如上,因为外部中断 INT0 的自然优先级高于 T0 中断的自然优先级,所以当这两个相同级别的中断源同时申请是,将先响应外部 INT0 中断。

优先级只有高/低两个状态,所以最多可以实现二级中断嵌套。


知识共享许可协议
《中断允许寄存器-Interrupt Enable Register》CRAFTOUR.COM 采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议进行许可。