?? msp430f2274中adc10 wendu.txt
字號:
MSP430F2274中ADC10 內部溫度傳感器-MSP430單片機,MSP430F2274基礎知識
/*******************************************************************************************************
* 功能: ADC10測片內溫度兩極管的電壓
*
* 描述: 用 temp = ((Vref+ * temp )/ 1023 - 0.986) /0.00355 的公式來計算溫
*
* 度值程序中寫到的 "/0.0000355" 是將結果擴大100倍,保留倆位小數點 *
* AD 采樣通道選擇 A10(內部溫度傳感器),選用內部 1.5V 為正向參考電壓 *
* 采樣通道選擇 A0,選用AVSS 為負參考電壓,AVCC為正參考電壓 *
* ADC10 采樣保持時鐘源選擇 ADC10OSC ,采樣保持時間64個ADC10CLKs. *
* 用于連續或重復模式并2分頻. ADC10CTL0寄存器中的 位7 MSC *
* 0 多次采只樣轉換位,采樣時序,要求SHI 上升沿來觸發每次采樣轉換 *
* 1 第一次SHI的上升沿觸發采樣時序 一次采樣轉換結束以后,以后的采樣自 *
* 動完成以定時方式進行采樣.
*
*
*
* 此例在 IAR Embedded Workbench IDE for MSP430 v3.42a 調試通過 .
*
********************************************************************************************************/
#include <MSP430x22x4.h>
unsigned char ADC10FLAG=0;
unsigned int result;
void TIMER_A_SETTINGS( void )
{
TACTL=TASSEL1+TACLR+MC1;
CCR0=50000;
TACCTL0 |= CCIE;
}
void ADC10_SETTINGS ( void )
{
ADC10CTL0 &=~ ENC; // 設置ADC10CTL 先將此位清0,喪失ADC10功能 才修能改
ADC10CTL0 |= SREF_1; // AVSS 為負參考電壓,VREF+內部參考為正電壓
ADC10CTL0 |= ADC10SHT_3; // ADC10 采樣保持時間為64個ADC10CLKs
ADC10CTL0 &=~ ADC10SR; // 采樣速率 選用 200KSPS
ADC10CTL0 &=~ REFOUT; // 關閉內部參考電壓輸出
ADC10CTL0 &=~ REFBURST; // 內部參考電壓連續補足
ADC10CTL0 &=~ MSC;
ADC10CTL0 &=~ REF2_5V; // 選擇內部 1.5V 參考電壓
ADC10CTL0 |= REFON; // 開啟內部參考電壓
ADC10CTL0 |= ADC10IE; // 允許 ADC10 采樣中斷
ADC10CTL0 &=~ ADC10IFG; // 初始先清楚 ADC10中斷標記位
ADC10CTL0 |= ADC10ON; // 開啟 ADC10 采樣功能
ADC10CTL1 |= INCH_10; // 選擇A10 ADC10片內溫度傳感器,
ADC10CTL1 |= SHS_0; // 選啟 ADC10 內部采樣時時鐘發生器 ADC10OSC
ADC10CTL1 &=~ ADC10DF; // 采樣結果以二進制格式存放
ADC10CTL1 &=~ ISSH; // 采樣輸入信號不反轉
ADC10CTL1 |= ADC10DIV_1; // 對采樣時鐘源進行 2分頻
ADC10CTL1 |= CONSEQ_0; // 單通道單次采樣
}
void START_ADC10( void )
{
ADC10CTL0 |= ADC10SC + ENC;
}
void FORMAT_DATA( void )
{
result = ADC10MEM;
result = (int)(((1.5 * result )/ 1023 - 0.986) /0.0000355);
_NOP();
}
void main( void )
{
WDTCTL=WDTPW+WDTHOLD;
BCSCTL1 =CALBC1_1MHZ;
DCOCTL =CALBC1_1MHZ;
ADC10_SETTINGS();
TIMER_A_SETTINGS();
_BIS_SR(GIE);
while(1)
{
if(ADC10FLAG)
{
FORMAT_DATA();
ADC10FLAG = 0;
}
}
}
#pragma vector = ADC10_VECTOR
__interrupt void adc_isr(void)
{
ADC10FLAG=1;
}
#pragma vector = TIMERA0_VECTOR
__interrupt void ta0_isr(void)
{
CCR0=50000;
START_ADC10();
}
MSP430錄入:dycxin 責任編輯:dycxin
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -