STC8学习--看门狗

1.关于看门狗,本质上可以把它叫做,设备复位定时器。

设置好频率之后,执行语句后,定时器会在启动一定时间之后,让设备复位。设备复位后重新从main函数开始执行,再次执行到寄存器配置语句后,过一段时间设备会重新复位。

2.看门狗测试函数是一个T0中断延时函数修改的,关于这个T0延时函数,我们这里复习一下,设备的主频是35MHz,周期是1/35000000s,计时器每过一个周期就会加一,累加时间达到1ms之后就会进入interrupt 1中断, 

    val ++;
    if(val == 1000)  

每次结果1ms进入函数后加1,进入1000次之后1*1000ms = 1s,然后对LED_RED翻转。

3.关于看门狗寄存器

WDT_CONTR = 0x27; //使能看门狗寄存器,定时2.87s后复位 

我们这里使能看门狗,将B5位使能。最后3位设置定时复位的时间,计算公式是

 延时时间 = 12 * 32768 *(2的8次方)/ 35000000 ≈ 2.87 s

即2.87s后看门狗溢出,设备复位。

4.在断函数中有个这个   WDT_CONTR |= 0x10; 

这个是标志清0操作,置1清0.(置1将定时器进行清0,这。。。。。有点别扭啊)

我们管这个叫做对看门狗进行喂狗操作,如果我们的设备跑飞或者卡死了,看门狗没有喂,它就会把我们的设备进行重启。(不给糖,就要闹,哈哈)

 5.关于这个函数

①没有注释掉喂狗语句,程序会一直喂狗,程序会正常运行,绿灯只有在刚上电时才会亮一下。后面会一直执行while(1)循环,绿灯命令不会被执行到

② 注释掉喂狗语句后,到了喂狗时间没有喂狗就会重启,所以会看到绿灯在闪,红灯才开始交替一次,就重启了。每次重启后又开始从main开始执行,绿灯命令会被执行到

#include "delay.h"
#include " intrins.h"
#define LED_RED P05
#define LED_YELLOW P06
sbit LED_GREEN = P0^7 ;


void T0_Lsr(void) interrupt 1
{
  static unsigned  int val;
    val ++;
    if(val == 1000)
    {
      LED_RED = ! LED_RED;
        val = 0;

      WDT_CONTR |= 0x10;  //注释掉就不会喂狗,设备会反复重启。
    }
    
}


void Timer0_Init(void)
{
  TMOD =  0x00;//配置工作模式
  AUXR |= 0x80;     //工作时钟不分频
    TL0 = 0x48;
    TH0 = 0x77;
    TR0 = 1;  //启动定时器0计数
    ET0 = 1;  //使能定时器0中断
    EA = 1; //打开总中断

}


void  main(void)
{
    P0M0 = 0x00;
    P0M1 = 0x00;
  
    Timer0_Init();
    
    WDT_CONTR = 0x27; //使能看门狗寄存器,定时2.87s后复位
    while(1)
    {


        
    }
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STC8A8K64S4A12单片机开发板资料STC8软件DEMO源码例程硬件参考设计及文档资料: stc-isp-15xx-v6.86D.exe STC8 使用手册 启光灵创.pdf STC8A原理图.pdf STC8系列单片机技术参考手册-20170517.pdf 关于12864的图片制作 参考文件资料 参考程序 应用软件 1 P55口LED灯运行 10 串口1收发 8位自动重装载 11 外部中断 1 12 串口1仅发 16位重装载 13 串口1收发 16位重装载 14 串口2 接收发送 15 串口2 及485功能 16 掉电测试 17 P10口AD电压 串口跟踪 18 P10口AD电压采集 1602显示 19 STC8内部EEPROM读写 2 P55口LED灯运行 使能外部晶振 20 16位PCA定时器脉冲输出 21 串口控制8位PWM 占空比 22 8位PWM控制P3.5 23 硬体I2C 主机访问AT24C 24 模拟I2C读写24C 串口监测 25 1602显示 26 按键控制蜂鸣器 27 数码管显示 28 液晶oled I2C通讯方式 29 MMA7361角度传感器 3 P2口跑马灯实验 30 DS18B20温度读取 串口监测 31 LCD12864 汉字显示函数 32 LCD12864 哆啦A梦图片显示 33 LCD12864 图片显示 34 红外解码 35 红外解码的应用 36 spi初始化 串口监测 37 外部FLASH读写 串口监测 38 NRF无线通讯测试 串口检测 39 9325TFT刷屏测试 4 定时器0 模式0 40 串口3 定时器2 41 串口3 定时器3 42 串口4 定时器4 43 主机对从机ISP程序下载 参考程序 44 SPI主从机设置通讯 测试程序 45 ESP8266 AP+Station服务器模式测试 5 定时器0 P35模拟10位或16位PWM输出程序 6 定时器1 模式0 7 定时器2 8 看门狗实验 9 串口1发送 8位自动重装载 12864详细中文资料.pdf 1602中文资料.doc 1838红外接收头.pdf 24c0系列.pdf AMS1117.pdf C数组、BIN、BMP图片制作 elh.pdf DS18B20.pdf FAT及FATFS资料 I2C.doc ILI9325DS_ID9325.pdf MMA7361.pdf MMA7361L.pdf NRF24l01模块说明书.pdf PCB设计资料.pdf sd卡读写.pdf SD卡资料.pdf UCOS+UCGUI学习资料 UG-2864HSWEG01 user guide.pdf W25X16中文手册.pdf XPT2046中文资料.pdf 关于舵机的死区.txt 红外遥控器编码大全.pdf
STC8A8K64S4A12单片机开发板软硬件技术资料+软件DEMO例程源码: 01参考程序 02原理图与结构图纸 STC8 使用手册.pdf STC8系列单片机技术参考手册-20170517.pdf 文件资料 01-P33口LED灯运行 02-P2口跑马灯实验 03- 定时器0 模式0 04- 定时器1 模式0 05-定时器2 06- 看门狗实验 06-定时器0 P35模拟10位或16位PWM输出程序 08-串口1发送 8位自动重装载 09-串口1收发 8位自动重装载 10-串口1仅发 16位重装载 11- 串口1收发 16位重装载 12-外部中断 1 13 模拟I2C读写24C 串口监测 14-外部FLASH读写 串口监测 15-中景园电子0.96OLED显示屏IIC_例程 15-中景园电子0.96OLED显示屏IIC_例程.zip 16-中景园电子0.96OLED显示屏SPI_例程 16-中景园电子0.96OLED显示屏SPI_例程.zip 17-中景园电子0.96OLED显示屏0.96OLED带字库 17-中景园电子0.96OLED显示屏0.96OLED带字库.zip 18-中景园电子1.44寸LCD-51(图片显示) 19-中景园电子1.8寸LCD-51(模拟SPI中文显示) 20-中景园电子2.4寸不带触摸51单片机测试(要求大于16K ROM的单片机) 21-中景园电子3.5寸FTFT_LCD_SPI接口 12864详细中文资料.pdf 1602中文资料.doc 1838红外接收头.pdf 24c0系列.pdf AMS1117.pdf C数组、BIN、BMP图片制作 elh.pdf DS18B20.pdf FAT及FATFS资料 I2C.doc ILI9325DS_ID9325.pdf MMA7361.pdf MMA7361L.pdf NRF24l01模块说明书.pdf PCB设计资料.pdf sd卡读写.pdf SD卡资料.pdf UCOS+UCGUI学习资料 UG-2864HSWEG01 user guide.pdf W25X16中文手册.pdf XPT2046中文资料.pdf 关于舵机的死区.txt 红外遥控器编码大全.pdf
STC89C5X单片机看门狗(Watchdog)是一种硬件定时器,主要用于监控系统运行状态,防止程序死循环或死机的情况发生,保证系统的稳定性和可靠性。 其原理是单片机在程序正常运行时定时清零看门狗计数器,如果程序出现异常或死循环等情况导致计数器没有被清零,当计数器达到一定值时,看门狗会自动复位系统,从而使系统恢复到正常状态。 STC89C5X单片机看门狗的工作方式分为两种,分别为定时模式和中断模式。在定时模式下,看门狗计数器会自动开始计时,当计时器超时时,系统会自动复位。在中断模式下,当计时器超时时,会产生一个中断请求,程序可以在中断服务函数中对系统进行恢复或处理异常情况。 下面是一个简单的演示程序,实现了看门狗的定时模式: ```c #include <reg51.h> // 定义看门狗计数器初值 #define WDT_INIT_VALUE 0x7f // 看门狗计数器 unsigned char wdt_counter; // 初始化看门狗 void init_wdt() { // 设置看门狗计数器初值 wdt_counter = WDT_INIT_VALUE; // 开启看门狗定时器 WDTRST = 0x1e; WDTRST = 0xe1; WDTCON = 0x07; } // 喂狗函数 void feed_wdt() { // 清零看门狗计数器 wdt_counter = WDT_INIT_VALUE; } // 主函数 void main() { // 初始化看门狗 init_wdt(); while(1) { // 正常任务代码 // 喂狗 feed_wdt(); } } ``` 在程序正常运行时,喂狗函数会定时清零看门狗计数器,从而保证计数器不会超时,系统也不会自动复位。如果程序出现异常情况,计数器会超时,系统会自动复位,从而保证系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值