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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值