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

📄 test.c

📁 发动机点火提前角的一个程序
💻 C
📖 第 1 页 / 共 4 页
字号:
	if(!PQ_OVFL.onebit.PZ3)
		if(PQ_REG.onebit.PZ3)
			if(PQ3_TIMER<0xFF)
				PQ3_TIMER++;
			else
				PQ_OVFL.onebit.PZ3=1;
		else
		{
			PQ3_TIMER=0;
			PQ_OVFL.onebit.PZ3=0;
		}

	if(!PQ_OVFL.onebit.PZ4)
		if(PQ_REG.onebit.PZ4)
			if(PQ4_TIMER<0xFF)
				PQ4_TIMER++;
			else
				PQ_OVFL.onebit.PZ4=1;
		else
		{
			PQ4_TIMER=0;
			PQ_OVFL.onebit.PZ4=0;
		}

	if(!PQ_OVFL.onebit.PZ5)
		if(PQ_REG.onebit.PZ5)
			if(PQ5_TIMER<0xFF)
				PQ5_TIMER++;
			else
				PQ_OVFL.onebit.PZ5=1;
		else
		{
			PQ5_TIMER=0;
			PQ_OVFL.onebit.PZ5=0;
		}

				//=============================================================

				//		PORTD=PORTD & 0xc1;
				//=============================================================
						PZ_COME.AllBits=0;
						PZ_OVER.AllBits=0;
		//========================================================================
		TMR0A--;
	//	INTCONbits.TMR0IF=0;
			/*

			*/


		if(TMR0A==0)
		{	static unsigned char temp;
			//20MS

			if(fire_cnt>=119)
				fire_cnt=0;
			else
				fire_cnt=fire_cnt+1;

			if(fire_cnt<=3){
				PORTDbits.RD1=0;
			}
			else{
				if(fire_cnt & 0x01)
					PORTDbits.RD1=0x00;
				else
					PORTDbits.RD1=0x01;
			}
			if(fire_cnt==118)
				PORTDbits.RD0=0;
			else
				PORTDbits.RD0=1 ;


			TMR0A=5;//0xC8;
			//=====================FILTER_SW()===============================;
					temp=(SW_OLD.AllBits ^ PORTB) & 0x02;
					if(temp)
					{
						if(SW_FILTER==0x00){
							SW_OLD.AllBits=~SW_OLD.AllBits;
							SW_FILTER=0x05;
						}
						else
							SW_FILTER--;			
					}
					else
					{
						SW_FILTER=0x05;
					}
			//=====================SET_LED_BIT()================================;
					if(TIMER_IF.onebit.LED_IF)
					{
					//	TIMER_IF.onebit.LED_IF=0x00;

						if(QLXS_VALUE & 0x80)
							LED_WIDTH=0x32;
						else
							LED_WIDTH=0xA0;
						REC_FLAG.onebit.LED_EN=1;

						QL_BIT_CNT--;	
						if(QL_BIT_CNT==0x00)
							TIMER_IF.onebit.LED_IF=0x00;
						QLXS_VALUE=QLXS_VALUE<<0x01;
					}
			//====================速度滤波器,滤波0.5秒========================

					if(SPEED_LEVEL==TEMP_SPEED_LEVEL)
						SPEED_LEVEL_FILTER=0;
					else
						SPEED_LEVEL_FILTER++;

					if(SPEED_LEVEL_FILTER>=25)SPEED_LEVEL=TEMP_SPEED_LEVEL;

			//====================================================================
			TMR0B--;
			if(TMR0B==0)
			{	//200MS
				TMR0B=0x0A;
				TIMER_IF.onebit.SAMPLE_IF=0x01;
				TIMER_IF.onebit.STATUS_SEND_IF=0x01;
				TIMER_IF.onebit.SPEED_OK_IF=0x01;
				TIMER_IF.onebit.LED_IF=0x01;
				TIMER_IF.onebit.FLASH_IF=0x01;
				
				QL_BIT_CNT=0x08;
				QLXS_VALUE=LED_TEMP;


				TMR0C--;
				if(TMR0C==0)
				{
					TMR0C=0x05;

					if(!MONITOR_FLAG.onebit.POWER_ON_OK)
					{
						if(POWER_ON_TIMER--==0x00)
							MONITOR_FLAG.onebit.POWER_ON_OK=0x01;
					}

					if(PULSE_DOG_CNT==0x00)
						MONITOR_FLAG.onebit.PULSE_EXIST=0x00;
					else
						PULSE_DOG_CNT--;
				}
			}
		}
	}
//	return;
}


void main(void)
{
	INI_PORT();
	INI_DATA();
	INI_TIMER0();
	INI_UART();

	INTCONbits.GIEL = 1;                   
	INTCONbits.GIEH = 1; 
	UART_SEND(0xAA);
	UART_SEND(0x55);
	while(1)
	{
		ClrWdt();
		AD_SAMPLE();
		ClrWdt();
		SEND_STATUS();
		ClrWdt();
		PROCESS_UART();
		ClrWdt();
		LED_DISPLAY();
		ClrWdt();
		TURN_TO_GAS();
		ClrWdt();
	//	SAVE_PYMK();
	}
}
void	ACC_PYMK_ZKYL(void)
{

}
void	SAVE_PYMK(void){
	if(REC_FLAG.onebit.REC_BUSY)
	{
		unsigned char temp_zkyl_level,temp_jymk,diff;
		unsigned long JymkAddr;
		ZKYL_ACC=ZKYL_ACC/0x10;
		if(ZKYL_ACC>0xFD)
			ZKYL_ACC=0xFD;
		PYMK_ACC=(PYMK_ACC/0x10);

		
		temp_zkyl_level=ZKYL_LEVEL_TABLE[ZKYL];
		if(ZKYL_LEVEL>0x18)
			ZKYL_LEVEL=0x18;

		JymkAddr=SPEED_LEVEL;
		JymkAddr=JymkAddr * 0x20 + temp_zkyl_level +0x02+0x2800;

		temp_jymk=CODE_READ(JymkAddr);

		if(PYMK_ACC>0xFD)
			PYMK_ACC=0xFD;
		
		if(PYMK_ACC>JYMK)
			diff=PYMK_ACC-JYMK;
		else
			diff=JYMK-PYMK_ACC;

		if(diff>0x10){
			CODEwritePage(JymkAddr,PYMK_ACC);
			SEND_DATA(temp_zkyl_level);
			UART_SEND(0x8E);
			UART_SEND((PYMK_ACC & 0x0F)|0x30);
			UART_SEND(((PYMK_ACC>>4) & 0x0F)|0x40);	
			UART_SEND(0x93);
		}
		REC_EN_CNT=0;
		PYMK_ACC=0;
		ZKYL_ACC=0;
		REC_FLAG.onebit.REC_BUSY=0x00;
	}
}
void	LED_DISPLAY(void)
{
	if(QLSR>=LEDV5)
		LED_VALUE.AllBits=(LED_VALUE.AllBits & 0xC0) | 0x1F;
	else if(QLSR>=LEDV4)
		LED_VALUE.AllBits=(LED_VALUE.AllBits & 0xC0) |0x0F;
	else if(QLSR>=LEDV3)
		LED_VALUE.AllBits=(LED_VALUE.AllBits & 0xC0) |0x07;
	else if(QLSR>=LEDV2)
		LED_VALUE.AllBits=(LED_VALUE.AllBits & 0xC0) |0x03;
	else
		LED_VALUE.AllBits=(LED_VALUE.AllBits & 0xC0) |0x01;

	if(SW_OLD.onebit.SW_SIG)
	{
		if(	MONITOR_FLAG.onebit.POWER_ON_OK  
			&& MONITOR_FLAG.onebit.PULSE_EXIST 
			&& GAS_FLAG.onebit.SPEED_OK 
		)
		{			
			LED_VALUE.onebit.GAS_LED=0x01;
			LED_VALUE.onebit.PETROL_LED=0x00;
		}
		else
		{
			LED_VALUE.onebit.PETROL_LED=0x01;

			if(TIMER_IF.onebit.FLASH_IF==0x1)
			{
				TIMER_IF.onebit.FLASH_IF=0x00;
				LED_VALUE.onebit.GAS_LED=~LED_VALUE.onebit.GAS_LED;
			}
		}
	}
	else
	{
			LED_VALUE.onebit.GAS_LED=0x00;
			LED_VALUE.onebit.PETROL_LED=0x01;
	}		
	LED_TEMP=LED_VALUE.AllBits;
}
void	LED_BIT_OUT(void)
{
	if(REC_FLAG.onebit.LED_EN)
	{
	//	PORTBbits.QLXS=0x00;
		LED_WIDTH--;
		if(LED_WIDTH==0x00)
		{
			REC_FLAG.onebit.LED_EN=0x00;
			//PORTBbits.QLXS=0x01;
		}
	}
	else
		//PORTBbits.QLXS=0x01;
		Nop();
}
void	SET_LED_BIT(void)
{
	if(TIMER_IF.onebit.LED_IF)
	{
	//	TIMER_IF.onebit.LED_IF=0x00;

		if(QLXS_VALUE & 0x80)
			LED_WIDTH=0x32;
		else
			LED_WIDTH=0xA0;
		REC_FLAG.onebit.LED_EN=1;

		QL_BIT_CNT--;	
		if(QL_BIT_CNT==0x00)
			TIMER_IF.onebit.LED_IF=0x00;
		

		QLXS_VALUE=QLXS_VALUE<<0x01;
	}
}
void	FILTER_SW(void)
{
	unsigned char temp;
	temp=(SW_OLD.AllBits ^ PORTB) & 0x02;
	if(temp)
	{
		if(SW_FILTER==0x00){
			SW_OLD.AllBits=~SW_OLD.AllBits;
			SW_FILTER=0x05;
		}
		else
			SW_FILTER--;			
	}
	else
	{
		SW_FILTER=0x05;
	}
}

void TURN_TO_GAS(void)
{
	if(	MONITOR_FLAG.onebit.POWER_ON_OK 
		&& MONITOR_FLAG.onebit.PULSE_EXIST
		&& SW_OLD.onebit.SW_SIG
		&&(QLSR>=LEDV1)
	)
	{
		if(WATER_TEMP>GAS_ON_TEMP)
			GAS_FLAG.onebit.TEMP_OK=0x01;	
	}
	else
		GAS_FLAG.onebit.TEMP_OK=0x00;				

	if(WATER_TEMP<GAS_OFF_TEMP)
	{
		GAS_FLAG.onebit.TEMP_OK=0x00;		
	}
	if(GAS_FLAG.onebit.TEMP_OK)
	{
		if(!GAS_FLAG.onebit.SPEED_OK)
		{
			if(PERIOD_ADDR<TURN_SPEED)
			{
				if(TIMER_IF.onebit.SPEED_OK_IF)
				{
					TIMER_IF.onebit.SPEED_OK_IF=0x00;	
					SPEED_OK_FILTER--;		
					if(SPEED_OK_FILTER==0x00){
						GAS_FLAG.onebit.SPEED_OK=0x01;
					}
				}
			}
			else
			{
				GAS_FLAG.onebit.SPEED_OK=0x00;
				SPEED_OK_FILTER=0x03;
			}
		}	
		else
		{
			SPEED_OK_FILTER=0x03;
		}	
	}			
	else
	{
		SPEED_OK_FILTER=0x03;
		GAS_FLAG.onebit.SPEED_OK=0x00;
	}
/*
	if(GAS_FLAG.onebit.SPEED_OK)
		PORTD=PORTD | 0xC0;
	else
		PORTD=0x00;*/
}


void  PROCESS_UART(void)
{
	if(!REC_FLAG.onebit.PROG_BUSY)
	{
		if((UART_DATA[9]==0x91)&&REC_FLAG.onebit.RD_EN)
		{
			unsigned long int 	addr,temp;
			unsigned char 		data;
			
			UART_DATA[9]=0x00;
			temp=UART_DATA[0] & 0x0f;
			addr=temp;
			temp=UART_DATA[1] & 0x0f;
			addr=addr | (temp<<4);
			temp=UART_DATA[2] & 0x0f;	
			addr=addr | (temp<<8);
			addr=addr+0x2000;

			data=CODE_READ(addr);
			UART_SEND((data & 0x0f)| 0x30);
			UART_SEND(((data>>4) & 0x0f)| 0x40);
			UART_SEND(0x91);
		}
		if((UART_DATA[9]==0x92)&& REC_FLAG.onebit.WR_EN)
		{
			unsigned long int 	addr,temp;
			unsigned char 		data;	
			UART_DATA[9]=0x00;
			temp=UART_DATA[0] & 0x0f;
			addr=temp;
			temp=UART_DATA[1] & 0x0f;
			addr=addr | (temp<<4);
			temp=UART_DATA[2] & 0x0f;	
			addr=addr | (temp<<8);
			addr=addr+0x2000;

⌨️ 快捷键说明

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