msp430溫度測(cè)量(已調(diào)試OK)
#include
#defineTEM_ADC_CHL0x0a
voidInitSys(void);
voidRead_ADC(unsignedintINCH_channel);
voidADC_TO_TEM(void);
unsignedintADC_sample_val;
unsignedintlongtemp1,temp2;
unsignedintlongIntDegC;
unsignedintlongIntDegF;
voidmain(void)
{
InitSys();
while(1)
{
Read_ADC(TEM_ADC_CHL);
ADC_TO_TEM();
}
}
voidInitSys(void)
{
//INITSYSTEMCLKS(ACLKANDDCO/MCLK)
WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗
BCSCTL1=0x87;//ACLK分頻系數(shù)是1,內(nèi)部電阻選7
DCOCTL=0xe0;//設(shè)置DCO輸出時(shí)鐘頻率5MHz
BCSCTL2=SELM_0;//選擇MCLK為DCOCLK,內(nèi)部電阻
ADC10CTL1|=0x08;//轉(zhuǎn)換時(shí)鐘為ACLK
ADC10CTL0=SREF_1+ADC10SHT_0+REFOUT+REFON+ADC10ON;
//選擇內(nèi)部電壓1.5V,采樣時(shí)間4XADC10CLKS
}
voidRead_ADC(unsignedintINCH_channel)
{
unsignedinttmp;
ADC10CTL0&=~ENC;
tmp=ADC10CTL1;
tmp&=0x0fff;
tmp|=(INCH_channel<<12);
ADC10CTL1=tmp;
ADC10CTL0|=ENC+ADC10SC;
while(ADC10CTL1&ADC10BUSY)
{}
ADC_sample_val=ADC10MEM;
ADC10CTL0&=~ENC;
}
voidADC_TO_TEM(void)
{
//oC=((A10/1024)*1500mV)-986mV)*1/3.55mV=A10*423/1024-278
temp1=ADC10MEM;
IntDegC=((temp1-673)*423)/1024;
//oF=((A10/1024)*1500mV)-923mV)*1/1.97mV=x*761/1024-468
temp2=ADC10MEM;
IntDegF=((temp2-630)*761)/1024;
}