?? msp430f2274adc10.txt
字號:
MSP430F2274中ADC10 系列通道單次采樣
/**************************************************************************************************************
* 功能: ADC10 多通道系列單次采樣
*
* 描述: 對A0 A1 A2 三個通道進行電壓檢測,ADC結果存于 ad_value[3] 數組中.并 *
* 用 result[X]= ((Avcc * ad_value[X] )/ 1023 的公式來計算電壓值 .
*
* 程序中寫到的 "*1000" 是將結果擴大1000倍,保留3位小數點
*
***************************************************************************************************************/
#include <MSP430x22x4.h>
unsigned char ADC10FLAG=0;
unsigned int result[3],ad_value[3];
void TIMER_A_SETTINGS( void )
{
TACTL=TASSEL1+TACLR+MC1;
CCR0=50000;
TACCTL0 |= CCIE;
}
void ADC10_SETTINGS ( void )
{
ADC10CTL0 &=~ ENC; // 設置ADC10CTL 先將此位清0,喪失ADC10功能 才修能改
ADC10DTC0 |= ADC10CT; // 選擇連續轉移數據
ADC10CTL0 |= SREF_0; // AVSS 為負參考電壓,AVCC為正參考電壓
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_2; // AD 采樣通道選擇從A2開始 到A0
ADC10CTL1 |= SHS_0; // 選啟 ADC10 內部采樣時時鐘發生器 ADC10OSC
ADC10CTL1 &=~ ADC10DF; // 采樣結果以二進制格式存放
ADC10CTL1 &=~ ISSH; // 采樣輸入信號不反轉
ADC10CTL1 |= ADC10DIV_1; // 對采樣時鐘源進行 2分頻
ADC10CTL1 |= CONSEQ_1; // 多通道單次采樣
ADC10DTC1 = 3; // 連續采樣3次中斷一次
ADC10SA = (unsigned int)ad_value+1; // ADC10 數據轉移起始地址
}
void START_ADC10( void )
{
ADC10CTL0 |= ADC10SC + ENC;
}
void FORMAT_DATA( void )
{
unsigned char count,j=2;
for(count=0;count<3;count++)
{
result[j] = (unsigned int)((2.99 * ad_value[count] / 1023
)*1000);
j=j-1;
}
_NOP(); // 在此設斷點查看 RESULT 數組的值
}
void main( void )
{
WDTCTL=WDTPW+WDTHOLD;
BCSCTL1 =CALBC1_1MHZ;
DCOCTL =CALBC1_1MHZ;
ADC10_SETTINGS();
TIMER_A_SETTINGS();
_BIS_SR(GIE+LPM1_bits);
while(1)
{
if(ADC10FLAG==1)
{
FORMAT_DATA();
ADC10FLAG = 0;
}
_BIS_SR(GIE+LPM1_bits);
}
}
#pragma vector = ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
ADC10FLAG=1;
}
#pragma vector = TIMERA0_VECTOR
__interrupt void TIMER_A_ISR(void)
{
_BIC_SR_IRQ(LPM1_bits);
CCR0=50000;
START_ADC10();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -