(四)中断系统

(四)中断系统

一、理解中断

好了,将按键写完输入输出就都完了,我们来看看单片机内部那些东西,首先说说中断。

中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。
当中央处理器CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统。请求CPU中断的请求源称为中断源

举个例子:
相信不少人都有这样的经历,放假了在家看电视[1],突然听到爸妈开门的声音[2],抓紧关掉电视,开始写作业[3],一个小时后你爸妈喊你吃饭[4],开始吃饭[5],吃完继续作业[6],经过睡觉上厕所等各种操作后,终于第二天早上爸妈出去工作了,又开始看电视[7]。
那么:这个过程中,1就是正在执行的事情,2中断源,其打断了1这件事,开始执行3这件事,这件事又被称为中断服务程序4也是一个中断,而且4出现的时候,即使正在执行2对应的中断服务程序,也依然能够去执行4中断源对应的中断服务程序5,因此我们说,4中断源的优先级要高于2中断源,这样我们就实现了中断嵌套,当5执行完后,会回到3被打断地方继续执行,也就是6,最后经过各种中断等其他操作后,最终会回到最初被打断的1这件事。

二、STC15单片机的中断源

STC单片机也是51内核单片机,但是性能比早期51要好很多,中断源也更丰富,每个系列的单片机对应的中断源可能有区别,但是基本的外部中断、定时器中断等都有。看图:
image.png

三、中断结构图

通过终端结构图,我们可以看出不同中断请求源所对应的使能寄存器和中断优先级,例如如果想要使能外部中断0(INT0),则至少需要开启EX0, EA三个寄存器,其对应的中断请求标志位是IE0,就是说中断产生后,IE0会被自动置位。
{9F5C10AB-6DAF-4AC0-80FB-A562BA0DD3CB}.png
下边这张图显示了每个中断源对应的触发行为,比如外部中断0,当出现下降沿、上升沿和下降沿两种情况时,都是可以产生中断信号的。
image.png
下边这个表格中,我们首先需要注意的时相同优先级内的查询次序这一列,每个中断都有一个查询次序,单片机在运行时会按照这个顺序去查询,当查到某个中断源的中断请求标志位为置位时,就产生中断。部分中断可以有两个到多个(比如STM32单片机)中断优先级,在这里可以使用PX寄存器进行优先级的设置。
image.png

四、函数声明

无论是输入输出还是中断或是其他,几乎所有的功能都需要使用程序来实现,也就是软件开发了,在处理中断时,实际上中断的产生和置位等操作大多是硬件本身完成的,很少需要手动进行置位,我们需要写的代码基本都是中断服务程序。但是这里如何将中断源和中断服务程序绑定到一起呢?或者说,中断源产生后,怎么知道应该执行哪个服务程序呢?这个地方有一个新的名词,叫做中断号,而中断号其实就是中断查询次序。通过给函数指定中断号,一个普通函数就变成了中断服务程序。例

//普通的函数大体包含函数返回值类型,函数名称、函数参数、函数体函数返回值等几个基本组成部分
void Test()
{
    dosth();
}

//在普通函数声明之后,我们在后边给其指定中断号,则该函数就变成了中断服务程序
//需要注意的是:通常中断服务程序没有函数返回值,也没有参数
void Test()  interrupt 0
{
	dosth();
}

以上代码中,需要注意一个新的关键字:interrupt。这是指定中断号所使用的关键字,函数名称可以使用正确的标识符就可以,而关键字一定不能写错。常见的中断函数:
image.png
好了,中断系统就写到这里,下一篇举个例子,看看各个中断的使用方法。
引导关注微信二维码2.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值