CC2530外部中断

一切都在代码中




#include <ioCC2530.h>

#define uchar unsigned char 
#define uint unsigned int 

#define LED  P1_1
#define kEY P0_1

void Delayms(uint);
void InitLed(void);
void KeyInit();
uchar KeyValue = 0;

/***
延时函数
*/
void Delayms(uint xms)
{
  uint i,j;
  for(i = xms;i > 0;i--)
    for(j = 587;j>0;j--);
}

/****
LED初始化程序
*/
void InitLed(void)
{
  P1DIR |= 0x02;//设置为输出
  LED = 1;//LED1熄灭
}

/**
KEY初始化程序--外部中断
*/
void KeyInit()
{
P0IEN |= 0x02;//设置各个控制口的中断使能,0为中断禁止,1为中断使能 / /允许按键  P0_1中断使能
PICTL |= 0x02;//0---3设置各个端口的中断触发方式,0为上升沿触发,1为下降沿触发
IEN1 |= 0x20; //允许P0口中断   中断使能1  0为中断禁止,1为中断使能
P0IFG  =0x00;//终端状态标志寄存器,当输入端口有中断请求,相应的位置1
EA  =1;//开启总中断


/**
外部中断操作思路:
1、  首相设置中断使能为,确认让那个IO口进行中断使能进行中断操作,使用的P0IEN寄存器进行微操作,确认哪一个进行中断操作  0禁止中断操作, 1 进行终端操作
2、  然后设置进行中断的条件(上升沿进行中断/下降沿进行中断)  使用的是PICTL寄存器   0上升沿进行中断,  1进行下降沿进行中断
3、  中断使能(一共有三个 IEN0  IEN1  IEN2)   0 中断禁止  1中断使能  和上边的第一步有什么区别???????????????
4、  将终端状态标志位进行置 0 ,他是中断的状态的标志,只要条件完全满足,中断开始,这个P0IFG就会自动置  1,但是中断完成后要记得将他重新置 0
5.   打开总中断
*/
}

/**
中断处理函数
*/

/**
格式  #pragma  vector = 中断向量,紧接着是中断处理程序
**/
#pragma vector = P0INT_VECTOR    
__interrupt void P0_ISR(void)
{
  Delayms(10);//去除抖动
  LED = ~LED;
  P0IFG = 0;//清除中断标志
  P0IF = 0;//清除中断标志???为啥还要用 搜不到
}

/**
主函数
*/
void main(void)
{
  InitLed();
  KeyInit();
  while(1)
  {
  }
    
}


你可能感兴趣的:(zigbee,外部中断)