程控直流电源工程师说不懂中断就别玩单片机,你信吗?

中断

单片机CPU在处理某一事情A时,发作了另一事情B恳求CPU敏捷去处理(中断发作);CPU暂时中断当时的作业,转去处理事情B(中断呼应和中断效劳);待CPU将事情B处理完毕后,再回到本来事情A被中断的当地持续处理事情A(中断回来),这一进程称为中断。

例如

当你正在洗衣时,俄然手机响了(中断发作),你暂时中断洗衣的作业,转去接电话(中断呼应和中断效劳),待你接完后,再回来持续洗衣(中断回来),这一进程就是中断。

单片机中断分为内部中断和外部中断两大类,外部中断由单片机外部设备发生,中断发生后经过单片机的外部管脚传递给单片机,传递这个中断信号最简略的办法就是规则单片机的管脚在什么状况下有外部中断发生,这样单片机一般是有一个或多个IO口当在输入状况时能够用来检测外部中断信号。有外部中断发生的条件一般也就是这五种:IO口输入为高、IO口输入为低、IO口输入由高变为低、IO口输入由低变为高、IO口输入由高变低或许由低变高。

一个衔接到单片机的外部设备,如果想要运用单片机的外部中断,就有必要在自己恳求单片机中断呼应的时分给单片机供给单片机在这五种信号中所支撑的类型来触发单片机中断。程序作业中,一个中断不是只发生一次,一般都会距离持续发生,这五种外部中断触发信号前四种都有一个问题,就是程控直流电源外设发出恳求中断信号后如果信号恳求线状况不改动,程控直流电源外设会无法向单片机供给下一次中断恳求信号。让我们来看看以单片机和外部设备选用负跳变触发中断为例的触发状况。

外部设备以负跳变触发单片机中断,第一次中断恳求外部设备的中断恳求输出脚能够从高变低,触发单片机中断,第一次中断恳求发作后中断恳求脚保持输出低,外部设备无法发生第2次中断的触发负跳变信号。

 程控直流电源工程师说不懂中断就别玩单片机,你信吗?

图1  程控直流电源外设只能发生一次中断恳求信号暗示图

 

将外部设备的中断恳求信号做出修正,本来为需求中断时仅仅输出从高到低改动,现在改为输出先从高变到低,经过一小段时刻后自己从低变回高,这样就能够每次需求中断时都能向单片机输出负跳变触发信号。

 

程控直流电源工程师说不懂中断就别玩单片机,你信吗?

图2  程控直流电源外设可接连发生中断恳求信号暗示图一

 

或许是由外部设备供给某种接口,单片机经过该接口能够对外部设备进行中断铲除操作,中断铲除操作能够让外部设备的中断恳求输出脚康复到高。

 

程控直流电源工程师说不懂中断就别玩单片机,你信吗?

图3  程控直流电源外设可接连发生中断恳求信号暗示图二

 

外部中断触发还有一些特殊办法,比方外部脉冲宽度丈量、外部脉冲计数等,这些办法都是在前面几种基本触发办法上进行功用扩展得来的,外部脉冲宽度丈量就是当中断信号线跳变时会发动内部一个计时器,到下一次中断信号线跳变时经过计时器得到脉冲宽度并重新发动计时器,这些办法很少会运用到,不做详述。


内部中断是指单片机内部的功用模块发生中断信号,只需是单片机内部在CPU外围能独立作业的功用模块都会供给中断功用,常见的内部中断类型有时钟Timer、串口UART、模数变换ADC等。内部中断的作业流程和外部中断没太多差异,仅仅中断恳求信号是在单片机内部进行传输,中断信号不是管脚上的电平状况,而是一个寄存器里边的相应标志位,一般当某个内部中断发生中断恳求时就会将相应标志方位为1,CPU呼应中断时将这个标志位清0。

 

程控直流电源工程师说不懂中断就别玩单片机,你信吗?

图4  内部中断触发暗示图

 

单片机对中断标志位的处理办法没有统一标准,具体的约好办法要看单片机文档。大部分是标志位为1有中断发生,但有少量单片机是标志位为0有中断发生;有的单片机对中断标志位是CPU写入什么就是给改写成什么,有的则是规则有必要经过写1或写0来实现铲除操作,还有少量只需读一下中断标志位就会主动铲除掉该标志位。


如果单片机不想被外部中断触发,大不了将用于衔接外部中断触发信号的管脚接成不会触发中断的电压状况就能够,但内部中断无法去改动内部连线,所以单片机为了能够挑选中断是否能够被除法,在其内部会有相关的寄存器来进行挑选,经过里边的操控标志位开发人员能够根据实践状况决议是否运用中断。一般单片机里边有一个总操控位,这个位能够操控一切中断的开与关,然后每一种中断自己还有一个独立的操控位决议自己的开与关,如果想运用某个中断,就需求将总中断开关和对应中断的开关都翻开。

当单片机有中断信号发生时,就会触发对应中断,不同的中断源会需求不同的呼应办法,也就是说不同的中断发生的时分,需求单片机程序按照不同的中断源做出不同的呼应,这就是中断效劳程序。如果是UART收到新数据发生中断,应该是UART中断效劳程序将数据读回来并做处理,如果是ADC变换完结发生的中断,需求的则是ADC中断效劳程序将数据读回来并做处理。如果需求清中断标志位动作,一般都是在中断效劳程序里边完结。

不同的中断源需求与之对应的中断效劳程序,实践开发中并不是一切的中断都会被用到,开发人员为了节约程序代码空间会只写出自己要运用到的中断效劳程序,也就是说会有一些中断没有与之对应的中断效劳程序,如果触发了这样的中断,单片机程序会运转犯错,前面中断各自独立的操控位就排上用场,将这些操控位关掉,相应中断就不会被触发。

单片机开端上电的时分,如果操控中断是否被翻开的寄存器操控标志位被翻开,可能会呈现中断被误触发的状况,而这个中断如果没有与之相对应的中断效劳程序的话程序就会跑飞,所以单片机上电的时分一般会主动将这些寄存器里边的标志位都关掉,避免误触发。

中断效劳程序是单片机程序的一部分,具体内容由开发人员决议,这样中断效劳程序的巨细在单片机程序中的方位就不固定,当单片机的中断被触发后,单片机需求知道中断效劳程序在什么方位才干履行它,单片机经过中断跳转表(中断向量表)来处理这个问题。

尽管中断效劳程序的巨细和在整个程序中的方位会不固定,但程序只需被烧进单片机体系,关于这个程序来说其中断效劳程序的巨细和在整个程序中的方位就会被固定下来,如果对单片机程序空间分配我们做出一些约好,将一个肯定固定地址专门分配给中断运用,程序编译时会将中断效劳程序的开端地址(或许是跳转到中断效劳程序的指令)填到这个肯定固定地址地点的空间,当中断发生时分,单片机先将肯定固定地址地点方位里边的内容读出,根据所读内容就能够跳转到中断效劳程序。

 

程控直流电源工程师说不懂中断就别玩单片机,你信吗?

图5  中断呼应暗示图

 

简略的单片机所供给的中断品种有限,为了简化程序,会给每一个中断分配一个用来存放中断效劳程序地址的地址空间,这种办法其实没什么不好的当地,仅仅单片机技能发展到现在遇到了瓶颈,高端单片机越来越杂乱,所以一些专业厂商开端合作共享技能资源,例如ARM公司利用他们在CPU架构体系上的技能优势专门给别的的厂商供给CPU内核,别的的厂商在ARM内核的CPU外围添加功用模块,这些功用模块大都支撑中断。

 

程控直流电源工程师说不懂中断就别玩单片机,你信吗?

图6 ARM内核单片机架构图

 

不同厂家在相同CPU内核基础上规划出来的单片机外围的功用模块会各不相同,从而中断的品种和个数也各不相同,而CPU处理中断的办法是一样的,如果延续简略的单片机给每个中断都分配一个地址空间的做法显然有问题,CPU无法知道到底有多少种中断需求支撑,这些中断又分别对应什么模块,所以选用别的一种中断处理办法,将一切中断地址都指向同一个,并将一切中断顺次编号,中断发生时分CPU会通知中断效劳程序当时中断编号是多少,然后中断效劳程序根据中断编号做出相应呼应。

 

程控直流电源工程师说不懂中断就别玩单片机,你信吗?

图7  共用中断进口中断呼应流程图

 

程控直流电源工程师说不懂中断就别玩单片机,你信吗?

图8  独立中断进口中断呼应流程图

 

一切中断运用同一个中断向量地址然后经过中断号判断中断类别的办法尽管处理了通用CPU内核中断不能直接对应中断向量地址的问题,但把它中断处理的流程和具有独立中断向量表的单片机比较就会发现中断的呼应速度会变慢。具有独立中断向量表的单片机只需一条跳转指令就能够直接进入中断程序,而没有独立中断向量表的单片机需求先跳转到中断公共进口,然后经过代码断定中断类别,断定中断类别后才跳转到真实的中断程序中去。C言语的代码会让这种状况愈加恶化,所以如果是没有独立中断向量表的单片机一般选用汇编查表的办法加速中断呼应速度。

 

程控直流电源工程师说不懂中断就别玩单片机,你信吗?

图9  汇编中断快速跳转表

 

中断程序履行完毕后回回来持续履行主程序,这样就要求中断不改动主程序的运转状况,所以中断呼应时需求将程序当时运转的状况信息保存起来,比方程序运转到什么方位、当时CPU状况寄存器的状况等信息。当中断程序履行完毕,能够经过这些信息将CPU状况寄存器康复本来状况,并能回来原程序持续履行。不同的单片机对此的处理办法也会有不同,一种是完全由硬件来完结,并不需求程序来进行办理;别的一种是将状况信息用相应指令保存在特定方位,回来时再用相应指令康复本来状况。

单片机中断还有中断优先级和中断嵌套的概念,但不是一切的单片机都会支撑这两种功用。中断优先级是不同的中断会有不同的优先级别,如果一起有两个中断发生,单片时机先呼应优先级高的中断。中断嵌套是指在中断呼应当中又有新的中断发生,单片机能够暂停当时的中断程序履行去呼应新的中断,新中断程序履行完今后在接着履行当时中断程序。一般中断嵌套是高优先级的中断能够刺进低优先级中断呼应程序,同级或低级的中断不能刺进当时中断呼应程序。

程控直流电源工程师说不懂中断就别玩单片机,你信吗?

图10 中断嵌套暗示图

中断过程阐明:

过程①保存主程序现场,履行中断1效劳程序

过程②保存中断1效劳程序现场,履行中断2效劳程序

过程③康复中断1效劳程序现场,持续履行中断1效劳程序

过程④康复主程序现场,预备持续履行主程序,有新中断不能持续履行主程序

过程⑤保存主程序现场,履行中断3效劳程序

过程⑥康复主程序现场,预备持续履行主程序,有新中断不能持续履行主程序

过程⑦保存主程序现场,履行中断4效劳程序

过程⑧康复主程序现场,无中断发生持续履行主程序

有的单片机一进入中断函数就会主动将中断的总操控位关掉,需求程控直流电源工程师在中断程序顶用程序再次翻开,否则一次中断后一切的中断就不能持续运用。关于中断标志位,在写单片机程序的时分要根据单片机文档进行铲除标志为操作,否则有可能会一旦发生某个中断就会接连不断的重复呼应这个中断,导致主程序不能持续运转。

图片加载中...

在线留言

◎欢迎您的留言,您也可以通过以下方式联系我们:

◎客户服务热线:021-51095123

◎邮箱:xin021@126.com

展开