WSN之中断

这里写图片描述

这里写图片描述

这里写图片描述

每个端口的位都有位于 SFR 寄存器 P0IEN 、 P1IEN 和 P2IEN 的单独的中断使能
这里写图片描述

当中断条件发生在 I/O 引脚之一上面,P0-P2 中断标志寄存器 P0IFG、P1IFG 或 P2IFG 中相应的中断状态
标志将设置为 1。

这里写图片描述

PxIEN :中断使能
P1CTL:设置上升沿触发还是
中断设置步骤:
1、 初始化IO工作在普通IO,上拉输入模式 (可忽略)
2、 首先开IO总中断 IEN
3、 开组内对应的具体某IO中断 PxIEN
4、 上升沿触发还是下降沿触发 PICTL
5、 开CPU总中断 EA
初始化时必须将相应的中断标志位清0!!

#include<ioCC2530.h>

#define LED1 P1_0  //定义P1_0口为LED1
#define LED2 P1_1  //定义P1_1口为LED2
#define KEY  P1_2

/*
  中断设置步骤:
     1、初始化IO工作在普通IO,上拉输入模式   (可忽略)
     2、首先开IO总中断  IEN
     3、开组内对应的具体某IO中断 PxIEN
     4、上升沿触发还是下降沿触发  PICTL 
     5、开CPU总中断  EA 
    注意:初始化时必须将相应的中断标志位清0!!

*/

//
void Init_INT1( void )
{
  IEN2 |=(1<<4);  // 开IO中断 
  P1IEN |=(1<<2);   //打开端口1IO中断
  PICTL |=0x02;     //端口1 上升沿触发
  EA=1;           //CPU总中断打开  
  P1IFG &=~(1<<2);   //中断标志位清零
}

//延迟时间 time ms
void delay_ms(int time)
{
  int i,j;
  for(i = 0 ;i < time;i++)
  {
    for(j = 0;j < 240;j++)
    {
      asm("NOP"); //执行一个空的机器周期,目的是消耗时间
      asm("NOP");
      asm("NOP");
      asm("NOP");
      asm("NOP");
    }
  }
}

//主函数
void main()
{
  Init_INT1();
  P1DIR |=0x03;  //设置为输出模式
  LED1=0;       
  LED2=1;
  while(1); //使程序继续工作

}




//中断
#pragma vector = P1INT_VECTOR    
__interrupt void P1INT_ISR(void) 
{
  if(KEY==0)
  {
     delay_ms(10);  //作用是消抖
      if(KEY==0)
      {
        if(P1IFG & 0x04) 
        {
           LED1=!LED1;
           LED2=!LED2;
           while(!KEY);
           P1IFG &=~(1<<2);   //中断标志位清零
        }
      }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值