我用CC2541做了个小板子,有10个按键,一个灯。
试外部中断,发现时灵时不灵,有误操作。
程序如下:
/****************************************************************************
* 名 称: InitKey()
* 功 能: 设置KEY相应的IO口,采用中断方式
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitKey()
{
P0IEN |= 0xf3; // P0.1 设置为中断方式 1:中断使能
PICTL |= 0xf3; //下降沿触发
IEN1 |= 0x20; //允许P0口中断;
P0IFG = 0x00; //初始化中断标志位
P1IEN |= 0x0f; // P0.1 设置为中断方式 1:中断使能
PICTL |= 0x0f; //下降沿触发
IEN2 |= 0x10; //允许P1口中断;
P1IFG = 0x00; //初始化中断标志位
EA = 1; //打开总中断
}
/****************************************************************************
* 名 称: P0_ISR(void) 中断处理函数
* 描 述: #pragma vector = 中断向量,紧接着是中断处理程序
****************************************************************************/
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
DelayMS(20); //延时去抖
LED1 = ~LED1; //改变LED1状态
P0IFG = 0; //清中断标志
P0IF = 0; //清中断标志
}
/****************************************************************************
* 名 称: P1_ISR(void) 中断处理函数
* 描 述: #pragma vector = 中断向量,紧接着是中断处理程序
****************************************************************************/
#pragma vector = P1INT_VECTOR
__interrupt void P1_ISR(void)
{
DelayMS(20); //延时去抖
LED1 = ~LED1; //改变LED1状态
P1IFG = 0; //清中断标志
P1IF = 0; //清中断标志
}
我延时20ms,不好使。请问高手,如何解决?谢谢!
|