我主要是通过频率发生器产生固定频率,然后接在msp430f149的p1.2口(此处是TA1的捕获口,TA1开启捕获模式)。使用TB0定时,TA1采用8MHz的SCLK,TB0采用32768Hz的ACLK,定时1s,这样的话,测得的频率和实际的频率误差在个位数。当把定时用的定时器改成TA0时,测得的频率和实际误差在+-50Hz左右。
寄存器初始化和中断函数(实测误差在个位数) 能够开启LPM1
寄存器初始化和中断函数(实测误差在个位数) 能够开启LPM1
1 void Init_cap(void) 2 { 3 P1SEL |=0x04; //选择P1.2作为捕获的输入端子 4 TACCTL1|=CM0+SCS+CCIS_0+CAP+CCIE;//上升沿触发,同步模式,使能中断 5 TACTL |=TASSEL1+ID_0; //选择8M-SMCLK时钟 6 } 7 void Init_timer_b(void) 8 { 9 TBCCTL0 = CCIE; // CCR0 interrupt enabled 10 TBCCR0 = 32768; //定时1秒 11 TBCTL = TBSSEL_1 + MC_1; // ACLK, upmode 12 } 13 #pragma vector=TIMERA1_VECTOR 14 __interrupt void Timer_A(void) 15 { 16 switch(TAIV) 17 { 18 case 2: 19 { 20 count++; 21 break; 22 }; 23 case 4: 24 break; 25 case 10: 26 break; 27 } 28 } 29 #pragma vector=TIMERB0_VECTOR 30 __interrupt void Timer_B (void) 31 { 32 TACCTL1 &= ~(CCIE);//关闭捕获中断 33 TBCCTL0 &= ~(CCIE); //关闭定时中断 34 // count=count; 35 result[5]=count/100000; 36 result[4]=count%100000/10000; 37 result[3]=count%10000/1000; 38 result[2]=count%1000/100; 39 result[1]=count%100/10; 40 result[0]=count%10; 41 count=0; 42 dile(); 43 Display(msp430); 44 P3OUT^=BIT4; 45 TBCTL|=TBCLR; 46 TBCCTL0 |= (CCIE); 47 TACCTL1 |= (CCIE); 48 } 49 50 寄存器初始化和中断函数(实测误差在+-50) 51 void Init_TA(void) 52 { 53 P1SEL |=0x04; //选择P1.2作为捕获的输入端子 54 TACCTL1|=CM0+SCS+CCIS_0+CAP+CCIE;//上升沿触发,同步模式,使能中断 55 TACCTL0 = CCIE; // CCR0 interrupt enabled 56 TACCR0 = 8000; //定时1秒 57 TACTL = TBSSEL_2 + MC_1+ID_0; // ACLK, upmode 58 } 59 #pragma vector=TIMERA1_VECTOR 60 __interrupt void Timer_A1(void) 61 { 62 63 switch(TAIV) 64 { 65 case 2: 66 { 67 count++; 68 break; 69 }; 70 case 4: 71 break; 72 case 10: 73 break; 74 } 75 76 } 77 #pragma vector=TIMERA0_VECTOR 78 __interrupt void Timer_A0 (void) 79 {static int i=0; 80 if(++i==1000){ 81 TACCTL1 &= ~(CCIE);//关闭捕获中断 82 TACCTL0 &= ~(CCIE); //关闭定时中断 83 //count=count; 84 85 result[5]=count/100000; 86 result[4]=count%100000/10000; 87 result[3]=count%10000/1000; 88 result[2]=count%1000/100; 89 result[1]=count%100/10; 90 result[0]=count%10; 91 count=0; 92 i=0; 93 dile(); 94 Display(msp430); 95 P3OUT^=BIT4; 96 TACTL|=TBCLR; 97 TACCTL0 |= (CCIE); 98 TACCTL1 |= (CCIE); 99 100 } 101 }