cc2530 按键中断

本文介绍了单片机中断系统的工作原理,包括外部中断和内部中断,并详细讲解了如何配置中断寄存器,如P0IEN、P0INP、PICTL等,以实现中断的开启和触发方式设置。通过提供的外部中断初始化代码,展示了如何为P0口的中断进行配置,以及中断服务函数的编写,当按键中断发生时,LED状态会切换。在实际应用中,中断机制对于实时响应外部事件至关重要。
摘要由CSDN通过智能技术生成

中断理论

中断是单片机实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,单
片机的中断系统将迫使 CPU 暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。中断又分外部中断和内部中断。

寄存器介绍

P0IEN:各个控制口的中断使能, 0 为中断禁止, 1 为中断使能。

 P0INP:设置各个 I/O 口的输入模式, 0 为上拉/下拉, 1 为三态模式。

PICTL:设置各个I/O口的中断触发方式, 0 上升沿触发, 1 下降沿触发。
 

 IEN1:中断使能 1, 0 为中断禁止, 1 为中断使能

 P0IFG:中断状态标志寄存器,当输入端口有中断请求时,相应的标志位将置 1。

 外部中断初始化的代码

void ext_init(void)
{
P0SEL &= ~0x10; //通用IO
P0DIR &= ~0x10; //作输入
P0INP &= ~0x10; //0:上拉、 1:下拉
P0IEN |= 0x10; //开P0 口中断
PICTL &=~ 0x01; //下降沿触发
P0IFG &= ~0x10; //P0.4 中断标志清 0
P0IE = 1; //P0 中断使能
EA = 1; //总中断使能
}

 中断服务函数的代码

#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
  EA = 0;                         //关中断  
  if((P0IFG & 0x10 ) >0 )         //按键中断 ,P0_4
  {
    P0IFG &= ~0x10;               //P0.4中断标志清0
    LED1 =!LED1;
  }
  P0IF = 0;                       //P0中断标志清0
  EA = 1;                         //开中断
}

主函数中调用中断初始函数,连续按下 CC2530 主板上 KEY 按键,会发现当按键被按下时, LED 的亮灭状态会发生改变。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值