PIC单片机的WDT溢出后如何正确判断 50
voidmain(void){if(!TO){init();//初始化DABA1=DISP[2];//显示“2”while(1);}else{init();//初始化DA...
void main(void)
{
if(!TO)
{
init();//初始化
DABA1=DISP[2];//显示“2”
while(1);
}
else
{
init();//初始化
DABA1=DISP[1];//显示“1”
second=0;
while(second<1);//延时1秒
DABA1=0;//关闭显示
while(1);//等待溢出
}
}
单片机用PIC16F884。在硬件中运行时,数码管只能显示“1”,并且亮1秒暗1.5秒循环。说明是WDT复位了。但为什么不能进入显示“2”的状态?如果把if(!TO) 改成if(TO) ,则数码管一直显示“2”。说明WDT溢出后,读到的TO值不为零,这是为什么?是我的读取方法有问题吗?小弟初学,请高手不吝指点。最好能给个具体的程序例子,不要复制一大段英文,我的英文实在很烂,如果能看懂的话就不来求助了。谢谢各位大虾
我想要的效果是:上电,数码管显示“1” 一秒钟,然后熄灭。再过大约1.5秒后WDT溢出复位,检测到是WDT溢出后数码管显示“2”,然后虽然一直有WDT溢出,但一直显示“2” 。其实写这个程序只是想验证下WDT溢出的TO标志位。不知道为什么这个TO位在WDT溢出后不是零。是我的程序有问题还是MPLAB和编译器(PICC PRO9.65)的设置有问题。初学不太懂,忘不吝指教!
这个程序中的second是用TMR1定时中断得到的秒针。动态扫描显示程序也在这个中断中。其中没有CLRWDT指令。 展开
{
if(!TO)
{
init();//初始化
DABA1=DISP[2];//显示“2”
while(1);
}
else
{
init();//初始化
DABA1=DISP[1];//显示“1”
second=0;
while(second<1);//延时1秒
DABA1=0;//关闭显示
while(1);//等待溢出
}
}
单片机用PIC16F884。在硬件中运行时,数码管只能显示“1”,并且亮1秒暗1.5秒循环。说明是WDT复位了。但为什么不能进入显示“2”的状态?如果把if(!TO) 改成if(TO) ,则数码管一直显示“2”。说明WDT溢出后,读到的TO值不为零,这是为什么?是我的读取方法有问题吗?小弟初学,请高手不吝指点。最好能给个具体的程序例子,不要复制一大段英文,我的英文实在很烂,如果能看懂的话就不来求助了。谢谢各位大虾
我想要的效果是:上电,数码管显示“1” 一秒钟,然后熄灭。再过大约1.5秒后WDT溢出复位,检测到是WDT溢出后数码管显示“2”,然后虽然一直有WDT溢出,但一直显示“2” 。其实写这个程序只是想验证下WDT溢出的TO标志位。不知道为什么这个TO位在WDT溢出后不是零。是我的程序有问题还是MPLAB和编译器(PICC PRO9.65)的设置有问题。初学不太懂,忘不吝指教!
这个程序中的second是用TMR1定时中断得到的秒针。动态扫描显示程序也在这个中断中。其中没有CLRWDT指令。 展开
2个回答
展开全部
WDT溢出时程序就会自动复位,PC指针会跳到0x0000地址执行程序,并且复位所有特殊功能寄存器器。
你确定一下WDT复位PC寄存器之后,如果TO是一个中断标志应该会在系统复位之后把所有寄存器都复位。如果没有猜错TO应该是让你用来喂狗的位。如果你在看门狗定时器计数结束之前不喂狗,系统就复位。所以这个TO应该是让你用软件来喂狗的吧。应该不是WDT产生中断的标志。
寄存器在复位后的状态在芯的数据手册中关于寄存器说明中可以找到。
你确定一下WDT复位PC寄存器之后,如果TO是一个中断标志应该会在系统复位之后把所有寄存器都复位。如果没有猜错TO应该是让你用来喂狗的位。如果你在看门狗定时器计数结束之前不喂狗,系统就复位。所以这个TO应该是让你用软件来喂狗的吧。应该不是WDT产生中断的标志。
寄存器在复位后的状态在芯的数据手册中关于寄存器说明中可以找到。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请问你这个程序想达到什么样的一个效果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询