@LangZiLing
欢迎观看第一次发表博客
你好! 这是小主第一次发表博客!欢迎参观
关于CC2530的按键中断
我们对CC2530进行了一些简单的介绍,现在开始从CC2530的中断和定时器开始介绍:
- 中断 ;
- 灯的初始化
- 按键初始化
- 找到中断源,做好中断处理函数 ;
- 按键中断初始化 ;
初始化管理
LED初始化:LED_Init
void LED_Init(){
P1SEL &= 0x03;
P1DIR |= 0X03;
LED1 = 0;
LED2 = 0;
}
按键初始化:KEY_Init
void KEY_Init(){
P1SEL &= ~0X04;
P1DIR &= ~0X04;
P1INP &= ~0X04;
P2INP &= ~0X40;
}
按键中断初始化:KEY1_ISR_Init
//按键中断初始化
void KEY1_ISR_Init(){
//使能总开关
EA = 1;
//使能P1端口 IEN0 IEN1 IEN2 属于字节定义的 IEN2在第四位
IEN2 |= 0x10;
//使能P1_2的引脚 IEN为中断名字
//P1端口的中断使能
P1IEN |= 0x04;
//设置中断触发方式 PICTL 下降沿触发
PICTL |= 0x02;
}
/*
====================中断函数的处理=====================
| 1、检测中断 if(p1If == 1)
| 2、检测引脚触发的中断(P1IFG&0X02)
| 3、清除中断标志 P1IFG &= ~0x04 中断标志位第二位
| 0000 0100
| 4、总中断标志清0 P1IF = 0; 总中断标志清0
=======================================================
*/
#pragma vector = P1INT_VECTOR //中断函数 pragma vector
__interrupt void KEY1_ISR(void)
{
if(P1IF == 1){ //检测判断中断表示是否为按下
if(P1IFG &= 0X04){ //检测引脚是否触发中断
LED1 = !LED1; //LED灯切换
}
}
//清空中断标志
P1IF = 0;
P1IFG &= ~0X04;
}
完整代码如下
#include"ioCC2530.h"
#define LED1 P1_0 //LED灯
#define LED2 P1_1 //0000 0010
#define KEY P1_2 //P1引脚 0000 0100
void delay(int mun){
for(int i = 0;i < mun ;i++)
for(int j = 0;j < 720;j++);
}
void LED_Init(){//灯的初始化
P1SEL &= 0x03;
P1DIR |= 0X03;
LED1 = 0;
LED2 = 0;
}
void KEY_Init(){//按键初始化
P1SEL &= ~0X04; //选择通用IO
P1DIR &= ~0X04; //选择输入
P1INP &= ~0X04; //设置P1引脚为上拉和下拉
P2INP &= ~0X40; //通过P2的
}
//按键中断初始化
void KEY1_ISR_Init(){
//使能总开关
EA = 1;
//使能P1端口 IEN0 IEN1 IEN2 属于字节定义的 IEN2在第四位
IEN2 |= 0x10;
//使能P1_2的引脚 IEN为中断名字
//P1端口的中断使能
P1IEN |= 0x04;
//设置中断触发方式 PICTL
PICTL |= 0x02;
}
void main(){
LED_Init();
KEY_Init();
KEY1_ISR_Init();
while (1){
delay(200);
LED2 = !LED2;
}
}
/*
===========中断函数的处理==============================
| 1、检测中断 if(p1If == 1)
| 2、检测引脚触发的中断(P1IFG&0X02)
| 3、清除中断标志 P1IFG &= ~0x04 中断标志位第二位
| 0000 0100
| 4、总中断标志清0 P1IF = 0; 总中断标志清0
=======================================================
*/
#pragma vector = P1INT_VECTOR //中断函数 pragma vector
__interrupt void KEY1_ISR(void)
{
if(P1IF == 1){ //检测判断中断表示是否为按下
if(P1IFG &= 0X04){ //检测引脚是否触发中断
LED1 = !LED1;
}
}
//清空中断标志
P1IF = 0;
P1IFG &= ~0X04;
}
总结
第一次写博客,有很多不懂的地方,请大家多多指教,不喜勿喷,谢谢大家!