最近写了一个程序,复位时根据是否是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溢出
}
请大家帮我看下我的程序哪里出问题了,先谢谢大家了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
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我没有在其他地方定义或声明啊,这又是什么原因啊?还请各位指点我下,谢谢啦!
一周热门 更多>