打印
[AVR单片机]

tiny13看门狗设置问题,关不掉,改不了狗的频率,求指点。

[复制链接]
1314|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yarnn|  楼主 | 2015-12-14 22:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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();
}



相关帖子

沙发
yarnn|  楼主 | 2015-12-14 22:24 | 只看该作者
看门狗使用的是中断模式,只是一个普通定时中断器用,

使用特权

评论回复
板凳
yarnn|  楼主 | 2015-12-14 22:52 | 只看该作者
一个一个来调,一个一个来换,发现自动AD转换程序与他有关把AD关了,看门狗正常了。
void ad_int(void)
{CLI();
  ACSR=0X80;//ACD off
  DIDR0=0X18;// ADC2\3 D off
  ADCSRA=0X80;//open ADC  OSC1/128 intAD
  ADCSRB=0X00;
  ADMUX=0X62;   

  SEI();
ADCSRA|=BIT(ADSC);
}


#pragma interrupt_handler adc_isr:9
void adc_isr(void)//AD interrupter ret
{  
  adcdata=ADCH;
  adcom=1;
  ADCSRA|=BIT(ADSC);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

29

帖子

0

粉丝