51单片机 c语言看门狗程序怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机 c语言看门狗程序怎么写相关的知识,希望对你有一定的参考价值。

51单片机 c语言看门狗程序怎么写?
哪位兄台会的
指教!附上说明

看门狗在51单片机电路里的作用是防止程序 “跑飞”、“死机”后,系统不动作,而采取复位的办法“唤醒”系统。

89S51、89S52系列单片机自带有看门狗功能,片内数据区A6H寄存器具有看门狗功能,使用很简单:

#include<reg51.h>
...
sfr WDTRST = 0xA6;
...
void main()

WDTRST=0x1E;;//初始化看门狗
WDTRST=0xE1;//初始化看门狗
for(;;)

WDTRST=0x1E;;//喂狗指令

WDTRST=0xE1;//喂狗指令



可见,你只要在程序的大循环体内加一条喂狗指令就行。但这种看门狗功能有限,不是很可靠的,它依靠晶振工作,一旦晶振不起振,就无效了。

实践中多采用外部看门狗的方法,可以选用的芯片很多:MAX708、MAX813
、X25045.....具体编程就要看芯片的参考资料了。

例如:X25045是SPI总线的看门狗芯片,复位端和单片机复位端连接,SPI数据输入你可以选择合适的IO接口。

WREN 0x06 设置写允许位
WRDI 0x04 复位写允许位
RDSR 0x05 读状态寄存器
WRSR 0x01 写状态寄存器
READ 0x03/0x0b 读操作时内部EEPROM页地址
WRITE 0x02/0x0a 写操作时内部EEPROM页地址

#include <reg51.h>
sbit CS= P2^7;
sbit SO= P2^6;
sbit SCK= P2^5;
sbit SI= P2^4;
#define WREN 0x06 //
#define WRDI 0x04 //
#define RDSR 0x05 //
#define WRSR 0x01 //
#define READ0 0x03 //
#define READ1 0x0b //
#define WRITE0 0x02 //
#define WRITE1 0x0a //
#define uchar unsigned char
uchar ReadByte() //read a byte from device

bit bData;
uchar ucLoop;
uchar ucData;
for(ucLoop=0;ucLoop<8;ucLoop++)

SCK=1;
SCK=0;
bData=SO;
ucData<<=1;
if(bData)
ucData|=0x01;

return ucData;

void WriteByte(uchar ucData)//write a byte to device

uchar ucLoop;
for(ucLoop=0;ucLoop<8;ucLoop++)

if((ucData&0x80)==0) //the MSB send first
SI=0;
else
SI=1;
SCK=0;
SCK=1;
ucData<<=1;


uchar ReadReg() //read register

uchar ucData;
CS=0;
WriteByte(RDSR);
ucData=ReadByte();
CS=1;
return ucData;

uchar WriteReg(uchar ucData) //write register

uchar ucTemp;
ucTemp=ReadReg();
if((ucTemp&0x01)==1) //the device is busy
return 0;
CS=0;
WriteByte(WREN);//when write the WREN, the cs must have a high level
CS=1;
CS=0;
WriteByte(WRSR);
WriteByte(ucData);
CS=1;
return 1;


void WriteEpm(uchar cData,uchar cAddress,bit bRegion)
/* 写入一个字节,cData为写入的数,cAddress为写入地址,bRegion为页 */

while((ReadReg()&0x01)==1); //the device is busy
CS=0;
WriteByte(WREN); //when write the wren , the cs must have a high level
CS=1;
CS=0;
if(bRegion==0)
WriteByte(WRITE0); //write the page addr
else
WriteByte(WRITE1);
WriteByte(cAddress);
WriteByte(cData);
SCK=0; //
CS=1;

uchar ReadEpm(uchar cAddress,bit bRegion)
/* 读入一个字节,cAddress为读入地址,bRegion为页 */

uchar cData;
while((ReadReg()&0x01)==1);//the device is busy
CS=0;
if(bRegion==0)
WriteByte(READ0);
else
WriteByte(READ1);
WriteByte(cAddress);
cData=ReadByte();
CS=1;
return cData;

main()

WriteReg(0x00);//set the watchdog time as 1.4s
CS=1;
CS=0; //reset the watchdog


回复: xuzhimin9514

所有的89S系列都带狗,所有的80C系列都不带狗。
所以89S51 89S52都带狗,80C51、80C52都不带狗。
参考技术A 51单片机用2402做看门狗 参考技术B 很详细了
不过 听说51没狗的 52才有
参考技术C 楼上说的很好
看门狗就是初始化
喂狗

以上是关于51单片机 c语言看门狗程序怎么写的主要内容,如果未能解决你的问题,请参考以下文章

单片机的看门狗怎么用

计算机高手解释一下硬件看门狗是什么意思?

当AT89S51单片机运行出错或程序陷入死循环时,如何摆脱困境?

RTC唤醒喂狗和重启那些事儿

看门狗定时器原理介绍

单片机中的看门狗是啥东西,有啥作用