P1SEL |=BIT0; //允许其第二功能作为TACLK输入,即待测输入 <<----设为1外围模块接口
//P2SEL=0x00; //设置P2为通用I/O
P1DIR &=~BIT0; //P1.0TACLK作为输入引脚
//P2DIR |= 0xf1; // Set P2 to output direction 1111 0001
//P1DIR |= 0x28; //0111 1000 p1.3 1.5 作为LCD使能复位控制端 0010 1000 //initial_lcd(); //LCD初始化
TA1CCR0=65535; //A1定时1s
TA1CTL = TASSEL_2 + ID_3 + TACLR + MC_1 + TAIE; // TA1信号作为基准时钟 选择SMCLK作为时钟 选ACLK会不会稳定点
TA0CTL = TASSEL_0 + TACLR + TAIE + MC_2; //外部信号作为A0时钟 ,捕获模式
TACCTL0 = CCIE; //打开A0中断捕获该句和下一句为中断必要语句
TA1CCTL0 = CCIE; //打开A1中断捕获
_EINT(); //打开全局中断
for (;;)
{
_EINT();
//dat=(int)dat;
a[0]=dat/100000;
a[1]=dat/10000%10;
a[2]=dat/1000%10;
a[3]=dat/100%10;
a[4]=dat/10%10;
a[5]=dat%10;
LCD_Disp_Num(0,0,a[0]); //显示0~9数字
LCD_Disp_Num(6,0,a[1]); //显示0~9数字
LCD_Disp_Num(12,0,a[2]); //显示0~9数字
LCD_Disp_Num(18,0,a[3]); //显示0~9数字
LCD_Disp_Num(24,0,a[4]); //显示0~9数字
LCD_Disp_Num(30,0,a[5]); //显示0~9数字
_DINT();
}
}
// TA interrupt service routine计数器A0溢出中断
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_R0(void)
{
_DINT();
TA_OverflowCnt++; //TA每次溢出溢出次数变量+1
TA0CTL = TASSEL_0 + TACLR + TAIE + MC_2;//连续计数模式,选择外部时钟
_EINT();
}
//定时器A1中断
#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer_R1(void)
{
_DINT();
dat = (TA_OverflowCnt*65535 + TAR)*2.30012328;//读取上次TA计数值及溢出次数计算频率
TA_OverflowCnt=0; //将溢出次数置零
TA1CTL = TASSEL_2 + ID_3 + TACLR + MC_1 + TAIE; //选择子系统时钟 SMCLK 四分频 增计数模式
TA0CTL = TASSEL_0 + TACLR + TAIE + MC_2; //选用外部时钟 连续计数模式
_EINT();
}