//*********************************************************************** 
//Copyright (c) 2022   HuaXin Micro-electronics Co.,Ltd 
//
//HS16F2612 
//ECCP-(T1+T2)
//configuration introduction
//
//designer:LvBuWei
//updata：20230808
//
//***********************************************************************  
//RAM: 176*8bytes
//ROM: 2K
//STACK: 8-level
//*********************************************************************** 
#include 	"main.h"		

  
//--------------------------------------------------------------------------------------------------
/*
//　　　　                           ╔══════╗　 ╔══════╗
//            	  	            VDD  ╬1 ●   ╚═══╝    16╬   GND
//      OSCI /       /        / PA7  ╬2              15╬   PA0 /        / AIN0 / C1IN+ / ISPCK
//      OSCO / EVREF / T1G	  / PA6  ╬3     SOP16    14╬   PA1 /        / AIN1 / C1IN- / ISPDA
//      RSTB /       /        / PA5  ╬4              13╬   PA2 / T0CKI  / AIN2 / C1OUT / 
//           /  P1C  / T4PWM  / PC3  ╬5              12╬   PA3 /        / AIN3 /       / 
// AIN6/     /  P1D  / T5PWM  / PC2  ╬6              11╬   PC0 /        / AIN4 / C2IN+ /      / P1F 
//           /       /        / PA4  ╬7              10╬   PC1 /        / AIN5 / C2IN- / INT  / P1E  
//           /  P1A  /        / PC5  ╬8              9 ╬   PC4 / T3PWM  /      / C2OUT /      / P1B
//                                   ╚═════════════════╝
*/
//--------------------------------------------------------------------------------------------------
/*
//　　　　                           ╔══════╗　 ╔══════╗
//            	  	            VDD  ╬1 ●   ╚═══╝    14╬   GND
//      OSCI /       /        / PA7  ╬2              13╬   PA0 /        / AIN0 / C1IN+ / ISPCK
//      OSCO / EVREF / T1G	  / PA6  ╬3     SOP14    12╬   PA1 /        / AIN1 / C1IN- / ISPDA
//      RSTB /       /        / PA5  ╬4              11╬   PA2 / T0CKI  / AIN2 / C1OUT / 
//           /  P1C  / T4PWM  / PC3  ╬5              10╬   PA3 /        / AIN3 /       / 
// AIN6/     /  P1D  / T5PWM  / PC2  ╬6              9 ╬   PC0 /        / AIN4 / C2IN+ /      / P1F 
//      C2OUT/  P1B  / T3PWM  / PC4  ╬7              8 ╬   PC1 /        / AIN5 / C2IN- / INT  / P1E  
//                                   ╚═════════════════╝
*/
//*********************************************************************** 

#define 	TEST_SFR	0
//==============================================
//1.>中断函数
//==============================================
volatile unsigned char data0;
volatile unsigned char data1;
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;
	}
} 





//****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_Capture
//****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 = 0x31;	//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
}


//================================================================
#define		COMP_MODE0	0x00	//CMCH<2:0>=000
#define		COMP_MODE1	0x01	//CMCH<2:0>=001
#define		COMP_MODE2	0x02	//CMCH<2:0>=010
#define		COMP_MODE3	0x03	//CMCH<2:0>=011
#define		COMP_MODE4	0x04	//CMCH<2:0>=100
#define		COMP_MODE5	0x05	//CMCH<2:0>=101
#define		COMP_MODE6	0x06	//CMCH<2:0>=110
#define		COMP_MODE	COMP_MODE2
//****COMP function****// 
//模拟输入端口：相应的 I/O 需设置 TRISx = 1 和 ANSELx =1 来配置成模拟输入
void COMP_Init(void)
{
	VRCON = 0x00;	//0-0- 0000
	CMCON1 = 0x00;	//---- 0000
	CMCON0 = 0x00;	//0000 0000
	
	C1IF = 0;	C1IE = 0;
	C2IF = 0;	C2IE = 0;
	#if(COMP_MODE == COMP_MODE1)	//2 个比较器，公共参考端，3 路输入[CMCH<2:0>=001]
	{
//	C1IN-(PA1)\	------	 |-╲	
//	C1IN+(PA0)			 | △ ＞-C1OUT
//					|--	 |+╱	
//	C2IN-(PC1)	---|---	 |-╲
//					|	 | △ ＞-C2OUT
//	C2IN+(PC0)	----|--	 |+╱
		
		TRISA |= TRISA1;		ANSEL |= ANSEL_PA1;
		
		TRISC |= (TRISC0);		ANSEL |= (ANSEL_PC0);
		TRISC |= (TRISC1);		ANSEL |= (ANSEL_PC1);
		
		VRCON = 0x00;	//0-0- 0000
				//;Bit7：VREN：内部参考电压 CVREF	;0-DIS, 1-EN
				//;Bit5：VRR：CVREF 范围	;0-HIGH， 1-LOW
				//;B3~0: VR<3:0>：CVREF 值
				
		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 时钟的下降沿同步
				
		CMCON0 = 0x01;	//0000 0001 ;CIS-PA1; C2 输出极性-0=normal; C1 输出极性-0=normal;-20230810
		CMCON0 = 0x09;	//0000 1001 ;CIS-PA0; C2 输出极性-0=normal; C1 输出极性-0=normal;-20230810
		
		CMCON0 = 0x39;	//0011 1001 ;CIS-PA0; C2 输出极性-1=inv; C1 输出极性-1=inv;;-20230810
		CMCON0 = 0x31;	//0011 0001 ;CIS-PA1; C2 输出极性-1=inv; C1 输出极性-1=inv;;-20230810
				//;Bit7：C2OUT：比较器 C2 输出结果
				//;Bit6：C1OUT：比较器 C1 输出结果
				//;Bit5：C2INV：比较器 C2 输出极性;	0=normal,1=inv
				//;Bit4：C1INV：比较器 C1 输出极性;	0=normal,1=inv
				//;Bit3：CIS：比较器输入切换 
				//;B2~0: CMCH<2:0>：比较器模式选择
					//000=关闭	//111=关闭
					//001=2 个比较器，公共参考端，3 路输入		//010=2 个比较器，公共内部参考电压 CVREF，4 路输入
					//011=2 个比较器，公共参考端，2 路输入		//100=2 个独立比较器
					//101=1 个独立比较器						//110=2 个带输出比较器，公共参考端，2 路输入					
	}
	#elif(COMP_MODE == COMP_MODE2)	//[CMCH<2:0>=010] CVREF
	{
//	C1IN-(PA1)	------	 |-╲	
//	C1IN+(PA0)			 | △ ＞-C1OUT
//					|--	 |+╱	
//	C2IN-(PC1)	---|---	 |-╲
//	C2IN+(PC0)		|	 | △ ＞-C2OUT
//				----|--	 |+╱
		TRISA |= TRISA0;		ANSEL |= ANSEL_PA0;
		
		TRISC |= (TRISC0);		ANSEL |= (ANSEL_PC0);
		//TRISC |= (TRISC1);
		//ANSEL |= (ANSEL_PC1);
		
		VRCON = 0x80;	//1-0- 0000;	HIGH-: CVREF = VDD/4 + (VR<3:0>/32)*VDD
							//VR<3:0>	
							//0000;	CVREF=VDD/4+VDD*0/32=VDD*8/32;	=1.25V{VDD=5V}
							//0001;	CVREF=VDD/4+VDD*1/32=VDD*9/32;	=1.4V{VDD=5V}
							//0010;	CVREF=VDD/4+VDD*2/32=VDD*10/32;	=1.56V{VDD=5V}
							//0011;	CVREF=VDD/4+VDD*3/32=VDD*11/32;	=1.71V{VDD=5V}
							
							//0100;	CVREF=VDD/4+VDD*4/32=VDD*12/32;	=1.87V{VDD=5V}
							//0101;	CVREF=VDD/4+VDD*5/32=VDD*13/32;	=2.03V{VDD=5V}
							//0110;	CVREF=VDD/4+VDD*6/32=VDD*14/32;	=2.18V{VDD=5V}
							//0111;	CVREF=VDD/4+VDD*7/32=VDD*15/32;	=2.34V{VDD=5V}
							
							//1000;	CVREF=VDD/4+VDD*8/32=VDD*16/32;	=2.5V{VDD=5V}
							//1001;	CVREF=VDD/4+VDD*9/32=VDD*17/32;	=2.65V{VDD=5V}
							//1010;	CVREF=VDD/4+VDD*10/32=VDD*18/32;=2.81V{VDD=5V}
							//1011;	CVREF=VDD/4+VDD*11/32=VDD*19/32;=2.96V{VDD=5V}
							
							//1100;	CVREF=VDD/4+VDD*12/32=VDD*20/32;	=3.125V{VDD=5V}
							//1101;	CVREF=VDD/4+VDD*13/32=VDD*21/32;	=3.28V{VDD=5V}
							//1110;	CVREF=VDD/4+VDD*14/32=VDD*22/32;	=3.44V{VDD=5V}
							//1111;	CVREF=VDD/4+VDD*15/32=VDD*23/32;	=3.6V{VDD=5V}
							
		//VRCON = 0xA0;	//1-1- 0000;	LOW-: CVREF = (VR<3:0>/24)*VDD
							//VR<3:0>
							//0000;	CVREF=VDD*0/24;	=0V{VDD=5V}
							//0001;	CVREF=VDD*1/24;	=0.21V{VDD=5V}
							//0010;	CVREF=VDD*2/24;	=0.416V{VDD=5V}
							//0011;	CVREF=VDD*3/24;	=0.625V{VDD=5V}
							
							//0100;	CVREF=VDD*4/24;	=0.83V{VDD=5V}
							//0101;	CVREF=VDD*5/24;	=1.04V{VDD=5V}
							//0110;	CVREF=VDD*6/24;	=1.25V{VDD=5V}
							//0111;	CVREF=VDD*7/24;	=1.46V{VDD=5V}
							
							//1000;	CVREF=VDD*8/24;	=1.67V{VDD=5V}
							//1001;	CVREF=VDD*9/24;	=1.875V{VDD=5V}
							//1010;	CVREF=VDD*10/24;	=2.08V{VDD=5V}
							//1011;	CVREF=VDD*11/24;	=2.29V{VDD=5V}
							
							//1100;	CVREF=VDD*12/24;	=2.5V{VDD=5V}
							//1101;	CVREF=VDD*13/24;	=2.7V{VDD=5V}
							//1110;	CVREF=VDD*14/24;	=2.91V{VDD=5V}
							//1111;	CVREF=VDD*15/24;	=3.125V{VDD=5V}
							
				//;Bit7：VREN：内部参考电压 CVREF	;0-DIS, 1-EN
				//;Bit5：VRR：CVREF 范围	;0-HIGH， 1-LOW
				//;B3~0: VR<3:0>：CVREF 值
				
		CMCON1 = 0x0E;	//---- 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 时钟的下降沿同步
				
		CMCON0 = 0x3A;	//0011 1010
				//;Bit7：C2OUT：比较器 C2 输出结果
				//;Bit6：C1OUT：比较器 C1 输出结果
				//;Bit5：C2INV：比较器 C2 输出极性;	0=normal,1=inv
				//;Bit4：C1INV：比较器 C1 输出极性;	0=normal,1=inv
				//;Bit3：CIS：比较器输入切换
				//;B2~0: CMCH<2:0>：比较器模式选择
					//000=关闭
					//001=2 个比较器，公共参考端，3 路输入
					//010=2 个比较器，公共内部参考电压 CVREF，4 路输入
					//011=2 个比较器，公共参考端，2 路输入
					//100=2 个独立比较器
					//101=1 个独立比较器
					//110=2 个带输出比较器，公共参考端，2 路输入
					//111=关闭
		FC2IF = 0;
		FC2IE = 1;
		PEIE = 1;	//with
		GIE = 1;
	}
	#elif(COMP_MODE == COMP_MODE3)	//[CMCH<2:0>=011]
	{
//	C1IN-(PA1)	------	|-╲	
//						| △ ＞-C1OUT
//					|--	|+╱	
//	C2IN-(PC1)	---|---	|-╲
//					|	| △ ＞-C2OUT
//	C2IN+(PC0)	----|--	|+╱
		TRISA |= TRISA1;
		ANSEL |= ANSEL_PA1;
		
		TRISC |= (TRISC0);
		ANSEL |= (ANSEL_PC0);
		TRISC |= (TRISC1);
		ANSEL |= (ANSEL_PC1);
		
		VRCON = 0x00;	//0-0- 0000
				//;Bit7：VREN：内部参考电压 CVREF	;0-DIS, 1-EN
				//;Bit5：VRR：CVREF 范围	;0-HIGH， 1-LOW
				//;B3~0: VR<3:0>：CVREF 值
				
		CMCON1 = 0x0E;	//---- 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 时钟的下降沿同步
				
		CMCON0 = 0x33;	//0011 0011
				//;Bit7：C2OUT：比较器 C2 输出结果
				//;Bit6：C1OUT：比较器 C1 输出结果
				//;Bit5：C2INV：比较器 C2 输出极性;	0=normal,1=inv
				//;Bit4：C1INV：比较器 C1 输出极性;	0=normal,1=inv
				//;Bit3：CIS：比较器输入切换
				//;B2~0: CMCH<2:0>：比较器模式选择
					//000=关闭
					//001=2 个比较器，公共参考端，3 路输入
					//010=2 个比较器，公共内部参考电压 CVREF，4 路输入
					//011=2 个比较器，公共参考端，2 路输入
					//100=2 个独立比较器
					//101=1 个独立比较器
					//110=2 个带输出比较器，公共参考端，2 路输入
					//111=关闭
	}
	#elif(COMP_MODE == COMP_MODE4)	//[CMCH<2:0>=100]
	{
//	C1IN-(PA1)	------	|-╲	
//						| △ ＞-C1OUT
//	C1IN+(PA0)	------	|+╱	
//	C2IN-(PC1)	------	|-╲
//						| △ ＞-C2OUT
//	C2IN+(PC0)	------	|+╱
		TRISA |= TRISA0;
		ANSEL |= ANSEL_PA0;
		TRISA |= TRISA1;
		ANSEL |= ANSEL_PA1;
		
		TRISC |= (TRISC0);
		ANSEL |= (ANSEL_PC0);
		TRISC |= (TRISC1);
		ANSEL |= (ANSEL_PC1);
		
		VRCON = 0x00;	//0-0- 0000
				//;Bit7：VREN：内部参考电压 CVREF	;0-DIS, 1-EN
				//;Bit5：VRR：CVREF 范围	;0-HIGH， 1-LOW
				//;B3~0: VR<3:0>：CVREF 值
				
		CMCON1 = 0x0E;	//---- 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 时钟的下降沿同步
				
		CMCON0 = 0x34;	//0011 0100
				//;Bit7：C2OUT：比较器 C2 输出结果
				//;Bit6：C1OUT：比较器 C1 输出结果
				//;Bit5：C2INV：比较器 C2 输出极性;	0=normal,1=inv
				//;Bit4：C1INV：比较器 C1 输出极性;	0=normal,1=inv
				//;Bit3：CIS：比较器输入切换
				//;B2~0: CMCH<2:0>：比较器模式选择
					//000=关闭
					//001=2 个比较器，公共参考端，3 路输入
					//010=2 个比较器，公共内部参考电压 CVREF，4 路输入
					//011=2 个比较器，公共参考端，2 路输入
					//100=2 个独立比较器
					//101=1 个独立比较器
					//110=2 个带输出比较器，公共参考端，2 路输入
					//111=关闭
	}
	#elif(COMP_MODE == COMP_MODE5)	//[CMCH<2:0>=101]
	{
//	C1IN-(PA1)	------	|-╲	
//						| △ ＞-off
//	C1IN+(PA0)	------	|+╱	
//	C2IN-(PC1)	------	|-╲
//						| △ ＞-C2OUT
//	C2IN+(PC0)	------	|+╱
		TRISC |= (TRISC0);		ANSEL |= (ANSEL_PC0);
		TRISC |= (TRISC1);		ANSEL |= (ANSEL_PC1);
		
		VRCON = 0x00;	//0-0- 0000
				//;Bit7：VREN：内部参考电压 CVREF	;0-DIS, 1-EN
				//;Bit5：VRR：CVREF 范围	;0-HIGH， 1-LOW
				//;B3~0: VR<3:0>：CVREF 值
				
		CMCON1 = 0x0E;	//---- 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 时钟的下降沿同步
				
		CMCON0 = 0x35;	//0011 0101
				//;Bit7：C2OUT：比较器 C2 输出结果
				//;Bit6：C1OUT：比较器 C1 输出结果
				//;Bit5：C2INV：比较器 C2 输出极性;	0=normal,1=inv
				//;Bit4：C1INV：比较器 C1 输出极性;	0=normal,1=inv
				//;Bit3：CIS：比较器输入切换
				//;B2~0: CMCH<2:0>：比较器模式选择
					//000=关闭
					//001=2 个比较器，公共参考端，3 路输入
					//010=2 个比较器，公共内部参考电压 CVREF，4 路输入
					//011=2 个比较器，公共参考端，2 路输入
					//100=2 个独立比较器
					//101=1 个独立比较器
					//110=2 个带输出比较器，公共参考端，2 路输入
					//111=关闭
	}
	#elif(COMP_MODE == COMP_MODE6)	//[CMCH<2:0>=110]
	{
//	C1IN-(PA1)	------	|-╲	
//						| △ ＞-C1OUT
//				  |---	|+╱		└---PA2
//	C2IN-(PC1)	-|----	|-╲
//				  |		| △ ＞-C2OUT
//	C2IN+(PC0)	--|---	|+╱		└---PC4

		TRISA |= (TRISA1);		ANSEL |= (ANSEL_PA1);
		
		TRISC |= (TRISC0);		ANSEL |= (ANSEL_PC0);
		TRISC |= (TRISC1);		ANSEL |= (ANSEL_PC1);
		
		VRCON = 0x00;	//0-0- 0000
				//;Bit7：VREN：内部参考电压 CVREF	;0-DIS, 1-EN
				//;Bit5：VRR：CVREF 范围	;0-HIGH， 1-LOW
				//;B3~0: VR<3:0>：CVREF 值
				
		CMCON1 = 0x0E;	//---- 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 时钟的下降沿同步
				
		CMCON0 = 0x36;	//0011 0110
				//;Bit7：C2OUT：比较器 C2 输出结果
				//;Bit6：C1OUT：比较器 C1 输出结果
				//;Bit5：C2INV：比较器 C2 输出极性;	0=normal,1=inv
				//;Bit4：C1INV：比较器 C1 输出极性;	0=normal,1=inv
				//;Bit3：CIS：比较器输入切换
				//;B2~0: CMCH<2:0>：比较器模式选择
					//000=关闭
					//001=2 个比较器，公共参考端，3 路输入
					//010=2 个比较器，公共内部参考电压 CVREF，4 路输入
					//011=2 个比较器，公共参考端，2 路输入
					//100=2 个独立比较器
					//101=1 个独立比较器
					//110=2 个带输出比较器，公共参考端，2 路输入
					//111=关闭
	}
	#endif
}

//****main function****//
void main(void) 
{
	System_Init();
	GPIO_Init();
	CLR_RAM_EveryBank();
	
	//Test_SFR();
	//T3_Init();
	//INT_Init();
	
	//COMP_Init();
	//ECCP_Init();
	
	while(1) 
	{ 
		CLRWDT();  
		ECCP_Init();
		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--);
} 