#include 	"main.h"		


#define 	TEST_SFR	0
//==============================================
//1.>中断函数
//==============================================
void interrupt myIsr(void) {
	//----User Code ----/
	if (T1IF) {
		T1IF = 0;
		//T1TH = (65536-200)/256;	//T1定时器计数器
		//T1TL = (65536-200)%256;

		PORTA = PORTA ^ 0x08;
	}
	if (T2IF) {
		T2IF = 0;
		//T2TH = (4096-200)/256;	//T1定时器计数器
		//T2TL = (4096-200)%256;

		CCPCON ^= 0x80;	//01-- 1100；全桥反向
		PORTC = PORTC ^ 0x20;
	}
	if (T3IF) {
		T3IF = 0;
		PORTC = PORTC ^ 0x02;
	}
	if (CCP1IF) {

		CCP1IF = 0;
		PORTC = PORTC ^ 0x01;
	}
}

//===============================================================================
//=====================|   T3     |==============================================
//=====================|   T3     |==============================================
//===============================================================================
#define		T3_Timer	0x01	//;
#define		T3_Counter	0x02	//;CLK-PA7/PA2
#define		T3_PWM		0x03	//;PC4
#define		T3_BUZ		0x04	//;PC4
#define		T3_MODE		T3_BUZ
//****T3 configuration ****//
//Fcpu = 16M 2T 
//12bit 定时计数器
//12bit PWM 模式
//12bit BUZ 输出模式
//12bit 计数器 输出模式
void T3_Init(void) {
	OPTION = 0b000000000;	 //-000 0000	(Initialization state:0011 1111)
	//;Bit6：INTEDG：外部中断触发方式选择位（PC1）	;0-falling edge, 1-rising edge
	//;Bit5：T0CS：TMR0时钟源选择位					;0-fcpu, 1-ExitClock
	//;Bit4：T0SE：TMR0/T3/T4/T5时钟源边沿选择位	;0-falling edge, 1-rising edge
	//;Bit3：PSA：预分频分配位						;0-TMR0, 1-WDT
	//;B2~0：PS2:PS0：预分频比率选择位
		//000		2T-TMR0			1T-WDT
		//001		4T-TMR0			2T-WDT
		//010		8T-TMR0			4T-WDT
		//011		16T-TMR0		8T-WDT
		//100		32T-TMR0		16T-WDT
		//101		64T-TMR0		32T-WDT
		//110		128T-TMR0		64T-WDT
		//111		256T-TMR0		128T-WDT

#if(T3_MODE == T3_PWM)
	{
		//周期=[T3PH:T3PL]*T3PWM 工作时钟源。<配置值就是周期，不需要用【4096-周期初值】>
		T3PH = (1000) / 256;	//PWM 周期高位
		T3PL = (1000) % 256;	//PWM 周期低位

		//占空比=[T3DH:T3DL]*T3PWM 工作时钟源。<配置值就是占空比，不需要用【4096-占空比初值】>
		T3DH = (200) / 256;		//占空比 高位
		T3DL = (200) % 256;		//占空比 低位

		//T3C1 = 0x45;	//-100 -101 -T3PWM 输出全低电平
		T3C1 = 0x05;	//-000 -101
		//bit6:T3OUT0：T3PWM 输出全低电平使能; 
			//0=T3PWM 输出不受影响
			//1=T3PWM 输出全低电平 <文件开头有说明>
		//b5~4:T3CKS<1:0>：T3 定时器时钟源选择
			// 00 	:	Fcpu/2
			// 01 	:	Fosc
			// 10 	:	PA2(上升、下降沿可选)
			// 11 	:	PA7(上升沿)
		//b2~0: T3CK<2:0>：T3 定时器时钟分频选择
			// 111 : 1分频				// 110 : 2分频
			// 101 : 4分频				// 100 : 8分频
			// 011 : 16分频				// 010 : 32分频
			// 001 : 64分频				// 000 : 128分频

		T3C0 = 0x82;	//1--0 0-1-
		//T3C0 = 0x92;	//1--1 0-1- T3PWM 输出极性取反
		//T3C0 = 0x8A;	//1--0 1-1- 使能T3BUZZER载波输出，同时需要配置T3PWMEN位
						//bit7:T3REN：T3 定时器总使能; 0=DIS ,1=EN
						//bit4:T3PWMINV：T3PWM 输出极性取反; 0=NOT INV ,1=INV
						//bit3:T3BUZEN：T3BUZZER 输出使能，PC4 口输出; 0=DIS ,1=EN
						//bit1:T3PWMEN：T3PWMEN 输出使能，PC4 口输出; 0=DIS ,1=EN

		FT3IF = 0;
		FT3IE = 1;
		PEIE = 1;
		GIE = 1;
	}
#elif(T3_MODE == T3_BUZ)
	{
		T3PH = (1000) / 256;	//PWM 周期高位
		T3PL = (1000) % 256;	//PWM 周期低位

		//T3DH = (0)/256;		//占空比 高位
		//T3DL = (0)%256;		//占空比 高位

		T3C1 = 0x05;	//-000 -101
		//bit6:T3OUT0：T3PWM 输出全低电平使能; 
			//0=T3PWM 输出不受影响
			//1=T3PWM 输出全低电平
		//b5~4:T3CKS<1:0>：T3 定时器时钟源选择
			// 00 	:	Fcpu/2
			// 01 	:	Fosc
			// 10 	:	PA2(上升、下降沿可选)
			// 11 	:	PA7(上升沿)
		//b2~0: T3CK<2:0>：T3 定时器时钟分频选择
			// 111 : 1分频					// 110 : 2分频
			// 101 : 4分频					// 100 : 8分频
			// 011 : 16分频					// 010 : 32分频
			// 001 : 64分频					// 000 : 128分频

		T3C0 = 0x8A;	//1--0 1-1- 使能T3BUZZER载波输出，同时需要配置T3PWMEN位
		//bit7:T3REN：T3 定时器总使能; 0=DIS ,1=EN
		//bit4:T3PWMINV：T3PWM 输出极性取反; 0=NOT INV ,1=INV
		//bit3:T3BUZEN：T3BUZZER 输出使能，PC4 口输出; 0=DIS ,1=EN
		//bit1:T3PWMEN：T3PWMEN 输出使能，PC4 口输出; 0=DIS ,1=EN

		FT3IF = 0;
		FT3IE = 1;
		PEIE = 0;
		GIE = 1;
	}
#elif(T3_MODE == T3_Counter)
	{
		TRISA |= 0b10000000;
		//T3PH = (1000)/256;	//PWM 周期高位
		//T3PL = (1000)%256;	//PWM 周期低位

		//T3DH = (0)/256;		//占空比 高位
		//T3DL = (0)%256;		//占空比 高位

		T3TH = (4096 - 200) / 256;	//定时计数 高位
		T3TL = (4096 - 200) % 256;	//定时计数 低位

		T3C1 = 0x25;	//-010 -101 - PA2(上升沿、下降沿)
		T3C1 = 0x37;	//-011 -111 - PA7(上升沿)
		//bit6:T3OUT0：T3PWM 输出全低电平使能; 
			//0=T3PWM 输出不受影响
			//1=T3PWM 输出全低电平
		//b5~4:T3CKS<1:0>：T3 定时器时钟源选择
			// 00 	:	Fcpu/2
			// 01 	:	Fosc
			// 10 	:	PA2(上升、下降沿可选)
			// 11 	:	PA7(上升沿)
		//b2~0: T3CK<2:0>：T3 定时器时钟分频选择
			// 111 : 1分频				// 110 : 2分频
			// 101 : 4分频				// 100 : 8分频
			// 011 : 16分频				// 010 : 32分频
			// 001 : 64分频				// 000 : 128分频

		T3C0 = 0x80;	//1--0 0-0- 
		//bit7:T3REN：T3 定时器总使能; 0=DIS ,1=EN
		//bit4:T3PWMINV：T3PWM 输出极性取反; 0=NOT INV ,1=INV
		//bit3:T3BUZEN：T3BUZZER 输出使能，PC4 口输出; 0=DIS ,1=EN
		//bit1:T3PWMEN：T3PWMEN 输出使能，PC4 口输出; 0=DIS ,1=EN

		FT3IF = 0;
		FT3IE = 1;
		PEIE = 1;
		GIE = 1;
	}
#elif(T3_MODE == T3_Timer)
	{
		//T3PH = (1000)/256;	//PWM 周期高位
		//T3PL = (1000)%256;	//PWM 周期低位

		//T3DH = (0)/256;		//占空比 高位
		//T3DL = (0)%256;		//占空比 高位

		T3TH = (4096 - 1000) / 256;	//定时计数 高位
		T3TL = (4096 - 1000) % 256;	//定时计数 低位

		T3C1 = 0x05;	//-000 -101
		//bit6:T3OUT0：T3PWM 输出全低电平使能; 
			//0=T3PWM 输出不受影响
			//1=T3PWM 输出全低电平
		//b5~4:T3CKS<1:0>：T3 定时器时钟源选择
			// 00 	:	Fcpu/2
			// 01 	:	Fosc
			// 10 	:	PA2(上升、下降沿可选)
			// 11 	:	PA7(上升沿)
		//b2~0: T3CK<2:0>：T3 定时器时钟分频选择
			// 111 : 1分频				// 110 : 2分频
			// 101 : 4分频				// 100 : 8分频
			// 011 : 16分频				// 010 : 32分频
			// 001 : 64分频				// 000 : 128分频

		T3C0 = 0x80;	//1--0 0-0- 
		//bit7:T3REN：T3 定时器总使能; 0=DIS ,1=EN
		//bit4:T3PWMINV：T3PWM 输出极性取反; 0=NOT INV ,1=INV
		//bit3:T3BUZEN：T3BUZZER 输出使能，PC4 口输出; 0=DIS ,1=EN
		//bit1:T3PWMEN：T3PWMEN 输出使能，PC4 口输出; 0=DIS ,1=EN

		FT3IF = 0;
		FT3IE = 1;
		PEIE = 1;	//务必开启
		GIE = 1;
	}
#endif
}

//****INT function****//
//PC1-input with Up_pull
//INT 脚接红外接收脚
//PA6 INT中断信号，（中断切换INT触发边沿）
void INT_Init(void) {
	OPTION = 0b010000000;	 //-100 0000	(Initialization state:0011 1111)
	//;Bit6：INTEDG：外部中断触发方式选择位（PC1）	;0-falling edge, 1-rising edge
	//;Bit5：T0CS：TMR0时钟源选择位					;0-fcpu, 1-ExitClock
	//;Bit4：T0SE：TMR0时钟源边沿选择位				;0-falling edge, 1-rising edge
	//;Bit3：PSA：预分频分配位						;0-TMR0, 1-WDT
	//;B2~0：PS2:PS0：预分频比率选择位
		//000		2T-TMR0			1T-WDT
		//001		4T-TMR0			2T-WDT
		//010		8T-TMR0			4T-WDT
		//011		16T-TMR0		8T-WDT
		//100		32T-TMR0		16T-WDT
		//101		64T-TMR0		32T-WDT
		//110		128T-TMR0		64T-WDT
		//111		256T-TMR0		128T-WDT

	PCON = 0b10100000;		//1-1- ----	(Initialization state:1011 1111)
	//;Bit7：WDTE: WDT（看门狗定时器）使能位	;0-DIS, 1-EN
	//;Bit5：LVREN: 低电压复位使能位			;0-DIS, 1-EN

	TRISC = 0b00000010;	//(0-OUT;1-IN) 
	PCHCON = 0b11111101;	//1111 1111 :1-DIS;0-EN    

	FINTIF = 0;

	FINTIE = 0;

	//PEIE = 1;		//不用配置		
	FGIE = 0;
}

//===============================================================================
//=====================|   ECCP   |==============================================
//=====================|   ECCP   |==============================================
//===============================================================================
#define	T1_Timer		0x00
#define	T1_iLrcWake		0x01	
#define	T2_Timer		0x02
#define	T1_GateEN		0x03
#define	T2_P1A_OUT		0x04
#define	T2_Half_Bridge	0x05
#define	T2_ALL_Bridge	0x06
#define	T1_Capture		0x07	//20230818
#define	T2_6PWM_OUT		0x08	
#define	T1_Comp			0x09

#define	ECCP_MODE	T1_Comp
//****ECCP function****//
void ECCP_Init(void) {
#if(ECCP_MODE == T1_Timer)	//ok 
	{
		T1TH = (65536 - 200) / 256;	//T1定时器计数器
		T1TL = (65536 - 200) % 256;

		//T1CON = 0x31;	//0011 0001;Fcpu 8T;
		//T1CON = 0x01;	//0000 0001;Fcpu 1T;
		//T1CON = 0x21;	//0010 0001;Fcpu 4T;

		TRISA |= 0x80;	//1000 0000;1-in;0=out
		T1CON = 0x23;	//0010 0011;外部时钟，PA7
		//bit7: T1GINV：门控翻转位 (T1 计数时的门控有效电平，门控源参考 CMCON1 寄存器); 0-Low,1=High
		//bit6: T1GE：门控使能（T1REN=1 时有效）;0-Close,1=Open
		//b5~4: T1CK<1:0>：T1 分频选择; 00=1T, 01=2T, 10=4T, 11=8T;
		//bit3: T1CKS1: T1 外部时钟源选择（T1CKS0=1 时有效）;0=外部时钟 PA7;1=内部低速 RC 或者外部低速晶振
		//bit2: T1SYNC：T1 外部时钟源与内部系统时钟同步控制（T1CKS0=1 时有效）;0 = 同步,1 = 异步
		//bit1: T1CKS0：T1 内外时钟源选择;0 = 内部 Fcpu,1 = 外部时钟源
		//bit0: T1REN：定时器 T1 使能; 0=DIS,1=EN

		T1IF = 0;
		T1IE = 1;
		PEIE = 1;	//T1 中断必须开启PEIE
		GIE = 1;
	}
#elif(ECCP_MODE == T1_iLrcWake)	//ok
	{
		T1TH = (65536 - 200) / 256;	//T1定时器计数器
		T1TL = (65536 - 200) % 256;

		T1CON = 0x0E;	//0000 1111
		//bit7: T1GINV：门控翻转位 (T1 计数时的门控有效电平，门控源参考 CMCON1 寄存器); 	
			//0-Low,1=High
		//bit6: T1GE：门控使能（T1REN=1 时有效）;				
			//0-Close,1=Open
		//b5~4: T1CK<1:0>：T1 分频选择; 						
			//00=1T, 01=2T, 10=4T, 11=8T;
		//bit3: T1CKS1: T1 外部时钟源选择（T1CKS0=1 时有效）;	
			//0=外部时钟 PA7;1=内部低速 RC 或者外部低速晶振
		//bit2: T1SYNC：T1 外部时钟源与内部系统时钟同步控制（T1CKS0=1 时有效）;	
			//0 = 同步,1 = 异步
		//bit1: T1CKS0：T1 内外时钟源选择;										
			//0 = 内部 Fcpu,1 = 外部时钟源
		//bit0: T1REN：定时器 T1 使能; 											
			//0=DIS,1=EN

		PCON = 0b00000000;		//0-0- ----	(Initialization state:1011 1111)
		//;Bit7：WDTE: WDT（看门狗定时器）使能位	;0-DIS, 1-EN
		//;Bit5：LVREN: 低电压复位使能位			;0-DIS, 1-EN

		T1IF = 0;
		T1IE = 1;	//务必开启
		PEIE = 1;	//务必开启
		GIE = 0;
		WDTE = 0;
		T1REN = 1;

		OSCM = 0B00000001;	 //0001 0001//-进低速
		OSCM |= 0B01000010;	 //0000 0010//-关高速
		//bit7: MONIF：外振时钟停振监测标志位; 					0 = 未监测到外振时钟停振; 1 = 测到外振时钟停振
		//bit6: WAKEMODE：低速模式下睡眠唤醒后系统时钟选择位；	0 = 选择内外低速作为系统时钟；1 = 选择高速 RC 作为系统时钟
		//bit5: GREENEN：绿色模式使能位；						0 = 普通模式；1 = 绿色模式
		//bit4: RTCEN：RTC 模式使能位（IRC&RTC 模式）；			0 = RTC 模式使能；1 = RTC 模式关闭，外部低速晶振停振
		//bit3: SLCON：内部低速时钟控制位；						0 = 开启内部低速时钟；1 = 关闭内部低速时钟（同时需 SLEEP 且 wdt disable）
		//bit2: XTSEL：内外低速选择位；							0 = 选择内部低速 RC；1 = 选择外部低速晶振
		//bit1: STPHX：内部高速振荡器控制位；					0 = 运行；1 = 停止，内部低速 RC 振荡器仍然运行
		//bit0: CLKMD：系统时钟模式控制位；						0 = 普通模式，高速时钟作为系统时钟；1 = 低速模式，低速时钟作为系统时钟
		asm("NOP");
		SLEEP();
		WDTE = 1;
	}
#elif(ECCP_MODE == T2_Timer)	//ok
	{
		T2TH = (4096 - 200) / 256;;	//T2计数/定时器时间寄存器
		T2TL = (4096 - 200) % 256;;

		T2C1 = 0x05;	//00-0 -000
		//bit7: PRSEN：PWM 自动关闭后，自动重启控制
			//0 = 关闭 (退出关闭事件时，ECCPASE 必须由软件清零)
			//1 = 使能 (退出关闭事件时，ECCPASE 自动清零)
		//bit6: T2OUT0：T2PWM 输出全低电平使能;0 = T2PWM 输出不受影响,1 = T2PWM 输出全低电平
		//bit4: T2CKS0：T2 定时器时钟源选择; 0 = Fcpu/2, 1 = Fosc
		//b2~0: T2CK<2:0>：T2 定时器时钟分频选择
			//111 = 1 分频;		//110 = 2 分频;
			//101 = 4 分频;		//100 = 8 分频;
			//011 = 16 分频;	//010 = 32 分频;
			//001 = 64 分频;	//000 = 128 分频

		T2C0 = 0x80;	//1--- --0-
		//bit7: T2REN：T2 定时器总使能; 0=DIS,1=EN
		//bit1: T2PWMEN：T2 模块 PWM 输出总输出使能; 0=DIS,1=EN

		T2IF = 0;
		T2IE = 1;
		PEIE = 1;
		GIE = 1;
	}
#elif(ECCP_MODE == T1_GateEN)
	{
		CCPRH = 0x00;	//捕捉、比较寄存器高低位
		CCPRL = 0x00;

		T1TH = 0x00;	//T1定时器计数器
		T1TL = 0x00;

		T2DTL = 0x00;	//T2PWM死区控制寄存器
		T2DTH = 0x00;

		T2DH = 0x00;	//T2PWM占空比寄存器
		T2DL = 0x00;

		T2TH = 0x00;	//T2计数/定时器时间寄存器
		T2TL = 0x00;

		T2PH = 0x00;	//T2PWM周期寄存器
		T2PL = 0x00;

		CMCON1 = 0x0E;	//---- 1110	;滤波使能;-20230810
		//CMCON1 = 0x02;	//---- 1110 ;滤波no使能;-20230810
				//;Bit3：C2FIEN：比较器 C2 数字滤波使能; 0-with,1-no
				//;Bit2: C1FIEN：比较器 C1 数字滤波使能; 0-with,1-no
				//;Bit1: T1GSS：T1 门控源 ； 0-比较器C2的输出，1-T1G 引脚 (PA6 配置为输入模式)
				//;Bit0: C2SYNC：比较器 C2 输出同步控制； 0-异步输出，1-与 T1 时钟的下降沿同步

		ECCPAS = 0x00;	//0000 0000
		//bit7: ECCPASE:PWM自动关闭状态；//0 = PWM输出正常,1 = 发生了自动关闭事件，PWM输出关闭 
		//b6~4: ECCPAC<2:0>：ECCP 自动关闭源
			//000 = 禁止自动关闭（ECCPASE 位无法写 1）
			//001 = 比较器 1 输出(C1OUT)变高
			//010 = 比较器 2 输出(C2OUT)变高
			//011 = 比较器 1/2 输出(CxOUT)变高
			//100 = INT 引脚（PC1）电压为低
			//101 = INT 引脚电压为低，或比较器 1 输出(C1OUT)变高
			//110 = INT 引脚电压为低，或比较器 2 输出(C2OUT)变高
			//111 = INT 引脚电压为低，或比较器 1/2 输出(CxOUT)变高
		//b3~2: PSSAC<1:0>：PWM 自动关闭后，P1A 和 P1C 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态
		//b1~0: PSSBD<1:0>：PWM 自动关闭后，P1B 和 P1D 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态

		PWMP1CON = 0x00;	//0000 0000
		//bit7: AUX1EN：PWM 辅助功能 (半桥模式下有效);0=DIS,1=EN
		//bit6: P1OS：PWM 单脉冲输出 (当 AUX1EN=1 时有效);注：PWM 单脉冲输出模式仅在辅助设置打开且半桥模式下有效。
			//0 = 关闭 (PWM 连续输出),
			//1 = 使能 (输出一次脉冲后自动停止，P1x 为 GPIO)
		//bit5: P1FOE：P1F 输出 (PC0 端口); 0=DIS且 P1F 为 GPIO, 1=EN；
		//bit4: P1EOE：P1E 输出 (PC1 端口); 0=DIS且 P1E 为 GPIO, 1=EN；
		//bit3: P1DOE：P1D 输出 (PC2 端口); 0=DIS且 P1D 为 GPIO, 1=EN；
		//bit2: P1COE：P1C 输出 (PC3 端口); 0=DIS且 P1C 为 GPIO, 1=EN；
		//bit1: P1BOE：P1B 输出 (PC4 端口); 0=DIS且 P1B 为 GPIO, 1=EN；
		//bit0: P1AOE：P1A 输出 (PC5 端口); 0=DIS且 P1A 为 GPIO, 1=EN；

		T1CON = 0x00;	//0000 0000
		//bit7: T1GINV：门控翻转位 (T1 计数时的门控有效电平，门控源参考 CMCON1 寄存器); 0-Low,1=High
		//bit6: T1GE：门控使能（T1REN=1 时有效）;0-Close,1=Open
		//b5~4: T1CK<1:0>：T1 分频选择; 00=1T, 01=2T, 10=4T, 11=8T;
		//bit3: T1CKS1: T1 外部时钟源选择（T1CKS0=1 时有效）;0=外部时钟 PA7,1=内部低速 RC 或者外部低速晶振
		//bit2: T1SYNC：T1 外部时钟源与内部系统时钟同步控制（T1CKS0=1 时有效）;0 = 同步,1 = 异步
		//bit1: T1CKS0：T1 内外时钟源选择;0 = 内部 Fcpu,1 = 外部时钟源
		//bit0: T1REN：定时器 T1 使能; 0=DIS,1=EN

		T2C1 = 0x00;	//00-0 -000
		//bit7: PRSEN：PWM 自动关闭后，自动重启控制
			//0 = 关闭 (退出关闭事件时，ECCPASE 必须由软件清零)
			//1 = 使能 (退出关闭事件时，ECCPASE 自动清零)
		//bit6: T2OUT0：T2PWM 输出全低电平使能;0 = T2PWM 输出不受影响,1 = T2PWM 输出全低电平
		//bit4: T2CKS0：T2 定时器时钟源选择; 0 = Fcpu/2, 1 = Fosc
		//b2~0: T2CK<2:0>：T2 定时器时钟分频选择
			//111 = 1 分频;		//110 = 2 分频;
			//101 = 4 分频;		//100 = 8 分频;
			//011 = 16 分频;	//010 = 32 分频;
			//001 = 64 分频;	//000 = 128 分频

		T2C0 = 0x00;	//0--- --0-
		//bit7: T2REN：T2 定时器总使能; 0=DIS,1=EN
		//bit1: T2PWMEN：T2 模块 PWM 输出总输出使能; 0=DIS,1=EN

		CCPCON = 0x00;	//00-- 0000
		//b7~6:	P1M<1:0>：PWM 输出配置 (仅当 CCP1M<3:2> = 11 时有效)
			//00 = 单输出；P1A 调制；P1B、P1C、P1D 为 GPIO
			//01 = 全桥正向输出；P1D 调制；P1A 有效；P1B 和 P1C 无效
			//10 = 半桥输出；P1A 和 P1B 调制，带有死区控制；P1C 和 P1D 为 GPIO
			//11 = 全桥反向输出；P1B 调制；P1C 有效；P1A 和 P1D 无效
		//b3~0: CCP1M<3:0>：ECCP 模式选择位
			//0000 = 捕捉/比较/PWM 关闭（复位 ECCP 模块）
			//0001 = 未使用（保留）
			//0010 = 比较模式，匹配时 CCP1 脚翻转输出
			//0011 = 未使用（保留）
			//0100 = 捕捉模式，每个下降沿（捕捉脚 CCP1）
			//0101 = 捕捉模式，每个上升沿（捕捉脚 CCP1）
			//0110 = 捕捉模式，每 4 个上升沿（捕捉脚 CCP1）
			//0111 = 捕捉模式，每 16 个上升沿（捕捉脚 CCP1）

			//1000 = 比较模式，匹配时 CCP1 脚输出高
			//1001 = 比较模式，匹配时 CCP1 脚输出低
			//1010 = 比较模式，匹配时产生软件中断（CCP1 引脚不受影响）
			//1011 = 比较模式，触发特殊事件（CCP1 复位 T1，且如果 ADC 模块被使能，启动一次AD转换）
			//1100 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 高电平有效
			//1101 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 低电平有效
			//1110 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 高电平有效
			//1111 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 低电平有效

		T1IF = 0;
		T1IE = 0;
		T2IF = 0;
		T2IE = 0;
		PEIE = 0;
		GIE = 0;
	}
#elif(ECCP_MODE == T2_P1A_OUT)	//ok
	{
		//T2DTL = 0x00;	//T2PWM死区控制寄存器(注：死区仅在半桥模式下有效)
		//T2DTH = 0x00;	//T2PWM 死区时间=[T2DTH:T2DTL]*T2PWM 工作时钟源

		T2DH = 100 / 256;	//T2PWM占空比寄存器
		T2DL = 100 % 256;	//T2PWM 占空比=[T2DH:T2DL]*T2PWM 工作时钟源

		//T2TH = 0x00;	//T2计数/定时器时间寄存器
		//T2TL = 0x00;

		T2PH = 400 / 256;	//T2PWM周期寄存器
		T2PL = 400 % 256;	//T2PWM 周期=[T2PH:T2PL]*T2PWM 工作时钟源。

		CMCON1 = 0x0E;	//---- 1110	;滤波使能;-20230810
		//CMCON1 = 0x02;	//---- 1110 ;滤波no使能;-20230810
				//;Bit3：C2FIEN：比较器 C2 数字滤波使能; 0-with,1-no
				//;Bit2: C1FIEN：比较器 C1 数字滤波使能; 0-with,1-no
				//;Bit1: T1GSS：T1 门控源 ； 0-比较器C2的输出，1-T1G 引脚 (PA6 配置为输入模式)
				//;Bit0: C2SYNC：比较器 C2 输出同步控制； 0-异步输出，1-与 T1 时钟的下降沿同步

		ECCPAS = 0x00;	//0000 0000
		ECCPAS = 0xC0;	//1100 0000；INT 引脚（PC1）电压为低;P1A常态-低电平
		ECCPAS = 0xC4;	//1100 0100；INT 引脚（PC1）电压为低;P1A常态-高电平
		ECCPAS = 0xA4;	//1010 0100；比较器 2 输出(C2OUT)变高;P1A常态-高电平
		ECCPAS = 0x90;	//1001 0000；比较器 1 输出(C1OUT)变高;P1A常态-低电平
		ECCPAS = 0xB0;	//1011 0000；比较器 1/2 输出(CxOUT)变高;P1A常态-三态
		//bit7: ECCPASE:PWM自动关闭状态；
			//0 = PWM输出正常; 1 = 发生了自动关闭事件，PWM输出关闭
		//b6~4: ECCPAC<2:0>：ECCP 自动关闭源
			//000 = 禁止自动关闭（ECCPASE 位无法写 1）		//001 = 比较器 1 输出(C1OUT)变高-ok
			//010 = 比较器 2 输出(C2OUT)变高-ok				//011 = 比较器 1/2 输出(CxOUT)变高-ok
			//100 = INT 引脚（PC1）电压为低-ok				//101 = INT 引脚电压为低，或比较器 1 输出(C1OUT)变高
			//110 = INT引脚电压为低,或比较器2输出(C2OUT)变高//111 = INT 引脚电压为低,或比较器1/2输出(CxOUT)变高
		//b3~2: PSSAC<1:0>：PWM 自动关闭后，P1A 和 P1C 引脚状态
			//00 = 输出 0;-ok	//01 = 输出 1;-ok	//1x = 三态
		//b1~0: PSSBD<1:0>：PWM 自动关闭后，P1B 和 P1D 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态

		PWMP1CON = 0x3F;	//0011 1111
		//bit7: AUX1EN：PWM 辅助功能 (半桥模式下有效);0=DIS,1=EN
		//bit6: P1OS：PWM单脉冲输出 (当 AUX1EN=1时有效);注：PWM单脉冲输出模式仅在辅助设置打开且半桥模式下有效。
			//0 = 关闭 (PWM 连续输出),
			//1 = 使能 (输出一次脉冲后自动停止，P1x 为 GPIO)
		//bit5: P1FOE：P1F 输出 (PC0 端口); 0=DIS且 P1F 为 GPIO, 1=EN；
		//bit4: P1EOE：P1E 输出 (PC1 端口); 0=DIS且 P1E 为 GPIO, 1=EN；
		//bit3: P1DOE：P1D 输出 (PC2 端口); 0=DIS且 P1D 为 GPIO, 1=EN；
		//bit2: P1COE：P1C 输出 (PC3 端口); 0=DIS且 P1C 为 GPIO, 1=EN；
		//bit1: P1BOE：P1B 输出 (PC4 端口); 0=DIS且 P1B 为 GPIO, 1=EN；
		//bit0: P1AOE：P1A 输出 (PC5 端口); 0=DIS且 P1A 为 GPIO, 1=EN；

		T2C1 = 0x85;	//10-0 -101;Fcpu/2 4T
		//bit7: PRSEN：PWM 自动关闭后，自动重启控制
			//0 = 关闭 (退出关闭事件时，ECCPASE 必须由软件清零)
			//1 = 使能 (退出关闭事件时，ECCPASE 自动清零)-ok
		//bit6: T2OUT0：T2PWM 输出全低电平使能;0 = T2PWM 输出不受影响,1 = T2PWM 输出全低电平
		//bit4: T2CKS0：T2 定时器时钟源选择; 0 = Fcpu/2, 1 = Fosc;-bitok
		//b2~0: T2CK<2:0>：T2 定时器时钟分频选择
			//111 = 1 分频;		//110 = 2 分频;
			//101 = 4 分频;		//100 = 8 分频;
			//011 = 16 分频;	//010 = 32 分频;
			//001 = 64 分频;	//000 = 128 分频

		T2C0 = 0x82;	//1--- --1-
		//bit7: T2REN：T2 定时器总使能; 0=DIS,1=EN
		//bit1: T2PWMEN：T2 模块 PWM 输出总输出使能; 0=DIS,1=EN

//CCPCON = 0x0E;	//00-- 1110
		CCPCON = 0x0C;	//00-- 1100
		//b7~6:	P1M<1:0>：PWM 输出配置 (仅当 CCP1M<3:2> = 11 时有效)
			//00 = 单输出；P1A（PC5） 调制；P1B、P1C、P1D 为 GPIO
			//01 = 全桥正向输出；P1D 调制；P1A 有效；P1B 和 P1C 无效
			//10 = 半桥输出；P1A 和 P1B 调制，带有死区控制；P1C 和 P1D 为 GPIO
			//11 = 全桥反向输出；P1B 调制；P1C 有效；P1A 和 P1D 无效
		//b3~0: CCP1M<3:0>：ECCP 模式选择位
			//0000 = 捕捉/比较/PWM 关闭（复位 ECCP 模块）
			//0001 = 未使用（保留）
			//0010 = 比较模式，匹配时 CCP1 脚翻转输出
			//0011 = 未使用（保留）
			//0100 = 捕捉模式，每个下降沿（捕捉脚 CCP1）
			//0101 = 捕捉模式，每个上升沿（捕捉脚 CCP1）
			//0110 = 捕捉模式，每 4 个上升沿（捕捉脚 CCP1）
			//0111 = 捕捉模式，每 16 个上升沿（捕捉脚 CCP1）

			//1000 = 比较模式，匹配时 CCP1 脚输出高
			//1001 = 比较模式，匹配时 CCP1 脚输出低
			//1010 = 比较模式，匹配时产生软件中断（CCP1 引脚不受影响）
			//1011 = 比较模式，触发特殊事件（CCP1 复位 T1，且如果 ADC 模块被使能，启动一次AD转换）
			//1100 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 高电平有效
			//1101 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 低电平有效
			//1110 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 高电平有效
			//1111 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 低电平有效

		T1IF = 0;
		T1IE = 0;
		T2IF = 0;
		T2IE = 0;
		PEIE = 0;
		GIE = 0;
	}
#elif(ECCP_MODE == T2_Half_Bridge)	//ok
	{
		T2DTH = 20 / 256;	//T2PWM死区控制寄存器(注：死区仅在半桥模式下有效)
		T2DTL = 20 % 256;	//T2PWM 死区时间=[T2DTH:T2DTL]*T2PWM 工作时钟源

		T2DH = 100 / 256;	//T2PWM占空比寄存器
		T2DL = 100 % 256;	//T2PWM 占空比=[T2DH:T2DL]*T2PWM 工作时钟源

		//T2TH = 0x00;	//T2计数/定时器时间寄存器
		//T2TL = 0x00;

		T2PH = 400 / 256;	//T2PWM周期寄存器
		T2PL = 400 % 256;	//T2PWM 周期=[T2PH:T2PL]*T2PWM 工作时钟源。

		CMCON1 = 0x0E;	//---- 1110	;滤波使能;-20230810
		//;Bit3：C2FIEN：比较器 C2 数字滤波使能; 0-with,1-no
		//;Bit2: C1FIEN：比较器 C1 数字滤波使能; 0-with,1-no
		//;Bit1: T1GSS：T1 门控源 ； 0-比较器C2的输出，1-T1G 引脚 (PA6 配置为输入模式)
		//;Bit0: C2SYNC：比较器 C2 输出同步控制； 0-异步输出，1-与 T1 时钟的下降沿同步

		ECCPAS = 0x00;	//0000 0000
		//bit7: ECCPASE:PWM自动关闭状态；//0 = PWM输出正常,1 = 发生了自动关闭事件，PWM输出关闭 
		//b6~4: ECCPAC<2:0>：ECCP 自动关闭源
			//000 = 禁止自动关闭（ECCPASE 位无法写 1）
			//001 = 比较器 1 输出(C1OUT)变高
			//010 = 比较器 2 输出(C2OUT)变高
			//011 = 比较器 1/2 输出(CxOUT)变高
			//100 = INT 引脚（PC1）电压为低
			//101 = INT 引脚电压为低，或比较器 1 输出(C1OUT)变高
			//110 = INT 引脚电压为低，或比较器 2 输出(C2OUT)变高
			//111 = INT 引脚电压为低，或比较器 1/2 输出(CxOUT)变高
		//b3~2: PSSAC<1:0>：PWM 自动关闭后，P1A 和 P1C 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态
		//b1~0: PSSBD<1:0>：PWM 自动关闭后，P1B 和 P1D 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态

		PWMP1CON = 0x3F;	//0011 1111
		//bit7: AUX1EN：PWM 辅助功能 (半桥模式下有效);0=DIS,1=EN
		//bit6: P1OS：PWM 单脉冲输出 (当 AUX1EN=1 时有效);注：PWM 单脉冲输出模式仅在辅助设置打开且半桥模式下有效。
			//0 = 关闭 (PWM 连续输出),
			//1 = 使能 (输出一次脉冲后自动停止，P1x 为 GPIO)
		//bit5: P1FOE：P1F 输出 (PC0 端口); 0=DIS且 P1F 为 GPIO, 1=EN；
		//bit4: P1EOE：P1E 输出 (PC1 端口); 0=DIS且 P1E 为 GPIO, 1=EN；
		//bit3: P1DOE：P1D 输出 (PC2 端口); 0=DIS且 P1D 为 GPIO, 1=EN；
		//bit2: P1COE：P1C 输出 (PC3 端口); 0=DIS且 P1C 为 GPIO, 1=EN；
		//bit1: P1BOE：P1B 输出 (PC4 端口); 0=DIS且 P1B 为 GPIO, 1=EN；
		//bit0: P1AOE：P1A 输出 (PC5 端口); 0=DIS且 P1A 为 GPIO, 1=EN；

//T1CON = 0x00;	//0000 0000
					//bit7: T1GINV：门控翻转位 (T1 计数时的门控有效电平，门控源参考 CMCON1 寄存器); 0-Low,1=High
					//bit6: T1GE：门控使能（T1REN=1 时有效）;0-Close,1=Open
					//b5~4: T1CK<1:0>：T1 分频选择; 00=1T, 01=2T, 10=4T, 11=8T;
					//bit3: T1CKS1: T1 外部时钟源选择（T1CKS0=1 时有效）;0=外部时钟 PA7,1=内部低速 RC 或者外部低速晶振
					//bit2: T1SYNC：T1 外部时钟源与内部系统时钟同步控制（T1CKS0=1 时有效）;0 = 同步,1 = 异步
					//bit1: T1CKS0：T1 内外时钟源选择;0 = 内部 Fcpu,1 = 外部时钟源
					//bit0: T1REN：定时器 T1 使能; 0=DIS,1=EN

		T2C1 = 0x17;	//00-1 -111;Fosc 1T
		T2C1 = 0x07;	//00-0 -111;Fcpu/2 1T
		//T2C1 = 0x05;	//00-0 -101;Fcpu/2 4T
							//bit7: PRSEN：PWM 自动关闭后，自动重启控制
								//0 = 关闭 (退出关闭事件时，ECCPASE 必须由软件清零)
								//1 = 使能 (退出关闭事件时，ECCPASE 自动清零)
							//bit6: T2OUT0：T2PWM 输出全低电平使能;0 = T2PWM 输出不受影响,1 = T2PWM 输出全低电平
							//bit4: T2CKS0：T2 定时器时钟源选择; 0 = Fcpu/2, 1 = Fosc;-bitok
							//b2~0: T2CK<2:0>：T2 定时器时钟分频选择
								//111 = 1 分频;		//110 = 2 分频;
								//101 = 4 分频;		//100 = 8 分频;
								//011 = 16 分频;	//010 = 32 分频;
								//001 = 64 分频;	//000 = 128 分频

		T2C0 = 0x82;	//1--- --1-
		//bit7: T2REN：T2 定时器总使能; 0=DIS,1=EN
		//bit1: T2PWMEN：T2 模块 PWM 输出总输出使能; 0=DIS,1=EN

		CCPCON = 0x8C;	//10-- 1100
		//b7~6:	P1M<1:0>：PWM 输出配置 (仅当 CCP1M<3:2> = 11 时有效)
			//00 = 单输出；P1A（PC5） 调制；P1B、P1C、P1D 为 GPIO
			//01 = 全桥正向输出；P1D 调制；P1A 有效；P1B 和 P1C 无效
			//10 = 半桥输出；P1A 和 P1B 调制，带有死区控制；P1C 和 P1D 为 GPIO
			//11 = 全桥反向输出；P1B 调制；P1C 有效；P1A 和 P1D 无效
		//b3~0: CCP1M<3:0>：ECCP 模式选择位
			//0000 = 捕捉/比较/PWM 关闭（复位 ECCP 模块）
			//0001 = 未使用（保留）
			//0010 = 比较模式，匹配时 CCP1 脚翻转输出
			//0011 = 未使用（保留）
			//0100 = 捕捉模式，每个下降沿（捕捉脚 CCP1）
			//0101 = 捕捉模式，每个上升沿（捕捉脚 CCP1）
			//0110 = 捕捉模式，每 4 个上升沿（捕捉脚 CCP1）
			//0111 = 捕捉模式，每 16 个上升沿（捕捉脚 CCP1）

			//1000 = 比较模式，匹配时 CCP1 脚输出高
			//1001 = 比较模式，匹配时 CCP1 脚输出低
			//1010 = 比较模式，匹配时产生软件中断（CCP1 引脚不受影响）
			//1011 = 比较模式，触发特殊事件（CCP1 复位 T1，且如果 ADC 模块被使能，启动一次AD转换）
			//1100 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 高电平有效
			//1101 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 低电平有效
			//1110 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 高电平有效
			//1111 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 低电平有效

		T1IF = 0;
		T1IE = 0;
		T2IF = 0;
		T2IE = 0;
		PEIE = 0;
		GIE = 0;
	}
#elif(ECCP_MODE == T2_6PWM_OUT)	//ok
	{
		T2DTH = 20 / 256;	//T2PWM死区控制寄存器(注：死区仅在半桥模式下有效)
		T2DTL = 20 % 256;	//T2PWM 死区时间=[T2DTH:T2DTL]*T2PWM 工作时钟源

		T2DH = 100 / 256;	//T2PWM占空比寄存器
		T2DL = 100 % 256;	//T2PWM 占空比=[T2DH:T2DL]*T2PWM 工作时钟源

		//T2TH = 0x00;	//T2计数/定时器时间寄存器
		//T2TL = 0x00;

		T2PH = 400 / 256;	//T2PWM周期寄存器
		T2PL = 400 % 256;	//T2PWM 周期=[T2PH:T2PL]*T2PWM 工作时钟源。

		CMCON1 = 0x0E;	//---- 1110	;滤波使能;-20230810
		//;Bit3：C2FIEN：比较器 C2 数字滤波使能; 0-with,1-no
		//;Bit2: C1FIEN：比较器 C1 数字滤波使能; 0-with,1-no
		//;Bit1: T1GSS：T1 门控源 ； 0-比较器C2的输出，1-T1G 引脚 (PA6 配置为输入模式)
		//;Bit0: C2SYNC：比较器 C2 输出同步控制； 0-异步输出，1-与 T1 时钟的下降沿同步

		ECCPAS = 0x00;	//0000 0000
		//bit7: ECCPASE:PWM自动关闭状态；//0 = PWM输出正常,1 = 发生了自动关闭事件，PWM输出关闭 
		//b6~4: ECCPAC<2:0>：ECCP 自动关闭源
			//000 = 禁止自动关闭（ECCPASE 位无法写 1）
			//001 = 比较器 1 输出(C1OUT)变高
			//010 = 比较器 2 输出(C2OUT)变高
			//011 = 比较器 1/2 输出(CxOUT)变高
			//100 = INT 引脚（PC1）电压为低
			//101 = INT 引脚电压为低，或比较器 1 输出(C1OUT)变高
			//110 = INT 引脚电压为低，或比较器 2 输出(C2OUT)变高
			//111 = INT 引脚电压为低，或比较器 1/2 输出(CxOUT)变高
		//b3~2: PSSAC<1:0>：PWM 自动关闭后，P1A 和 P1C 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态
		//b1~0: PSSBD<1:0>：PWM 自动关闭后，P1B 和 P1D 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态

		PWMP1CON = 0xBF;	//1011 1111
		//bit7: AUX1EN：PWM 辅助功能 (半桥模式下有效);0=DIS,1=EN
		//bit6: P1OS：PWM 单脉冲输出 (当 AUX1EN=1 时有效);注：PWM 单脉冲输出模式仅在辅助设置打开且半桥模式下有效。
			//0 = 关闭 (PWM 连续输出),
			//1 = 使能 (输出一次脉冲后自动停止，P1x 为 GPIO)
		//bit5: P1FOE：P1F 输出 (PC0 端口); 0=DIS且 P1F 为 GPIO, 1=EN；
		//bit4: P1EOE：P1E 输出 (PC1 端口); 0=DIS且 P1E 为 GPIO, 1=EN；
		//bit3: P1DOE：P1D 输出 (PC2 端口); 0=DIS且 P1D 为 GPIO, 1=EN；
		//bit2: P1COE：P1C 输出 (PC3 端口); 0=DIS且 P1C 为 GPIO, 1=EN；
		//bit1: P1BOE：P1B 输出 (PC4 端口); 0=DIS且 P1B 为 GPIO, 1=EN；
		//bit0: P1AOE：P1A 输出 (PC5 端口); 0=DIS且 P1A 为 GPIO, 1=EN；

//T1CON = 0x00;	//0000 0000
					//bit7: T1GINV：门控翻转位 (T1 计数时的门控有效电平，门控源参考 CMCON1 寄存器); 0-Low,1=High
					//bit6: T1GE：门控使能（T1REN=1 时有效）;0-Close,1=Open
					//b5~4: T1CK<1:0>：T1 分频选择; 00=1T, 01=2T, 10=4T, 11=8T;
					//bit3: T1CKS1: T1 外部时钟源选择（T1CKS0=1 时有效）;0=外部时钟 PA7,1=内部低速 RC 或者外部低速晶振
					//bit2: T1SYNC：T1 外部时钟源与内部系统时钟同步控制（T1CKS0=1 时有效）;0 = 同步,1 = 异步
					//bit1: T1CKS0：T1 内外时钟源选择;0 = 内部 Fcpu,1 = 外部时钟源
					//bit0: T1REN：定时器 T1 使能; 0=DIS,1=EN

		T2C1 = 0x17;	//00-1 -111;Fosc 1T
		T2C1 = 0x07;	//00-0 -111;Fcpu/2 1T
		//T2C1 = 0x05;	//00-0 -101;Fcpu/2 4T
							//bit7: PRSEN：PWM 自动关闭后，自动重启控制
								//0 = 关闭 (退出关闭事件时，ECCPASE 必须由软件清零)
								//1 = 使能 (退出关闭事件时，ECCPASE 自动清零)
							//bit6: T2OUT0：T2PWM 输出全低电平使能;0 = T2PWM 输出不受影响,1 = T2PWM 输出全低电平
							//bit4: T2CKS0：T2 定时器时钟源选择; 0 = Fcpu/2, 1 = Fosc;-bitok
							//b2~0: T2CK<2:0>：T2 定时器时钟分频选择
								//111 = 1 分频;		//110 = 2 分频;
								//101 = 4 分频;		//100 = 8 分频;
								//011 = 16 分频;	//010 = 32 分频;
								//001 = 64 分频;	//000 = 128 分频

		T2C0 = 0x82;	//1--- --1-
		//bit7: T2REN：T2 定时器总使能; 0=DIS,1=EN
		//bit1: T2PWMEN：T2 模块 PWM 输出总输出使能; 0=DIS,1=EN

		CCPCON = 0x8C;	//10-- 1100
		//b7~6:	P1M<1:0>：PWM 输出配置 (仅当 CCP1M<3:2> = 11 时有效)
			//00 = 单输出；P1A（PC5） 调制；P1B、P1C、P1D 为 GPIO
			//01 = 全桥正向输出；P1D 调制；P1A 有效；P1B 和 P1C 无效
			//10 = 半桥输出；P1A 和 P1B 调制，带有死区控制；P1C 和 P1D 为 GPIO
			//11 = 全桥反向输出；P1B 调制；P1C 有效；P1A 和 P1D 无效
		//b3~0: CCP1M<3:0>：ECCP 模式选择位
			//0000 = 捕捉/比较/PWM 关闭（复位 ECCP 模块）
			//0001 = 未使用（保留）
			//0010 = 比较模式，匹配时 CCP1 脚翻转输出
			//0011 = 未使用（保留）
			//0100 = 捕捉模式，每个下降沿（捕捉脚 CCP1）
			//0101 = 捕捉模式，每个上升沿（捕捉脚 CCP1）
			//0110 = 捕捉模式，每 4 个上升沿（捕捉脚 CCP1）
			//0111 = 捕捉模式，每 16 个上升沿（捕捉脚 CCP1）

			//1000 = 比较模式，匹配时 CCP1 脚输出高
			//1001 = 比较模式，匹配时 CCP1 脚输出低
			//1010 = 比较模式，匹配时产生软件中断（CCP1 引脚不受影响）
			//1011 = 比较模式，触发特殊事件（CCP1 复位 T1，且如果 ADC 模块被使能，启动一次AD转换）
			//1100 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 高电平有效
			//1101 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 低电平有效
			//1110 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 高电平有效
			//1111 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 低电平有效

		T1IF = 0;
		T1IE = 0;
		T2IF = 0;
		T2IE = 0;
		PEIE = 0;
		GIE = 0;
	}
#elif(ECCP_MODE == T2_ALL_Bridge)	//ok 
	{
		T2DTH = 20 / 256;	//T2PWM死区控制寄存器(注：死区仅在半桥模式下有效)
		T2DTL = 20 % 256;	//T2PWM 死区时间=[T2DTH:T2DTL]*T2PWM 工作时钟源

		T2DH = 100 / 256;	//T2PWM占空比寄存器
		T2DL = 100 % 256;	//T2PWM 占空比=[T2DH:T2DL]*T2PWM 工作时钟源

		//T2TH = 0x00;	//T2计数/定时器时间寄存器
		//T2TL = 0x00;

		T2PH = 400 / 256;	//T2PWM周期寄存器
		T2PL = 400 % 256;	//T2PWM 周期=[T2PH:T2PL]*T2PWM 工作时钟源。

		CMCON1 = 0x0E;	//---- 1110	;滤波使能;-20230810
		//;Bit3：C2FIEN：比较器 C2 数字滤波使能; 0-with,1-no
		//;Bit2: C1FIEN：比较器 C1 数字滤波使能; 0-with,1-no
		//;Bit1: T1GSS：T1 门控源 ； 0-比较器C2的输出，1-T1G 引脚 (PA6 配置为输入模式)
		//;Bit0: C2SYNC：比较器 C2 输出同步控制； 0-异步输出，1-与 T1 时钟的下降沿同步

		ECCPAS = 0x00;	//0000 0000
		//bit7: ECCPASE:PWM自动关闭状态；//0 = PWM输出正常,1 = 发生了自动关闭事件，PWM输出关闭 
		//b6~4: ECCPAC<2:0>：ECCP 自动关闭源
			//000 = 禁止自动关闭（ECCPASE 位无法写 1）
			//001 = 比较器 1 输出(C1OUT)变高
			//010 = 比较器 2 输出(C2OUT)变高
			//011 = 比较器 1/2 输出(CxOUT)变高
			//100 = INT 引脚（PC1）电压为低
			//101 = INT 引脚电压为低，或比较器 1 输出(C1OUT)变高
			//110 = INT 引脚电压为低，或比较器 2 输出(C2OUT)变高
			//111 = INT 引脚电压为低，或比较器 1/2 输出(CxOUT)变高
		//b3~2: PSSAC<1:0>：PWM 自动关闭后，P1A 和 P1C 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态
		//b1~0: PSSBD<1:0>：PWM 自动关闭后，P1B 和 P1D 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态

		PWMP1CON = 0x3F;	//0011 1111
		//bit7: AUX1EN：PWM 辅助功能 (半桥模式下有效);0=DIS,1=EN
		//bit6: P1OS：PWM 单脉冲输出 (当 AUX1EN=1 时有效);注：PWM 单脉冲输出模式仅在辅助设置打开且半桥模式下有效。
			//0 = 关闭 (PWM 连续输出),
			//1 = 使能 (输出一次脉冲后自动停止，P1x 为 GPIO)
		//bit5: P1FOE：P1F 输出 (PC0 端口); 0=DIS且 P1F 为 GPIO, 1=EN；
		//bit4: P1EOE：P1E 输出 (PC1 端口); 0=DIS且 P1E 为 GPIO, 1=EN；
		//bit3: P1DOE：P1D 输出 (PC2 端口); 0=DIS且 P1D 为 GPIO, 1=EN；
		//bit2: P1COE：P1C 输出 (PC3 端口); 0=DIS且 P1C 为 GPIO, 1=EN；
		//bit1: P1BOE：P1B 输出 (PC4 端口); 0=DIS且 P1B 为 GPIO, 1=EN；
		//bit0: P1AOE：P1A 输出 (PC5 端口); 0=DIS且 P1A 为 GPIO, 1=EN；

//T1CON = 0x00;	//0000 0000
					//bit7: T1GINV：门控翻转位 (T1 计数时的门控有效电平，门控源参考 CMCON1 寄存器); 0-Low,1=High
					//bit6: T1GE：门控使能（T1REN=1 时有效）;0-Close,1=Open
					//b5~4: T1CK<1:0>：T1 分频选择; 00=1T, 01=2T, 10=4T, 11=8T;
					//bit3: T1CKS1: T1 外部时钟源选择（T1CKS0=1 时有效）;0=外部时钟 PA7,1=内部低速 RC 或者外部低速晶振
					//bit2: T1SYNC：T1 外部时钟源与内部系统时钟同步控制（T1CKS0=1 时有效）;0 = 同步,1 = 异步
					//bit1: T1CKS0：T1 内外时钟源选择;0 = 内部 Fcpu,1 = 外部时钟源
					//bit0: T1REN：定时器 T1 使能; 0=DIS,1=EN

		T2C1 = 0x17;	//00-1 -111;Fosc 1T
		T2C1 = 0x07;	//00-0 -111;Fcpu/2 1T
		T2C1 = 0x05;	//00-0 -101;Fcpu/2 4T
		//bit7: PRSEN：PWM 自动关闭后，自动重启控制
			//0 = 关闭 (退出关闭事件时，ECCPASE 必须由软件清零)
			//1 = 使能 (退出关闭事件时，ECCPASE 自动清零)
		//bit6: T2OUT0：T2PWM 输出全低电平使能;0 = T2PWM 输出不受影响,1 = T2PWM 输出全低电平
		//bit4: T2CKS0：T2 定时器时钟源选择; 0 = Fcpu/2, 1 = Fosc;-bitok
		//b2~0: T2CK<2:0>：T2 定时器时钟分频选择
			//111 = 1 分频;		//110 = 2 分频;
			//101 = 4 分频;		//100 = 8 分频;
			//011 = 16 分频;	//010 = 32 分频;
			//001 = 64 分频;	//000 = 128 分频

		T2C0 = 0x82;	//1--- --1-
		//bit7: T2REN：T2 定时器总使能; 0=DIS,1=EN
		//bit1: T2PWMEN：T2 模块 PWM 输出总输出使能; 0=DIS,1=EN

		CCPCON = 0x4C;	//01-- 1100；全桥正向
		//CCPCON = 0x4F;	//01-- 1100；全桥正向
		//CCPCON = 0xCC;	//01-- 1100；全桥反向
						//b7~6:	P1M<1:0>：PWM 输出配置 (仅当 CCP1M<3:2> = 11 时有效)
							//00 = 单输出；P1A（PC5） 调制；P1B、P1C、P1D 为 GPIO
							//01 = 全桥正向输出；P1D 调制；P1A 有效；P1B 和 P1C 无效
							//10 = 半桥输出；P1A 和 P1B 调制，带有死区控制；P1C 和 P1D 为 GPIO
							//11 = 全桥反向输出；P1B 调制；P1C 有效；P1A 和 P1D 无效
						//b3~0: CCP1M<3:0>：ECCP 模式选择位
							//0000 = 捕捉/比较/PWM 关闭（复位 ECCP 模块）
							//0001 = 未使用（保留）
							//0010 = 比较模式，匹配时 CCP1 脚翻转输出
							//0011 = 未使用（保留）
							//0100 = 捕捉模式，每个下降沿（捕捉脚 CCP1）
							//0101 = 捕捉模式，每个上升沿（捕捉脚 CCP1）
							//0110 = 捕捉模式，每 4 个上升沿（捕捉脚 CCP1）
							//0111 = 捕捉模式，每 16 个上升沿（捕捉脚 CCP1）

							//1000 = 比较模式，匹配时 CCP1 脚输出高
							//1001 = 比较模式，匹配时 CCP1 脚输出低
							//1010 = 比较模式，匹配时产生软件中断（CCP1 引脚不受影响）
							//1011 = 比较模式，触发特殊事件（CCP1 复位 T1，且如果 ADC 模块被使能，启动一次AD转换）
							//1100 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 高电平有效
							//1101 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 低电平有效
							//1110 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 高电平有效
							//1111 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 低电平有效

		T1IF = 0;
		T1IE = 0;
		T2IF = 0;
		T2IE = 1;
		PEIE = 1;
		GIE = 1;
	}
#elif(ECCP_MODE == T1_Capture) 	//ok
	{
		TRISC |= 0b00100000;		//--01 0000 :0-OUT;1-IN

		CCPRH = 0x00;	//捕捉、比较寄存器高低位
		CCPRL = 0x00;

		T1TH = 0x00;	//T1定时器计数器
		T1TL = 0x00;

		//T2DTH = 20/256;	//T2PWM死区控制寄存器(注：死区仅在半桥模式下有效)
		//T2DTL = 20%256;	//T2PWM 死区时间=[T2DTH:T2DTL]*T2PWM 工作时钟源

		//T2DH = 100/256;	//T2PWM占空比寄存器
		//T2DL = 100%256;	//T2PWM 占空比=[T2DH:T2DL]*T2PWM 工作时钟源

		//T2TH = 0x00;	//T2计数/定时器时间寄存器
		//T2TL = 0x00;

		//T2PH = 400/256;	//T2PWM周期寄存器
		//T2PL = 400%256;	//T2PWM 周期=[T2PH:T2PL]*T2PWM 工作时钟源。

		CMCON1 = 0x00;	//---- 1110	;滤波使能;
		//;Bit3：C2FIEN：比较器 C2 数字滤波使能; 0-with,1-no
		//;Bit2: C1FIEN：比较器 C1 数字滤波使能; 0-with,1-no
		//;Bit1: T1GSS：T1 门控源 ； 0-比较器C2的输出，1-T1G 引脚 (PA6 配置为输入模式)
		//;Bit0: C2SYNC：比较器 C2 输出同步控制； 0-异步输出，1-与 T1 时钟的下降沿同步

		ECCPAS = 0x00;	//0000 0000
		//bit7: ECCPASE:PWM自动关闭状态；//0 = PWM输出正常,1 = 发生了自动关闭事件，PWM输出关闭 
		//b6~4: ECCPAC<2:0>：ECCP 自动关闭源
			//000 = 禁止自动关闭（ECCPASE 位无法写 1）
			//001 = 比较器 1 输出(C1OUT)变高
			//010 = 比较器 2 输出(C2OUT)变高
			//011 = 比较器 1/2 输出(CxOUT)变高
			//100 = INT 引脚（PC1）电压为低
			//101 = INT 引脚电压为低，或比较器 1 输出(C1OUT)变高
			//110 = INT 引脚电压为低，或比较器 2 输出(C2OUT)变高
			//111 = INT 引脚电压为低，或比较器 1/2 输出(CxOUT)变高
		//b3~2: PSSAC<1:0>：PWM 自动关闭后，P1A 和 P1C 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态
		//b1~0: PSSBD<1:0>：PWM 自动关闭后，P1B 和 P1D 引脚状态
			//00 = 输出 0;	//01 = 输出 1;	//1x = 三态

		PWMP1CON = 0x3F;	//0011 1111
		//bit7: AUX1EN：PWM 辅助功能 (半桥模式下有效);0=DIS,1=EN
		//bit6: P1OS：PWM 单脉冲输出 (当 AUX1EN=1 时有效);注：PWM 单脉冲输出模式仅在辅助设置打开且半桥模式下有效。
			//0 = 关闭 (PWM 连续输出),
			//1 = 使能 (输出一次脉冲后自动停止，P1x 为 GPIO)
		//bit5: P1FOE：P1F 输出 (PC0 端口); 0=DIS且 P1F 为 GPIO, 1=EN；
		//bit4: P1EOE：P1E 输出 (PC1 端口); 0=DIS且 P1E 为 GPIO, 1=EN；
		//bit3: P1DOE：P1D 输出 (PC2 端口); 0=DIS且 P1D 为 GPIO, 1=EN；
		//bit2: P1COE：P1C 输出 (PC3 端口); 0=DIS且 P1C 为 GPIO, 1=EN；
		//bit1: P1BOE：P1B 输出 (PC4 端口); 0=DIS且 P1B 为 GPIO, 1=EN；
		//bit0: P1AOE：P1A 输出 (PC5 端口); 0=DIS且 P1A 为 GPIO, 1=EN；

		T1CON = 0x01;	//0000 0001
		//bit7: T1GINV：门控翻转位 (T1 计数时的门控有效电平，门控源参考 CMCON1 寄存器); 0-Low,1=High
		//bit6: T1GE：门控使能（T1REN=1 时有效）;			0-Close,1=Open
		//b5~4: T1CK<1:0>：T1 分频选择;						00=1T, 01=2T, 10=4T, 11=8T;
		//bit3: T1CKS1: T1 外部时钟源选择（T1CKS0=1 时有效）;0=外部时钟 PA7,1=内部低速 RC 或者外部低速晶振
		//bit2: T1SYNC：T1 外部时钟源与内部系统时钟同步控制（T1CKS0=1 时有效）;	0 = 同步,1 = 异步
		//bit1: T1CKS0：T1 内外时钟源选择;					0 = 内部 Fcpu,1 = 外部时钟源
		//bit0: T1REN：定时器 T1 使能; 						0=DIS,1=EN

		T2C1 = 0x07;	//00-0 -111;Fosc 1T
		//bit7: PRSEN：PWM 自动关闭后，自动重启控制
			//0 = 关闭 (退出关闭事件时，ECCPASE 必须由软件清零)
			//1 = 使能 (退出关闭事件时，ECCPASE 自动清零)
		//bit6: T2OUT0：T2PWM 输出全低电平使能;0 = T2PWM 输出不受影响,1 = T2PWM 输出全低电平
		//bit4: T2CKS0：T2 定时器时钟源选择; 0 = Fcpu/2, 1 = Fosc;-bitok
		//b2~0: T2CK<2:0>：T2 定时器时钟分频选择
			//111 = 1 分频;		//110 = 2 分频;
			//101 = 4 分频;		//100 = 8 分频;
			//011 = 16 分频;	//010 = 32 分频;
			//001 = 64 分频;	//000 = 128 分频

		T2C0 = 0x00;	//0--- --0-
		//bit7: T2REN：T2 定时器总使能; 0=DIS,1=EN
		//bit1: T2PWMEN：T2 模块 PWM 输出总输出使能; 0=DIS,1=EN

		CCPCON = 0x07;	//00-- 0111：捕捉模式，每 16 个上升沿（捕捉脚 CCP1）
		CCPCON = 0x06;	//00-- 0110：捕捉模式，每 4 个上升沿（捕捉脚 CCP1）
		CCPCON = 0x05;	//00-- 0101：捕捉模式，每个上升沿（捕捉脚 CCP1）
		CCPCON = 0x04;	//00-- 0100：捕捉模式，每个下降沿（捕捉脚 CCP1）
		//b7~6:	P1M<1:0>：PWM 输出配置 (仅当 CCP1M<3:2> = 11 时有效)
			//00 = 单输出；P1A（PC5） 调制；P1B、P1C、P1D 为 GPIO
			//01 = 全桥正向输出；P1D 调制；P1A 有效；P1B 和 P1C 无效
			//10 = 半桥输出；P1A 和 P1B 调制，带有死区控制；P1C 和 P1D 为 GPIO
			//11 = 全桥反向输出；P1B 调制；P1C 有效；P1A 和 P1D 无效
		//b3~0: CCP1M<3:0>：ECCP 模式选择位
			//0000 = 捕捉/比较/PWM 关闭（复位 ECCP 模块）
			//0001 = 未使用（保留）
			//0010 = 比较模式，匹配时 CCP1 脚翻转输出
			//0011 = 未使用（保留）
			//0100 = 捕捉模式，每个下降沿（捕捉脚 CCP1）
			//0101 = 捕捉模式，每个上升沿（捕捉脚 CCP1）
			//0110 = 捕捉模式，每 4 个上升沿（捕捉脚 CCP1）
			//0111 = 捕捉模式，每 16 个上升沿（捕捉脚 CCP1）

			//1000 = 比较模式，匹配时 CCP1 脚输出高
			//1001 = 比较模式，匹配时 CCP1 脚输出低
			//1010 = 比较模式，匹配时产生软件中断（CCP1 引脚不受影响）
			//1011 = 比较模式，触发特殊事件（CCP1 复位 T1，且如果 ADC 模块被使能，启动一次AD转换）
			//1100 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 高电平有效
			//1101 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 低电平有效
			//1110 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 高电平有效
			//1111 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 低电平有效

		T1IF = 0;		T1IE = 0;
		T2IF = 0;		T2IE = 0;
		CCP1IF = 0;		CCP1IE = 1;

		PEIE = 1;
		GIE = 1;
	}
#elif(ECCP_MODE == T1_Comp)	//ok 
	{
		CCPRH = 0xd0;	//捕捉、比较寄存器高低位	
		CCPRL = 0x00;

		T1TH = 0x00;	//T1定时器计数器
		T1TL = 0x00;

		CMCON1 = 0x00;	//---- 1110	;滤波使能;
		//;Bit3：C2FIEN：比较器 C2 数字滤波使能; 0-with,1-no
		//;Bit2: C1FIEN：比较器 C1 数字滤波使能; 0-with,1-no
		//;Bit1: T1GSS：T1 门控源 ； 0-比较器C2的输出，1-T1G 引脚 (PA6 配置为输入模式)
		//;Bit0: C2SYNC：比较器 C2 输出同步控制； 0-异步输出，1-与 T1 时钟的下降沿同步

		T1CON = 0x01;	//0000 0001
		//bit7: T1GINV：门控翻转位 (T1 计数时的门控有效电平，门控源参考 CMCON1 寄存器); 0-Low,1=High
		//bit6: T1GE：门控使能（T1REN=1 时有效）;			0-Close,1=Open
		//b5~4: T1CK<1:0>：T1 分频选择;						00=1T, 01=2T, 10=4T, 11=8T;
		//bit3: T1CKS1: T1 外部时钟源选择（T1CKS0=1 时有效）;0=外部时钟 PA7,1=内部低速 RC 或者外部低速晶振
		//bit2: T1SYNC：T1 外部时钟源与内部系统时钟同步控制（T1CKS0=1 时有效）;	0 = 同步,1 = 异步
		//bit1: T1CKS0：T1 内外时钟源选择;					0 = 内部 Fcpu,1 = 外部时钟源
		//bit0: T1REN：定时器 T1 使能; 						0=DIS,1=EN

		CCPCON = 0x02;	//00-- 0010：比较模式，匹配时 CCP1 脚翻转输出
		//CCPCON = 0x08;	//00-- 1000：比较模式，匹配时 CCP1 脚输出高
		//CCPCON = 0x09;	//00-- 1001：比较模式，匹配时 CCP1 脚输出低
		//CCPCON = 0x0A;	//00-- 1010：匹配时产生软件中断（CCP1 引脚不受影响）

						//b7~6:	P1M<1:0>：PWM 输出配置 (仅当 CCP1M<3:2> = 11 时有效)
							//00 = 单输出；P1A（PC5） 调制；P1B、P1C、P1D 为 GPIO
							//01 = 全桥正向输出；P1D 调制；P1A 有效；P1B 和 P1C 无效
							//10 = 半桥输出；P1A 和 P1B 调制，带有死区控制；P1C 和 P1D 为 GPIO
							//11 = 全桥反向输出；P1B 调制；P1C 有效；P1A 和 P1D 无效
						//b3~0: CCP1M<3:0>：ECCP 模式选择位
							//0000 = 捕捉/比较/PWM 关闭（复位 ECCP 模块）
							//0001 = 未使用（保留）
							//0010 = 比较模式，匹配时 CCP1 脚翻转输出-ok
							//0011 = 未使用（保留）
							//0100 = 捕捉模式，每个下降沿（捕捉脚 CCP1）
							//0101 = 捕捉模式，每个上升沿（捕捉脚 CCP1）
							//0110 = 捕捉模式，每 4 个上升沿（捕捉脚 CCP1）
							//0111 = 捕捉模式，每 16 个上升沿（捕捉脚 CCP1）

							//1000 = 比较模式，匹配时 CCP1 脚输出高-ok
							//1001 = 比较模式，匹配时 CCP1 脚输出低-ok
							//1010 = 比较模式，匹配时产生软件中断（CCP1 引脚不受影响）-ok
							//1011 = 比较模式，触发特殊事件（CCP1 复位 T1，且如果 ADC 模块被使能，启动一次AD转换）
							//1100 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 高电平有效
							//1101 = PWM 模式；P1A 和 P1C 高电平有效；P1B 和 P1D 低电平有效
							//1110 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 高电平有效
							//1111 = PWM 模式；P1A 和 P1C 低电平有效；P1B 和 P1D 低电平有效

		T1IF = 0;		T1IE = 1;
		T2IF = 0;		T2IE = 0;
		CCP1IF = 0;		CCP1IE = 1;

		PEIE = 1;
		GIE = 1;
	}

#endif
}




//****main function****//
void main(void) {
	System_Init();
	GPIO_Init();
	CLR_RAM_EveryBank();

	//Test_SFR();
	//T3_Init();
	//INT_Init();

	//COMP_Init();
	//ECCP_Init();
	ECCP_Init();
	while (1) {
		CLRWDT();

		PORTA = PORTA ^ 0x04;
		//PORTC = PORTC^0xff;	
		//DelayUs(2);
	}
}



//****GPIO configuration****//
void GPIO_Init(void) {
	//;PORTA
	PORTA = 0b00000000;		//--00 0000	
	TRISA = 0b00000000;		//0000 0000 :0-OUT;1-IN 	

	PAODCON = 0b00000000;	//--11 -111 :1-EN;0-DIS (Open-drain)	
	PAHCON = 0b11111111;	//--11 1111 :1-DIS;0-EN (UpPull)	
	PADCON = 0b11111111;	//--11 1111 :1-DIS;0-EN (DownPull)	
	WUACON = 0b00000000;	//--00 0000	:1-EN;0=DIS (WakeUp)

	PAIC0 = 0b00000000;		//1111 1111 :1-EN;0-DIS (Drive)

	//;PORTC
	PORTC = 0b00000000;
	TRISC = 0b00000000;		//--00 0000 :0-OUT;1-IN

	PCDCON = 0b11111111;	//---- 1111 :1-DIS;0-EN (DownPull)
	PCHCON = 0b11111111;	//---- 1111 :1-DIS;0-EN (UpPull)

	PCIC0 = 0b00000000;		//1111 1111 :1-EN;0-DIS (Drive)
}


//****System _Init function****// 
void System_Init(void) {
	OPTION = 0b000000001;	 //-000 0000	(Initialization state:0011 1111)
	//;Bit6：INTEDG：外部中断触发方式选择位（PC1）	;0-falling edge, 1-rising edge
	//;Bit5：T0CS：TMR0时钟源选择位					;0-fcpu, 1-ExitClock
	//;Bit4：T0SE：TMR0时钟源边沿选择位				;0-falling edge, 1-rising edge
	//;Bit3：PSA：预分频分配位						;0-TMR0, 1-WDT
	//;B2~0：PS2:PS0：预分频比率选择位
		//000		2T-TMR0			1T-WDT
		//001		4T-TMR0			2T-WDT
		//010		8T-TMR0			4T-WDT
		//011		16T-TMR0		8T-WDT
		//100		32T-TMR0		16T-WDT
		//101		64T-TMR0		32T-WDT
		//110		128T-TMR0		64T-WDT
		//111		256T-TMR0		128T-WDT	

	PCON = 0b10100000;		//1-1- ----	(Initialization state:1011 1111)
	//;Bit7：WDTE: WDT（看门狗定时器）使能位	;0-DIS, 1-EN
	//;Bit5：LVREN: 低电压复位使能位			;0-DIS, 1-EN

	INTCON = 0B00000000;	//0000 0000 (Initialization state:0000 0000)
	//;Bit7：GIE：全局中断使能位	;0-DIS, 1-EN
	//;Bit6：PEIE：外设总中断使能	;0-DIS, 1-EN
	//;Bit5：T0IE：Timer0 溢出中断使能位	;0-DIS, 1-EN
	//;Bit4：INTIE：外部中断使能位（PC1）	;0-DIS, 1-EN
	//;Bit3：PAIE: PORTA 输入状态变化中断使能位
	//;Bit2: T0IF: Timer0 溢出中断标志位，软件复位
	//;Bit1: INTIF:	外部中断标志位（PC1），软件复位
	//;Bit0: PAIF: PORTA 输入状态变化中断标志位，软件复位

	PIE1 = 0B00000000;		//-0-- -000
	//;Bit6：ADCIE：ADC 中断使能位
	//;Bit2: CCP1IE: 捕捉、比较中断使能位
	//;Bit1: T2IE: 定时器 T2 中断使能位
	//;Bit0: T1IE: 定时器 T1 中断使能位

	PIR1 = 0B00000000;	//-0-- -000
	//;Bit6：ADCIF：ADC 中断使能标志位，软件复位
	//;Bit2: CCP1IF: 捕捉、比较中断标志位，软件复位
	//;Bit1: T2IF: 定时器 T2 中断标志位，软件复位
	//;Bit0: T1IF: 定时器 T1 中断标志位，软件复位

	PIE2 = 0B00000000;	//-00- 000-
	//;Bit6：C2IE: 比较器 C2 中断使能位
	//;Bit5：C1IE: 比较器 C1 中断使能位

	//;Bit3：T5IE: 定时器 T5 中断使能位
	//;Bit2: T4IE: 定时器 T4 中断使能位
	//;Bit1: T3IE: 定时器 T3 中断使能位

	PIR2 = 0B00000000;	//-00- 000-
	//;Bit6：C2IE: 比较器 C2 中断标志位，软件复位
	//;Bit5：C1IE: 比较器 C1 中断标志位，软件复位

	//;Bit3：T5IE: 定时器 T5 中断标志位，软件复位
	//;Bit2: T4IE: 定时器 T4 中断标志位，软件复位
	//;Bit1: T3IE: 定时器 T3 中断标志位，软件复位

	OSCM = 0B00000000;	//0000 0000
	//;Bit7：MONIF：外振时钟停振监测标志位; 0= 未监测到外振时钟停振，1=测到外振时钟停振
	//;Bit6：WAKEMODE：低速模式下睡眠唤醒后系统时钟选择位; 0=内外低速，1=高速RC
	//;Bit5：GREENEN：绿色模式使能位；0=普通模式，1=绿色模式
	//;Bit4：RTCEN：RTC 模式软件使能位；0=EN，1=DIS
	//;Bit3：SLCON：内外低速时钟控制位；0=Open内外低速，1=关闭内外低速
	//;Bit2: XTSEL：内外低速选择位；0=内部低速，1=外部低速
	//;Bit1: STPHX：内部高速振荡器控制位；0=run，1=Stop
	//;Bit0: CLKMD: Timer0 溢出中断使能位；0=普通模式，1=低速模式

//RCREG = 0;
}


//****************************************************  
//对用户寄存器进行清0操作 
//分BANK区清楚 
//嵌入汇编操作 
//IRP:FSR7:	间接寻址寻址空间（充分理解 间接寻址操作原理）
//	0 0		BANK0
//	0 1		BANK1
//	1 0		BANK2
//	1 1		BANK3
//****************************************************    
void CLR_RAM_EveryBank(void) {
	#asm
		MOVLW	0x5F  //个数
		MOVWF	0x20  //个数存放地址 
		MOVLW 	0x7F  //REG从后往前 清理 
		MOVWF	_FSR, F
		CLR_RAM_LOOP :
	CALL	CLR_RAM_Demo

		DECF	_FSR, F
		DECFSZ	0X20, F
		GOTO	CLR_RAM_LOOP

		CALL	CLR_RAM_Demo
		RETURN

		CLR_RAM_Demo :

	//	0 1		BANK1
		//BCF	_STATUS,7	//IRP
	BSF		_FSR, 7		//01:BANK1
		CLRF	_INDF

		//	0 0		BANK0
			//BCF		_STATUS,7
		BCF		_FSR, 7	//00:BANK0
		CLRF	_INDF

		RETURN
		#endasm
}


//****delay function****// 
//;Fcpu=8MHz （误差4us）
void DelayUs(unsigned char delayUs) {
	while (delayUs--);
}