用G2553测低频脉冲时,在CCS编译运行时测的数值很正常,但是退出编译环境就全乱!测量的值就变得很大,而且没有规律。感觉像是时钟乱了。其中数据我用串口发出。
#include "msp430G2553.h" #include "stdio.h" unsigned long int TA_OverflowCnt=0,Period=0; double X = 0, F=0; char a; char b; char s[3]; void Init_uart0() {
UCA0CTL1|=UCSWRST; P1SEL|=BIT1+BIT2; //将P1.1 P1.2设为第二功能 P1SEL2|=BIT1+BIT2; P1DIR |= BIT2; //P1.2 UART_TX P1DIR &=~BIT1; //P1.1 UART_RX UCA0CTL0&=~UC7BIT;//字符长度为8 UCA0CTL1|=UCSSEL_2;//选择系统时钟 UCA0BR0=0x68; //波特率为9600 UCA0BR1=0; UCA0MCTL=0X40;//UCA0MCTL=UCBRS0; UCA0CTL1&=~UCSWRST;
IE2|=UCA0RXIE;//开接收使能
} void Uart0Sends(char *x) { while(*x!='\0') { UCA0TXBUF=*x;
while((IFG2&UCA0TXIFG)==0); //查询发送是否结束 // IFG2&=~UCA0TXIFG; //清除发送一标志位 x++; //} } } void main( ) { BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; Init_uart0(); WDTCTL = WDTPW + WDTHOLD; TACTL|=TASSEL0+TACLR+TAIE; //时钟源,定时器清零,允许定时器溢出中断 TACTL|=MC1;//Timer_a连续计数模式 P1IE|=BIT4;//允许中断 P1IES|=BIT4;//下降沿触发 P1IFG &=~BIT4;//中断标志清除 _EINT(); //_BIS_SR(CPUOFF+GIE); b=6;
} #pragma vector=PORT1_VECTOR __interrupt void P1_ISR(void) { volatile static unsigned int i=1; // I/O中断计数值 if(P1IFG&BIT4) i++; if(i>=10) // 计数100次 { i=0;
X=(((unsigned long int)TA_OverflowCnt)<<16)+TAR; // 获得100个周期内的时钟个数 F=X/10000; Period=(1/F)*1.6*1.32; TA_OverflowCnt=0; TACTL|=TACLR; // 定时清零
s[0]=Period; s[1]=25; s[2]=32; Uart0Sends(s); X=0; F=0; Period=0; } P1IFG &=~BIT4; // P1.4 IFG cleared; /*用于测试*/
} #pragma vector=TIMER0_A1_VECTOR __interrupt void Timer_A (void) { switch(TAIV) // TA中断方式选择 { case 2: break; case 4: break; case 10: TA_OverflowCnt++; // 溢出中断计数加1 break; } }