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