MSP430F149ADC12单通道单次转换
#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 ; //清中断标志
}
}
}
MSP430F149ADC12单通道单次转 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)