关于单通道ADC10测量

控制/MCU

1890人已加入

描述

volatile unsigned int ad_value[10];

int main( void )

{

WDTCTL=WDTPW+WDTHOLD; //关看门狗

BCSCTL1 =CALBC1_1MHz; //设定DCO 为1MHZ

DCOCTL =CALBC1_1MHZ;

//时钟源选AD 内部时钟并4 分频,选通道10,AD 启动信号来源选TA.OUT1,选单通道连续采样

ADC10CTL1=ADC10DIV_3+INCH_10+SHS_1+CONSEQ_2;

//选1.5V 为正向参考,地为负参考,AD 中断使能,打开参考,启动AD 模块(不是启动AD 转换)

ADC10CTL0=SREF_1+ADC10SHT_3+ADC10IE+REFON+ADC10ON;

TACCR0=30; //延时等待参考稳定

TACCTL0 |=CCIE; //CCR0 中断使能

TACTL=TACLR+MC_1+TASSEL_2; //TA 增计数,时钟源为smclk

_BIS_SR(LPM0_bits+GIE); //进入低功耗0,使能总中断,等待参考稳定

TACCTL0 &=~CCIE; //CCR0 中断禁止

_BIC_SR(GIE); //关总中断

ADC10CTL0 |=ENC; //AD 转换使能

TACCTL1=OUTMOD_4; //CCR1 选输出模式4,当TAR=0 时,输出高电平

TACTL =TASSEL_2+MC_2; //TA 改为连续计数,smclk 时钟源

_BIS_SR(LPM0_bits+GIE); //进入低功耗0,使能总中断,等待10AD 完成

_NOP();

return 0;

}

#pragma vector = TIMERA0_VECTOR //TA0 中断服务,用来参考稳定

__interrupt void ta0_isr(void)

{

TACTL=0; //关TA

_BIC_SR_IRQ(LPM0_bits); //退出低功耗

}

#pragma vector = ADC10_VECTOR //ADC10 中断服务

__interrupt void adc_isr(void)

{

static char i=0;

ad_value[i]=ADC10MEM; //保存AD 结果

i++;

if(i==10) //作10 次AD

_BIC_SR_IRQ(LPM0_bits+GIE); //退出低功耗

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分