ADC12通道转换~严重困扰~请高人指点

楼主
ADC12通道转换~严重困扰~请高人指点
求教高人~小弟正在做MSP430f149的ADC12采样~我想通过串口控制单片机选择采样通道~即发送数字0则A0通道开始采样~发送数字1则A1通道开始采样~以此类推~希望能够控制A0到A7八个通道的采样。但是在程序运行的时候无论我选择哪个通道~都是A0通道在采样~其他通道不起任何作用~而且在串口发送数据的时候会在有效数据后产生很多乱码~求教高人指点~感激不尽~部分程序代码如下:
//----------------------------interrupts----------------------------------------
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
  command=RXBUF0;
 
   
  switch (command)
  {
  case 0:
   
    ADC12CTL0 &= ~ADC12ON;  
    ADC12CTL0 &= ~ENC;
    P6SEL |=0x01;
    ADC12IE=0x01;
    ADC12MCTL0=INCH_0;
    ADC12MCTL0 = SREF_1;
    ADC12CTL1 = CSTARTADD_0+SHP+CONSEQ_2;
    ADC12CTL0 = ADC12ON+SHT0_15+MSC+REFON+REF2_5V;
    ADC12CTL0 |= ENC;
    ADC12CTL0 |= ADC12SC;
    break;
  case 1:
   
    ADC12CTL0 &= ~ADC12ON;
    ADC12CTL0 &= ~ENC;

    P6SEL |=0x02;
    ADC12IE=0x02;
    ADC12MCTL1=INCH_1;
    ADC12MCTL1 = SREF_1;
    ADC12CTL1 = CSTARTADD_1+SHP+CONSEQ_2;
    ADC12CTL0 = ADC12ON+SHT0_15+MSC+REFON+REF2_5V;
    ADC12CTL0 |= ENC;
    ADC12CTL0 |= ADC12SC;
    break;
  case 2:
   
    ADC12CTL0 &= ~ADC12ON;
    ADC12CTL0 &= ~ENC;
    P6SEL |=0x04;
    ADC12IE=0x04;
    ADC12MCTL2=INCH_2;
    ADC12MCTL2 = SREF_1;
    ADC12CTL1 = CSTARTADD_2+SHP+CONSEQ_2;
    ADC12CTL0 = ADC12ON+SHT0_15+MSC+REFON+REF2_5V;
    ADC12CTL0 |= ENC;
    ADC12CTL0 |= ADC12SC;    
    break;
  case 3:
   
    ADC12CTL0 &= ~ADC12ON;
    ADC12CTL0 &= ~ENC;
    P6SEL |=0x08;
    ADC12IE=0x08;
    ADC12MCTL3=INCH_3;
    ADC12MCTL3 = SREF_1;
    ADC12CTL1 = CSTARTADD_3+SHP+CONSEQ_2;
    ADC12CTL0 = ADC12ON+SHT0_3+MSC+REFON+REF2_5V;
    ADC12CTL0 |= ENC;
    ADC12CTL0 |= ADC12SC;
    break;
  case 4:
   
    ADC12CTL0 &= ~ADC12ON;
    ADC12CTL0 &= ~ENC;
    P6SEL |=0x10;
    ADC12IE=0x10;
    ADC12MCTL4=INCH_4;
    ADC12MCTL4 = SREF_1;
    ADC12CTL1 = CSTARTADD_4+SHP+CONSEQ_2;
    ADC12CTL0 = ADC12ON+SHT0_3+MSC+REFON+REF2_5V;
    ADC12CTL0 |= ENC;
    ADC12CTL0 |= ADC12SC;
    break;
  case 5:
   
    ADC12CTL0 &= ~ADC12ON;
    ADC12CTL0 &= ~ENC;
    P6SEL |=0x20;
    ADC12IE=0x20;
    ADC12MCTL5=INCH_5;
    ADC12MCTL5 = SREF_1;
    ADC12CTL1 = CSTARTADD_5+SHP+CONSEQ_2;
    ADC12CTL0 = ADC12ON+SHT0_3+MSC+REFON+REF2_5V;
    ADC12CTL0 |= ENC;
    ADC12CTL0 |= ADC12SC;
    break;
  case 6:
   
    ADC12CTL0 &= ~ADC12ON;
    ADC12CTL0 &= ~ENC;
    P6SEL |=0x40;
    ADC12IE=0x40;
    ADC12MCTL6=INCH_6;
    ADC12MCTL6 = SREF_1;
    ADC12CTL1 = CSTARTADD_6+SHP+CONSEQ_2;
    ADC12CTL0 = ADC12ON+SHT0_3+MSC+REFON+REF2_5V;
    ADC12CTL0 |= ENC;
    ADC12CTL0 |= ADC12SC;
    break;
  case 7:
   
    ADC12CTL0 &= ~ADC12ON;
    ADC12CTL0 &= ~ENC;
    P6SEL |=0x80;
    ADC12IE=0x80;
    ADC12MCTL7=INCH_7;
    ADC12MCTL7 = SREF_1;
    ADC12CTL1 = CSTARTADD_7+SHP+CONSEQ_2;
    ADC12CTL0 = ADC12ON+SHT0_3+MSC+REFON+REF2_5V;
    ADC12CTL0 |= ENC;
    ADC12CTL0 |= ADC12SC;
    break;
//  case 8: init_ADC_full();
//  break;
  case 9:
    putstring2("Stop");
    break;
  default:
    putstring2("Error");
    break;
  }
 
}
//****************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
 switch (command)
 {
  case 0:
    hexdata=ADC12MEM0;
    trans(hexdata);     //(这个trans程序是转换采样数据为实际模拟值并通过串口发送的子程序)
    break;
  case 1:
    hexdata=ADC12MEM1;
    trans(hexdata);
    break;
  case 2:
    hexdata=ADC12MEM2;
    trans(hexdata);
    break;
  case 3:
    hexdata=ADC12MEM3;
    trans(hexdata);
    break;
  case 4:
    hexdata=ADC12MEM4;
    trans(hexdata);
    break;
  case 5:
    hexdata=ADC12MEM5;
    trans(hexdata);
    break;
  case 6:
    hexdata=ADC12MEM6;
    trans(hexdata);
    break;
  case 7:
    hexdata=ADC12MEM6;
    trans(hexdata);
    break;
//  case 8: init_ADC_full();
//    break;
 
 
 }
}
1楼
各位高手~跪求帮助啊~
2楼
ADC中断中调用的输出传输程序占用的时间太长,因此串口出现乱码。在中断中置标志位,主程序中作数据传输就好了!

电脑版 Page created in 0.0625 seconds width 2 queries.