ADC单通道一次采样。
void ADC_Init()
{
P6SEL |= BIT6; //选择A6采样通道P6.6
REFCTL0 &= ~REFMSTR; //复位REFMSTR控制位ADC12参考电压控制寄存器
ADC12CTL1 = ADC12SHP+ADC12CSTARTADD_6+ADC12CONSEQ_0 ;
//MCLK 采样信号的来源是来自采样定时器 转换存储器选择ADC12MEM6 单通道单次转换
ADC12MCTL6 = ADC12INCH_6+ADC12SREF_0;//选择模拟输入通道A6 参考电压源Vr+=AVCC,Vr-=AVSS
ADC12CTL0 = ADC12ON+ADC12SHT0_15; //打开ADC12,
ADC12IE = ADC12IE6; // 使能ADC12IFG.6中断
ADC12CTL0 |= ADC12ENC; // 使能AD转换
}
void ADC_Start()
{
ADC12CTL0 |= ADC12SC; //启动AD转换
}
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
switch(__even_in_range(ADC12IV,34))
{
case 0: break; // Vector 0: 无中断
case 2: break; // Vector 2: ADC溢出中断
case 4: break; // Vector 4: ADC转换时间溢出中断
case 6: break; // Vector 6: ADC12IFG0
case 8: break; // Vector 8: ADC12IFG1
case 10: break; // Vector 10: ADC12IFG2
case 12: break; // Vector 12: ADC12IFG3
case 14: break; // Vector 14: ADC12IFG4
case 16: break; // Vector 16: ADC12IFG5
case 18: // Vector 18: ADC12IFG6
else if (ADC12MEM6 <=20)
m=1;
else if (ADC12MEM6 <=20)
m=2;
else if (ADC12MEM6 <= 30)
m=3;
else if (ADC12MEM6 <=50 )
m=4;
else if (ADC12MEM6 <= 70)
m=5;
else if (ADC12MEM6 <=80 )
m=6;
else if (ADC12MEM6 <= 90)
m=7;
else
m=8;
case 20: break; // Vector 20: ADC12IFG7
case 22: break; // Vector 22: ADC12IFG8
case 24: break; // Vector 24: ADC12IFG9
case 26: break; // Vector 26: ADC12IFG10
case 28: break; // Vector 28: ADC12IFG11
case 30: break; // Vector 30: ADC12IFG12
case 32: break; // Vector 32: ADC12IFG13
case 34: break; // Vector 34: ADC12IFG14
default: break;
}
}
下面这个是采样点灯
while(1)
{
ADC_Init();
ADC_Start();
__bis_SR_register(GIE);
if (m == 1 )
{
P1OUT |= (BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);
P1OUT &= ~(BIT0);//LED低电平点亮
}
else if (m == 2 )
{
P1OUT |= (BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);
P1OUT &= ~(BIT0+BIT1);//LED低电平点亮
}
else if (m == 3 )
{
P1OUT |= (BIT3+BIT4+BIT5+BIT6+BIT7);
P1OUT &= ~(BIT0+BIT1+BIT2);//LED低电平点亮
}
else if (m == 4 )
{
P1OUT |= (BIT4+BIT5+BIT6+BIT7);
P1OUT &= ~(BIT0+BIT1+BIT2+BIT3);//LED低电平点亮
}
else if (m == 5 )
{
P1OUT |= (BIT5+BIT6+BIT7);
P1OUT&= ~(BIT0+BIT1+BIT2+BIT3+BIT4); //LED低电平点亮
}
else if (m == 6 )
{
P1OUT |= (BIT6+BIT7);
P1OUT&=~(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5); //LED低电平点亮
}
else if (m == 7 )
{
P1OUT |= (BIT7);
P1OUT&=~(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6); //LED低电平点亮
}
else if (m == 8 )
{
P1OUT &= ~(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);//LED低电平点亮
}
}
求助啊各位大神
2015-12-5 16:54:25
昨晚上解决了这个问题,我在初始化ADC时候,把ADC_Init这个函数放到了while(1)中。
注意,初始化ADC时候只需要初始化一次即可。除非要换ADC采样方式,否则就不用重新初始化
昨晚上解决了这个问题,我在初始化ADC时候,把ADC_Init这个函数放到了while(1)中。
注意,初始化ADC时候只需要初始化一次即可。除非要换ADC采样方式,否则就不用重新初始化
举报