在这一节中,缘分给我们讲了单片机的有趣的事情。 那是中断
从图中可以看到,中断源连接到P3端口。 那么,中断是什么,中断是如何发挥作用的,原理是什么? 请放心。 不要紧张。 和缘分一起看看这些有趣的问题吧。 为了很好地说明这个晦涩难懂的概念,缘分用腹泻来说明这件事。 请相信你看了会吃饱的。 那么,家长们在看到这个之前深呼吸,闭上眼睛,小心。 感觉好些了吧? 那么,回去贴吧,你可以大声笑了。 为了防止看到后笑,请贴上。
首先,让我们考虑一下什么是中断。 比如,缘分在这里写帖子,突然缘分肚子痛得不得了,必须去厕所。 回来之后必须继续投稿。 那么,在这里写帖子是正常事件,肚子疼是信号,上厕所是另一个事件。
在这里,如果写帖子是执行程序的话,肚子痛是中断的源头,上厕所是中断的程序。 看看这个就明白了吧? 其实中断是指插入当前任务,或者进行其他任务,结束后又返回到当前状态的过程。 关于中断的名词解释,缘分自不必说,可以去看相关资料。
所以,我们每个人的生活都在无数的中断中度过。 这样,我们的生活就足够丰富多彩了。 假设人的一生只有睡觉,不中断的话,会怎么样呢? 呵呵,效果可以想象。 可以那么打断吗? 有一天,我在写帖子很生气,就厕所中断事件去了n次。 结果,缘分又进入了另一个中断之中。 也就是说,要打鱼钩。 结束后回来,发现自己很虚弱,又进行了另一次中断事件,煮了米粥,喝了才感觉好了一点,于是继续投稿。
在以上过程中发现了几个特征:
1、一切中断都有原因。 我们称之为中断源。 也就是说,中断会因某种情况或条件而发生。 如上所述,腹痛是中断的原因。 没有这个原因就没有中断。 有人可能会说即使肚子不痛也要去厕所,那去厕所的理由是什么呢? 尿液一膨胀,尿液就膨胀,这就是中断源。
2、一有中断源,就立即执行中断应答。 也就是说,执行中断的事件在事件执行完成后将恢复为原始任务。 如果程序的执行被中断,则在原程序的处理被中断时被标记,处理完成时也被标记。 例如,假设在写帖子时发生了上厕所的中断事件。 我去了厕所马上就回来了。 缘分在中断事件中不能去——厕所。 谁想一直在那里面? 中断事件完成后,即使中断关闭,也会标记一个中断的开始和结束。 的过程中边缘写帖子的过程是常规事件,离开键盘就是上厕所插队的开始。 那么,过来,再次触摸键盘,这就是中断的结束。
3、不仅仅是中断。 也就是说,中断中可以有多个中断。 但是,如果发生多次中断,时间上一定会有延迟。 在上面,缘分让我肚子痛,我去了洗手间。 上厕所的时候,正好有人打来了重要的电话。 那时,缘分必须接电话。 无论如何,接不完电话是不能出厕所的。 这样,接完电话后,从厕所里继续写帖子。 但是这个时间比单纯上厕所的时间要长得多。 在这里,你会发现接电话是另一个中断事件。 这件事发生在上厕所的中断中。 这称为中断嵌套。
4、所有的中断都与一个事件相应,并不是一起运行的。 有先后顺序的是,它很着急。 那个被放在最前面。 例如,去厕所的时候正好打来了电话。 那么,你是先接电话还是先上厕所? 关于缘分,如果生气受不了的话,必须先去厕所。 这在当时是非常仓促的中断事件。 放在后面的话,马上就到后面的洗手间就变成第一级了,接电话就是第二级了。 如果这个时候,电话从国家某检查组打来,上厕所还能忍一会儿。 这个时候,接电话成为了第一选择,水平也成为了第一水平。
5、中断事件中,既有外部造成的,也有内部造成的。 外部中断称为外部中断,内部中断称为内部中断。 在上述情况下,由腹痛引起的上厕所的中断称为内部中断。 因为这决定了我们自己是否进行上厕所的中断应答,接电话是外部中断。 电话是因为别人给你打的,不是你自己的错。 但是有人
了解这一点,看看我们在单片机上的中断是怎么回事:
在我们的单片机中,只有P3口具备与中断相关的第二种节能。 大致情况如下图。
我们看到这些图真的很混乱,感觉不知道发生了什么,看看他们在做什么:
看到这里我觉得还不太明白,这些东西到底是什么? 那么,让我们再来看看缘分的另一张图。
看这个,大概有影响吧。 让我们来看看他们的关系:
g.com/origin/e900001fc06ba6ab838?from=pc">看了这些,是不是很迷糊呢,呵呵,不迷糊才怪呢,这里缘缘就给你们一一说明这些乱七八糟的东西,看看它们是怎么工作的,亲们,一定好记好哦:
1、从第一张图上我们看到,我们的P3口有6个管脚是关于中断的,两个是外部中断接口,两个是内部中断接口,两个是串行口的接口:
这里我们要知道一个情况,那么就是所有的这些管脚都是有特殊功能的寄存器控制的,那些寄存器的功能是干什么的,缘缘常把它们看成是一组开关,用来管理这些接口的工作状态的。我们看到外部与内部中断占用了一个寄存器TCON,而串行口占用了一个寄存器SCON,我们看到它的说明是中断标志,我们在前面说过,中断标志就是中断开始的标志了,这里我们把它与中断源归为一类,也就是有中断源时,会产生中断,当进行中断时,肯定会从标志处进行中断事件的。
2、从所有的图中我们看到这样一种情况,就是外部中断是两个,内部中断也是两个,串行中断是一个,其实外部中断的两个的工作原理是一样的,两个内部中断工作原理也是一样的,口行口的工作原理是另一回事,这样,我们要了解的中断只有三种,外部、内部、串行口,那么我们把它们的工作分开说是不是就很明了,我们在后面对它们分别说明吧:
3、在第一张图中,有个IE,中断充许位,我们再来看看IE是干什么的,在了解这个之前,缘缘先来给亲们讲个故事吧:
记得那是很久很久以前,那是一个风急夜黑的夜晚,没有月亮,也没有太阳,更没有星星,黑得不见五指……
刚才缘缘说了什么——废话!下面,故事才真正开始:
在一个安宁的夜晚,11点了,你瞌睡得不行了,就睡下了,这时你的一个鲜艳的纸鹤要来了,有重要的事情找你,在楼下按动了门铃,然后你起床了,打开了灯,开了门,然后在一起聊天,这时,客人说有点渴了,所以你又用电水炉炖了一炉水,然后接着聊天,聊了一会,客人把事说完了就走了,完了你把门关了,把灯关了,然后再回上床上睡觉。
在这里,你的睡觉是一个正常的事情,而这中间却有许多的中断事件产生,我们可以看到,在这一系列事件中,有种条件会惯穿始终,那就是电,为了更明确点,我们看看下图:
在这里,我们看到,不管怎么样,我们得让总开关开启,这样,后面的开关才会产生作用,如果总开关开启了,那么下面四个一组的开关就会控制每一条线路的动作,假设门铃的一个开关关了,那么你在睡觉时,有人按门铃你也听不到,这样就进不了你起来开门的中断事件了,而门铃是在房子外面的,我们就称为外部中断,如果我们按照第二张图的说明,把它们都连到一起会是怎么样的情况呢:
通过这张图(因为串中比较特殊些,所以没有画),我们更明确地知道这些寄存器是怎么回事了,原来它们就跟开关一样,来控制中断的产生与执行的,其实它们就是三个类别,我们把它们分开来一个个地去说:
那么这些中断在程序中是怎么产生的呢,在程序中怎样去执行的呢,缘缘跟你们一一去了解吧,我们就先看看外部中断吧,串行口中断和内部中断我们放到后面再讲:
我们了知道了外部中断有两个,缘缘上面说过,说它们的工作方法是一样的,那么我们就先操作一个,把一个学会了,那我们就把与外部中断有关的这些开关先归纳到一起,我们就以外部中断0,也称INT0(P3.2)来说说吧:
首先,我们要让INT0工作,先得打开总开关,就是EA,那么就是EA=1有效,打开了这个,我们就得打开分开关,我们通过前面的图得知,控制INT0的分开关是EX0,这里当然是打开了,那么EX0=1有效,完了我们还可以看到,控制INT0的工作方式是IT0,工作方式中,设置为0即为电平触发有效,即当接触到低电平0时,它就会产生中断,设置成1时,为负跳变有效,什么时负跳变呢,就是它原来设置的是高电平,当检测到电平从高瞬间变低,就产生中断,在产生中断后,电平还是高的,等待下次中断产生。
这样,我们通过上面的分析,得知了外部中断0在应用时总共就这么几个开关,是其它的对这个中断是没有用的,所以我们只要管好这几个有关的开关就行了:
这里,我们看到,我们就控制了这么三个开关,就完成了对外部中断0的操作,是不是很简单呢,其实,把这一大堆的开关分开,一个个地去分析就会很简单的,至于优先级的意思是如果这个程序中包含多个中断,应该先执行那一个,而为了区分,所以在中断函数中用了数字代替它们了,但不管程序中是一个还是多个,中断的代号是定死的,如果程序中只有一个中断,不写代号中断也是无法进行的。
下面缘缘就写一个关于外部中断的程序吧,亲们可要记下了,中断函数是单独的函数,要写在主函数外面,中断函数是不用声明的:
我们先做一个流水灯的程序,然后在流水灯的程序中加入中断就行了
看看是不是很简单,其实我们明白了它的控制方式,是很容易理解的,完了我们烧进去发现,当P3.2口接触到低电平时,缘缘用P2.0接的继电器就会吸合,但吸合了不会停止,这时我们在主程序中加入关闭的处理即可:
看了以上的介绍,中断是不是很简单的,你只要找到它们对应的开关控制,然后管理这些开关就行了,在程序中是,要那个中断,就把中断的序号写上就行了,刚才用到的是外部中断0,外部中断1也一样的,亲们可以把那个程序改改,改成外部中断1来玩玩,只要把开关找对就行了,对于外部中断的内容,就算是说完了,具体的应用在以后的其它程序中都会用到,这里先明白它是怎么回事就行了,当以后用到时,就会慢慢明白的,为了让大家更方便地提问解答,缘缘建议加入 本论坛的群222951503,那里有缘缘和群中的jzdxm们联合为你排忧解难。
通过这一节,我们明白了中断与外部中断是怎么回事,下节,我们就看看内部中断中的定时器/计数器是怎么回事了(缘缘学单片经验手记:中断,想说爱你并不是很容易的事)
了解全系列缘缘单片机系列教程,请关注微信公众号ickeybbs,回复“缘缘”。