你好!
msp430F413工作时用32KHZ,利用看门狗定时器时间工作,程序调试时发现, 每次运行频率有时不一样,有两种情况,10次有2次不准,频率慢了2/1左右。不知道什么原因?是不是设置32KHZ错了,还是其他原因?部分程序见如下,谢谢!
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
FLL_CTL0 |= XCAP18PF; // Set load cap for 32k xtal
DelayMS(1000);//100MS
P2OUT = 0xff; // led1-led8 为高电平
P2DIR = 0xff; //设置P2口方向为输出
P6OUT = 0xff; // led9-led16 为高电平
P6DIR = 0xff; //设置P6口方向为输出
P5OUT = 0x20; /
// 其他IOf口初始化
Play(90);
WDTCTL = WDT_ADLY_250; // WDT 250ms, ACLK, interval timer
IE1 |= WDTIE; // Enable WDT interrupt
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/interrupt
}
// Watchdog Timer interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(WDT_VECTOR))) watchdog_timer (void)
#else
#error Compiler not supported!
#endif
{
unsigned int j;
FLL_CTL0 |= XCAP18PF; // Set load cap for 32k xtal
DelayUS(50);
JS++;
if(JS==120) //看门狗计数 120 30s, 250MS
{
P1OUT&=~0x20; //工作指示灯P1.5为低电平
}
if(JS==121)
{
P1OUT|=0x20; //P1.5为高电平
JS=0;
}
JS=0;//重新计数
P5OUT&=~0x01; //P5.0为低电平
WDTCTL = WDT_ADLY_250; // WDT 250ms, ACLK, interval timer
}//P3,P4判断
}