MSP430之AD12笔记及使用一例

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

粽子糖果 发表于09-09 14:32 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

粽子糖果
粽子糖果(总统)
金币:41623个|学分:51975个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号