⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gas2.c

📁 发动机点火提前角的一个程序
💻 C
📖 第 1 页 / 共 3 页
字号:
		EECON2 = 0xAA;                        
		EECON1bits.WR = 1;                    
		Nop();  
		INTCONbits.GIEL = 1;                   
		INTCONbits.GIEH = 1;							
	}       
	EECON1bits.WREN = 0;                                
} 
void 	PJ_TIMING(void)
{
		CAL_PY_STATUS();
		ACC_PYMK();
		CAL_SPEED();
		CAL_PQYC();

		PZ_COME.AllBits=0;
		PZ_OVER.AllBits=0;

		EXE_PZ0();
		EXE_PZ1();
		EXE_PZ2();
		EXE_PZ3();
		EXE_PZ4();
		EXE_PZ5();


		EXE_PQ_TIMER();

		//PORTD=0xC0 | (PORTC &0x3F);
		if(GAS_FLAG.onebit.SPEED_OK)
			PORTD=0xc0 | PQ_REG.AllBits;
		else
			PORTD=0;
}
//============================cal signed pqyc=====================================
void CAL_PQYC(void)
{
	if(SPEED_LEVEL>0x17) 
		SPEED_LEVEL=0x17;
	else
		SPEED_LEVEL=SPEED_LEVEL;

	
	int_d=ZKYL_LEVEL;
	int_addr=int_addr+int_d & 0x00ff;



	int_addr=int_addr+ 0x0002;

	if(int_addr>=0x300)int_addr=0x2FF;

	//PQ_PERCENT=SPEED_PQYC_TABLE[int_addr];
	//PQ_PERCENT=20;
	if(PQ_PERCENT>=0x80){
		PERCENT_FLAG.onebit.sign=1;
		PQ_PERCENT=~PQ_PERCENT +1; 
	}
	else{
		PERCENT_FLAG.onebit.sign=0;
	}
	
	int_d=PQ_PERCENT;

	if(int_d>=0x64)
		PQ_PERCENT=0x63;
	return;
	PERCENT_BIT=PQ_PERCENT;
	PERCENT_BIT=PERCENT_BIT+(PQ_PERCENT>>2);
	PERCENT_BIT=PERCENT_BIT+(PQ_PERCENT>>5);
	if(PERCENT_BIT>128)
		PERCENT_BIT=127;
	PERCENT_FLAG.AllBits=(PERCENT_FLAG.AllBits&0x80)+PERCENT_BIT;


	int_d=PYMK;
	int_d=(int_d<<8);
	PQYC_TIME=0;

	if(PERCENT_FLAG.onebit.v2==1){
		PQYC_TIME=PQYC_TIME+(int_d>>1);
	}
	if(PERCENT_FLAG.onebit.v4==1){
		PQYC_TIME=PQYC_TIME+(int_d>>2);
	}
	if(PERCENT_FLAG.onebit.v8==1){
		PQYC_TIME=PQYC_TIME+(int_d>>3);
	}
	if(PERCENT_FLAG.onebit.v16==1){
		PQYC_TIME=PQYC_TIME+(int_d>>4);
	}
	if(PERCENT_FLAG.onebit.v32==1){
		PQYC_TIME=PQYC_TIME+(int_d>>5);
	}
	if(PERCENT_FLAG.onebit.v64==1){
		PQYC_TIME=PQYC_TIME+(int_d>>6);
	}
	if(PERCENT_FLAG.onebit.v128==1){
		PQYC_TIME=PQYC_TIME+(int_d>>7);
	}
	PQYC_TIME=(PQYC_TIME>>8);
	if(PQYC_TIME>=0x80)PQYC_TIME=0x7f;
	if(PQYC_TIME==0)PQYC_TIME=1;
	PQYC=PQYC_TIME;	
}
//=========================cal speed=================================================
void CAL_SPEED(void)
{
	//计算周期
	if(PZ0_PERIOD==0xffff)
	{
		PZ_PERIOD_OVFL.onebit.PZ0=1;
	}
	else
	{
		PZ_PERIOD_OVFL.onebit.PZ0=0;
		PZ0_PERIOD++;
	}
	//喷油10秒计数器
	if(PZ_COME.onebit.PZ0){
		MONITOR_FLAG.onebit.PULSE_EXIST=0x01;
		PULSE_DOG_CNT=0x0a;

		PZ_PERIOD=PZ0_PERIOD;
		PZ0_PERIOD=0x0000;

		PERIOD_ADDR=(PZ_PERIOD>>1)&0x7fff;

		if(!PULSE_FLAG.onebit.S1)
		{
			PERIOD_ADDR=(PERIOD_ADDR>>1)&0x7fff;
			if(!PULSE_FLAG.onebit.S0)
				PERIOD_ADDR=(PERIOD_ADDR>>1)&0x7fff;
		}
		if(PERIOD_ADDR>0xFD)PERIOD_ADDR=0xFD;
		SPEED_LEVEL=PERIOD_LEVEL_TABLE[PERIOD_ADDR + 0x02];
		if(SPEED_LEVEL>0x17)SPEED_LEVEL=0x17;
	}
}
//==========================exe pz===================================
void EXE_PZ0(void)
{

	if(PZ_COME.onebit.PZ0){
		if(PERCENT_FLAG.onebit.sign){
			PQ_CUT.onebit.PZ0=1;
			PZ0_PQYC=PQYC;
		}
		else
			PQ_REG.onebit.PZ0=1;
	}

	if(PZ_OVER.onebit.PZ0){
		if(PERCENT_FLAG.onebit.sign){
			PQ_REG.onebit.PZ0=0;
		}
		else {
			PQ_REG.onebit.PZ0=1;		
			PQ_LAST.onebit.PZ0=1;	
			PZ0_PQYC=PQYC;				
		}
	}	
	if(PQ_LAST.onebit.PZ0)				
	{			
		if(PZ0_PQYC!=0x00)				
			PZ0_PQYC=PZ0_PQYC-1;
		else
		{
			PQ_LAST.onebit.PZ0	=0;
			PQ_REG.onebit.PZ0=0;
		}
	}
	if(PQ_CUT.onebit.PZ0)
		if(PZ0_PQYC==0)
		{
			PQ_CUT.onebit.PZ0=0;
			PQ_REG.onebit.PZ0=1;
		}	
		else
			PZ0_PQYC--;	
}
void EXE_PZ1(void)
{

	if(PZ_COME.onebit.PZ1){
		if(PERCENT_FLAG.onebit.sign){
			PQ_CUT.onebit.PZ1=1;
			PZ1_PQYC=PQYC;
		}
		else
			PQ_REG.onebit.PZ1=1;
	}

	if(PZ_OVER.onebit.PZ1){
		if(PERCENT_FLAG.onebit.sign){
			PQ_REG.onebit.PZ1=0;
		}
		else {
			PQ_REG.onebit.PZ1=1;		
			PQ_LAST.onebit.PZ1=1;	
			PZ1_PQYC=PQYC;				
		}
	}	
	if(PQ_LAST.onebit.PZ1)				
	{			
		if(PZ1_PQYC!=0x00)				
			PZ1_PQYC=PZ1_PQYC-1;
		else
		{
			PQ_LAST.onebit.PZ1	=0;
			PQ_REG.onebit.PZ1=0;
		}
	}
	if(PQ_CUT.onebit.PZ1)
		if(PZ1_PQYC==0)
		{
			PQ_CUT.onebit.PZ1=0;
			PQ_REG.onebit.PZ1=1;
		}	
		else
			PZ1_PQYC--;	
}
void EXE_PZ2(void)
{

	if(PZ_COME.onebit.PZ2){
		if(PERCENT_FLAG.onebit.sign){
			PQ_CUT.onebit.PZ2=1;
			PZ2_PQYC=PQYC;
		}
		else
			PQ_REG.onebit.PZ2=1;
	}

	if(PZ_OVER.onebit.PZ2){
		if(PERCENT_FLAG.onebit.sign){
			PQ_REG.onebit.PZ2=0;
		}
		else {
			PQ_REG.onebit.PZ2=1;		
			PQ_LAST.onebit.PZ2=1;	
			PZ2_PQYC=PQYC;				
		}
	}	
	if(PQ_LAST.onebit.PZ2)				
	{			
		if(PZ2_PQYC!=0x00)				
			PZ2_PQYC=PZ2_PQYC-1;
		else
		{
			PQ_LAST.onebit.PZ2	=0;
			PQ_REG.onebit.PZ2=0;
		}
	}
	if(PQ_CUT.onebit.PZ2)
		if(PZ2_PQYC==0)
		{
			PQ_CUT.onebit.PZ2=0;
			PQ_REG.onebit.PZ2=1;
		}	
		else
			PZ2_PQYC--;	
}
void EXE_PZ3(void)
{

	if(PZ_COME.onebit.PZ3){
		if(PERCENT_FLAG.onebit.sign){
			PQ_CUT.onebit.PZ3=1;
			PZ3_PQYC=PQYC;
		}
		else
			PQ_REG.onebit.PZ3=1;
	}

	if(PZ_OVER.onebit.PZ3){
		if(PERCENT_FLAG.onebit.sign){
			PQ_REG.onebit.PZ3=0;
		}
		else {
			PQ_REG.onebit.PZ3=1;		
			PQ_LAST.onebit.PZ3=1;	
			PZ3_PQYC=PQYC;				
		}
	}	
	if(PQ_LAST.onebit.PZ3)				
	{			
		if(PZ3_PQYC!=0x00)				
			PZ3_PQYC=PZ3_PQYC-1;
		else
		{
			PQ_LAST.onebit.PZ3	=0;
			PQ_REG.onebit.PZ3=0;
		}
	}
	if(PQ_CUT.onebit.PZ3)
		if(PZ3_PQYC==0)
		{
			PQ_CUT.onebit.PZ3=0;
			PQ_REG.onebit.PZ3=1;
		}	
		else
			PZ3_PQYC--;	
}
void EXE_PZ4(void)
{
	if(PZ_COME.onebit.PZ4){
		if(PERCENT_FLAG.onebit.sign){
			PQ_CUT.onebit.PZ4=1;
			PZ4_PQYC=PQYC;
		}
		else
			PQ_REG.onebit.PZ4=1;
	}

	if(PZ_OVER.onebit.PZ4){
		if(PERCENT_FLAG.onebit.sign){
			PQ_REG.onebit.PZ4=0;
		}
		else {
			PQ_REG.onebit.PZ4=1;		
			PQ_LAST.onebit.PZ4=1;	
			PZ4_PQYC=PQYC;				
		}
	}	
	if(PQ_LAST.onebit.PZ4)				
	{			
		if(PZ4_PQYC!=0x00)				
			PZ4_PQYC=PZ4_PQYC-1;
		else
		{
			PQ_LAST.onebit.PZ4	=0;
			PQ_REG.onebit.PZ4=0;
		}
	}
	if(PQ_CUT.onebit.PZ4)
		if(PZ4_PQYC==0)
		{
			PQ_CUT.onebit.PZ4=0;
			PQ_REG.onebit.PZ4=1;
		}	
		else
			PZ4_PQYC--;	
}
void EXE_PZ5(void)
{

	if(PZ_COME.onebit.PZ5){
		if(PERCENT_FLAG.onebit.sign){
			PQ_CUT.onebit.PZ5=1;
			PZ5_PQYC=PQYC;
		}
		else
			PQ_REG.onebit.PZ5=1;
	}

	if(PZ_OVER.onebit.PZ5){
		if(PERCENT_FLAG.onebit.sign){
			PQ_REG.onebit.PZ5=0;
		}
		else {
			PQ_REG.onebit.PZ5=1;		
			PQ_LAST.onebit.PZ5=1;	
			PZ5_PQYC=PQYC;				
		}
	}	
	if(PQ_LAST.onebit.PZ5)				
	{			
		if(PZ5_PQYC!=0x00)				
			PZ5_PQYC=PZ5_PQYC-1;
		else
		{
			PQ_LAST.onebit.PZ5	=0;
			PQ_REG.onebit.PZ5=0;
		}
	}
	if(PQ_CUT.onebit.PZ5)
		if(PZ5_PQYC==0)
		{
			PQ_CUT.onebit.PZ5=0;
			PQ_REG.onebit.PZ5=1;
		}	
		else
			PZ5_PQYC--;	
}

//===========================喷气脉宽看门狗=======================================
void EXE_PQ_TIMER(void)
{
	if(PQ_REG.onebit.PZ0)
		if(PQ0_TIMER>=350)
			PQ_REG.onebit.PZ0=0;
		else
			PQ0_TIMER++;
	else
		PQ0_TIMER=0;

	if(PQ_REG.onebit.PZ1)
		if(PQ1_TIMER>=350)
			PQ_REG.onebit.PZ1=0;
		else
			PQ1_TIMER++;
	else
		PQ1_TIMER=0;

	if(PQ_REG.onebit.PZ2)
		if(PQ2_TIMER>=350)
			PQ_REG.onebit.PZ2=0;
		else
			PQ2_TIMER++;
	else
		PQ2_TIMER=0;

	if(PQ_REG.onebit.PZ3)
		if(PQ3_TIMER>=350)
			PQ_REG.onebit.PZ3=0;
		else
			PQ3_TIMER++;
	else
		PQ3_TIMER=0;

	if(PQ_REG.onebit.PZ4)
		if(PQ4_TIMER>=350)
			PQ_REG.onebit.PZ4=0;
		else
			PQ4_TIMER++;
	else
		PQ4_TIMER=0;

	if(PQ_REG.onebit.PZ5)
		if(PQ5_TIMER>=350)
			PQ_REG.onebit.PZ5=0;
		else
			PQ5_TIMER++;
	else
		PQ5_TIMER=0;
}
//=============================喷油脉宽累加=============================================
void ACC_PYMK()
{
	if(PZ_OLD.onebit.PZ0)
	{
		if(PZ0_PYMK<0xFD)
			PZ0_PYMK++;
	}
	if(PZ_OVER.onebit.PZ0){
		PYMK=PZ0_PYMK;
		PZ0_PYMK=0;
	}

	if(PZ_OLD.onebit.PZ1)
	{
		if(PZ1_PYMK<0xFD)
			PZ1_PYMK++;
	}
	if(PZ_OLD.onebit.PZ2)	
	{
		if(PZ2_PYMK<0xFD)
			PZ2_PYMK++;
	}
	if(PZ_OLD.onebit.PZ3)
	{
		if(PZ3_PYMK<0xFD)
			PZ3_PYMK++;
	}
	if(PZ_OLD.onebit.PZ4)
	{
		if(PZ4_PYMK<0xFD)
			PZ4_PYMK++;
	}
	if(PZ_OLD.onebit.PZ5)
	{
		if(PZ5_PYMK<0xFD)
			PZ5_PYMK++;
	}
}
//===========================喷油状态====================================================
void CAL_PY_STATUS(void)
{
		PZ_NEW.AllBits=PORTC;
		PZ_STATUS.AllBits=PZ_OLD.AllBits ^ PZ_NEW.AllBits;
		PZ_OLD.AllBits=PZ_NEW.AllBits;
		PZ_COME.AllBits=PZ_STATUS.AllBits & PZ_OLD.AllBits;
		PZ_OVER.AllBits=PZ_STATUS.AllBits & (~PZ_OLD.AllBits);
}

#pragma code

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -