ZigBee外部中断控制

1,首先我们来认识一下几个寄存器

  IEN0,IEN1,IEN2               //各外设或端口中断使能寄存器
  P0IEN、P1IEN,P2IEN       //通用I/O 中断使能寄存器
  PICTL                                   //端口中断控制为位,配置上升沿触发中断还是下降沿触发中断
  EA                                        //全局中断总开关,这个开关在IEN0寄存器的第七位,可位寻址。

如果想设置中断优先级可通过设置IP0,和IP1这两个寄存器来实现!

下面上数据手册说明图片

当使用外部中断的时候只需要配置以上的相关寄存器位就可以了!

2,例;使用P1_1端口的外部中断来使LED灯亮灭

#include <ioCC2530.h>

#define uint8_t unsigned char
#define uint16_t unsigned int
#define LED     P1_0
#define Key     P1_1



//  软件延时函数,使用不同的系统时钟,延时不一样
void delay_ms(uint16_t n)
{
    uint16_t i=0,j=0;
    for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}

/*******************************LED灯初始化************************************/
void LED_Init(void)
{
  P1SEL &=~0x01;      //将P1SEL的第0位置零,其实这句可以不写,因为上电默认IO口是0;不过为了严谨还是写上。
  P1DIR |= 0x01;     //将P1DIR的第0位置1,输出模式。
  P1INP |= 0x01;     //将的P1INP第0位置1,表示浮空,输出的话这个其实也不用配置
}
/*********************************按键初始化***********************************/
void Key_Init(void)
{
  P1SEL &=~0x02;                   //将P1SEL的第1位置0,普通IO口。
  P1DIR &=~0x02;                   //将P1DIR的第1位置0,输入模式。
  P1INP &=~0x02;                     //将P1INP第1位置0,上下拉模式。
  P2INP &=~0x40;                     //将P2INP第6位置0,设置P1口为上拉模式。
}
/*********************************中断初始化***********************************/
void Interrupt_Init(void)
{
  Key_Init();
  
  IEN2 |= 0x10;      //端口1中断使能
  P1IEN |= 0x02;        //端口P1_1外部中断使能
  PICTL |= 0x02;    //端口P1_1下降沿触发
  EA = 1;            //使能全局中断
}


int main(void)
{
  LED_Init();
  Interrupt_Init();
  while(1)
  {

  }
}

/**********************************中断服务子函数******************************/
#pragma vector = P1INT_VECTOR 
__interrupt void Point_1()
{
  
  if(Key == 0)
    {
      delay_ms(250);
      if(Key == 0)
      {
        LED = !LED;
       while(Key == 0);
      }
    }

  P1IF = 0;            //0: 无中断未决 1: 中断未决
  P1IFG &=~0x02;       //清除P1_1的中断标志位
}

其中中断子函数写法有点特别

#pragma vector = “P1INT_VECTOR ”                 这一句前面等号前面的固定写法“”里面的是中断源,这个可以在头文件里面找到

__interrupt void “Point_1”()                                 这一句前面void前面的也是固定写法“”里面的是自己定义的函数名称

当然在中断函数的最后我们不要忘记了清楚中断标志哦,不然CPU会一直进入中断函数!

好了,以上就是中断的用法了!

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值