啥也不说了,直接给出程序: //检测MSP430F149内部温度传感器
#include
#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 8M and SMCLK 1M
do
{
IFG1&=~OFIFG; //清除振荡错误标志
for(i=0;i<100;i++)
_NOP(); //延时等待
}while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待
IFG1&=~OFIFG;
} int_adc()
{
ADC12CTL0|=ADC12ON+SHT1_2+REF2_5V+REFON; //ADC12开启;
//采样保持时间为16个ADC12CLK;
//2.5V参考电压,参考电压模块打开
ADC12CTL1|=CSTARTADD_10+ADC12SSEL1+ADC12SSEL0;
//时钟源选择SMCLK
ADC12MCTL10=SREF_1+INCH_10; //选择内部温度传感器
ADC12IE|=0x0400; //使能转换中断
ADC12CTL0|=ENC; //使能A/D转换
} #pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
while(( ADC12CTL1&0x01)==1); //A/D转换忙信号等待
adc_flag=1; //转换完成标志
AD_TEMP=ADC12MEM10; //读入A/D转换结果
} void main(void)
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
int_clk(); //系统时钟初始化
int_adc(); //初始化ADC模块
_EINT(); //使能中断
adc_flag=1;
while(1)
{
while(adc_flag==1)
{
ADC12CTL0|=ADC12SC; //开启转换
ADC12CTL0&=~ADC12SC;
adc_flag=0; //清中断标志
}
}
}
|