新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MSP430F149ADC12單通道單次轉(zhuǎn)換

MSP430F149ADC12單通道單次轉(zhuǎn)換

作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
#include <msp430x14x.h>
#define uint unsigned int
#define uchar unsigned char
static uchar adc_flag = 0 ;
uint AD_TEMP = 0 ;
void int_clk()
{
uchar i ;
BCSCTL1&=~XT2OFF; //打開XT振蕩器
BCSCTL2|=SELM1+SELS; //MCLK為8MHz,SMCLK為8MHz
do
{
IFG1&=~OFIFG; //清除振蕩錯誤標(biāo)志
for(i=0;i<100;i++)
_NOP(); //延時等待
}
while((IFG1&OFIFG)!=0); //如果標(biāo)志為1,則繼續(xù)循環(huán)等待
IFG1&=~OFIFG;
}
int_adc()
{
P6SEL |= BIT0 ; //選擇AD通道
ADC12CTL0 |= ADC12ON + SHT0_2 + REF2_5V + REFON ; //采樣保持時間為16個ADC12CLK
/*ADC12ON ADC模塊電源控制位;
REF2_5V 內(nèi)部參考電壓選擇位0:1.5V  1:2.5V
REFON 參考電壓模塊控制位0:關(guān)閉?。保捍蜷_*/
ADC12CTL1 |= ADC12SSEL0 + ADC12SSEL1 ; //ADC12時鐘源選擇控制位 00ADC12OSC 01ACLK 10MCLK 11SMCLK
ADC12MCTL0 = 0x10; // 連續(xù)轉(zhuǎn)換結(jié)束通道,CHANNEL = A0 參考選擇控制位
ADC12IE |= 0x01; //使能A/D轉(zhuǎn)換器
ADC12CTL0 |= ENC ; //AD轉(zhuǎn)換使能
}
#pragma vector = ADC_VECTOR
__interrupt void ADC12ISR(void)
{
while((ADC12CTL1 & 0x01)== 1); //等待轉(zhuǎn)換完
adc_flag = 1 ;
AD_TEMP = ADC12MEM0 ; //設(shè)置AD轉(zhuǎn)換完成標(biāo)志,并讀?。粒模弥?/div>
}
void main()
{
WDTCTL = WDTPW + WDTHOLD ;
int_clk();
int_adc();
_EINT(); //使能中斷
adc_flag = 1 ;
while(1)
{
while(adc_flag == 1)
{
ADC12CTL0 |= ADC12SC ; //開啟轉(zhuǎn)換
ADC12CTL0 &= ~ADC12SC ;
adc_flag = 0 ; //清中斷標(biāo)志
}
}
}


評論


技術(shù)專區(qū)

關(guān)閉