微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC12C2052AD 系列单片机的看门狗

STC12C2052AD 系列单片机的看门狗

时间:11-13 来源:互联网 点击:
;本程序用于验证 STC12C2052AD 系列单片机看门狗及其溢出时间计算公式
;看门狗及其溢出时间 = (12 * Pre_scale *32768)/Oscillator frequency

WDTCR EQU 0E1H ;看门狗地址
WDT_TIME_LED EQU P1.5 ;用 P1.5 控制看门狗溢出时间指示灯,
;看门狗溢出时间可由该指示灯亮的时间长度或熄灭的时间长度表示
WDT_FLAG_LED EQU P1.7 ;用 P1.7 控制看门狗溢出复位指示灯, 如点亮表示为看门狗溢出复位

Last_WDT_Time_LED_Status EQU 00H ;位变量, 存储看门狗溢出时间指示灯的上一次状态位

;WDT 复位时间(Oscillator frequency = 18.432MHz):
;Pre_scale_Word EQU 00111100B ;清0、启动看门狗,预分频数=32 0.68S
Pre_scale_Word EQU 00111101B ;清0、启动看门狗,预分频数=64 1.36S
;Pre_scale_Word EQU 00111110B ;清0、启动看门狗,预分频数=128 2.72S
;Pre_scale_Word EQU 00111111B ;清0、启动看门狗,预分频数=256 5.44S

ORG 0000H
AJMP MAIN

ORG 0100H
MAIN:
MOV A, WDTCR ;检测是否为看门狗复位
ANL A, #10000000B
JNZ WDT_Reset ;WDTCR.7 = 1, 看门狗复位, 跳转到看门狗复位程序

;上电复位, 冷启动, RAM 单元内容为随机值
SETB Last_WDT_Time_LED_Status ;上电复位,
;初始化看门狗溢出时间指示灯的状态位 = 1
CLR WDT_TIME_LED ;上电复位, 点亮看门狗溢出时间指示灯
MOV WDTCR, #Pre_scale_Word ;启动看门狗

WAIT1:
SJMP WAIT1 ;循环执行本语句(停机),等待看门狗溢出复位

;看门狗复位, 热启动, RAM 单元内容不变, 为复位前的值
WDT_Reset: ;看门狗复位, 热启动
CLR WDT_FLAG_LED ;点亮看门狗溢出复位指示灯

JB Last_WDT_Time_LED_Status, Power_Off_WDT_TIME_LED
;根据看门狗溢出时间指示灯的上一次状态位设置 WDT_TIME_LED 灯,
;若上次亮本次就熄灭, 若上次熄灭本次就亮
CLR WDT_TIME_LED ;上次熄灭本次点亮看门狗溢出时间指示灯
CPL Last_WDT_Time_LED_Status ;将看门狗溢出时间指示灯的上一次状态位取反
WAIT2:
SJMP WAIT2 ;循环执行本语句(停机),等待看门狗溢出复位

Power_Off_WDT_TIME_LED:
SETB WDT_TIME_LED ;上次亮本次就熄灭看门狗溢出时间指示灯
CPL Last_WDT_Time_LED_Status ;将看门狗溢出时间指示灯的上一次状态位取反
WAIT3:
SJMP WAIT3 ;循环执行本语句(停机),等待看门狗溢出复位

END

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top