求助:关于PIC16F873A的WDT溢出复位时的STATUS的TO状态位

2020-02-09 11:40发布

最近写了一个程序,复位时根据是否是WDT溢出复位而采取不同的初始化程序.我实际测试的结果是:当WDT溢出复位时寄存器STATUS的TO位是1,而不是数据手册上的0.我用的是HiTech-PICC编译器.
以下是我的程序:

#include <htc.h>

__CONFIG(XT & WDTEN &  PWRTEN &  BOREN &  LVPDIS);

void main (void)
{
     _delay(1);

     if (POR && BOR && !TO && PD) { //是WDT溢出复位吗?
         CLRWDT();     //是,则执行看门狗指令使TO置1
         WDTResetInit();    //并执行初始化程序WDTResetInit()
    } else {      //非WDT溢出复位
         POR = 1;     //软件置位POR与BOR
         BOR = 1;
         CLRWDT();
         NonWDTResetInit();   //执行初始化程序NonWDTResetInit()
   }

   while(1); //等待WDT溢出
}

请大家帮我看下我的程序哪里出问题了,先谢谢大家了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
xujiayong
2020-02-09 21:04
我按照PICC手册上的说明,在源代码中添加了2行声明:
           extern bit __powerdown;
           extern bit __timeout;
并在编译选项里选中了"Backup reset condition flags"
修改后的代码示例如下:
/*
***********************************
#include <htc.h>
__CONFIG(XT & WDTEN &  PWRTEN &  BOREN &  LVPDIS);
extern bit __powerdown;
extern bit __timeout;

void main (void)
{
     _delay(1);
     if (POR && BOR && !__timeout && __powerdown) { //是WDT溢出复位吗?
         WDTResetInit();    //并执行初始化程序WDTResetInit()
     } else {      //非WDT溢出复位
         POR = 1;     //软件置位POR与BOR
         BOR = 1;
         NonWDTResetInit();   //执行初始化程序NonWDTResetInit()
    }
    CLRWDT();
    while(1); //等待WDT溢出
}
**************************************
*/
但是当我编译时出现了错误提示:symbol "___timeout" is defined more than once....
__timeout我没有在其他地方定义或声明啊,这又是什么原因啊?还请各位指点我下,谢谢啦!

一周热门 更多>