工具与软件:
大家好!
我想在 MSP-EXP430G2 Launchpad 上切换 LED。 我实施了一个中断、当我按下按钮 S2时它被激活。 在此中断中、我激活计时器 A0、以便对按钮进行去抖。
不幸的是、去抖不能正常工作、因为当延迟变量(计时器的计数变量)非常小以至于去抖不起作用时、我只能跳转到计时器中断函数。
当延迟变量太高时、我没有进入计时器中断。 你有什么建议我在这里做错了吗?
这是到目前为止我的代码:
#包含
#define 软件 BIT3
#定义绿色 BIT6
#定义去抖20000
void main (void){
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
P1DIR |=绿色; //设置 LED 引脚->输出
P1OUT &=~绿色;
P1DIR &&~SW; //设置 SW 引脚->输入
P1REN |= SW; //为 SW 引脚启用电阻器
P1OUT |= SW; //选择 SW 引脚的上拉
P1IES |= SW; //选择下降沿上的中断
P1IE |= SW; //启用 SW 引脚上的中断
TA0CCR0 =去抖; //设置延迟时间
TA0CCTL0 = CCIE; //在比较模式中启用计时器 A0中断
TA0CTL = TASSEL_2 | MC_0 | TACLR ; //时钟和定时器已停止
__ bis_SR_register (LPM4_bits + GIE);//进入 LPM4并启用 CPU 中断
}
#pragma vector=Port1_vector
__interrupt void PORT_1 (void)
{
TA0CTL |= MC_1; //设置计时器 A0
P1IFG &=~SW; //清除 SW 中断标志
}
#pragma vector=TIMER0_A0_vector
__interrupt void Timer_A0_ISR (void)
{
//停止计时器 A0
TA0CTL &&~MC_1; //停止模式
//检查按钮是否仍然被按下
如果(! (P1IN 和 SW)
{
//切换输出引脚(P1.2)
P1OUT ^=绿色;
}
//清除计时器 A0中断标志
TA0CTL &=~TAIFG;
}