论文部分内容阅读
摘要:介绍了一种用软方式法灵活设置AT89系列单片机多中断优先级并实现多级中断嵌套的方法,分析了系统的时实性。
关键词:单片机;中断优先级;中断嵌套;设置;时实性
中图分类号:TP368文献标识码:A文章编号:1009-3044(2008)11-20359-02
1 引言
ATMEL公司的AT89系列单片机是目前最常用的性优价廉的单片机系列之一,但其中断系统资源却很有限,特别是系统提供的中断优先级更是如此。例如AT89系列标准型单片机一般只有两个中断优先级,从而使其应用受到了限制。因此扩展中断优先级、实现多级中断嵌套便成了人们设计和开发单片机影院系统时常需考虑的问题之一。目前,人们大都是通过增加专门硬件并配合相应编程来解决这一问题的,显然这种方式不利于降低系统成本,使用起来也不够灵活。笔者以AT89系列标准型单片机AT89C51为对象,利用纯软件方式,通过在各中断服务程序的起始部分加入设置指令,在中断返回之前加入对应的恢复指令,成功地实现了中断优先级的多级软件设置。最多可将五个中断源分别设置在五个中断优先级上。五个中断源的优先级由高到低依次为:外部中断INT0、定时器/计数器T0中断、外部中断INT1、定时器/计数器T1中断和串行口中断。这样也就自然实现了多级中断嵌套。
2 中断优先级扩展的原理及方法
2.1 中断控制字的初始化
首先,在主程序中将AT89C51单片机的中断优先级控制寄存器IP的各个位设置为“1”,即将单片机的五个中断源都置成系统中原有的高中断优先级,这是为某个中断请求被响应后重新设置该中断的优先级所做的准备;然后,将中断允许控制寄存器IE的各个位也都设置为“1”,即将各中断请求设置为允许状态,并使CPU处于开中断状态,以确保符合条件的中断请求能够得到响应。
2.2中断控制字的重置和恢复
在某中断请求被响应后,当前中断的优先级重置和低级中断屏蔽,以及中断返回前的当前中断优先级恢复和低级中断开放是实现多中断优先级灵活设置的关键。中断控制字的重置和恢复方法如下:
(1)按照AT89C51单片机同中断优先级上的中断源内部查询顺序,外部中断INT0具有同中断优先级上最高的中断优先权,所以该中断被响应后不需要进行当前中断优先级重置,中断返回前也不需要进行当前中断优先级恢复。
(2)定时/计数器T0中断在同中断优先级上具有次高级中断优先权,所以在该中断被响应后,一方面要保证在执行T0中断服务程序过程中不能再被更低级的中断请求再次中断,即不能被外部中断INT1、定时/计数器T1中断及串行口中断等中断请求再次中断,因此,在T0中断服务程序前必须加入屏蔽低级中断请的设置指令,另一方面又要保证在执行T0中断服务程序过程中可以被更高级的中断请求再次中断,即可以被外部中断INT0再次中断,因此在T0中断服务程序前还必须用一条中断优先级重置指令,将其自身(这里指T0中断)的中断优先级设置成原中断系统中的低中断优先级,具体方法见多中断优先级设置程序模式。另外,还要在进入中断服务前,模拟一次中断返回,以便将相应的不可寻址的中断优先级状态触发器复位,为给响应该中断优先级上的高级中断请求扫清道路[1]。从多中断优先级设置程序模式中可以看到,在T0中断服务程序和中断返回指令之间还有四条与上述设置指令功能恰好相反的指令,其目的是恢复T0中断原来所处的中断优先级和中断屏蔽状态。
(3)外部中断INT1中断、定时/计数器T1中断及串行口中断的中断服务程序前后也按方法(2)做类似处理,具体方法见多中断优先级设置程序模式。
3 多中断优先级设置程序模式
AT89C51单片机五个中断优先级的软件设置程序模式如下:
MAIN:……
MOV IP,#FFH ;将所有中断源置成高中断优先级
MOV IE,#FFH ;中断开放
……
INT0SP:…… ;外部中断INT0中断服务程序
RETI
T0SP:CLR EX1;屏蔽外部中断INT1
CLR ET1;屏蔽定时/计数器T1中断
CLR ES ;屏蔽串行口中断
LCALL ICCRT;模拟中断返回
CLR PT0;置T0中断为低中级优先级
…… ;定时/计数器T1中断服务程序
SETBPT0;恢复T0中断为高中断优先级
SETBES ;允许低级中断
SETB ET1 ;允许定时/计数器T1中断
SETB EX1 ;允许串行口中断
ICCRT:RETI
INT1SP:CLRET1
CLRES
LCALLICCRH
CLR PX1
……;外部中断INT1中断服务程序
SETBPX1
SETBES
SETBEX1
ICCRH:RETI
T1SP:CLR ES
LCALLICCRF
CLR PT1
……;定时/计数器T1中断服务程序
SETBPT1
SETBES
ICCRF:RETI
SRTSP:LCALL ICCRV
CLR PS
……;串行口中断服务程序
SETBPS
ICCRV:RETI
在利用上述中断优先级设置程序模式设置成的五级中断系统中,可实现五级中断嵌套,若有两个或两个以上的中断源同时产生中断请求,则按照原中断系统提供的同级中断检测顺序,即INT0、T0、INT1、T1、SRT的顺序进行处理。
4 中断响应的实时性分析
由于外中断INT0被响应后无需进行当前中断优先级的重置就可以直接执行相应的中断服务,所以,外部中断源INT0提出中断请求后,在3-8个机器周期内便可执行真正的中断服务程序[2]。若中断服务程序的字节数多于8个字节,则需要在0003H单元存放一条跳转指令转去执行真正的中断服务程序,而所有跳转指令的指令周期均为两个机器周期,因此,外部中断源INT0提出中断请求后在5~10个机器周期内便可转去执行符号地址为INT0SP的中断服务程序段。
定时/计数器T0中断源提出中断请求后,同样也在5~10个机器周期内转到符号地址为T0SP处,但此后还需进行低级中断屏蔽、模拟中断返回、当前中断(T0中断)优先级重置等工作,共需时间为6个机器周期,因此定时计数器T0提出中断请求后可在11~16个机器周期内转去执行真正的中断服务程序。
同理可知,外部中断INT1、定时计数器T1、串行口提出中断请求后,分别在10~15个机器周期、9~14个机器周期和8~13机器周期内便可转去执行真正的中断服务程序。
5 结束语
以上将AT89C51单片机的五个中断源用软件方式设置成五个中断优先级并实现多级中断嵌套的方法,具有简便易行且不增加任何硬件成本等优点。若将程序模式稍加改变即可实现中断优先级的三级或四级的灵活设置。这种多中断优先级设置方法也适合于具有中断屏蔽和优先级设置功能的其它系列微处理机。
参考文献:
[1] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2001.197-205.
[2] 李传鸿.单片机原理及应用基础教程[M].哈尔滨:东北林业大学出版社,2007.89-90.
关键词:单片机;中断优先级;中断嵌套;设置;时实性
中图分类号:TP368文献标识码:A文章编号:1009-3044(2008)11-20359-02
1 引言
ATMEL公司的AT89系列单片机是目前最常用的性优价廉的单片机系列之一,但其中断系统资源却很有限,特别是系统提供的中断优先级更是如此。例如AT89系列标准型单片机一般只有两个中断优先级,从而使其应用受到了限制。因此扩展中断优先级、实现多级中断嵌套便成了人们设计和开发单片机影院系统时常需考虑的问题之一。目前,人们大都是通过增加专门硬件并配合相应编程来解决这一问题的,显然这种方式不利于降低系统成本,使用起来也不够灵活。笔者以AT89系列标准型单片机AT89C51为对象,利用纯软件方式,通过在各中断服务程序的起始部分加入设置指令,在中断返回之前加入对应的恢复指令,成功地实现了中断优先级的多级软件设置。最多可将五个中断源分别设置在五个中断优先级上。五个中断源的优先级由高到低依次为:外部中断INT0、定时器/计数器T0中断、外部中断INT1、定时器/计数器T1中断和串行口中断。这样也就自然实现了多级中断嵌套。
2 中断优先级扩展的原理及方法
2.1 中断控制字的初始化
首先,在主程序中将AT89C51单片机的中断优先级控制寄存器IP的各个位设置为“1”,即将单片机的五个中断源都置成系统中原有的高中断优先级,这是为某个中断请求被响应后重新设置该中断的优先级所做的准备;然后,将中断允许控制寄存器IE的各个位也都设置为“1”,即将各中断请求设置为允许状态,并使CPU处于开中断状态,以确保符合条件的中断请求能够得到响应。
2.2中断控制字的重置和恢复
在某中断请求被响应后,当前中断的优先级重置和低级中断屏蔽,以及中断返回前的当前中断优先级恢复和低级中断开放是实现多中断优先级灵活设置的关键。中断控制字的重置和恢复方法如下:
(1)按照AT89C51单片机同中断优先级上的中断源内部查询顺序,外部中断INT0具有同中断优先级上最高的中断优先权,所以该中断被响应后不需要进行当前中断优先级重置,中断返回前也不需要进行当前中断优先级恢复。
(2)定时/计数器T0中断在同中断优先级上具有次高级中断优先权,所以在该中断被响应后,一方面要保证在执行T0中断服务程序过程中不能再被更低级的中断请求再次中断,即不能被外部中断INT1、定时/计数器T1中断及串行口中断等中断请求再次中断,因此,在T0中断服务程序前必须加入屏蔽低级中断请的设置指令,另一方面又要保证在执行T0中断服务程序过程中可以被更高级的中断请求再次中断,即可以被外部中断INT0再次中断,因此在T0中断服务程序前还必须用一条中断优先级重置指令,将其自身(这里指T0中断)的中断优先级设置成原中断系统中的低中断优先级,具体方法见多中断优先级设置程序模式。另外,还要在进入中断服务前,模拟一次中断返回,以便将相应的不可寻址的中断优先级状态触发器复位,为给响应该中断优先级上的高级中断请求扫清道路[1]。从多中断优先级设置程序模式中可以看到,在T0中断服务程序和中断返回指令之间还有四条与上述设置指令功能恰好相反的指令,其目的是恢复T0中断原来所处的中断优先级和中断屏蔽状态。
(3)外部中断INT1中断、定时/计数器T1中断及串行口中断的中断服务程序前后也按方法(2)做类似处理,具体方法见多中断优先级设置程序模式。
3 多中断优先级设置程序模式
AT89C51单片机五个中断优先级的软件设置程序模式如下:
MAIN:……
MOV IP,#FFH ;将所有中断源置成高中断优先级
MOV IE,#FFH ;中断开放
……
INT0SP:…… ;外部中断INT0中断服务程序
RETI
T0SP:CLR EX1;屏蔽外部中断INT1
CLR ET1;屏蔽定时/计数器T1中断
CLR ES ;屏蔽串行口中断
LCALL ICCRT;模拟中断返回
CLR PT0;置T0中断为低中级优先级
…… ;定时/计数器T1中断服务程序
SETBPT0;恢复T0中断为高中断优先级
SETBES ;允许低级中断
SETB ET1 ;允许定时/计数器T1中断
SETB EX1 ;允许串行口中断
ICCRT:RETI
INT1SP:CLRET1
CLRES
LCALLICCRH
CLR PX1
……;外部中断INT1中断服务程序
SETBPX1
SETBES
SETBEX1
ICCRH:RETI
T1SP:CLR ES
LCALLICCRF
CLR PT1
……;定时/计数器T1中断服务程序
SETBPT1
SETBES
ICCRF:RETI
SRTSP:LCALL ICCRV
CLR PS
……;串行口中断服务程序
SETBPS
ICCRV:RETI
在利用上述中断优先级设置程序模式设置成的五级中断系统中,可实现五级中断嵌套,若有两个或两个以上的中断源同时产生中断请求,则按照原中断系统提供的同级中断检测顺序,即INT0、T0、INT1、T1、SRT的顺序进行处理。
4 中断响应的实时性分析
由于外中断INT0被响应后无需进行当前中断优先级的重置就可以直接执行相应的中断服务,所以,外部中断源INT0提出中断请求后,在3-8个机器周期内便可执行真正的中断服务程序[2]。若中断服务程序的字节数多于8个字节,则需要在0003H单元存放一条跳转指令转去执行真正的中断服务程序,而所有跳转指令的指令周期均为两个机器周期,因此,外部中断源INT0提出中断请求后在5~10个机器周期内便可转去执行符号地址为INT0SP的中断服务程序段。
定时/计数器T0中断源提出中断请求后,同样也在5~10个机器周期内转到符号地址为T0SP处,但此后还需进行低级中断屏蔽、模拟中断返回、当前中断(T0中断)优先级重置等工作,共需时间为6个机器周期,因此定时计数器T0提出中断请求后可在11~16个机器周期内转去执行真正的中断服务程序。
同理可知,外部中断INT1、定时计数器T1、串行口提出中断请求后,分别在10~15个机器周期、9~14个机器周期和8~13机器周期内便可转去执行真正的中断服务程序。
5 结束语
以上将AT89C51单片机的五个中断源用软件方式设置成五个中断优先级并实现多级中断嵌套的方法,具有简便易行且不增加任何硬件成本等优点。若将程序模式稍加改变即可实现中断优先级的三级或四级的灵活设置。这种多中断优先级设置方法也适合于具有中断屏蔽和优先级设置功能的其它系列微处理机。
参考文献:
[1] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2001.197-205.
[2] 李传鸿.单片机原理及应用基础教程[M].哈尔滨:东北林业大学出版社,2007.89-90.