;***********************************************************
;单    位:苏州华芯微电子有限公司                           
;                                                          
;文件名称:	HS23P2721_RESET						       
;摘    要:							   					   
;当期版本:	V1.0                                           
;作    者:	Design-Digit	                                   
;开始日期:  2022-09-07                                     
;完成日期:                                                 
;                                                          
;先前版本:                                                 
;作    者:                                                
;创始日期:                                                 
;***********************************************************

/****RESET****功能说明****/
/*
<1>上电复位(POR)
<2>看门狗复位(配置看门狗)
<3>掉电复位(BOR)
<4>外部复位(仅在外部复位引脚处于使能状态)
	PFLAG寄存器的NT0和NPD两个标志位能够给出系统复位状态的信息。
	用户可以编程NT0和NPD，控制系统的运行路径。
	
\\影响NT0和NPD的事件
	WDT复位		NT0：NPD=0:0；(WDT溢出)
	保留		NT0：NPD=0:1；--
	上电&LVD	NT0：NPD=1:0；(电源电压低于LVD检测值)
	外部复位	NT0：NPD=1:1；(外部复位引脚检测到低电平)
*/


;***********************************************************
;files include
#include "HS23P2721.inc"

;***********************************************************
;user general reg define
DELAY_US	EQU		00H
ACC_PROTECT		EQU		01H
BANK_PROTECT	EQU		02H
STEP		EQU			03H
;***********************************************************	
;/函数入口地址
	ORG		00H
	JMP		MAIN
	
;/中断入口地址
	
	ORG		08H
	JMP		INT_PRO
INT_PRO:
	MOV		ACC_PROTECT,A	;中断保护
	;PFLAG:状态寄存器
	SWAP	PFLAG			;Bit0:Z-零标志位	
							;0-无进位/有借位,1-有进位/无借位
							;Bit1:DC-半进位/半借位（加减法指令）	
							;0-无低 4 位进位/有低 4 位借位,1-有低 4 位进位/无低 4 位借位
							;Bit2:C-进位/借位（加减法指令）		
							;0-无进位/有借位,1-有进位/无借位
							;Bit4：LVDF24-电压检测位
							;0-电源电压大于 2.4V,1-电源电压小于 2.4V
							;Bit5：LVDF36-电压检测位
							;0-电源电压大于 3.6V,1-电源电压小于 3.6V
							;Bit6:/PD-复位状态标志位
							;Bit7:/T0-复位状态标志位
							;/T0	/PD    	复位状态
							;0		0		看门狗复位
							;0		1		保留
							;1		0		上电或 LVD
							;1		1		外部复位	
							
	MOV		BANK_PROTECT,A	
	
	;INT0IF:：INT0 外部中断（P0.0）请求标志
	BCLR	FINT1IF			;0-DIS,1-EN
	
	;P5:P5端口寄存器
	MOV		A,#0FFH			;---1 1---
	XOR		P5,A			;0-EN , 1-DIS
	
	SWAP	BANK_PROTECT
	;PFLAG:状态寄存器
	MOV		PFLAG,A			;Bit0:Z-零标志位	
							;0-无进位/有借位,1-有进位/无借位
							;Bit1:DC-半进位/半借位（加减法指令）	
							;0-无低 4 位进位/有低 4 位借位,1-有低 4 位进位/无低 4 位借位
							;Bit2:C-进位/借位（加减法指令）		
							;0-无进位/有借位,1-有进位/无借位
							;Bit4：LVDF24-电压检测位
							;0-电源电压大于 2.4V,1-电源电压小于 2.4V
							;Bit5：LVDF36-电压检测位
							;0-电源电压大于 3.6V,1-电源电压小于 3.6V
							;Bit6:/PD-复位状态标志位
							;Bit7:/T0-复位状态标志位
							;/T0	/PD    	复位状态
							;0		0		看门狗复位
							;0		1		保留
							;1		0		上电或 LVD
							;1		1		外部复位
							
	SWAPM	ACC_PROTECT
	SWAP	ACC_PROTECT
	RETI
 

;***********************************************************
;函数名：GPIO_Init
;***********************************************************
GPIO_Init:
	;P0:P0端口寄存器
	MOV		A,#00H			;---0 0000
	B0MOV	P0,A			;0-L , 1-H 
	;P0UR:P0端口上拉寄存器
	MOV		A,#00H			;---0 0000
	B0MOV	P0UR,A			;0-DIS, 1-EN	 
	;P0M:P0端口模式控制寄存器
	MOV		A,#0FFH			;---1 1111
	B0MOV	P0M,A			;0-IN,1-OUT
	
	;P4:P4端口寄存器
	MOV		A,#00H			;---0 0000
	B0MOV	P4,A			;0-L , 1-H 
	;P4UR:P4端口上拉寄存器
	MOV		A,#00H			;---0 0000
	B0MOV	P4UR,A			;0-DIS, 1-EN 
	;P4M:P4端口模式控制寄存器
	MOV		A,#0FFH		;---1 1111
	B0MOV	P4M,A			;0-IN,1-OUT
	
	;P5:P5端口寄存器
	MOV		A,#00H			;---0 0---
	B0MOV	P5,A			;0-L , 1-H 
	;P5UR:P5端口上拉寄存器
	MOV		A,#00H			;---0 0---
	B0MOV	P5UR,A			;0-DIS, 1-EN 	
	;P5M:P5端口模式控制寄存器
	MOV		A,#0FFH			;---1 1---
	B0MOV	P5M,A			;0-IN,1-OUT
	
	RET

;***********************************************************
;函数名：MAIN
;***********************************************************
MAIN:
	CALL	GPIO_Init
	CALL	RAM_CLR
MAIN_LOOP:
	;WDTR:看门狗定时器
	MOV		A,#5AH	
	B0MOV	WDTR,A			;清看门狗
	
	SWAP	PFLAG
	MOV		STEP,A
	RRCM	STEP
	RRCM	STEP
	MOV		A,STEP
	AND		A,#03H
	ADD		PCL,A
	JMP		RESET_0
	JMP		RESET_1
	JMP		RESET_2
	JMP		RESET_3

	CALL	DELAY
MAIN_LOOP_END:
	JMP		MAIN_LOOP

RESET_0:
	MOV		A,#01H
	XOR		P0,A
	JMP		MAIN_LOOP_END

RESET_1:
	MOV		A,#02H
	XOR		P0,A
	JMP		MAIN_LOOP_END


RESET_2:
	MOV		A,#04H
	XOR		P0,A
	JMP		MAIN_LOOP_END

RESET_3:
	MOV		A,#08H
	XOR		P0,A
	JMP		MAIN_LOOP_END

;***********************************************************
;函数名：RAM_CLR
;***********************************************************
RAM_CLR:
	B0MOV	Y,#0
	B0MOV	Z,#05FH
CLR_RAM:
	CLR		@YZ
	DECMS	Z
	JMP		CLR_RAM
	CLR		@YZ
	RET


;***********************************************************
;函数名：DELAY
;传参：循环体调用次数
;返回值：
;功能：延时10个指令周期
;引脚：
;备注：
;***********************************************************
DELAY:
	MOV		DELAY_US,A
DELAY_LOOP:
	MOV		A,#5AH	
	B0MOV	WDTR,A		;清看门狗定时器
	JMP		$+1
	JMP		$+1
	JMP		$+1
	DECMS	DELAY_US	
	JMP		DELAY_LOOP
	RET		
