//平台:msp430launchpad仿真, IAR V5.50.2, MCU:msp430g2231
//说明:使用VLO作为CPU、ADC的时钟源 并关闭其它时钟,使用ADC10,引脚连接如下
// Vin --> P1.0--> A/D P1.6--> LED
#include "msp430g2452.h"
main()
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR = 0XFF;
P2DIR = 0XFF;
//开VLO,关其它时钟
BCSCTL3 = LFXT1S_2; //低高频选OLV,并作为ACLK时钟源
BCSCTL2 = SELM_3 + DIVM_0; //MCLK时钟源选VLO(或LFXT1),MCLK不分频
IFG1 &= ~OFIFG; //清时钟失效中断标志
_BIS_SR(SCG0 + SCG1 + OSCOFF); //关DCO、SMCLK、LFXT1等
//ADC10初始化
ADC10AE0 = BIT0; //P1.0为ADC输入端
ADC10CTL0 = ADC10SR + ADC10ON + ADC10IE; //启动ADC,开中断
ADC10CTL1 = INCH_0 + ADC10SSEL_1 + CONSEQ_0; //ADC时钟为ACLK, 单通道单次模式
for(;;)
{
ADC10CTL0 |= ENC + ADC10SC; //开始A/D
_BIS_SR( GIE ); //开全局中断
_BIS_SR( CPUOFF ); //关CPU
asm("nop");
if(ADC10MEM > 500)
{
P1OUT = BIT6;
}
else
{
P1OUT &= ~BIT6;
}
}
}
//****************************************************************
//ADC10中断
#pragma vector = ADC10_VECTOR
__interrupt void ADC10INT()
{
_BIC_SR_IRQ( CPUOFF ); //清CPUOFF
}
//以上程序执行后就停在asm("nop");这里,无法往下执行,中断能正常工作,中断返回后怎样CPUOFF还是“1”呢? 能只手工单步才能往下执行, 如果把_BIS_SR( CPUOFF ); 去掉就能正常工作了。