打印
[AVR单片机]

ATMEGA48 用GCCAVR c语言编程,看门狗溢出时间不能改变,怎么回事,请高手请教?

[复制链接]
1045|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
99welcome|  楼主 | 2016-4-12 10:24 | 只看该作者
本帖最后由 99welcome 于 2016-4-13 09:53 编辑

可以进入WDT中断,在中断中改变I/O口电平,程序如下:
#pragma interrupt_handler WDT_isr:7  
void WDT_isr(void)  
{
          wdt_flag=0x01;
          PORTC|=SEN_V;
          DelayMs(10);
          PORTC&=~SEN_V;
}


void main(void)
{
   MCUCR = 0x00;   //JTD XX PUD XX IVSEL IVCE;PUD为0,禁止上拉电阻
   EICRA  = 0x00;  //XXXX ISC11 ISC10 ISC01 ISC00,低电平时产生中断
   EIMSK = 0x00;   //XXXXXX INT1 INT0
   PCICR =  0x00;  //XXXXX PCIE2 PCIE1 PCIE0
   PCMSK2 = 0x00;
   PCMSK1 = 0x00;
   PCMSK0 = 0x00;
   TIMSK0 =0x00;
   TIMSK1 =0x00;
   TIMSK2 =0x00;
   SEI();          //re-enable interrupts
   DDRC  = 0b0010111;  //
   PORTC = 0b0010001;   //
   ACSR=0X80;
  
   MCUSR = 0x00;
   /* 置位WDCE 与WDE */
   WDTCSR = (1<<WDCE) | (1<<WDE);
   /* 关闭WDT */
   WDTCSR = 0x00;
   //可以关闭WDT,下面开启WDT就不行,是固定的频率!!!!!
   WDTCSR=0X18;//(1<<WDCE)|(1<<WDE);/* 启动时序 */  WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0
   WDTCSR=0X00;
   WDTCSR=0X71;//(BIT(WDCE))|(BIT(WDTIE))|(BIT(WDP3))|(BIT(WDP0));//8S,interreput中断模式,8秒溢出
  //上面程序可以开启WDT,但是频率不能改变,无论怎么改变WDP3 WDP2  WDP1 WDP0,频率输出固定
start:
     while(wdt_flag==0)
     {
       NOP();
     }

         if(wdt_flag==1)
         {
           wdt_flag=0;
           goto   start;
         }
}

使用特权

评论回复
板凳
99welcome|  楼主 | 2016-4-12 10:29 | 只看该作者
熔丝位设置如下:

无标题.jpg (116.43 KB )

无标题.jpg

使用特权

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

本版积分规则

2

主题

8

帖子

1

粉丝