看门狗定时器问题,大家帮忙看看,谢谢
大家有谁对看门狗定时器有过研究的,帮我看看这个问题看门狗作为间隔定时器使用
WDTCTL = WDT_MDLY_32;
/* WDT is clocked by fSMCLK (assumed 1MHz) */
#define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL) /* 32ms interval (default) */
#define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0) /* 8ms " */
#define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) /* 0.5ms " */
#define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDT
而我的子系统时钟SMCLK和辅助系统时钟ACLK均选用12M高频晶体振荡器 BCSCTL2 |= SELM_2 + SELS; // MCLK = SMCLK = XT2 (12M)
这个时候SMCLK是12M,而看门狗定时器的时钟也是SMCLK,但要求是1M
这个会出现矛盾,系统是怎么处理的
谢谢大家帮忙看看指导一下
主函数如下
#include"1602.c"
uchar *s1 = "wei32210130";
void Init_CPU()
{
uchar i;
WDTCTL = WDTPW+WDTHOLD; //关闭看门狗
//所有的IO口为高电平
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;
BCSCTL1&=~XT2OFF; //清XT2失效标志
do
{
IFG1=~OFIFG; //等待晶振起振
for(i=0xff;i>0;i--);
}
while(IFG1&OFIFG); //晶振起振
BCSCTL2 |= SELM_2 + SELS; // MCLK = SMCLK = XT2 (12M)
_EINT();
}
void main()
{
Init_CPU();
uchar i;
WDTCTL = WDT_MDLY_32; //间隔定时器,定时32ms
P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换
LcdReset();
DispStr(0,0,s1);
LocateXY(0,9); //确定写入字符的显示位置
/* LcdWriteCommand(0x07, 1); //整体显示左移
for(i = 12; i > 0; i--)
{
LcdWriteData(0x20);
//延时250ms
IFG1 &= ~WDTIFG;
while(!(IFG1 & WDTIFG));
IFG1 &= ~WDTIFG;
}*/
while(1)
{
LcdWriteCommand(0x05, 1); //整体显示右移
for(i = 24; i > 0; i--)
{
LcdWriteData(0x20);
//延时250ms
IFG1 &= ~WDTIFG;
while(!(IFG1 & WDTIFG));
IFG1 &= ~WDTIFG;
}
LcdWriteCommand(0x07, 1); //整体显示左移
for(i = 24; i > 0; i--)
{
LcdWriteData(0x20);
//延时250ms
IFG1 &= ~WDTIFG;
while(!(IFG1 & WDTIFG));
IFG1 &= ~WDTIFG;
}
}
}
好东西,要定 assumed 1MHz
假如12MHz的话
32ms/12=2.6MS
建议改用ACLK
页:
[1]