程序(1)
采用P2.3管脚捕获
#include <msp430x43x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset
_EINT(); //开中断
P2SEL |= BIT3; // 设置引脚P2.3第二功能定时器捕获
TACTL |= TASSEL_1 | TACLR | TAIE | TAIFG; // 定时器寄存器设置,先进中断
TACCR1 = 0x7fff;
TACCTL1 |= CCIE;
TACCTL2 |= CCIS_1 | CCIE | CAP | CM_2; // 选CCIB2捕获,开中断
TACTL |= MC_2;
while(1);
}
void Time_Deal(void)
{
unsigned char flag;
flag = TAIV;
switch(flag)
{
case 2:
_NOP(); //不执行
break;
case 4:
_NOP(); //程序一直死在这里
break;
case 10:
_NOP();
break;
}
}
#pragma vector= TIMERA1_VECTOR
__interrupt void TIMERA1_IRQ()
{
Time_Deal();
}
程序(2)
#include <msp430x43x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset
_EINT();
P2SEL |= BIT0;
TACTL |= TASSEL_1 | TACLR | TAIE | TAIFG;
TACCR1 = 0x7fff;
TACCTL1 |= CCIE;
TACCTL2 |= CCIS_0 | CCIE | CAP | CM_2;
TACTL |= MC_2;
while(1);
}
void Time_Deal(void)
{
unsigned char flag;
flag = TAIV;
switch(flag)
{
case 2:
_NOP();
break;
case 4:
_NOP();
break;
case 10:
_NOP();
break;
}
}
#pragma vector= TIMERA1_VECTOR
__interrupt void TIMERA1_IRQ()
{
Time_Deal();
}
该程序运行起来没有任何问题