PIC单片机看门狗程序,关闭看门狗程序正常,打开后异常。请指点错误之处,谢谢 代码如下
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PIC单片机看门狗程序,关闭看门狗程序正常,打开后异常。请指点错误之处,谢谢 代码如下相关的知识,希望对你有一定的参考价值。
//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;
就好比楼主请个人给你做事,本省这个人做事就不怎么快,你还让他经常休息,你说能帮你做好事情么?开个玩笑,帮助理解的!~ 参考技术A 1.初始化函数里没看到看门狗的初始化;
2.中断函数里不可以清看门狗;
3.建议在子程序调用的开始和结束时都清一次看门狗;追问
你好,我改好后测试还是一样,我想知道怎样测试在程序还没执行完成时(即RC2灯点不亮),看门狗提前复位
追答你在主函数的初始化后开关一次独立的指示灯,如果这个灯会闪烁,就说明看门狗出现了超时。
追问void main()
//clrwdt;
fun_initializtion(); //调用初始化函数
RC2 =1;
mDelay(40); //10S时间
RC2 =0;
interrupt isr();
while(1)
mDelay(4000); //1S时间
//mDelay(40000); //10S时间
RC2 = 1;
clrwdt;
还是不知怎样计算 RC2 灯无异常 我没财富了 麻烦发我私信吧 谢谢
Arduino - 看门狗定时器的使用介绍
以上是关于PIC单片机看门狗程序,关闭看门狗程序正常,打开后异常。请指点错误之处,谢谢 代码如下的主要内容,如果未能解决你的问题,请参考以下文章