This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
void adc1_init()
{
P9OUT &=~ BIT1;
P6SEL |= BIT2;
WDTCTL = WDTPW + WDTHOLD;
ADC12CTL0 = ADC12ON + ADC12SHT0_8 + ADC12MSC;
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_2;
ADC12MCTL3 = ADC12INCH_2 + ADC12EOS; //A0
ADC12IE = 0x01;
ADC12CTL0 |= ADC12ENC;
}
void adc2_init()
{
P9OUT &=~ BIT2;
P6SEL |= BIT1;
WDTCTL = WDTPW + WDTHOLD;
ADC12CTL0 = ADC12ON + ADC12SHT0_8 + ADC12MSC;
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_2;
ADC12MCTL3 = ADC12INCH_1 + ADC12EOS; //A1,
ADC12IE = 0x01;
ADC12CTL0 |= ADC12ENC;
}
void adc3_init()
{
P9OUT &=~ BIT3;
P6SEL |= BIT0;
WDTCTL = WDTPW + WDTHOLD;
ADC12CTL0 = ADC12ON + ADC12SHT0_8 + ADC12MSC;
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_2;
ADC12MCTL3 = ADC12INCH_0 + ADC12EOS; //A2
ADC12IE = 0x01;
ADC12CTL0 |= ADC12ENC;
}
void adc_stop()
{
ADC12CTL0 &= ~ADC12ENC;
ADC12CTL0 = 0;
ADC12CTL1 = 0;
ADC12IFG = 0;
ADC12MEM0 = 0;
}
void main()
{
MAIN_POWER_ON;
P7DIR |= LED_PWR; // 发光二极管电源
P7OUT &=~LED_PWR;
P9OUT = 0x0F;
P9DIR = 0x0F;
Init_CLK();
//adc_init();
static unsigned char index0 = 0;
static unsigned char index1 = 0;
static unsigned char index2 = 0;
while(1)
{
if(a==1)
{
adc1_init();
for(;index0 < 12; index0++)
{
ADC12CTL0 |= ADC12SC;
while(!(ADC12IFG & BIT0)); //wei he zai yi zhi zuan huan?
restule0[index0] = ADC12MEM0;
}
adc_stop();
a = 0;
}
if(b==1)
{
adc2_init();
for(;index1 < 12; index1++)
{
ADC12CTL0 |= ADC12SC;
while(!(ADC12IFG & BIT0));
restule1[index1] = ADC12MEM0;
}
adc_stop();
b = 0;
}
if(c==1)
{
adc3_init();
for(;index2 < 12; index2++)
{
ADC12CTL0 |= ADC12SC;
while(!(ADC12IFG & BIT0));
restule2[index2] = ADC12MEM0;
}
adc_stop();
c = 0;
}
while(1)
P9OUT &=~ BIT0;
我这样配置为什么采样的结果都是p6.0 引脚结果
你想实现的功能是restule1里面存P6.2的采样数据,restule2里面存P6.1的采样数据,restule3里面存P6.0的采样数据吗,然后实际运行时三个数组里存的都是P6.0的数据,是想表达这个意思吗
我感觉问题可能是你AD没有配置进去
需要注意的是,AD相关的很多寄存器都需要在ADC12ENC=0的条件下配置,所以你修改任何关于AD寄存器的值之前,
先要做一个操作ADC12CTL0 &= ~ADC12ENC来清除ADC12ENC位,然后再进行你的配置,配置完成后再执行ADC12CTL0 |= ADC12ENC来确保配置完成,
进行这样的修改之后应该就不会出现你所说的问题了
另外再提几点建议,一是程序的复用性,ad的初始化通用的地方只调用一次就好,具体到使用不同的通道再专门配置对应通道ADC12INCH_xx就行,adc_stop函数没有必要,你把ADC12ENC使能关了就行,不需要全部都清零;二是出现问题应该先看寄存器里的值是不是配成了自己想要的,这是最可能出现问题的源头