5.2 SW1控制LED1亮灭(中断功能)

发布时间:2024-08-01  

中断:CPU收到中断请求后暂停正在执行的程序,而去执行中断服务函数中的程序,处理结束后,继续执行原来的程序。


能够产生中断请求的中断源如下:

CC2530中断设置步骤:使能端口组中断(IEN)——端口组中具体端口中断使能/禁止(PxIEN)——设置中断触发方式PICTL——使能系统总中断(EA)

下文按此思路展开:

1、使能端口组中断

IEN2|=0x10;    //10000,设置IEN2的第4位,使能P1端口组中断

2、使能具体端口中断

P1IEN|=0x04;    //0100,P1_2口中断

3、设置中断触发方式

PICTL|=0x02;   //P_3到P1_1下降沿触发中断,SW1按下,电平由高变低

4、使能总中断

EA=1;    

要想使用中断功能,必须使能中断总开关EA,并且使能各个中断源的自身控制开关IEN。

具体寄存器详情如下:

中断服务函数格式:以P1为例。函数体不能带有参数,也不能有返回值

#pragma vector=P1INT_VECTOR

__interrupt void P1_INT(void) //注意,interrupt前是两个_

{

  /*处理程序*/

}


中断向量名如下:可查看ioCC2530.h头文件内容

中断标志位:中断源很多,需要识别触发中断的中断源。

P0、P1、P2端口组的中断标志位分别是P0IF、P1IF、P2IF。

P1_2连接着SW1按键,按键按下P1IF值变为1,CPU就去执行P1的中断服务函数。标志位不能自动复位,需要手动清除该中断标志位。

  P1IF=0;  //清除P1端口组中断标志位

具体是P1中哪一个针脚引起的中断,可以通过PxIFG寄存器的值来判断。当然也需要手动清除具体的针脚标志位(在中断服务函数中)。

  P1IFG&0x04     //判断P1_2的中断标志位是否为1

  P1IFG &=~ 0x04;   //清除P1_2的中断标志位

清除过程,先小再大。即先关局部再关总闸。


#include "ioCC2530.h"


#define  LED1   P1_0


/*==================端口初始化函数=====================*/

void Init_Port()

{

  //将P1_0设置为通用I/O端口功能

  P1SEL &= ~0x01;   

  //将P1_0的端口传输方式设置为输出

  P1DIR |= 0x01;   

  LED1 = 0;

}

/*===============外部中断初始化函数==================*/

void Init_INTP()

{

  IEN2 |= 0x10;         //端口1中断使能

  P1IEN |= 0x04;        //端口P1_2外部中断使能

  PICTL |= 0x02;        //端口P1_0到P1_3下降沿触发 

  EA = 1;               //使能总中断

}

/*================外部中断1服务函数====================*/

#pragma vector = P1INT_VECTOR     //外部中断1的向量入口

__interrupt void Int1_Sevice()

{

  LED1 = ~LED1;

/*先清除引脚标志位,再清除端口组标志位,否则会一直进入中断*/

  P1IFG &= ~ 0x04;        //清除P1_2引脚的标志位

  P1IF = 0;               //清除P1端口组的标志位

}

/*====================主函数==========================*/

void main()

{

  Init_Port();          //初始化通用I/O端口

  Init_INTP();          //初始化外部中断

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    );             HAL_GPIO_TogglePin(GPIOC,LED2_Pin);             break;     } } 4. 下载验证 编译无误后下载到开发板,按下KEY_UP蜂鸣器响一下;K1控制D1,按一次亮再按一......
    CODE END 3 */ } 4. 下载验证 编译无误后下载到开发板,按下KEY_UP蜂鸣器响一下;K1控制D1,按一次亮再按一次灭;K2控制D2,按一次亮再按一次灭;K3同时控制D1和D2,按一次它们的状态就翻转一次 ......
    数码管显示温度和风扇的档位。 3.共3个按键:设置、加、减。按一下设置可以设置上限,再按下设置下限,均可以按键加减调整。 4.利用PWM调速,当温度低于下限时,风扇不转动,当温度处于上、下限之间时1档转动(50%的转速),当温......
    key实现LED亮,再按一下实现LED灭  7 *  8 */  9  10 /*配置GPIO 11 *step1配置时钟 12 *结构体:Speed、Mode、Pin 13 *初始化 14 */ 15......
    传感器测温(0-99.9°C),三极管驱动数码管显示温度和风扇的档位。 3.共3个按键:设置、加、减。按一下设置可以设置上限,再按下设置下限,均可以按键加减调整。 4.利用PWM调速,当温度低于下限时,风扇......
    °C),三极管驱动数码管显示温度和风扇的档位。 • 3.共3个按键:设置、加、减。按一下设置可以设置上限,再按下设置下限,均可以按键加减调整。 • 4.利用PWM调速,当温度低于下限时,风扇不转动,当温......
    AT89C51电子时钟说明;此电子时钟单片机采用AT89C51,动态显示采用两只4位数码管,程序比较简单,有兴趣的朋友可以做一下试试。 1、功能 开机时,显示12:00:00的时......
    定时间打开或关闭窗子。  工作原理:多功能窗电路见附图。   单片机采用中断查询工作方式。气敏传感器的信号经IC4A放大,使IC4B翻转,经光耦隔离向N3和N1输入的高电平,反相后N3触发中断0,单片机......
    脉博值更新后蜂鸣器隔一秒响一次,正常脉博值未更新时蜂鸣器一秒响4次。这样能知道当前什么状态,报警状态就是一直响。如果已经按下过按键1 ,那再按一次就会蜂鸣器快响,并计算平均值,计算完蜂鸣器再慢响,相当......
    -51PROC 单片机综合仿真实验仪和Keil C51 集成开发环境进行仿真调试。如果还有时间,可以把本书的第2 章的2.6 节、2.7 节内容也看一下。 五. 实验步骤1. 用40 针排线把DP......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>