物联网CC2530使用外部中断控制LED灯
·
任务目标:
(1)掌握关键字interrupt的用法,设计中断服务函数
(2)对按键对应引脚设计对应外部中断
(3)对中断函数进行初步了解,将LED1常亮,LED2进行按键中断控制
具体步骤:
(1)首先明确此次任务目标,分别对需要控制的引脚进行中断初始化
void Init_INTP1()
{
EA = 1;//使能总中断
IEN2 |= 0X10;//将P1端口组使能中断
P1IEN |= 0X04;//对应的P1引脚使能中断
PICTL |= 0X04;//将端口设置为下降沿触发
}
外部中断如套娃式写法:总中断--外部中断(此处忽略了外部中断,但不影响代码执行)--端口组中断--具体引脚中断--具体中断的触发类型。
这里对中断触发类型做个具体解释:
触发类型分为上升沿触发和下降沿触发,通俗来说就是信号从从低电平到高电平(上升沿触发),高电平到低电平(下降沿触发)两种过程中所触发的动作。因此根据实际情况PICTL的中断触发方式:0为上升沿触发;1下降沿触发(可上网查讯)
(2)根据实际设计中断服务函数
确定端口组后将对应的外部中断向量赋值给它;使用关键字interrupt定义中断服务函数,实现中断功能,具体代码中可以去判断对应的引脚是否被置位,然后进行下一步,最后将外部中断请求置为零,实现按键的中断开关效果。
#pragma vector = P1INT_VECTOR//中断服务函数的赋值向量为P1端口组
__interrupt void Service_INTP1()
{
if((P1IFG & 0X04) == 0X04)//判断操作是否为0x04,如果是那么P1_2位产生中断事件
{
P1_1 = ~P1_1;
}
P1IFG = 0x00;
//最后将外部中断请求置为0,无中断操作实现中断P1_2开关
}
(3)进行最后的操作完善程序所需代码。(全代码如下)
#include <ioCC2530.h>
void delay(unsigned int time)//进行简单延时
{
while(time--);
}
void Init_port()//引脚初始化
{
P1DIR |= 0X03;
P1SEL &= ~0X03;
P1 &= ~0X1B;
}
void Init_INTP1()
{
EA = 1;//使能总中断
IEN2 |= 0X10;//将P1端口组使能中断
P1IEN |= 0X04;//对应的P1引脚使能中断
PICTL |= 0X04;//将端口设置为下降沿触发
}
#pragma vector = P1INT_VECTOR//中断服务函数的赋值向量为P1端口组
__interrupt void Service_INTP1()
{
if((P1IFG & 0X04) == 0X04)//判断操作是否为0x04,如果是那么P1_2位产生中断事件
{
P1_1 = ~P1_1;
}
P1IFG = 0x00;
//最后将外部中断请求置为0,无中断操作实现中断P1_2开关
}
void main(void)
{
Init_port();//引脚初始化
Init_INTP1();//中断初始化
while(1)
{
delay(60000);
P1_0 = 1;
}
}
更多推荐



所有评论(0)