Application of on-chip watchdog in STC12C5A series microcontroller

Insert image description here

Insert image description here
Insert image description here
wdt.c

#include "wdt.h"

void wdt_init(void)
{
    
    
		WDT_CONTR = 0x24; // 0010 0100 - 1.1377s
}

void wdt_feed(void)
{
    
    
		WDT_CONTR |= 0x10; // 喂狗
}

wdt.h

#ifndef _WDT_H_
#define _WDT_H_

#include "stc12c5a60s2.h"

// 函数声明
extern void wdt_init(void);
extern void wdt_feed(void);

#endif

time.c

#include "time.h"

extern unsigned char wdt_flag;

void Timer0_Init(void)		//1毫秒@11.0592MHz
{
    
    

	TMOD &= 0xF0;			//设置定时器模式
	TMOD |= 0x01;			//设置定时器模式
	
	TL0 = 0x66;				//设置定时初始值
	TH0 = 0xFC;				//设置定时初始值

	TF0 = 0;					//清除TF0标志
	ET0 = 1;

	TR0 = 1;					//定时器0开始计时
}


void timer_isr() interrupt 1
{
    
    
		static unsigned int wdtcnt;
	
		TR0 = 0;				//定时器0开始计时
		
		wdtcnt++;
	
		if(wdtcnt >=1000)       // 1s钟喂狗一次
		{
    
    
				wdtcnt = 0 ;
				wdt_flag = 1;
		}
	
		TL0 = 0x66;				//设置定时初始值
		TH0 = 0xFC;				//设置定时初始值

		TR0 = 1;				//定时器0开始计时
}

main.c

#include "stc12c5a60s2.h"
#include "time.h"
#include "wdt.h"

unsigned char wdt_flag;

void main()
{
    
    
	wdt_init();
	
	while(1)
	{
    
    
		if(wdt_flag)
		{
    
    
			wdt_flag = 0;
			wdt_feed();
		} 
	}
}

Guess you like

Origin blog.csdn.net/xuechanba/article/details/131917514