430学习笔记-内置ADC12

前几个月在做项目时,由于使用的是别人提供的开发板,部分IO口不能直接使用,比如P60-P64都用在了其他地方。而这时我需要使用430内置的ADC12来进行AD转换,因此可以使用的P6口只用P65-P67。

一开始,我在网上收集到的大多数例程都是使用P60口的,而一直找不到使用特定IO口进行AD转换的程序,TI官方给的例程也没有提到相关的内容。无奈之下只能看430的user guide,主要注意一些其他例程中没有提到的控制寄存器的使用方法。

最终我整理出了一点头绪,在此与大家分享。

 1 void adcintial()
 2 {
 3   ADC12CTL0 &=~ENC;
 4    P6SEL |= BIT5;                            // P6.5 ADC option select
 5   ADC12CTL0 = SHT0_2 + ADC12ON + REFON + REF2_5V;             // Set sampling time, turn on ADC12
 6   ADC12CTL1 = CSTARTADD_5 + SHP;             // Use sampling timer
 7   ADC12MCTL5 = SREF_1 + INCH_5;
 8   ADC12IE = 0x20;                           // Enable interrupt
 9   ADC12CTL0 |= ENC;                         // Conversion enabled
10 }

以上一段代码是用在ADC12初始化的,其中与使用P60口做单通道单次转换不同的地方在第六行和第七行。

第六行中CSTARTADD_5是转换的起始IO口,最后的数字5表示这是从P65开始转换。

第七行中INCH_5是转换是需要用到的IO口,这里用的是P65口。

1 #pragma vector=ADC12_VECTOR
2 __interrupt void ADC12_ISR (void)
3 {
4      ad_data=ADC12MEM5;
5 }

然后这是ADC12中断部分的代码,ADC12MEM5是临时储存寄存器,这个寄存器和选择转换的通道一一对应。这里使用的是P65作为转换通道,因此转换的最后结果会存放在ADC12MEM5中。

这是我第一篇博客,如有疏漏,希望大家多多指正!

posted @ 2013-10-01 21:47  cyano  阅读(522)  评论(0编辑  收藏  举报