#pragma vector=P1INT_VECTOR //头文件**“ioCC2530.h”中的宏定义 __interrupt void P1_ISR(void) //中断处理函数 { if(P1IFG &= 0x04) { KeyPushCount++; switch(KeyPushCount) { case 1:TimerCount5s = 0x00;break; case 2: StartLedFlow=0; LED1=1;LED2=1; KeyPushCount=0; Timer1s=0; break; default:KeyPushCount=0;StartLedFlow=0;break; } } P1IF = 0x00; P1IFG = 0x00; }
时间: 2024-04-26 22:22:18 浏览: 169
这段代码是针对CC2530芯片的,主要是处理P1口的中断。当P1口的IFG寄存器中对应的位被设置为1时,触发中断,并调用P1_ISR()函数进行处理。在函数中,首先判断是否是P1口的第三位(即P1.2)触发了中断,如果是,则将KeyPushCount加1。然后根据KeyPushCount的值进行不同的处理:当KeyPushCount为1时,将TimerCount5s清零;当KeyPushCount为2时,LED1和LED2亮起来,StartLedFlow变为0,KeyPushCount清零,并将Timer1s清零;当KeyPushCount的值大于等于3时,将KeyPushCount和StartLedFlow都清零。最后,清除P1口的IFG寄存器中对应的位以退出中断。
相关问题
#pragma vector=P1INT_VECTOR
#pragma vector=P1INT_VECTOR表示在CC2530芯片的中断向量表中,P1INT_VECTOR对应的中断源的中断处理函数。
CC2530芯片具有多个中断源,P1INT_VECTOR代表P1端口的中断源。当P1端口引脚的状态发生变化时(例如,按下按钮或改变IO口电平),会触发P1端口的中断,并执行P1INT_VECTOR对应的中断处理函数。
在编写代码时,可以通过在P1INT_VECTOR前加上#pragma vector=来指定该中断处理函数的位置。例如:
#pragma vector=P1INT_VECTOR
__interrupt void P1_interrupt(void){
// 中断处理函数的代码
}
在这个例子中,P1INT_VECTOR对应的中断处理函数为P1_interrupt(),在P1端口中断触发时会执行该函数内的代码。
#pragma vector = PORT2_VECTOR __interrupt void P2_ISR(void) { uint16_t a; if(P2IFG & BIT1) //判断是否是P2.1产生的中断 { P2IFG &= ~BIT1; if((P2IN&BIT1)==0) { for(a=0;a<=1000;a++); //按键消抖 if((P2IN&BIT1) == 0) { m=125; } } } P2IFG &= ~BIT1; } #pragma vector = PORT1_VECTOR __interrupt void P1_ISR(void) { uint16_t a; if(P1IFG & BIT1) //判断是否是P1.1产生的中断 { P1IFG &= ~BIT1; if((P1IN&BIT1) == 0) { for(a=0;a<=1000;a++); //按键消抖 if((P1IN&BIT1) == 0) { m=500; } } } P1IFG &= ~BIT1; } void main (void) { Key_Init(); int i; int DUTY_CYCLE = 0; //Stop WDT WDT_A_hold(WDT_A_BASE); //P2.0 as PWM output GPIO_setAsPeripheralModuleFunctionOutputPin( GPIO_PORT_P2, GPIO_PIN0 );
这段代码是在处理P2.1和P1.1按键的中断函数。具体地,当P2.1或P1.1按键被按下时,会触发对应的中断,并在中断服务函数中进行按键消抖操作,然后将一个全局变量m的值分别设置为125和500。在main函数中,会先调用Key_Init函数进行按键的初始化,然后停止看门狗定时器,并将P2.0口设置为PWM输出模式。
阅读全文