你好!
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判断
}
灰小子:
把 ACLK通过io输出,用示波器观察一下
Susan Yang:
建议您先试一下TI的例程以排除您的硬件问题。您可以在www.ti.com/…/toolssoftware 下载 MSP430x41x, MSP430F42x Code Examples (Rev. O)
user4385857:
回复 Susan Yang:
我这个程序就是 MSP430x41x的 fet410_wdt_02样本程序模板下修改的,就是不知道错在那里,硬件是没有问题,最小系统也是这个问题。
user4385857:
回复 灰小子:
用IO口观察,有时频率有时变快和变慢,频率采用默认的MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz,FLL_CTL0 |= XCAP18PF;匹配电容有影响吗?