void ADC_Init(void)
{
ADC12CTL0 |= ADC12SHT02 + ADC12ON;//ADC10ON=1-->ADC10开启
ADC12CTL0 |= ADC12REFON + ADC12REF2_5V ; //选择内部参考源2.5V,打开基准源
ADC12CTL1 = ADC12SHP;
// CONSEQ_2=10 工作模式为单通道重复采样; INCHx=0001选择输入通道 A1
ADC12MCTL0|= ADC12INCH_5+ADC12SREF_1;
ADC12IE = 0x01; //中断允许
//__bis_SR_register(GIE);
//ADC12CTL0|=ADC12ENC;
P6DIR &= ~BIT5;
P6SEL|=BIT5; // 外部输入通道 A1(P6.5) 使能
int main(void)
{WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
ADC_Init();
P4DIR|=BIT0+BIT1+BIT2+BIT3;
P8DIR|=BIT1+BIT2;
rightEN_0;
leftEN_0;
go1(5000); //四分步,1.2A,大约15cm
go1(5000);
//back(100);
// left(1500);
//right(1500);
_EINT(); //开中断
while(1)
{
ADC12CTL0 |= ADC12ENC + ADC12SC; // ADC10使能开启,采样、转换开始
if(flag==1);
{ flag=0;
if(volt_value<1) go(100);
else {
if(volt_value>2) back(100);
else delay_ms(60000);}
}
}
}
#pragma vector =ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
switch(_even_in_range(ADC12IV,ADC12IV_ADC12IFG15))
{case ADC12IV_ADC12IFG0:
ADC_result += ADC12MEM0;
x++;
if(x==19) //重复采样19次,将每次采样结果累加
{ x=0;
flag=1;
ADC_result = ADC_result/20; //取20次转换值的平均值
volt_value = (ADC_result*2.5)/4092; //数字量转换成电压值
}
}
}
为什么我的结果一直在执出来行小于一的部分,改变取样电压的大小也不行,部分程序没写出来!
将 if(flag==1);变成while(flag==0);试试。或者进入低功耗中断唤醒,中断关低功耗,然后在处理值试试
天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友