Ганс, я не использую переключатель, чтобы установить контакт.Это на самом деле сделано другим процессором.На форуме TI (Texas Instruments) я получил ответ, что в переходе от низкого уровня к высокому может быть скрытый сигнал от высокого уровня к низкому, и наоборот.
Итак, я изменил свой код следующим образом, и он работал нормально.
...
P2OUT |= BIT5 ; /* Enable P2.5 internal resistance */
P2REN |= BIT5; /* Set up P2.5 as pull-up resistance */
P2IES |= BIT5; /* Sets P2IFG for high to low transition */
P2IE |= BIT5; /* P2.5 interrupt enabled */
P2IFG &= ~BIT5; /* P2.5 IFG cleared */
...
#pragma vector=PORT2_VECTOR
__interrupt void port2_isr (void)
{
switch (P2IV)
{
case 0x0CU:
{
TA1CCTL0 &= ~CCIE;
TA1CCR0 = 0U;
TA1CCTL0 |= CCIE;
TA1CCTL0 &= ~CCIFG;
TA1CCR0 = TA1R + 15U;
P2IFG &= ~BIT5;
break;
}
...
...
}
}
#pragma vector = TIMER1_A0_VECTOR /* Timer1_A3 CC0 */
static __interrupt void _timer1_ao_isr (void)
{
TA1CCTL0 &= ~CCIE;
if ((P2IN & BIT5) == 0U)
{
// Got a valid high-to-low assert here!!!
}
}