STC89c52RC的看门狗使用方法
核心控制 WDT_CONTR 寄存器看门狗功能的全部控制都通过一个8位的特殊功能寄存器WDT_CONTR实现。定义寄存器地址由于标准头文件reg51.h未包含其定义使用前需手动声明其地址为0xE1sfr WDT_CONTR 0xE1;寄存器结构解析预分频值 Prescale 与 PS[2:0] 的关系如下N 为指令周期数通常为 12但STC89C52RC也支持 6 时钟模式溢出时间计算看门狗溢出时间的计算公式如下可以根据此公式和项目需求来配置预分频值溢出时间 (N * Prescale * 32768) / 系统晶振频率公式变量说明N指令周期模式N 1212T模式或 N 66T模式。Prescale预分频值由 PS[2:0] 位选择。系统晶振频率单片机工作的主频单位 Hz。以常见的配置为例12MHz 晶振12T模式N12Prescale64溢出时间 (12 * 64 * 32768) / 12000000 2.097152 秒代码实现这是一个完整的示例展示了标准用法#include reg51.h // 标准51头文件 // 1. 定义看门狗控制寄存器地址 sfr WDT_CONTR 0xE1; // 2. 定义一些常用的数值方便代码阅读 // 以下宏定义基于 12MHz 晶振12T模式 #define WDT_ENABLE_32 0x34 // 使能WDT,空闲模式计数, 32预分频(溢出约1秒) #define WDT_ENABLE_64 0x35 // 使能WDT,空闲模式计数, 64预分频(溢出约2秒) #define WDT_ENABLE_128 0x36 // 使能WDT,空闲模式计数,128预分频(溢出约4秒) #define WDT_FEED 0x35 // 喂狗值, 此值与WDT_ENABLE_64相同即可 // 3. 看门狗初始化函数 void WDT_Init(void) { WDT_CONTR WDT_ENABLE_64; // 根据需求选择一个分频值 } // 4. 喂狗函数在看门狗周期内不断执行该操作 void WDT_Feed(void) { // 注意有的手册说写入0x1E和0xE1但实测WDT_CONTR直接赋值即可 WDT_CONTR WDT_FEED; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2587678.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!