background image
宏晶科技:www.MCU-Memory.com   Mobile:13922805190(姚永平)   Tel:0755-82948409    Fax: 0755-82944243
宏晶科技:专业单片机 / 存储器供应商   www.MCU-Memory.com   STC12C5410AD 系列 1T 8051 单片机中文指南
32
; 本程序验证  S T C 1 2 C 5 4 1 0 A D   系列及 S T C 1 2 C 2 0 5 2 A D 系列单片机的看门狗及其溢出时间计算公式
;本演示程序在 STC-ISP Ver 3.0A.PCB 的下载编程工具上测试通过,相关的工作状态在 P1 口上显示
;看门狗及其溢出时间 = (12 * Pre_scale *32768)/Oscillator frequency
WDT_CONTR       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, WDT_CONTR          ;检测是否为看门狗复位
    ANL   A, #10000000B
    JNZ   WDT_Reset             ;WDT_CONTR.7 = 1, 看门狗复位, 跳转到看门狗复位程序
;WDT_CONTR.7 = 0,上电复位, 冷启动, RAM  单元内容为随机值
    SETB  Last_WDT_Time_LED_Status       ;上电复位,
                                         ;初始化看门狗溢出时间指示灯的状态位 = 1
    CLR   WDT_TIME_LED                   ;上电复位, 点亮看门狗溢出时间指示灯
    MOV   WDT_CONTR, #Pre_scale_Word     ;启动看门狗
WAIT1:
    SJMP  WAIT1                 ;循环执行本语句(停机),等待看门狗溢出复位
;WDT_CONTR.7 = 1,看门狗复位,  热启动, RAM  单元内容不变,  为复位前的值
WDT_Reset:                      ;看门狗复位, 热启动
    CLR   WDT_FLAG_LED          ;是看门狗复位,点亮看门狗溢出复位指示灯
    JB   Last_WDT_Time_LED_Status, Power_Off_WDT_TIME_LED;为 1 熄灭相应的灯,为 0 亮相应灯
        ;根据看门狗溢出时间指示灯的上一次状态位设置 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