This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

下面的程序是用ADC10采集MSP430G2553内置温度传感器,然后把采集的数据用串口显示出来,但是下载程序后,串口并没有显示出温度(我加了一个发送字符数组的函数来看看USART配置的正确,下载后,串口可以显示所发送的数组),请问程序ADC10的部分哪错了呢?

Other Parts Discussed in Thread: MSP430G2553

#include  "msp430g2553.h"
char mystring[50] = "300 my test program!\r\n";
long temp;
long IntDegF;
long IntDegC;
unsigned int i;
unsigned int ADC10_Number =3;
void myputs(char * string);
 void main(void)
 {
   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  // ADC10CTL1 = INCH_10 + ADC10DIV_3;         // Temp Sensor ADC10CLK/4
   ADC10CTL1 = INCH_3;                        // 通道1进行AD转换,并将转换结果保存在ADC10MEM0中
   ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;  //The ADC10OSC, generated internally,
  //is in the 5-MHz range, but varies with individual devices, supply voltage, and temperature. See the device-specific data sheet for the ADC10OSC specification.
   DCOCTL = 0x00;                            // Set DCO 1MHz
   BCSCTL1 = CALBC1_1MHZ;
   DCOCTL = CALDCO_1MHZ;
   P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
   P1SEL2 = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
   UCA0CTL1 |= UCSSEL_2;                     // USCI clock source=SMCLK
   UCA0BR0 = 104;                            // 1MHz 9600  Refer to Page 435 of X2xx Guide
   UCA0BR1 = 0;                              // 1MHz 9600
   UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
   UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
   __enable_interrupt();                     // Enable interrupts.
   myputs(mystring);
   IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt
  //__bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
   for(;;)
   {   ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
      ADC10CTL0 &=~ADC10SC;      //把SC置零
   }
 }
 void myputs(char * string)
 {
         unsigned char num;

         for( num = 0; num < strlen(string); num++ )
                 {
                         while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
                         UCA0TXBUF = string[num];                    // TX -> RXed character
                 }
 }

#pragma vector=USCIAB0RX_VECTOR    //串口中断
__interrupt void USCI0RX_ISR(void)
{
  if ((UCA0RXBUF == 'c')||(UCA0RXBUF == 'C'))                   // 'C' or 'c' received?
  {
    //IE2 |= UCA0TXIE;                        // Enable USCI_A0 TX interrupt
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
    {
     UCA0TXBUF=((IntDegC/10240)+48);   //10位数

    }
        while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
    {
     UCA0TXBUF=((IntDegC/1024)%10+48);   //个位数

    }

        while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
    {
     UCA0TXBUF=46;   //.

    }
         while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
    {
     UCA0TXBUF=((IntDegC*10/1024%10)+48);   //小数

    }
        while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
    {
     UCA0TXBUF=13;   //换行

    }


  }
  else
    {


    //IE2 |= UCA0TXIE;                        // Enable USCI_A0 TX interrupt
    UCA0TXBUF = 13;          //换行
  }
}

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
    ADC10CTL0 &=~ENC;
 temp+= ADC10MEM;
 //i++;
 if(i<ADC10_Number)
  ADC10CTL0 |=ENC+ADC10SC;
      //IntDegC = ((temp - 673) * 423) / 1024;    //-278~144 ,精度降低了
       IntDegC = ((temp - 673) * 423); //改进后的


}