×
单片机 > 单片机程序设计 > 详情

MSP430之AD12笔记及使用一例

发布时间:2020-08-27 发布时间:
|

MSP430的AD12使用灵活,功能强大.我在学习的过程中特别总结了一下,以后回头来也方便咯,呵呵.


1.AD12(12路输入通道(8路外部输入通道,4路内部输入通道),4种模式)


(1)寄存器:


A.转换控制:ADC12CTL0、ADC12CTRL1


B.中断控制:ADC12IFG  、 ADC12IE  、ADC12IV


C存储控制类:ADC12MCTL0 — ADC12MCTL15(8位寄存器,每个寄存器对应于一个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

#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;

}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会