chinabiao 发表于 2010-4-23 11:49:14

[!江湖急救!]mspf149片上adc12模块多通道重复转换设置问题

msp430f149 片上的ADC12模块
设置多通道重复采样方式时设置的相关流程应当是如何的?我的adc12采不起来?急救!哪位指点指点我~!?

我把我设置的一部分初始化程序扔到这,哪位仁兄帮我看看:

文件:adc.c

#include <msp430x14x.h>
#define uchar unsigned char
#define uintunsigned int
uchar tempval;   //定义全局变量 tempval 小车的状态参量

/************************************
函数名:adc_init()
功能:adc12初始化---基准电压:AVCC
                  采样模式:8通道连续重复采样
                  
***********************************/
void adc_init(void)
{
    P6OUT = 0xff;
    P6SEL = 0xff;         //Enable ADC module
   
   
    ADC12CTL0 = ADC12ON+SHT0_2+MSC;         // 打开ADC,设置采样保持时间
    ADC12CTL1 = SHP+CONSEQ_3;               // 使用采样定时器
   
    ADC12MCTL0 = INCH_0;                      // ref+=AVcc, channel = A0
    ADC12MCTL1 = INCH_1;                      // ref+=AVcc, channel = A1
    ADC12MCTL2 = INCH_2;                      // ref+=AVcc, channel = A2
    ADC12MCTL3 = INCH_3;                      // ref+=AVcc, channel = A3
    ADC12MCTL4 = INCH_4;                      // ref+=AVcc, channel = A4
    ADC12MCTL5 = INCH_5;                      // ref+=AVcc, channel = A5
    ADC12MCTL6 = INCH_6;                      // ref+=AVcc, channel = A6
    ADC12MCTL7 = INCH_7 + EOS;                // ref+=AVcc, channel = A7, end seq.
    ADC12IE = 0x80;                           // Enable ADC12IFG.3
    ADC12CTL0 |= ENC;                         // Enable conversions

}

/***********************************
函数名:adc_cov();
功能:对八通道采样数据进行处理,当ADC12MENx >=2.5V/(Vref) * 2^12,
      temp_val 置1,否则为0

************************************/


unsigned char adc_cov(void)
{
uchar temp_val;
uchar i;
i=0;
temp_val=0x00;

for(i=0;i<8;i++)
{
    switch(i)
    {
    case 0: if(ADC12MEM0>0x7ff)   
            temp_val |= 0x01;
            break;
    case 1: if(ADC12MEM1>0x7ff)   
            temp_val |= 0x02;
            break;
    case 2:if(ADC12MEM3>0x7ff)   
            temp_val |= 0x04;
            break;
    case 3:if(ADC12MEM4>0x7ff)   
            temp_val |= 0x08;
            break;
    case 4:if(ADC12MEM5>0x7ff)   
            temp_val |= 0x10;
            break;
    case 5:if(ADC12MEM6>0x7ff)   
            temp_val |= 0x20;
            break;
    case 6:if(ADC12MEM6>0x7ff)   
            temp_val |= 0x40;
            break;
    case 7:if(ADC12MEM7>0x7ff)   
            temp_val |= 0x80;
            break;
    default :break;            
    }
   
}

return tempval;
}


主程序mail.c部分程序:

……………
……………

/************主函数***********************************************/
void main(void)
{
//uchar car_stat;
WDTCTL = WDTPW + WDTHOLD;         
int_xt2_clk();                        //XT2高速时钟启动(8MHz)      
adc_init();                           //adc12初始化
pwm_init();                           //电机PWM初始化
pwm_rate(1.00,1.00);                  //pwm数率
car_front();                        //小车前进
for(;;)
{
    ADC12CTL0 |= ADC12SC;                     // Start conversion
    _EINT();                                  // Enable interrupts

}

}

//中断服务子程序,随便测试一下,假如
//有传感器检测在黑线上,输出电压小于1.5V左右,电机则反转
#pragma vector=ADC_VECTOR
__interrupt void ADC12_ISR(void)
{
   uchar car_stat;                  
   car_stat=adc_cov();            
   if(car_stat!=0)
   car_back();            //电机反转
   _NOP();
}

…………

chinabiao 发表于 2010-4-23 11:49:57

哪位好心人帮我看看
我估计是相关设置没搞好。
但是就是找不到原因!
感激涕零啊!

chinabiao 发表于 2010-4-23 15:12:56

给点反应 同志们
我盯着屏幕有好几个小时了

jsahwj 发表于 2010-8-12 09:14:12

似乎参考电压没打开!!!!REFON
试试吧
页: [1]
查看完整版本: [!江湖急救!]mspf149片上adc12模块多通道重复转换设置问题