控制/MCU
中断及中断原理
中断是为单片机具有对外部或者内部随机发生的事件实时处理而设置的。中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。单片机具有实时处理功能,主要是靠中断技术来实现的。
从中断这个名字可以知道中断的概念很简单,就是在CPU执行过程中被某些因素所打断,从而去解决产生这些因素的问题。有一个很形象的比喻:当你在烧开水的时候可以去洗衣服,在洗衣服过程中当听到水开水壶响的时候就先暂停转而去倒开水。这样的工作效率很明显要比在水壶边干干巴巴坐着等水开高得多。而中断机制就是这么个原理。
中断流程
中断系统的流程很简单,分为中断请求,中断响应,中断返回。
在主程序运行过程中,由于外部或内部发生的某一事件请求CPU中断迅速前去处理。此时CPU要迅速前去处理,但是此时正在运行主程序,所以CPU会设置断点,在此过程中应用堆栈会记下断点地址以及一些工作寄存器、标志位等信息以保证中断返回时可以正常继续执行主程序,保护断点现场。(中断请求)
断点设置结束后,CPU会根据中断服务程序的入口地址进入中断服务程序中去执行,从而解决中断响应问题。(中断响应)
执行完中断服务程序后,CPU恢复现场,即回到断点继续执行主程序。(中断返回)
中断源
51单片机中有5个中断源,如下图:
52单片机是51单片机的增强型,有6个中断源,如下图:
在本次讲解中以增强型单片机为例
中断优先级
单片机允许中断嵌套,涉及到中断执行的先后顺序,因此引出中断优先级。
因此,单片机中存在中断优先级寄存器IP可以设置各中断优先级。
中断系统结构
由图可以看出使用中断会使用若干寄存器。类似于拨动开关,使得各个中断源有条不紊地工作起来。
中断系统寄存器
在中断系统中会使用若干寄存器,根据中断源的不同我们需要配置不同的寄存器,如TCON、SCON寄存器等。但是有中断允许寄存器IE和中断优先级寄存器IP通常都需要配置。
中断允许寄存器IE (可位寻址)
EA-全局中断允许位(总开关控制各个中断)
ET2-定时/计数器2中断允许位
ES-串行口中断允许位
ET1-定时/计数器1中断允许位
EX1-外部中断1中断允许位
ET0-定时/计数器0中断允许位
EX0-外部中断0中断允许位
以上各允许位均为1打开,为0关闭。
中断优先级寄存器IP (可位寻址)
PS-串行口中断优先级控制位
PT1-定时/计数器1中断优先级控制位
PX1-外部中断1中断优先级控制位
PT0-定时/计数器0中断优先级控制位
PX0-外部中断0中断优先级控制位
以上各位均为1高优先级,为0低优先级。
中断服务程序的书写
void 函数名() interrupt x
{
……
}
其中一般无返回值故写void,“函数名”可以根据功能来自主命名,interrupt x 必须书写以表明使用哪个中断,从而使CPU找到中断服务程序入口。序号x如下。
中断服务程序的理解
纵观整个带有中断服务程序的C程序,除了在函数名后书写序号外,中断服务程序书写与普通的自定义子函数并无多大区别,但是与自定义子函数不同的是,在主函数中并没有中断服务程序的调用,这就很容易使人一头雾水,搞不清楚中断服务程序是如何被运行的。
其实问题的答案就在中断服务程序本身,正是由于其函数名后书写的中断号让CPU可以找到这段代码,从而去处理中断。所以就可以理解为中断服务程序中的代码就是写在了main主函数中,只不过只有在满足对应的中断标志位置1时,CPU才转而去执行这段代码,因此不同于自定义子函数那样需要去声明、调用。
各中断详细介绍
按照自然优先级排序
全部0条评论
快来发表一下你的评论吧 !