本帖最后由 哈利 于 2013-11-4 21:39 编辑  
 
程序代码如下: 
#include <msp430.h> 
void main(void) 
{  unsigned int i; 
   WDTCTL = WDTPW + WDTHOLD; 
   if(CALBC1_1MHZ==0XFF || CALDCO_1MHZ==0XFF) 
   { 
          while(1);    
   } 
   do 
   { 
     IFG1 &= ~OFIFG; 
     for(i=0xff;i>0;i--); 
   } 
   while((IFG1&OFIFG)); 
   P1DIR |= BIT0; 
   P1OUT =0; 
   ADC10CTL0 |= ADC10ON + ADC10IE + SREF_1 + ADC10SHT_3 + REF2_5V + REFON; 
   ADC10CTL1 |= INCH_10 + ADC10SSEL_2 + SHS_1 + CONSEQ_2; 
   __enable_interrupt();                    
   TA0CCR0 = 30;                         
   TA0CCTL0 |= CCIE;                           
   TA0CTL = TASSEL_2 | MC_1;                
   LPM0; 
} 
#pragma vector=TIMER0_A0_VECTOR 
__interrupt void timer0_isr(void) 
{ 
   TA0CTL = 0; 
   TA0CCR0 =32767; 
   TA0CCR1 = 2500; 
   TA0CCTL0 &=~CCIE; 
   TA0CCTL1 = OUTMOD_3; 
   TA0CTL = TASSEL_2 + MC_1; 
   ADC10CTL0 |= ENC; 
} 
#pragma vector=ADC10_VECTOR 
__interrupt void ADC10_isr(void) 
{  
  P1OUT ^= BIT0; 
} 
是这样一回事:当我让程序全速进行时,发现CPU进入低功耗不响应ADC10的中断,但是只要这时候,我按一下BREAK按钮,也就是那个红色的小手,接着通过查看寄存器得知ADC10中断标志已经置位。不可思议的是:紧接着,我按一下单步执行,发现响应了中断。再全速运行,仍然是同样的问题。每次都是这样。。。这是为什么?仿真过程有问题?? 
如果我把主程序最后一句“LPM0;”换成“while(1)”,仿真过程不会出现问题。求解? |   
     
  
 |