微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MSP430F149ADC12单通道单次转换

MSP430F149ADC12单通道单次转换

时间:11-13 来源:互联网 点击:
#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; //清除振荡错误标志

for(i=0;i<100;i++)

_NOP(); //延时等待

}

while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待

IFG1&=~OFIFG;

}

int_adc()

{

P6SEL |= BIT0 ; //选择AD通道

ADC12CTL0 |= ADC12ON + SHT0_2 + REF2_5V + REFON ; //采样保持时间为16个ADC12CLK

/*ADC12ON ADC模块电源控制位;

REF2_5V 内部参考电压选择位0:1.5V  1:2.5V

REFON 参考电压模块控制位0:关闭 1:打开*/

ADC12CTL1 |= ADC12SSEL0 + ADC12SSEL1 ; //ADC12时钟源选择控制位 00ADC12OSC 01ACLK 10MCLK 11SMCLK

ADC12MCTL0 = 0x10; // 连续转换结束通道,CHANNEL = A0 参考选择控制位

ADC12IE |= 0x01; //使能A/D转换器

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

}

#pragma vector = ADC_VECTOR

__interrupt void ADC12ISR(void)

{

while((ADC12CTL1 & 0x01)== 1); //等待转换完

adc_flag = 1 ;

AD_TEMP = ADC12MEM0 ; //设置AD转换完成标志,并读取ADC值

}

void main()

{

WDTCTL = WDTPW + WDTHOLD ;

int_clk();

int_adc();

_EINT(); //使能中断

adc_flag = 1 ;

while(1)

{

while(adc_flag == 1)

{

ADC12CTL0 |= ADC12SC ; //开启转换

ADC12CTL0 &= ~ADC12SC ;

adc_flag = 0 ; //清中断标志

}

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top