PIC单片机看门狗程序,关闭看门狗程序正常,打开后异常。请指点错误之处,谢谢 代码如下 5

//MPLABIDEv8.63//PICC9.82//PIC16F873A//**********************************************... //MPLAB IDE v8.63
//PICC 9.82
//PIC16F873A
//****************************************************************************
//程序的主要功能是测试单片机的看门狗信号,疑问点看门狗关闭运行 RB4灯闪烁 RC2灯一直亮
// 看门狗打开运行 RB4灯一直亮 RC2灯一直亮
//****************************************************************************
#include <pic.h> //包含头文件
#define clrwdt asm("CLRWDT")
#define uint unsigned int
__CONFIG(FOSC_XT&WDTE_ON&PWRTE_ON &BOREN_ON&LVP_ON);
//__CONFIG(FOSC_XT&WDTE_OFF&PWRTE_ON &BOREN_ON&LVP_OFF);
unsigned int delay_key;
//**************************************************************
//TMR0周期=256×(2的8次方-计数初值)×指令周期(4M为1us)
//**************************************************************
void fun_initializtion(void) //初始化函数
{
OPTION_REG=0b11000111; //位7 禁止B端口上拉、位6 RB0/INT上升沿触发中断、位5 内部指令周期,位4 不用RA4,
//位3是0 将预分频指派给TMR0、位2-0 分频比选择位 111为1:256
INTCON =0b11110000; //全局中断、外设中断、TMR0溢出中断允许、RB0/INT外部中断允许
ADCON1 =0b00000110; //RA端口为数字I/O口

//LED默认熄灭
TRISB = 0b00000000;
//PORTB = 0b00000000;
TRISC = 0b00000000;
//PORTC = 0b00000000;
}
void mDelay(unsigned int Delay) //延时函数
{
unsigned int i;
for(;Delay>0;Delay--)
{
//for(i=0;i<34;i++) //4MHZ 501us
for(i=0;i<16;i++); //4MHZ 249us

/*{clrwdt;}*/
}
}
static void interrupt isr(void) // 中断函数
{
if(TMR0IF) //判断TMR0是否有溢出 =1为溢出
{ //timer interrupt
TMR0=215; //256×40×1 =80us 4M
TMR0IF=0; //clear the interrupt flag 软件清零
clrwdt;
delay_key++; //记录TMR0的溢出次数 每10ms加1
if(delay_key>=100) //1s时间 值为100
{
delay_key=0;
RB4 = 1;
mDelay(4000); //1S时间
RB4 = 0;
}
}
}
void main()
{
clrwdt;
fun_initializtion(); //调用初始化函数
interrupt isr();
while(1)
{
mDelay(4); //0.01S时间
//mDelay(4000); //1S时间
RC2 = 1;
clrwdt;

}
}
展开
 我来答
lfflash
2013-03-06 · TA获得超过607个赞
知道小有建树答主
回答量:333
采纳率:0%
帮助的人:148万
展开全部
中断的占用时间过长,也就是清狗程序不够及时。建议不要用延时,想其他的办法去解决这个问题为好。本身单片机的速度就不快,还延时就让单片机的休息时间过多,效率自然就不高了。
就好比楼主请个人给你做事,本省这个人做事就不怎么快,你还让他经常休息,你说能帮你做好事情么?开个玩笑,帮助理解的!~
digerhu
2013-03-06
知道答主
回答量:37
采纳率:0%
帮助的人:13.2万
展开全部
1.初始化函数里没看到看门狗的初始化;
2.中断函数里不可以清看门狗;
3.建议在子程序调用的开始和结束时都清一次看门狗;
更多追问追答
追问
你好,我改好后测试还是一样,我想知道怎样测试在程序还没执行完成时(即RC2灯点不亮),看门狗提前复位
追答
你在主函数的初始化后开关一次独立的指示灯,如果这个灯会闪烁,就说明看门狗出现了超时。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式