您的位置:首页 > 其它

MSP430 AD 单通道单次转换

2013-01-20 20:04 429 查看
今天学了一下msp430 ad转换,编程ad单通道单次转换。

首先顺一下思路:

adc12 :单通道单次转换流程,开了adc12on 后,shs (选择输入信号源)= 0,ENC上跳,adc12sc 上跳, 开始采样,经过采样保持时间,转换成功,值放在adc12MEMx中。发生中断,adcifg置位,读取后adc12mem 后,自动复位。

相关寄存器:

ADC12CTL0 : SHT0_2 + ADC12ON

设置采样保持时间,打开内核

ADC12CTL1 : SHS(DEFAULT) ,SHP(1) 定时器,

ADC12CTL0:ENC,ADC12SC 置位

while(1)

{

ADC12SC 置位;

diaplay(转换数据);

}

interrupt()

{

  read ADC12MEM0;

}

参考程序:#include <msp430x14x.h>

#define uchar unsigned char
#define uint unsigned int
uchar table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar position[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar count=1,count1=0,i,j;
uchar temp,result[4],index ;

void show(uchar pos,uchar num)
{
P4OUT = 0x00; // tobe all turn off
P6OUT |= 0x40; // DUAN open
P4OUT = table[num]; //DUAN NUM
P6OUT &= 0XBF; // DUAN close

P4OUT = 0XFF;
P5OUT |= 0X20;
P4OUT &= position[pos];
P5OUT &= 0XDF;

}

void delayms(uint t)
{
uint i;
while(t--)
for(i=110;i>0;i--);//进过参数的调整
}

//******************单通道单次转换***********/
void init_adc()
{
P6SEL |= 0X01;
ADC12CTL0 = SHT0_2 + ADC12ON;

ADC12CTL1 = SHP;
ADC12CTL0 |=ENC;
ADC12IE =0X01;

ADC12CTL0 |= ADC12SC;
}

void change()
{
uchar i=0;
while(temp)
{
result[4-i++] = temp%10;
temp /= 10;
}
}

void display()
{
uchar i;
for(i=0;i<4;i++)
{
show(i,result[i]);
delayms(2);
}
}

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P6DIR |= BIT2;
P6OUT |= BIT2;
_EINT();
init_adc();
P6DIR |= 0X40; // p6^6 output
P5DIR |=0X20; // P5^5 OUTPUT
P4DIR = 0XFF; // P4 OUTPUT

while(1)
{
ADC12CTL0 |= ADC12SC; //BEGAIN TRANSFER
change();
display();
}

}

#pragma vector = ADC12_VECTOR
__interrupt void adc12(void)
{
temp = ADC12MEM0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  msp430