本帖最后由 yarnn 于 2015-12-14 22:26 编辑
已经按启动时序启动和关闭了,只要输入#pragma interrupt_handler wdt_isr:8,就能进入中断,大概时间是300us,( 其中 if(PORTB&BIT(1))PORTB&=~BIT(1);是为了用示波器测试看门频率加入的,与程序无关)
无论怎么设置,都改变不了看门门频率,关也关不了。哪位大哥看看,我哪里出问题了?把//wdt_off();//wdt_open();两个都 注释了,看门狗也在运行。
void wdt_open(void)
{
WDTCR=0X18;//(1<<WDCE)|(1<<WDE);/* 启动时序 */
WDTCR=0X00;
WDTCR=0X61;//(BIT(WDCE))|(BIT(WDTIE))|(BIT(WDP3))|(BIT(WDP0));//8S,interreput中断模式,8秒溢出
}
void wdt_off(void)
{ CLI();
MCUSR&=~BIT(WDRF);//清除 MCUSR 寄存器中 WDRF
WDTCR|=0x18;//(1<<WDCE)|(1<<WDE); //在 WDCE 与 WDE 中写逻辑 1
WDTCR=0x00;//关闭 WDT
SEI();
}
#pragma interrupt_handler wdt_isr:8
void wdt_isr(void)
{
CLI();
timel++;
WDTCR|=(BIT(WDTIE));
if(PORTB&BIT(1))PORTB&=~BIT(1);
else PORTB|=BIT(1);
SEI();
}
void main(void)
{
DDRB=0x07;//012out 345in
PORTB=0X00;
wdt_off();
//wdt_open();
}
|