开发版型号:SEED—MSP430F5529A
开发工具 :CCS 5.4v
以下内容是CCS中ADC12操作的一些简单的demo,现整理如下:
有关MSP430F5529芯片ADC12相关资料,可参考《MSP430x5xx and MSP430x6xx Family User's 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 from LPM0 in Mainloop on
reti. If A0 > 0.5*AVcc, P1.0 set, else reset.
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 = 0x01; // Enable interrupt 9 ADC12CTL0 |= ADC12ENC; 10 P6SEL |= 0x01; // P6.0 ADC option select 11 P1DIR |= 0x01; // 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 >= 0x7ff) // 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 = 0x01; // Enable interrupt 4 ADC12CTL0 |= ADC12ENC; 5 6 ADC12CTL0 |= ADC12SC; // Start sampling/conversion
2)中断部分代码:
3)
1 if (ADC12MEM0 >= 0x7ff) // ADC12MEM = A0 > 0.5AVcc? 2 P1OUT |= BIT0; // P1.0 = 1 3 else 4 P1OUT &= ~BIT0; // P1.0 = 0