外部中断详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

由于不少同学们,学习51单片机到了中断课程的时候,就开始进入一知半解的状态了,为此,开题一篇,以供大家搞明白,中断这回事。

我们还是用清晰点的逻辑来分析,围绕这四个部分来介绍,当然重点在于3和4部分。

通篇我会以让初学者都能看懂的语言来说明。

如果有专业一点的术语名词,我也尽量用简单易懂的描述。

注:本文旨在让大家理解什么是中断和怎么去设置。

具体的东西有些考虑到深浅问题,则跳过不讲。

如需了解,可自行查询资料
1.什么是中断?
2.为什么要有中断?
3.中断怎么触发?
4.怎么设置中断?
什么是中断?
举个老生常谈的例子——接电话。

在一个风和日丽的下午,你在电脑前看着视频,突然间,你桌上的手机来电话了,这时候你就该暂停视频,拿起手机接电话。

OK,回到单片机里来,我们之前写程序,都是在main函数里,甚至main 函数里的while(1)里执行我们的程序。

这就相当于这个例子中的【看视频】,而【电话响了】这个过程,就相当于产生了中断,而【接电话】就是你在中断里做的事情。

为什么要有中断?
为什么要有中断,再举一个例子好了。

简单来讲,就是一些程序我们平时不执行,但到了某个特殊时刻,我们才去执行。

所以我们就让这个特殊时刻产生一个中断,这时候,就跳去了我们特殊时刻才执行的函数里了。

什么情况会触发中断?
那么,我们什么情况下,单片机才会识别到中断,或者说,什么情况下,单片机才会跳入我们中断的函数里呢?
简单来讲,我们的中断大致分为三种,外部中断、定时器中断、串口中断。

这三种的触发方式不一样。

外部中断:
顾名思义,就是单片机外部出现了一定的情况,才进入了中断。

89c51有两个外部中断,一个是P3.2引脚,一个是P3.3引脚。

分别是外部中断0和外部中断1。

我们以外部中断0为例,当P3.2这个脚读到一个低电平(0)或者下降沿(由高电平变低电平)的时候,这时单片机自己就识别到了,所以就会自己跳入中断。

定时器中断:
定时器中断不再这详细说明,大致是讲,我们可以设置一个时间(或者叫闹钟),然后这个单片机会开始计时,当到了这个时间点,单片机就会跳入中断。

串口中断:
串口中断也不再这赘述,大致是,当单片机的RX引脚接收到信号的时候,会自动进入中断。

怎么设置中断?
OK,在了解这些之后,我们就可以开始来写程序,设置一个中断了。

所有中断,如果要开启的话,我们就需要对单片机进行一个【初始化设置】,让单片机知道:“哦,你要老子开启外部中断。


这时候,我们设置的东西,其实就是在设置单片机里的一些特殊功能寄存器。

这时候涉及到一个新名词叫做寄存器,我们这么理解寄存器顾名思义他是存放数据的,需要的时候,我就把他拿出来。

而特殊功能寄存器,我们可以直接把他理解成一组开关。

比如我想开启中断,那我就让某个特殊功能寄存器中某个位赋予一个值(1或0),数据手册会告诉你该给1还是该给0。

这时候,你就相当于打开了一个【开启中断】的开关。

那这时候还不行,因为单片机还不知道,你要开哪个中断。

那你又要去打开一个叫【外部中断】的开关。

那还没完,单片机要知道你外部中断是要哪一类,是低电平触发呢,还是下边沿触发呢。

这时候你又要去打开某个开关。

所以,初始化这些东西,无非就是让你去把一些开关打开,把一些开关关闭。

仅此而已。

接下来给大家一张图。

是51单片机中断的开关图。

这张图十分好用,大家好好珍惜这张图。

左边的:INT0/INT1是外部中断,T0/T1是定时器中断,RX/TX是串口中断。

上面的:TCON、IE、IP、SCON是我们刚才讲的特殊功能寄存器。

中间的:IT0/IT1、IE0、EA等,是这些特殊功能寄存器里的其中一个位,方便我们直接进行位操作。

(就好比 P0与P0.1之间的关系。


那我们举个例子,我们要做一个INT0的低电平触发的外部中断。

那不就是做一个看图连线的过程而已吗?
我们既然选择INT0,那我们接下来就要设置他的触发方式了,IT0选择0的话,就是低电平触发,选择1的话就是下降沿触发。

我们选择0.
IT0=0;
然后,IE0这里其实是个标志位而已,如果我们以刚刚看图连线的思路,他其实就是已经连着的了,我们不需要管他。

接下来EX0(外部中断开关)我们要置1,EA(中断总开关)也置1,这样的话,所有的开关就都闭合了。

IP是设置优先级,可以不管。

也就是说设置外部中断0的低电平触发方式,我们只需要在程序一开始这么写就OK了。

IT0=0;
EA=1;
EX0=1;
这就完成了初始化了。

至于后面的步骤大家应该也都能有所了解了。

看回教材就行。

相关文档
最新文档