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;
}
首先顺一下思路:
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;
}
相关文章推荐
- stm32AD单通道与多通道转换(DMA)
- OPENCV将多通道分离与合成、图像格式的转换
- STM 8 AD 转换问题
- AD10的PCB转换成Protel99SE导致覆铜消失该如何解决和将AD10的pcb转换成protel版本
- stm8s单片机实现多通道转换
- STM32LxxADC单通道多次转换代码分析(非DMA)
- STM32F10x_ADC三通道逐次转换(单次、单通道软件触发)
- stm32 ADC模数转换 ADC多通道 ADC DMA
- STM32通过DMA采集多通道AD
- 做AD转换方案时,一定需要注意的几点问题
- STM32多通道ADC规则转换实现了(转)!
- caffe 将三通道或四通道图片转换为lmdb格式,将标签(单通道灰度图)转换为lmdb格式
- DMA+ADC单通道转换、多通道转换
- AD10的PCB转换成Protel99SE导致覆铜消失该如何解决和将AD10的pcb转换成protel版本
- zigbee cc2530 AD 转换温度 学习总结
- STM32F10x_ADC三通道逐次转换(单次、单通道软件触发)
- (原创)如何用自带AD实现触摸屏转换(触摸屏)(AD转换)
- (STM32)AD功能的连接配置方式------单AD多通道实现
- AD10的PCB转换成Protel99SE导致覆铜消失该如何解决和将AD10的pcb转换成protel版本
- ZIGBEE AD 转换 片内温度学习总结