/******************************************************************************
;  *   	@MCU				 : MC51F003A4
;  *   	@Create Date         : 2021.10.11
;  *   	@Author/Corporation  : Martin/SinoMCU
;  *   	@晟矽微技术支持QQ 	 : 2048615934
;  *    @晟矽微官网		     : http://www.sinomcu.com/
;  *   	@Copyright           : 2020 SINOMCU Corporation,All Rights Reserved.
;  *----------------------Abstract Description---------------------------------
;  *			          T3定时器唤醒 外部中断唤醒
						配置选项设置   看门狗始终工作
						P13、P14、P22外部中断INT00、INT10、INT13
						下降沿唤醒，唤醒后P23、P24、P25翻转
						T3 0.25S唤醒，唤醒后P26翻转 跳回继续休眠                             		
******************************************************************************/

#include "User_Def.h"

//全局变量
__O bit_flag flag1;
__O bit_flag SFR_interrupt_buff_H;
__O bit_flag SFR_interrupt_buff_L;
__O uint8_t wake_up_status;	//唤醒状态
//私有变量

/************************************************
;  *    @Function Name       : delay
;  *    @Description         : 普通延时
;  *    @IN_Parameter      	 :
;  *    @Return parameter    :
;  ***********************************************/
static void delay(uint16_t Num)
{
	for (; Num > 0; Num--)
	{
		_nop_();
	}
}

void main(void)
{
	u8 cnt=0;
	DISABLE_GIE(); //关闭总中断
	GPIO_Init();
	LFEN = 1;			  //低频始终工作
	ENABLE_GIE(); //打开总中断
	while (1)
	{
		//1.配置T3定时器 外部中断
		wake_up_status = 0;
		Timer3_Init();
		INT_Init();
		//2.使能中断
		IE1 |= DEF_SET_BIT1;  	//使能T3中断
		EXT0IE = 1;
		EXT1IE = 1;
		//3.设置看门狗
		WDTCR = 0x07;			//看门狗溢出时间1S，这里的看门狗时间需要大于T3定时器时间
		//4.休眠
		SLPCR = 0x55;
		SET_SLEEP();
		NOP(2);	
		//5.唤醒后清看门狗
		WDTCR = 0x07;			//看门狗溢出时间1S
		//6.关闭T3定时器或中断
		T3CR &= ~DEF_SET_BIT3;	//关闭T3
		IE1 &= ~DEF_SET_BIT1;	//关闭T3中断
		EXT0IE = 0;				//根据需求选择是否关闭
		EXT1IE = 0;				
		//7.定时时间未到、非外部中断等唤醒
		if(1==wake_up_status)		//T3定时唤醒
		{
			//可以添加定时时间实现功能,demo程序不演示
			for(cnt = 20; cnt >= 1; cnt--)
			{
				P26D = !P26D;
			}	
		}else if(2==wake_up_status)		//P13外部中断唤醒
		{
			for(cnt = 20; cnt >= 1; cnt--)
			{
				P23D = !P23D;
			}
		}else if(3==wake_up_status)	//P10外部中断唤醒
		{
			for(cnt = 20; cnt >= 1; cnt--)
			{
				P24D = !P24D;
			}
		}else if(4==wake_up_status)	//P22外部中断唤醒
		{
			for(cnt = 20; cnt >= 1; cnt--)
			{
				P25D = !P25D;
			}
		}	
	}
}

/**************************** end of file *********************************************/


