×
单片机 > 单片机程序设计 > 详情

51单片机之——外部中断0(INT0)

发布时间:2020-06-18 发布时间:
|

寄存器是干什么的?怎么配置它?配置完寄存器后,有什么作用呢? 

寄存器是中央处理器内的组成部分。它是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。寄存器可以用来暂存指令、暂存数据、暂存地址。换而言之,我们配置寄存器,便是给寄存器中赋予一定的值,而这些值又要与我们的目的想对应,这样它便会有相应的作用。 

例如,芯片的资料规定,当给芯片的 A 寄存器赋“0x11”时,它会出现 B 现象;赋“0x77”时,它会出现 C 现象。那么当我们目的是完成 B 现象时,我们就只需要配置 A 寄存器为“0x11”即可。 

虽说看起来很简单,并且去完成目的时的流程并非这么容易。但是,实实在在而言,这些就是控制寄存器的根本! 

这里以外部中断0(INT0)为例,使得外部中断0每发生一次,最后一位数码管的数值加1。 

前一篇博文已经提到,要实现外部中断0,就必须要配置好两个寄存器IP、IE。而对于中断优先级寄存器IP,当我们使用默认优先级时(上篇博文的优先级表格所述),就不必要去配置IP。 

接下来附上IE寄存器的每一位的作用: 

这里写图片描述 

首先,中断允许位寄存器 IE 是可位寻址的,意思是说,我们可以单独的对D0~D7每一位进行操作,而不需要对 IE 整个赋值(为什么可以这样,因为keil的头文件“reg52.h”已经对 IE 的地址进行了定义)。 

在这里说明一点,对于51单片机的 I/O 口而言,上电时,默认输出为高电平。对于其寄存器而言,上电是,默认为0。可见,当要完成外部中断0的配置时,我们只需要配置中的EX0、EA,当然还有外部中断0的触发方式(产生方式),这里就要看到中断及控制寄存器TCON,其成员及意义如下: 

这里写图片描述

这里写图片描述

可见外部中断0和外部中断1的设置方式雷同,跟据上表所述,我们通过设置IT0来设置外部中断0的触发方式(分别为:低电平触发、下降沿触发),其中 IE 位由硬件自身控制,不需要软件操作。


实例的核心代码如下:


/*数码管配置完成*/

void main()

{

    IT0 = 1;                           //设置为下降沿触发

    EX0 = 1;                           //外部中断0中断允许位                    

    EA = 1;

    while(1);                           //等待外部中断0发生 

    {

        display();

    }                           

}


void INT0() interrupt 0                //中断服务函数的书写格式

{

    if( IE == 1)                       //产生了外部中断,IE 自动置为1

    {

        dspbuf[0]++;    

    }

}


在上面可以看到配置外部中断0相关的寄存器时,我们先打开EX0=1,允许外部中断产生,再EA = 1,打开总中断,这样就配置好了能产生外部中断0的先决条件,通过IT0 来配置中断的触发方式。在中断服务函数中,函数名“INT0”可自由编写,并且中单服务函数不需要声明,后面所加的“interrupt X”X为该中断对应的C语言序号。 

值得注意的是,对于51单片机而言,上电之后,所有寄存器的值默认为“0”,所有 I/O 口的值默认为“1”。 

通过外部中断的理解,很方便的能引出下一节的定时器/计数器中断。


关键字:51单片机  外部中断0  INT0 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
stm32 总线矩阵介绍