CC2430基础实验——外部中断

外部中断实验是使用两个按键来翻转LED状态,但这里两个按键不是做键盘用,二是产生中断触发信号。

    实验共用到P1、P1/P0DIR、P1/P0SEL、P1/P0INP、PICTL、IEN1和P0IFG几个个寄存器。其中前几个的作用前面的文章里应经介绍过了,这里就不再重复说明了。这里主要是讲一下后几个寄存器的作用。其中PICTL为P口中断控制寄存器;P0IFG为P1口中断标志寄存器;IEN1为中断使能寄存器1。

    这个实验是到目前为止我改动最大的一个实验了,我想主要还是这个基础实验以前不是跑在2430上的原因吧,在无限龙的这个开发板上的按键管脚并不是P1_2和P1_3,所以要把管脚好好的改动一下才可以。这个试验需要用到P1来控制LED而用P0来控制按键。下面来看一下改过的I/O及LED初始化的设置:

    void Init_IO_AND_LED(void)
    {
      //LED管脚设置

      P1DIR = 0X03; //0为输入(默认),1为输入
      RLED = 1;
      led2 = 1;

      //按键管脚设置
      P0SEL &= ~0X30; //选择P0_4和P0_5作为外部中断
      P0DIR &= ~0X30; //输入方向
      P0INP |= 0x30;  //下拉

      //按键中断设置
      PICTL |= 0X10;   //P0(4-7)位中断打开
      EA = 1;          //打开全局中断
      IEN1 |= 0X20;   // 打开P0中断

      P0IFG |= 0x00;   //设置P0中断标志位,发生中断时相应位置1

     //即先全局EA,然后P0中断开启,最后相应中断位置开启。

     /*

        P1INP &= ~0X0c;//有上拉、下拉
        P2INP &= ~0X40; //选择上拉
        P1IEN |= 0X0c;   //P12 P13
        PICTL |= 0X02;   //下降沿
        EA = 1;
        IEN2 |= 0X10;   // P1IE = 1;

        P1IFG &= ~0x0C;   //P12 P13中断标志清0

     */
    }

    具体的管脚设置说明请找到相应的说明书查找,在这我只想说明的就是2430外部中断的设置问题,如果要使用2430的中断功能的话,那么应当执行下面的步骤:

    Step1:设置IEN0中的EAL位(即EA)为1;

    Step2:设置寄存器IEN0、IEN1和IEN2中相应的各中断使能位为1;

    Step3:如果有,则设置特殊功能寄存器中对应的各中断使能位为1;

    Step4:在中断对应的向量地址上,运行该中断的服务程序(ISR)。

    在这个实验里我们的设置中断部分就是按照这样的顺序设置的,大家可以留意一下上面的橙色部分的程序段。下面我们来看一下ISR的部分:

    #pragma vector = P0INT_VECTOR
    __interrupt void P0_ISR(void)
   {
        if(P0IFG>0)         //按键中断
        {
           P0IFG = 0;
           RLED = !RLED;
        }
        P0IFG = 0;          //清中断标志
    }

    注意红色的部分是改动的,因为用的按键是P0_4和P0_5,所以中断向量是用的P0口的中断向量。整个试验的基本原理在这个中断向量的ISR中就可以清晰可见了。首先的按键触动中断,然后相应的中断标志位置1

致P0IFG的值发生变化(不再是00了),这样一旦发现有中断产生就改变小灯的状态。具体的试验结果就是一按按键,小灯的状态变化(不过说真的,这个中断的反应有点灵敏,按得时间长就认为是第二次中断了感觉,嘿嘿CC2430基础实验鈥斺斖獠恐卸  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值