ABOV单片机内部看门狗WDT的代码实现讲解及示例代码-[MC96F6332D]

一、准备工作

1、KEIL C51编译环境

2、CodeGen8 代码生成器

3、MC96F6332D 开发板

4、USB-OCD II仿真器

二、内部看门狗代码生成

1、在CodeGen8 代码生成器的外设窗口中选择内部RC时钟作为时钟源,设置时钟源的频率为8MHz,配置GPIO引脚P52为外部的可中断输入引脚,使能MCU内部的上拉电阻和防抖动功能(使能外部中断为后面喂狗的操作);具体配置如下图①、②所示,

看门狗的代码生成如下图③所示:

2、点击CodeGen8 中的C 图标,自动打开KEIL C51软件;

3、在主函数的循环体中增加如下代码,使用外部引脚进行看门狗的喂狗操作,实际的工程中可以使用定时器进行定时喂狗;

	while(1)
	{
		
			if(EXIT8_STA)		//判断外部中断8是否存在
			{
				WDT_clear();	//在恰当的时间内进行喂狗操作,防止MCU复位
				EXIT8_STA = 0;
				printf("EXIT 8 Interrupt To Clear WDT Counter!\r\n");
				
			}

	}

4、编译结果如下所示:

5、关于看门狗时钟的配置讲解:

1)、时钟选择:看门狗时钟选择内部的WDTRC时钟,默认频率为5kHz且不能改变(5kHz仅仅是典型值),此5kHz时钟系统默认已经分频256,这里需要特别注意;在系统时钟章节的方框图可以看出,具体如下图所示:

2)、看门狗的运行方框图如下所示:时钟输入后,WDTCNT会不断进行计数,并和WDTDR数据寄存器内的数据进行比较,当WDTCNT等于WDTDR寄存器设置的数值时,WDTCR控制进行MCU的复位或者中断;如此周而复始的工作;本例中仅仅使能WDT的系统复位操作;

具体的复位周期计算公式为:T=(WDTDR+1) / (WDTRC/256)=(FF+1)/(5K/256)≈13.1072s;

3)、关于WDT的寄存器操作也跟简单,如下所示:

6、点击编译器的下载按钮,将刚刚编译好的代码下载到MCU中进行仿真调试。

7、连接串口助手到PC端,可以看到代码的正常运行:外部中断在10s内进行喂狗,系统不会进行复位(没有初始化信息的输出:System initialized successfully!),如下如①所示;如果没有对MCU进行喂狗操作,MCU在看门狗寄存器WDTCNT溢出后会进行系统复位,如下如②所示;如果系统启动后一直不进行喂狗操作,系统会不断的进行复位,如下图③所示;

三、实验现象(具体内容可以参考工程中的Readme.txt文件)

1、MCU主频选择为内部8MHz;

2、外部引脚P52设置为下降沿触发中断,在主函数中判断对应的中断状态是否为真,如果为真,会进行状态标识位的置位,在主函数中会进行看门狗的喂狗操作,并打印喂狗信息到串口,提示系统已经喂狗;WDT的使用中需要特别注意看门狗时钟漂移问题,5kHz仅仅是典型值;如下图所示:

3、具体的代码可以访问链接:https://share.weiyun.com/5ZfEBpX;进行免费获取。


因为小编自己能力水平有限,文中难免有错误或表达失误的信息,还望广大阅读者留言批评指正,谢谢。

猜你喜欢

转载自blog.csdn.net/praguejing/article/details/105334250