
MSP430單片機溫度測量源程序
介紹:源程序代碼主要包含初始化子程序InitSys()、ADC數據讀取子程序Read_ADC()、ADC數據轉換為溫度子程序ADC_TO_TEM()。
源程序調試OK
--------------------------------------------*/
#include<MSP430x12x2.h>
#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;//關閉看門狗
BCSCTL1=0x87;//ACLK分頻系數是1,內部電阻選7
DCOCTL=0xe0;//設置DCO輸出時鐘頻率5MHz
BCSCTL2=SELM_0;//選擇MCLK為DCOCLK,內部電阻
ADC10CTL1|=0x08;//轉換時鐘為ACLK
ADC10CTL0=SREF_1+ADC10SHT_0+REFOUT+REFON+ADC10ON;
//選擇內部電壓1.5V,采樣時間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;
}


為了方便大家更好的學習,您還可以關注暢學電子和EDA的公眾號,每天推送相關知識,希望能對你的學習有所幫助!

