关于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]