void main()
{
WDTCTL = WDT_ADLY_1000; // WDT 250ms, ACLK, interval timer
SFRIE1 |= WDTIE; // Enable WDT interrupt
check_clk();
TA1_Init();
_EINT();
while(1);
}
void check_clk(void)
{
P11SEL |= BIT0+BIT1+BIT2; //
P11DIR = BIT0+BIT1+BIT2; // P11.1-2 to output direction
P5SEL |= 0x0C; // Port select XT2
P7SEL |= 0x03; // Select XT1
UCSCTL6 &= ~(XT1OFF+XT2OFF); // XT1 On
UCSCTL6 |= XCAP_3;
UCSCTL3 |= SELREF_2; // FLLref = REFO
// Since LFXT1 is not used,
// sourcing FLL with LFXT1 can cause
// XT1OFFG flag to set
UCSCTL4 |= SELA_2; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
_NOP();_NOP();_NOP();_NOP();_NOP();
_NOP();_NOP();_NOP();_NOP();_NOP();
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
UCSCTL6 &= ~(XT2DRIVE0+XT1DRIVE_3); // Decrease XT2 Drive according to
UCSCTL4 |= SELS_5 + SELM_5+SELA_0; // SMCLK=MCLK=XT2
UCSCTL5 |= DIVPA_0+DIVS_0+DIVM_0; // SMCLK=MCLK=XT2
}
#pragma vector = WDT_VECTOR //看门狗定时器
__interrupt void WDT_ISR(void)
{
fre=flag*65535+TA1R;
flag=0;
TA1R=0;
}
void TA1_Init()
{
TA1CTL=TASSEL_0+MC_1+TACLR;
TA1CCR0=65535;
TA1CCTL0|=CCIE;
P2SEL|=BIT0;
}
在这程序在全速运行时会跑飞,单步调试时可以正常通过初始化函数,然后再点全速运行的时候又会跑飞。 跑飞(两个中断都进不去)
但是当我把红色语句改成UCSCTL5 |= DIVPA_0+DIVS_0+DIVM_1; // SMCLK=MCLK=XT2 ,
整个程序有可以正常运行。
求解释,这个问题?