;/****************************************Copyright (c)**************************************************
;**                               广州周立功单片机发展有限公司
;**                                     研    究    所
;**                                       软件研发部 
;**
;**                                 http://www.zlgmcu.com
;**
;**--------------文件信息--------------------------------------------------------------------------------
;**文   件   名: 看门狗定时器使用例程
;**创   建   人: 
;**最后修改日期: 2005-11-03
;**描        述: 以dLPC768为目标机，说明如何使用看门狗定时器监视
;**              MCU运作
;**
;**--------------历史版本信息----------------------------------------------------------------------------
;** 创建人: 
;** 版  本: 
;** 日　期: 	2005-11-03
;** 描　述: 	启动程序之后，请在win#界面不断输入任意字符，以执行喂狗
;**         	子程序，以防止看门狗复位MCU。
;**
;**------------------------------------------------------------------------------------------------------
;** 修改人:
;** 版  本:
;** 日　期:
;** 描　述:
;**
;**--------------当前版本修订------------------------------------------------------------------------------
;** 修改人: 
;** 日　期:
;** 描　述:
;**
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
$NOMOD51
; 定义数据
IEN0	DATA	0A8H
EA	BIT	0AFH
PCON	DATA	087H
WDCON	DATA	0A7H
WDRST	DATA	0A6H

; 定义串行通道SFR
SCON	DATA	098H
SBUF	DATA	099H
TCOn	DATA	088H
TMOD	DATA	089H
TH1		DATA	08Dh
TL1		DATA	08Bh
ES		BIT		0ACH
RI		BIT		098H
TI		BIT		099H
TR1		BIT		08EH

	ORG		000H
	LJMP	003H
	ORG		003H

    LCALL	_INIT_WDT                 ;; 初始化看门狗定时器
	LCALL	_STARTUP_MSG	          ;; 启动信息
	LCALL	standard_input_output     ;; 输入输出例程

	LJMP	_EXIT

;; ************************************************
;; *             向串口发送起始信息               *
;; ************************************************
_STARTUP_MSG:
	MOV		DPTR,#msg
	MOV		R0,#00
	MOV		R1,#0x24
	MOV		SCON,#0x10	
_PRINT_LOOP:
   	MOV		A,R0
   	MOVC	A,@A+DPTR
	MOV		SBUF,A		
_SEND_WAIT:
	JNB		TI,_SEND_WAIT
	CLR		TI
	INC		R0
	XRL		A,R1
	JNZ		_PRINT_LOOP
  	RET

;; ************************************************
;; *             初始化看门狗定时器               *
;; ************************************************
_INIT_WDT:
	MOV		WDRST,#1EH
	MOV		WDRST,#0E1H
	MOV		WDCON,#16H
	MOV		DPTR,#0FD00H			;; Addr of UCFG1
	MOVX	A,@DPTR
	MOV		R5,A
	RET

;; ************************************************
;; *            通过输入数据进行喂狗操作          *
;; * 您若无法保证连续两次输入的时间间隔小于2.9sec *
;; * 看门狗定时器将会复位您的MCU。                *
;; ************************************************
standard_input_output:          	;; 串口输入输出例程
	MOV		SCON,#0x50
	ORL		TMOD,#0x20
	MOV		TH1,#0xDD
	SETB	TR1
	SETB	TI
IO_LOOP:
	JNB		RI,IO_LOOP
	CLR		RI
	MOV		R7,SBUF
	MOV		SBUF,R7
WAIT1:
	JNB		TI,WAIT1
	CLR		TI
									;; 在此处喂狗
	CLR		EA
	MOV		WDRST,#1EH
	MOV		WDRST,#0E1H
	SETB	EA
									;; 喂狗成功!
	SJMP	IO_LOOP
IO_EXIT:
	RET
	
									;; 启动信息
msg:    
	DB      0x0D,0x0A
	DB      0x0D,0x0A,"***************\* LPC看门狗测试小程序 */*******************"
	DB      0x0D,0x0A,"* 提示: 狗饿了!请按任意建喂狗,如果喂狗失败,Mcu将会被复位. *"
	DB      0x0D,0x0A,"* 或许您喂狗成功,狗将会被复位,那么您的程序将会继续跑下去. *"
	DB      0x0D,0x0A,"******************** ZLG R&D Center. **********************"        
	DB      0x0D,0x0A,'$'			;; end with a '$' symbol

_EXIT:
	END