zigbee 外部中断

与外部中断有关的寄存器

除了这些公共中断使能之外,每个端口的位都有位于 SFR 寄存器 P0IEN、P1IEN 和 P2IEN 的单独的中断使能。即使配置为外设 I/O 或通用输出的 I/O 引脚使能时都有中断产生

I/O中断方式由寄存器PICTL控制

当中断条件发生在 I/O 引脚之一上面,P0-P2 中断标志寄存器 P0IFG、P1IFG 或 P2IFG 中相应的中断状态标志将设置为 1。不管引脚是否设置了它的中断使能位,中断状态标志都被设置。当中断已经执行,中断状态标志被清除,该标志写入 0。这个标志必须在清除 CPU 端口中断标志(PxIF)之前被清除

P0IFG: P0 中断标志

P1IFG: P1 中断标志

P2IFG: P2 中断标志

初始化步骤:

1.设置寄存器IEN0、IEN1和IEN2中相应中断使能位为1

2.设置P0、P1、P2中指定引脚中断使能位为1

3.最后在寄存器PICTL中设置中断是上升沿或是下降沿触发

4.使能IEN0中EA位为1,开总中断

代码

#include "iocc2530.h"

#define D3 P1_0
#define D4 P1_1

#define SW1 P1_2


void  GPIO_init(){
    P1DIR |= 0X03;
    D3 =0;
    D4 =0;
}

void INT_init(){
    IEN2 |= 0X10;     //P1口的中断使能
    P1IEN |=0X04;     //开启P1_2的中断使能
    PICTL |=0X02;   //P1_2为下降沿触发
    EA=1;      //开启总中断
}


void main(){
    GPIO_init();
    INT_init();
    while(1){
    }
}

#pragma vector = P1INT_VECTOR
__interrupt void P1_INT(void){   
  if(P1IFG>0){ 
      D3 = !D3;
      D4 = !D4;
      //注意一定先清位的中断标志位,在清组标志位
      
      P1IFG = 0; //把中断状态标志位清0   
      P1IF = 0;  //组中断标志位清0
     
  }
  while(SW1==0);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值