用MSP430 内置传感器测试温度时为什么在串口上显示的数据不对
[复制链接]
我想用430内置传感器测试环境温度的变化,但是为什么在串口上现实的数据不变化呢 ?哪位高人给指点下,下面的程序有什么错误啊?
- #include <msp430x14x.h>
#define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define uchar unsigned char #define uint unsigned int #define ulong unsigned long
/*当BRCLK=CPU_F时用下面的公式可以计算,否则要根据设置加入分频系数*/ #define baud 9600 //设置波特率的大小 #define baud_setting (uint)((ulong)CPU_F/((ulong)baud)) //波特率计算公式 #define baud_h (uchar)(baud_setting>>8) //提取高位 #define baud_l (uchar)(baud_setting) //低位 int long temp; int long sum; int count_f=0; uchar int_f; //************************************************************************* // 系统时钟初始化 //************************************************************************* void Clock_Init() { uchar i; BCSCTL1&=~XT2OFF; //打开XT振荡器 BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ do{ IFG1&=~OFIFG; //清除震荡标志 for(i=0;i<100;i++) _NOP(); //延时等待 } while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待 IFG1&=~OFIFG; }//************************************************************************* // MSP430串口初始化 //************************************************************************* void UART_Init() { U1CTL|=SWRST; //复位SWRST U1CTL|=CHAR; //8位数据模式 U1TCTL|=SSEL1; //SMCLK为串口时钟 U1BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N U1BR0=baud_l; //N=UBR+(UxMCTL)/8 U1MCTL=0x00; //微调寄存器为0,波特率9600bps ME2|=UTXE1; //UART1发送使能 ME2|=URXE1; //UART1接收使能 U1CTL&=~SWRST; IE2|=URXIE1; //接收中断使能位 P3SEL|= BIT6; //设置IO口为特殊功能模块 P3DIR|= BIT6; //设置P3.4为输入,P3.5为输出口 P3SEL|= BIT7; //设置IO口为外围功能模块
}
//************************************************************************* // 串口1发送数据函数 //************************************************************************* void Send_Byte(uchar data) { U1TXBUF=data; while ((IFG2 & UTXIFG1)==0); }
//************************************************************************* // 处理来自串口1的发送中断,预留 //*************************************************************************
#pragma vector=UART1TX_VECTOR __interrupt void UART1_TX_ISR(void) {
}
//************主函数*********************************************************// void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT UART_Init(); Clock_Init(); ADC12CTL0 = SHT0_8 + REFON + ADC12ON; ADC12CTL1 = SHP; // enable sample timer ADC12MCTL0 = SREF_1 + INCH_10; ADC12CTL1 |= CSTARTADD_10; //定义单次转换地址 ADC12IE = 0x001; ADC12CTL0 |= ENC; CCR0=32768; CCTL0=CCIE; TACTL = TASSEL_1+MC_1+TAIE; //timerA CLK=ACLK,增计数模式 // _EINT(); //开总中断 while(1) { ADC12CTL0 |= ADC12SC; // Sampling and conversion start // while((ADC12IFG & BITA)==0); _BIS_SR(LPM0_bits + GIE); // LPM0 with interrupts enabled } } //*********************TimerA0中断服务程序*************************************// #pragma vector=TIMERA0_VECTOR __interrupt void Timer_a(void) { if(count_f<10) { temp = ADC12MEM0; sum+=temp; sum/=2; count_f++; Send_Byte(sum); _BIC_SR_IRQ(CPUOFF);
} } //**************ADC中断函数***************************************************// #pragma vector=ADC12_VECTOR __interrupt void ADC12ISR (void) { }
复制代码
|