msp430g2553的ADC10采集转换内部温度传感器信号,从而控制timer_A输出PWM信号的占空比,进而控制led 的亮度,但是下载到launchpad板子上运行,每次上电之后没有立即运行,需要复位一下才可以正常运行,还有一个问题是如果在程序执行中再按复位键,多数时候led亮度保持最大,即使改变温度,亮度也不变化,求大家指点一下,下面是根据TI例程改写的代码
#include "msp430g2553.h"
long temp;
static unsigned int FirstADCVal; // holds 1st ADC result
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog
ADC10CTL0 |= ADC10SHT_2 + ADC10ON + ADC10SR + MSC;//设置采样保持时间,打开ADC10
ADC10CTL1 |= INCH_10 + CONSEQ_2;//设置通道,温感器作为采样输入通道,单通道连续转换
ADC10CTL0 |= ADC10IE + ADC10SC + ENC;//允许ADC10中断,ADC10转换使能,并开始转换
while (!(ADC10IFG & ADC10CTL0)); // First conversion?
FirstADCVal = ADC10MEM; // Read out 1st ADC value
P1OUT = 0x00; // Clear P1
P1DIR = 0x01; // P1.0 as output
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
temp = ADC10MEM;
if((temp>=FirstADCVal)&&(temp<=(FirstADCVal+3)))
{
TACTL = TASSEL_2 + TACLR;//TA时钟源为SMCLK,清除TAR
CCTL0 = 0x00;//默认值,比较器模式
CCTL1 = 0x00;
CCR0 = 3 ;//为使led亮度变化效果明显,PWM周期=3,
CCTL1 = OUTMOD_7;//输出模式7
CCR1 = temp-FirstADCVal;//占空比,温度变化值,
P1DIR |= BIT6;//P1.6输出
P1SEL |= BIT6;//P1.6 TA1 out
TACTL |= MC0;//Timer_A增计数模式
}
}