-
MSP430进修笔记2-ADC12
添加时间:2013-6-16 点击量:接《MSP430进修笔记1-I/O端口》
开辟版型号:SEED—MSP430F5529A
开辟对象 :CCS 5.4v
以下内容是CCS中ADC12操纵的一些简单的demo,现收拾如下:
有关MSP430F5529芯片ADC12相干材料,可参考《MSP430 x5xx and MSP430 x6xx Family Users Guide (Rev. M)——Chapter 28 ADC12_A》
1:demo描述
Description: A single sample is made on A0 with reference to AVcc.
Software sets ADC12SC to start sample and conversion - ADC12SC
automatically cleared at EOC. ADC12 internal oscillator times sample (16x)
and conversion. In Mainloop MSP430 waits in LPM0 to save power until ADC12
conversion complete, ADC12_ISR will force exit LPM0 in Mainloop on
reti. If A0 > 0.5AVcc, P1.0 set, else reset.
参考AVcc电压、以A0按时器作为采样输入旌旗灯号源的、单通道单次模式采样,当采样旌旗灯号大于0.5AVcc时,P1.0置位,不然为0。代码如下:1 #include <msp430.h>
2
3 int main(void)
4 {
5 WDTCTL = WDTPW + WDTHOLD; // Stop WDT
6 ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on
7 ADC12CTL1 = ADC12SHP; // Use sampling timer
8 ADC12IE = 0 x01; // Enable interrupt
9 ADC12CTL0 |= ADC12ENC;
10 P6SEL |= 0 x01; // P6.0 ADC option
11 P1DIR |= 0 x01; // P1.0 output
12
13 while (1)
14 {
15 ADC12CTL0 |= ADC12SC; // Start sampling/conversion
16
17 __bis_SR_register(LPM0_bits + GIE); // LPM0, ADC12_ISR will force exit
18 __no_operation(); // For debugger
19 }
20 }
21
22 #pragma vector = ADC12_VECTOR
23 __interrupt void ADC12_ISR(void)
24 {
25 switch(__even_in_range(ADC12IV,34))
26 {
27 case 0: break; // Vector 0: No interrupt
28 case 2: break; // Vector 2: ADC overflow
29 case 4: break; // Vector 4: ADC timing overflow
30 case 6: // Vector 6: ADC12IFG0
31 if (ADC12MEM0 >= 0 x7ff) // ADC12MEM = A0 > 0.5AVcc?
32 P1OUT |= BIT0; // P1.0 = 1
33 else
34 P1OUT &= ~BIT0; // P1.0 = 0
35
36 __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
37 case 8: break; // Vector 8: ADC12IFG1
38 case 10: break; // Vector 10: ADC12IFG2
39 case 12: break; // Vector 12: ADC12IFG3
40 case 14: break; // Vector 14: ADC12IFG4
41 case 16: break; // Vector 16: ADC12IFG5
42 case 18: break; // Vector 18: ADC12IFG6
43 case 20: break; // Vector 20: ADC12IFG7
44 case 22: break; // Vector 22: ADC12IFG8
45 case 24: break; // Vector 24: ADC12IFG9
46 case 26: break; // Vector 26: ADC12IFG10
47 case 28: break; // Vector 28: ADC12IFG11
48 case 30: break; // Vector 30: ADC12IFG12
49 case 32: break; // Vector 32: ADC12IFG13
50 case 34: break; // Vector 34: ADC12IFG14
51 default: break;
52 }
53 }2:代码解析
1)主函数中代码:
1 ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on
2 ADC12CTL1 = ADC12SHP; // Use sampling timer
3 ADC12IE = 0 x01; // Enable interrupt
4 ADC12CTL0 |= ADC12ENC;
5
6 ADC12CTL0 |= ADC12SC; // Start sampling/conversion参考把握存放器如下:
ADCSHT0 x :采样对峙按时器0,该四位定义了保存在转换存储存放器中转换成果的采样周期;ADC12ENC:转换容许ADC12SHP:选择采样按时器A0输出ADC12IE:中断容许 (来自中断容许存放器)2)中断项目组代码:
中断存放向量ADC12IV中的数字(0-36)用来断定中断标记存放器中相干位是否置位,此时注解转换成果已经装入转换存储存放器中,具体数字的含义拜见下图:
3)
1 if (ADC12MEM0 >= 0 x7ff) // ADC12MEM = A0 > 0.5AVcc?
2 P1OUT |= BIT0; // P1.0 = 1
3 else
4 P1OUT &= ~BIT0; // P1.0 = 0参考电压应用VCC,因为ADC精度为12位(4095),所以0 x7FF(2047)就是0.5Vcc的AD值StevenMeng2013 6.14