[蓝牙开发] CC2540新手学习之外部中断

 外部中断,简单来说就是外界给了个上升沿,或是下降沿所触发到单片机内部的中断开启。

上升沿就是从低电平到高电平的一个过程,下降沿反之。

中断是个很重要的一个知识。初学者一定要学好,以后会经常用到的,先上代码。看一看先消化

/***************************************/
/*                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)
  {
  }
}

上面所显示的中断初始化,也就是对寄存器的操作,对着寄存器表,照着自己想要的功能来初始化外部中断。

好好消化下中断,以后绝对大有益处。

猜你喜欢

转载自blog.csdn.net/weixin_41602920/article/details/80071677