/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	FileName:HS23P2721_Template.c
	ProjectName:  *LVD*配置使用说明*
	FunctionDesc:
	CreateDate: 20210423
	Version: V2.0
	Author:
	ModifyHistory:
	Remark:
	Copyright (c) 2021   苏州华芯微电子股份有限公司
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  
//RAM: 96*8bit
//ROM: 2K×16
//STACK: 5-level
//***********************************************************

#include	"HS23P2721.h"
#include	"main.h"

/****LVD****功能说明****/
/**
Config-配置在LVD-L;LVD-M;LVD-H;任选一种模式；软件通过读取PFLAG上LVD36/LVD24标志位；
LVD设计为三层结构（2.0V/2.4V/3.6V），由LVD编译选项控制。对于上电复位和掉电复位，
2.0V-LVD始终处于使能状态：
2.4V-LVD具有LVD复位功能，并能通过标志位显示VDD状态；
3.6V-LVD具有标记功能，可显示VDD的工作状态。
LVD标志功能只是一个低电压检测装置，标志位LVD24和LVD36给出VDD的电压情况。
对于低电压检测应用，只需查看LVD24和LVD36的状态即可检测电池状况。
**/

/*Function statment<<=========================================================*/
void GpioInit(void);
void RAM_CLR(void);

void GpioOut(void);

void DelayUs(unsigned char delayUs);


/*Interrupt entrance function <<====================================================*/
void __interrupt[0x08] isr(void)
{
	if(FINT1IF)
	{
		FINT1IF = 0;
		P5 = P5^0xff;
	}
}

/*Main function<<===========================================================*/
void main(void)
{
	GpioInit();
	RAM_CLR();
	//PFLAG:状态寄存器
	if(PFLAG&0x10)				//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		外部复位
	{
		//P0:P0端口寄存器
		P0=P0^0x01;					//---0 0001
								//0-OUT , 1-IN
		DelayUs(40);				//系统工作电压VDD低于2.4V，说明此时低电压检测器已处于监控状态。
	}
	
	//PFLAG:状态寄存器
	else if(PFLAG&0x20)			//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		外部复位
	{
		//P0:P0端口寄存器
		P0=P0^0x02;					//---0 0010
								//0-OUT , 1-IN
		DelayUs(40);				//系统工作电压VDD低于3.6V，说明此时低电压检测器已处于监控状态	
	}
	
	//PFLAG:状态寄存器
	else if(PFLAG&0x00)			//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		外部复位
	{
		//P0:P0端口寄存器
		P0=P0^0x04;					//---0 0100
								//0-OUT , 1-IN
		DelayUs(40);
	}
	
	while(1)
	{	//WDTR:看门狗定时器
		WDTR = 0x5A;			/*clear watchdog timer*/
 		
		DelayUs(40);	
	}
}

/*Gpio initial sub function<<=================================================
;-------初始化IO--P0M P4M P5M------------------
;PnM:0-InPut ;1-OutPut
;PnUR:0-DisUpPull;1-EnUpPull
Gpio initial sub function<<==================================================*/
void GpioInit(void) 
{ 
	//P0:P0端口寄存器
	P0=0X00;					//---0 0000
								//0-L , 1-H
								
	//P0UR:P0端口上拉寄存器
	P0UR=0X00;					//---0 0000
								//0-DIS, 1-EN
								
	//P0M:P0端口模式控制寄存器						
	P0M = 0XFF;					//---1 1111
								//0-IN,1-OUT
								
	//P4:P4端口寄存器							
	P4=0X00;					//---0 0000
								//0-L , 1-H
								
	//P4UR:P4端口上拉寄存器							
	P4UR=0X00;					//---0 0000
								//0-DIS, 1-EN
								
	//P4M:P4端口模式控制寄存器							
	P4M = 0XFF;					//---1 1111
								//0-IN,1-OUT
								
	//P5:P5端口寄存器						
	P5=0X00;					//---0 0---
								//0-L , 1-H
								
	//P5UR:P5端口上拉寄存器
	P5UR=0X00;					//---0 0---
	
	//P5M:P5端口模式控制寄存器
	P5M = 0XFF; 				//---1 1---
								//0-IN,1-OUT
 
} 

void DelayUs(unsigned char delayUs)
{
	while(delayUs--);
}






