一。簡單介紹 MSP430 ADC12模塊中是由以下部分組成:輸入的16路模擬開關(外部8路,內部4路),ADC內部電壓參考源,ADC12內核,ADC時鐘源部分,采集與保持/觸發(fā)源部分,ADC數(shù)據(jù)輸出部分,ADC控制寄存器等組成。
四種采樣模式:
一。簡單介紹:
ADC12模塊中是由以下部分組成:輸入的16路模擬開關(外部8路,內部4路),ADC內部電壓參考源,ADC12內核,ADC時鐘源部分,采集與保持/觸發(fā)源部分,ADC數(shù)據(jù)輸出部分,ADC控制寄存器等組成。
四種采樣模式:
(1)單通道單次轉換模式
(2)序列通道單詞轉換模式
(3)單通道多次轉換模式
(4)序列通道多次轉換模式
個人覺得(3)模式應該是使用較多的,
對選定的通道進行多次轉換,直到關閉該功能或ENC=0。進行如下設置:
x=CSStartAdd,指向轉換開始地址
ADC12MEMx存放轉換結果
ADC12MCTLx寄存器中定義了通道和參考電壓
在這種模式下,改變轉換模式,不必先停止轉換,在當前正在進行的轉換結束后,可改變轉換模式。該模式的停止可有如下幾種辦法:
使用CONSEQ=0的辦法,改變?yōu)閱瓮ǖ绬未文J健?/p>
使用ENC=0直接使當前轉換完成后停止。
使用單通道單次模式替換當前模式,同時使ENC=0
ADC控制寄存器
ADC12CTL0 轉換控制寄存器0
ADC12CTL1 轉換控制寄存器1
ADC12IE 中斷使能寄存器
ADC12IFG 中斷標志寄存器
ADC12IV 中斷向量寄存器
ADC12MEM0-15 存儲控制寄存器0-15
ADC12MCTL0-15 存儲控制寄存器0-15
一般做法:在大循環(huán)里開始轉換,轉換完畢引發(fā)中斷,我們在中斷里記錄并處理轉換數(shù)據(jù)。
二。ADC12寄存器說明
-----------------------------------------------------------------------
寄存器類型 寄存器縮寫 寄存器含義
-----------------------------------------------------------------------
轉換控制寄存器 ADC12CTL0 轉換控制寄存器0
ADC12CTL1 轉換控制寄存器1
-----------------------------------------------------------------------
中斷控制寄存器 ADC12IFG 中斷標志寄存器
ADC12IE 中斷使能寄存器
ADC12IV 中斷向量寄存器
-----------------------------------------------------------------------
存儲及其控制寄存器 ADC12MCTL0~ADC12MCTL15 存儲控制寄存器0~15
ADC12MEM0~ADC12MEM15 存儲寄存器0~15
-----------------------------------------------------------------------
1.ADC12CTL0 控制寄存器0,各位定義:
bit15~12 bit11~8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
SHT1 SHT0 MSC 2.5V REFON ADC12 ON ADC12 TOVIE ADC12 TVIE ENC ADC12 SC
ADC12SC——采樣/轉換控制位。在不同條件下,ADC12SC的含義如下所示:
--------|---------------------------------------------------------------------
ENC=1, | SHP=1: ADC12SC由0變?yōu)?啟動A/D轉換; A/D轉換完成后ADC12SC自動復位
ISSH=0 | SHP=0: ADC12SC保持高電平采樣; ADC12SC復位時啟動一次轉換
--------|---------------------------------------------------------------------
ENC——轉換允許位。
0:ADC12為初始狀態(tài),不能啟動A/D轉換;
1:首次轉換由SAMPCON上升沿啟動
ADC12TVIE——轉換時間溢出中斷允許位(當前轉換還沒完成時,又發(fā)生一次采樣請求,則會發(fā)生轉換時間溢出)
0:沒發(fā)生轉換時間溢出
1:發(fā)生轉換時間溢出
ADC12OVIE——溢出中斷允許位(當ADC12MEMx中原有數(shù)據(jù)還沒有讀出,而又有新的轉換結果數(shù)據(jù)要寫入時,則發(fā)生溢出)
0:沒發(fā)生溢出
1:發(fā)生溢出
ADC12ON——ADC12內核控制位
0:關閉ADC12內核
1:打開ADC12內核
REFON——參考電壓控制位
0:內部參考電壓發(fā)生器關閉
1:內部參考電壓發(fā)生器打開
2.5V——內部參考電壓的電壓值選擇位
0:選擇1.5V內部參考電壓
1:選擇2.5V內部參考電壓
MSC——多次采樣轉換位(CONSEQ<>0表示當前轉換模式不是單通道單次轉換)
-----------|---------------------------------------------------------------------------------------------
有效條件 | MSC值 含義
SHP=1 | 0 每次轉換需要SHI信號的上升沿觸發(fā)采樣定時器
CONSEQ<>0 | 1 僅首次轉換由SHI信號的上升沿觸發(fā)采樣定時器,而后采樣轉換將在前一次轉換完成后立即進行
-----------|---------------------------------------------------------------------------------------------
SHT1、SHT0——采樣保持定時器1,采樣保持定時器0
分別定義保存在轉換結果寄存器ADC12MEM8~ADC12MEM15和ADC12MEM0~ADC12MEM7中的轉換采樣時序與采樣時鐘ADC12CLK的關系。采樣周期是ADC12CLK周期乘4的整數(shù)倍,即:
SHITx 0 1 2 3 4 5 6 7 8 9 10 11 12~15
n 1 2 4 8 16 24 32 48 64 96 128 192 256
2.ADC12CTL1 轉換控制寄存器1(大多數(shù)3~15位,只有在ENC=0時才可被修改),各位定義:
bit15~12 bit11~10 bit9 bit8 biy7~5 bit4~3 bit2~1 bit0
CSSTARTADD SHS SHP ISSH ADC12 DIV ADC12 SSEL CONSEQ ADC12 BUSY[!--empirenews.page--]
CSSTARTADD——轉換存儲器地址位。該4位所表示的二進制數(shù)0~15分別對應ADC12MEM0~15??梢远x單次轉換地址或序列轉換的首地址。
SHS——采樣觸發(fā)輸入源選擇位。
0:ADC12SC
1:Timer_A.OUT1
2:Timer_B.OUT0
3:Timer_B.OUT1
SHP——采樣信號(SAMPCON)選擇控制位。
0:SAMPCON源自采樣觸發(fā)輸入信號
1:SAMPCON源自采樣定時器,由采樣輸入信號的上升沿觸發(fā)采樣定時器
ISSH——采樣輸入信號方向控制位
0:采樣輸入信號為同向輸入
1:采樣輸入信號為反向輸入
ADC12DIV——ADC12時鐘源分頻因子選擇位。分頻因子為該3位二進制數(shù)加1
ADC12SSEL——ADC12內核時鐘源選擇
0:ADC12內部時鐘源——ADC12OSC
1:ACLK
2:MCLK
3:SMCLK
CONSEQ——轉換模式選擇位
0:單通道單次轉換模式
1:序列通道單次轉換模式
2:單通道多次轉換模式
3:序列通道多次轉換模式
ADC12BUSY——ADC12忙標志(只用于單通道單次轉換模式,在其它轉換模式下,該位無效)
0:表示沒有活動的操作
1:表示ADC12正處于采樣期間、轉換期間或序列轉換期間
3.ADC12MEM0~ADC12MEM15 轉換存儲寄存器
該組寄存器均為16位寄存器,用來存放A/D轉換結果。中用其中低12位,高4位在讀出時為0
4.ADC12MCTLx 轉換存儲控制寄存器(所有位只有在ENC為低電平時可修改,在POR時各位被復位)
對于每個轉換存儲器有一個對應的轉換存儲器控制寄存器,所以在進行CSSTARTADD轉換存儲器地址位設置的同時,也確定了ADC12MCTLx。該寄存器各位含義如下:
bit7 bit6~4 bit3~0
EOS SREF INCH
EOS——序列結束控制位
0:序列沒有結束
1:該序列中最后一次轉換
SREF——參考電壓源選擇位
0:Vr+=AVcc,Vr-=AVss
1:Vr+=VREF+,Vr-=AVss
2,3:Vr+=VEREF+,Vr-=AVss
4:Vr+=AVcc,Vr-=VREF-/VEREF-
5:Vr+=VREF+,Vr-=VREF-/VEREF-
6,7:Vr+=VEREF+,Vr-=VREF-/VEREF-
INCH——選擇模擬輸入通道
0~7:A0~A7
8:VeREF+
9:VREF-/VeREF-
10:片內溫度傳感器的輸出
11~15:(AVCC-AVSS)/2
5.ADC12IFG 中斷標志寄存器 為16位,其中中斷標志位ADC12IFG.x對應于轉換存儲寄存器ADC12MEMx。各位含義如下:
bit15 bit14 ...... bit1 bit0
IFG15 IFG14 ...... IFG1 IFG0
ADC12IFG.x置位:轉換結束,并且轉換結果已經(jīng)裝入轉換存儲寄存器。
ADC12IFG.x復位:ADC12MEMx被訪問。
6.ADC12IE 中斷使能寄存器 為16位,對應于ADC12IFG寄存器。各位含義如下:
bit15 bit14 ...... bit1 bit0
IE.15 IE.14 ...... IE.1 IE.0
ADC12IE.x=1:允許相應的中斷標志位ADC12IFG.x在置位時發(fā)生的中斷請求服務。
ADC12IE.x=0:禁止相應的中斷標志位ADC12IFG.x在置位時發(fā)生的中斷請求服務。
7.ADC12IV 中斷向量寄存器
ADC12 是一個多源中斷:有18個中斷標志(ADC12IFG.0~ADC12IFG.15與ADC12TOV,ADC12OV),但只有一個中斷向量。所以需要 設置這18個標志的優(yōu)先級順序,按照優(yōu)先級順序安排中斷標志的響應,高優(yōu)先級的請求可以中斷正在服務的低優(yōu)先級。
三。標準程序參考:
#include "msp430x14x.h"
void InitADC12();
unsigned char wait;
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
InitADC12();
return 0;
}
void InitADC12()
{
//_DINT();
ADC12CTL0 &= ~ENC; //只有在ENC復位的情況下才能對ADC12CTL0、1進行設置!!!
ADC12CTL0 = MSC + REFON + REF2_5V + SHT0_15 + SHT1_15;
/*MSC:多次采樣轉換位,只對序列采樣或者多次多次轉換有效。
0:采樣定時器需要SHI信號的上升沿觸發(fā)
1:首次需要采樣定時器SHI信號觸發(fā),之后的轉換在上次轉換之后隨即開始。*/
ADC12CTL1 |= SHP + CONSEQ_0;
/*SHP: 1:采樣信號源自采樣定時器 0:采樣信號源自采樣輸入信號
CONSEQ: 0: 單通道單次轉換 1:序列通道單詞轉換 2:單通道多次轉換 3:序列通道多次轉換
CSTARTADD_x(0~15):轉換起始位置 */
ADC12MCTL0 = EOS + SREF_0 + INCH_7;
/* EOS:序列結束位
SREF: 參考電壓選擇
INCH:模擬輸入通道選擇 */
ADC12IE |= 0x0001;//開相應模擬通道中斷,轉換完畢后引發(fā)中斷
_EINT();
//ADC12CTL0 |= ADC12ON + ENC; //修改!!!// 這樣寫是不對的
ADC12CTL0 |= ADC12ON;
ADC12CTL0 |= ENC;
wait = 0; //此處可定義變量,指示轉換是否完成
ADC12CTL0 |= ENC+ADC12SC; //轉換開始 若希望在其他時間開始轉換 可將次句放在別處逼比必
while(wait==0)
;
}
#pragma vector=ADC_VECTOR
__interrupt void ADC()
{int result[7];
wait=1;
result[0] = ADC12MEM0;
/*unsigned char q0;
int *pmem=ADC12MEM;
//轉換結束的標志位置位
for(q0=0;q0<16;q0++)
{
AdMem[q0]= *pmem;
pmem++;
}*/
}