yebobo 发表于 2012-7-11 20:10:48

关于AD

我直接想要用一个函数来进行AD转换,要那个转换那个就行了~~但是程序运行的时候AD没采集,不知道哪里的问题,求解~~
#include <msp430x14x.h>
#define uchar unsigned char
#define uint unsigned int
#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))
unsigned char AD_in1,AD_in2;


void Clock_Init()
{
uchar i;
BCSCTL1&=~XT2OFF;                     //高速晶振开启
BCSCTL2|=SELM1+SELS;               //MCLK=LFXT1
do{
    IFG1&=~OFIFG;                     //清除振荡器失效标志
    for(i=0;i<100;i++)                //稳定时间
       _NOP();
}
while((IFG1&OFIFG)!=0);            //检查振荡器失效标志是否存在
    IFG1&=~OFIFG;
}

void INIT_AD(void)
{P6SEL&=0X00;
   P6SEL|=0XFF;
   ADC12CTL0 &= ~(ENC);//设置ENC为0,从而修改ADC12寄存器的值,只有其为零时,才能修改

   ADC12CTL0|=REFON+REF2_5V+ADC12ON+SHT0_2;   //参考电压开,选择2.5V,开内核
    ADC12MCTL0|=0X10;                         //选择基准源
   ADC12CTL1|=SHP;                  
   ADC12CTL0|=ENC+ADC12SC ;                  //使能AD转换
}   


/*************************************************************/
/*                        起动AD转换                         */
/*************************************************************/
unsigned char AD_capture(unsigned char s)
{
unsigned char AD_data;
switch(s)
{
case 0:
    ADC12MCTL0 |= INCH_0;            //转换AD00
    while((ADC12CTL1&0X01)==1);   //等待转换完毕
    AD_data = ADC12MEM0;
    break;
case 1:
    ADC12MCTL0 |= INCH_1;            //转换AD01
    while((ADC12CTL1&0X01)==1);   //等待转换完毕
    AD_data = ADC12MEM0;
    break;
   
    case 2:
    ADC12MCTL0 |= INCH_2;            //转换AD02
    while((ADC12CTL1&0X01)==1);   //等待转换完毕
    AD_data = ADC12MEM0;
    break;
}
return(AD_data);
}

void main( void )
{   
    WDTCTL = WDTPW + WDTHOLD;
    Clock_Init();
    INIT_AD();
    P3DIR|=0xff;
    P3SEL|=0X00;
    P1DIR&=0X00;
    P1SEL|=0X00;
   
   
while(1)
    {
         AD_in1 = AD_capture(1);
         AD_in2 = AD_capture(2);
         if(AD_in1>AD_in2)
         {      
         P3OUT&=0x00;
         P3OUT|=0XEF;   
         delay_ms(100);
         }
         else
         {
         P3OUT&=0x00;
         P3OUT|=0Xdf;
         delay_ms(100);
         }
    }
}
页: [1]
查看完整版本: 关于AD