MSP430之AD12筆記及使用一例.

MSP430的AD12使用靈活,功能強大.我在學習的過程中特別總結了一下,以後回頭來也方便咯,呵呵.

AD12(12路輸入通道(8路外部輸入通道,4路內部輸入通道),4種模式)

1)寄存器:

A.轉換控制:ADC12CTL0ADC12CTRL1

B.中斷控制:ADC12IFG  ADC12IE  ADC12IV

C存儲控制類:ADC12MCTL0 ADC12MCTL158位寄存器,每個寄存器對應於一個ADCMEM12x,定義參考電壓和通道)

D.存儲器類:ADC12MEM0 ADC12MEM15

2)四種工作模式

A.單通道單次轉換

B.單通道多次轉換

C.多通道(序列)單次轉換

D.多通道(序列)多次轉換

(3)ADC12CTL1有兩個和時鐘相關的設置:

A.SHS:(0-4)採樣輸入信號源選擇控制位.AD採樣時鐘.

B.ADC12SSEL:(0-3) ADC12內核時鐘. 

特別注意二者的區別.

(4)ADC12在AD轉換中完全是自動完成的,所以在多次轉換中大多在中斷處理程序中處理.

在學習中多練習是必要的,如下是單通道單次轉換的例子.不同的工作模式需要設置不同的工作標誌位(0-3).

/*
MSP430
ADC12 單通道單次轉換
*/

#include <MSP430x13x.h>
#define ADCMEM ((int *)0x0140)

void Init(void)
{
  WDTCTL = WDTPW + WDTHOLD ;
  /*ADC12 Setting*/
  P6SEL = 0xFF;
  ADC12CTL0 &= ~0x02 ;          //禁止轉換
  ADC12MCTL0 = 0x00;           
  ADC12MCTL1 = 0x8A;
  ADC12CTL1 = 0x0202;
  ADC12CTL0 = 0x0010 + SHT0_8;
  ADC12CTL0 |= 0X02;            //使能ADC轉換
}
//interrupt[ADC_VECTOR] void ADC12(void) ;
//unsigned int Result ;
int main( void )
{
  unsigned int i ;
  unsigned int j;
  unsigned int Result[2];
  Init();
  while(1)
  {
    for(i = 0;i<2 ;i++)
    {
      ADC12CTL0 |= 0x01 ; //開始轉換
      ADC12CTL1 &= ~0x01;
      for(j = 0;j<=1000 ;j++);
    }
    while((ADC12CTL1 & 0x01)==1);
    for(j = 0; j<2 ; j++)
    {
      Result[j] = ADCMEM[j];
    }
    for(i = 0 ; i<10000 ;i++);
  }
  return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章