知道了什么是中断,就好比知道了如何去打开门锁,接下来就是找到钥匙即可。
在51单片机中,有五种比较常见的中断源,分别是INT0、INT1、T0、T1、串口中断。
这五个中断就像是五把钥匙,我们要熟练运用他们,才能让单片机发挥它该有的意义。对于这五个中断源来说,最简单的就是INT0/INT1这两个了,他们两个只干中断这一个活儿,比较实在,相比于T0/T1就比较能干了,身兼数职。然后是串口中断,属于精神分裂型,包含两个中断控制一个中断源,不过,他仅仅只干通讯的活儿,其他不管。
所以柿子要挑软的捏,就先搞这个INT0/INT1。
我们之前说了一个生活中的案例,就是看电视,然后水滚了,去关水,再回来看电视,这个水滚了的声音就是一个触发我们暂停电视的信号。那么在程序中,什么条件是我们暂停主程序,进入中断的信号呢?
首先看下单片机的端口,在端口上,可以发现,有两个针脚,定义就是INT0/INT1。
上图中,我们可以一图览尽所有中断,P3.0/RXD,是通讯写入端口,内部对应是写入中断RX,P3.1/TXD,是通讯发出端口,内部对应是发出中断TX,P3.2/INT0,外部中断0,P3.3/INT1,外部中断1,P3.4/T0,中断0,P3.5/T1,中断1,既然有针脚,就意味着,这个针脚是有用的,很显然。
通过手册我们可以知道,当P3.2/INT0针脚,处于低电位时,就会触发INT0中断程序,事实果真如此吗?真相只有一个,那就是,哪有那么简单。尽管我们找到了触发的端口,也可以给他一个触发的低电位,但是程序的响应,还需要很多工作要做,这就是中断的难点所在了,需要对中断进行配置。就好比我听到水开了,可以至于怎么让水停止沸腾,这还需要我之前有人教过,不然我只能站在水壶边看着它开,无可奈何。
那么我们怎么才能使用这个中断呢?
关于外部中断的使用,要遵守以下步骤,不然还真使用不了。我们先说下使用步骤,然后再详细介绍每个步骤的设置方法。
INT0的使用:
1,打开总中断开关。
2,打开INT0中断开关。
3,配置INT0中断的触发方式。
4,设置中断响应程序。
开始前,我们要先了解一些中断的配置信息,需要依据数据手册。通过STC官网可以直接下载89C52的数据手册。如果需要也可以留言或私信,我单独发送给你。
这个是关于中断的优先级,就是说,我们在处理中断的时候,是有先后顺序的,不然在水开的同时门铃响了,一个人怎么可能既开门又关水?程序也是一样,为了避免出现中断同时发生时的尴尬场面,就给每个中断设置了优先级,INT0和INT1同时触发了中断,那么就会先处理INT0的程序,灯处理完再处理INT1的程序。这样就保证了程序的稳定有序。
光有这个还不行,首先,需要打开中断的总开关,我们可以这么理解中断的运行过程。我用一个电路图来解释一下。
中断信号要想触发中断程序,那么就需要先打开总开关,还要打开INT0专用开关,还要设置触发方式,然后才会正确进入中断程序,完成中断。
总中断开关如何设置呢?
查表可以看到,总开关是EA,打开总开关是EA=1。
然后打开外部中断0(INT0)的开关是EX0,EX0=1。
中断开了,还要设置触发方式,触发方式在另一个表中,继续查表。
查表可以知道,需要IT0设置,当设置为0时,引脚为低电平时会触发中断,就是说当电位变成0V时,才会进入中断响应。当设置为1时,引脚输入电平从高电位到低电位的过程中,就触发中断,这个为什么有两种方式呢?其实都是可以的,不过需要知道的是,当我们采用一个稳定的信号作为触发信号时,就会有这样一个情况,就是当高电位变成低电位时,下降沿只有一次,但是低电位却有很长时间,如果我们的触发源没有退出,就会在下一个检测周期,持续触发中断。如下图。
所以对于一些具有保持信号的触发源,采用下降沿触发还是比较好的。当然如果处理得当,低电位触发也是可以很稳定的。
最后是触发中断后,需要进入中断函数,中断函数,是专门的函数,不在主函数中。需要单独写出来。
我们使用的是INT0的中断,于是就需要用第一个:void into_Routine(void) interrupt 0。
这个中断的名字into_Routine可以自己任意取,但是后边的interrupt 0必须要一致,因为程序就是靠这个来知道你这个是不是INT0的中断程序,写错了,就会出现响应不了或者出错。到这一步,就算结束了。整个中断流程也就结束了。
总结下之前的步骤:
1,开总中断:EA=1;
2,开INT0中断:EX0=1;
3,设置触发方式:IT0=1/0;
4,设置中断程序:void INT0(void) interrupt 0 {执行程序}。
责任编辑人:CC
-
单片机
+关注
关注
6039文章
44575浏览量
636384 -
中断
+关注
关注
5文章
899浏览量
41549
发布评论请先 登录
相关推荐
评论