外部中断,简单来说就是外界给了个上升沿,或是下降沿所触发到单片机内部的中断开启。
上升沿就是从低电平到高电平的一个过程,下降沿反之。
中断是个很重要的一个知识。初学者一定要学好,以后会经常用到的,先上代码。看一看先消化
/***************************************/ /* CNPF */ /* CC2540 BlueTooth 4.0 学习例程 */ /*例程名称: 外部中断 */ /*建立时间:2018/04/24 */ /*描述:按键S1外部中断方式改变LED1状态 */ /***************************************/ #include<ioCC2540.h> #define uint unsigned int #define uchar unsigned char //定义控制LED灯的端口 #define LED1 P1_0 //定义LED1为P1.0口控制 #define KEY1 P0_0 //定义中断口 //函数声明 void DelayMs(uint); //延时函数 void InitLed(void); //初始化P1口 void KeyInit(); //按键初始化 uchar KeyValue=0; /**************************** //延时函数 *****************************/ void Delayms(uint xms) //i=xms 即延时i毫秒 { uint i,j; for(i=xms;i>0;i--) for(j=587;j>0;j--); } /**************************** LED初始化程序 *****************************/ void InitLed(void) { P1DIR |= 0x01; //P1_0定义为输出 LED1 = 0; //LED1灯熄灭 } /**************************** KEY初始化程序--外部中断方式 *****************************/ void InitKey() { P0IEN |= 0X01; //P04 设置为中断方式 PICTL &=~ 0X01; // 下降沿触发 IEN1 |= 0X20; // 允许P0口中断; P0IFG = 0x00; // 初始化中断标志位 EA = 1; } /**************************** 中断处理函数 *****************************/ #pragma vector = P0INT_VECTOR //格式:#pragma vector = 中断向量,紧接着是中断处理程序 __interrupt void P0_ISR(void) { Delayms(10); //去除抖动 LED1=~LED1; //改变LED1状态 P0IFG = 0; //清中断标志 P0IF = 0; //清中断标志 } /*************************** 主函数 ***************************/ void main(void) { InitLed(); //调用初始化函数 InitKey(); while(1) { } }
上面所显示的中断初始化,也就是对寄存器的操作,对着寄存器表,照着自己想要的功能来初始化外部中断。
好好消化下中断,以后绝对大有益处。