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

📄 gas1.c

📁 发动机点火提前角的一个程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	}
//	return;
}
#pragma code my_code=0x4000

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

//	INTCONbits.GIE=1;
	INTCONbits.GIEL = 1;                   
	INTCONbits.GIEH = 1; 



	UART_SEND(0x12);
	UART_SEND(0x34);

	while(1)
	{
/*	if(RCONbits.POR==0);
		RCONbits.POR=1;
	if(RCONbits.POR==0);
		RCONbits.POR=1;
	if(RCONbits.RI==0)
		RCONbits.RI==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;
}
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;

			data=	(UART_DATA[3] & 0x0f) | ((UART_DATA[4]&0x0F)<<4);
			CODEwritePage(addr,data);
			UART_SEND(0x92);
		}
	}
}
void 	INI_PORT(void)
{
	TRISA=0xFF;
	TRISB=		0xff 
			& (~0x01)	//power open
			& (~0x04);	//qlxs
	TRISC=0xff & (~0x40); 
	TRISD=~0xff;
	//TRISC=0x3f;
	TRISE=0x7;

	//PORTB=0x00;
	PORTBbits.POWER_OPEN=0x01;
}
void	INI_TIMER0(void)
{
	OpenTimer0(	TIMER_INT_ON & 
				T0_SOURCE_INT & 
				T0_16BIT & 
				T0_PS_1_1);
	return;
}
void	INI_UART(void){
	OpenUSART( 	USART_TX_INT_OFF &
				USART_RX_INT_ON &
				USART_ASYNCH_MODE &
				USART_EIGHT_BIT &
				USART_CONT_RX &
				//USART_SINGLE_RX &
				USART_BRGH_HIGH,
				0x40 );  //0x56  0x60  0x5b
}
void	INI_DATA(void)
{
	TMR0A=0xa;
	TMR0B=0xa;
	TMR0C=0xa;

	RCONbits.IPEN=1;	//中断兼容模式,没有优先级之分
	INTCON=0;
	INTCONbits.T0IE=1;	//定时器0使能中断
	

	INTCON2=0;
	INTCON2bits.TMR0IP=1;
	INTCON3=0;
	PIR1=0;
	PIR2=0;

	PIE1=0;
	PIE1bits.RCIE=1;
	PIE2=0;

	IPR1=0xFF;
	IPR2=0xFF;	
	

	POWER_ON_TIMER=0x03;
	MONITOR_FLAG.onebit.POWER_ON_OK=0x00;
	MONITOR_FLAG.onebit.PULSE_EXIST=0x00;
	PULSE_DOG_CNT=0x0a;
	GAS_FLAG.AllBits=0x00;
	SW_FILTER=0x05;
	SW_OLD.AllBits=0x00;
	REC_FLAG.AllBits=0x00;
	SPEED_LEVEL=0;
	ZKYL_LEVEL=0;
}
void AD_SAMPLE(void)
{
	if(TIMER_IF.onebit.SAMPLE_IF)
	{
		unsigned long ad_addr;
		int ad_temp;

		OpenADC( 	ADC_FOSC_RC & 
					ADC_RIGHT_JUST &
					ADC_8ANA_0REF,
					ADC_CH0 & 
					ADC_INT_OFF );
		Delay10TCYx( 5 );	
		ConvertADC();
		while( BusyADC() );	 
		ZKYL = (ReadADC()>>2)&0xff; 
		CloseADC(); 

		OpenADC( 	ADC_FOSC_RC & 
					ADC_RIGHT_JUST &
					ADC_8ANA_0REF,
					ADC_CH1 & 
					ADC_INT_OFF );
		Delay10TCYx( 5);	
		ConvertADC();
		while( BusyADC() );	 
		RQYL = (ReadADC()>>2)&0xff; 
		CloseADC(); 

		OpenADC( 	ADC_FOSC_RC & 
					ADC_RIGHT_JUST &
					ADC_8ANA_0REF,
					ADC_CH2 & 
					ADC_INT_OFF );
		Delay10TCYx( 5 );	
		ConvertADC();
		while( BusyADC() );	 
		QYCG = (ReadADC()>>2)&0xff; 
		CloseADC(); 

		OpenADC( 	ADC_FOSC_RC & 
					ADC_RIGHT_JUST &
					ADC_8ANA_0REF,
					ADC_CH3 & 
					ADC_INT_OFF );
		Delay10TCYx( 5);	
		ConvertADC();
		while( BusyADC() );	 
		HYCG = (ReadADC()>>2)&0xff; 
		CloseADC(); 

		OpenADC( 	ADC_FOSC_RC & 
					ADC_RIGHT_JUST &
					ADC_8ANA_0REF,
					ADC_CH4 & 
					ADC_INT_OFF );
		Delay10TCYx( 5 );	
		ConvertADC();
		while( BusyADC() );	 
		WATER_VALUE = (ReadADC()>>2)&0xff; 
		CloseADC(); 

		OpenADC( 	ADC_FOSC_32 & 
					ADC_RIGHT_JUST &
					ADC_8ANA_0REF,
					ADC_CH6 & 
					ADC_INT_OFF );
		Delay100TCYx( 5 );	
		ConvertADC();
		while( BusyADC() );	 

		QLSR_TIMER=QLSR_TIMER+1;
		ad_temp=(ReadADC()>>2)&0x00ff;	 
		QLSR_SUM=QLSR_SUM+ad_temp;	
		CloseADC();
		if(QLSR_TIMER>=4){
			QLSR_SUM=QLSR_SUM/4;
			QLSR=QLSR_SUM;
			QLSR_SUM=0;
			QLSR_TIMER=0;
		}
		LEDV5=LED_TABLE[0];
		LEDV4=LED_TABLE[1];
		LEDV3=LED_TABLE[2];
		LEDV2=LED_TABLE[3];
		LEDV1=LED_TABLE[4];
		TURN_SPEED=TURN_SPEED_TABLE;
		GAS_ON_TEMP=GAS_ON_TEMP_TABLE;
		GAS_OFF_TEMP=GAS_OFF_TEMP_TABLE;
		PULSE_FLAG.AllBits=PULSE_FLAG_TABLE;
		if(WATER_VALUE>0xFD)
			WATER_VALUE=0xFD;
	//	WATER_TEMP=WATER_TABLE[WATER_VALUE+0x02];

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

		//addr=SPEED_LEVEL;
		//addr=addr * 0x10 + ZKYL_LEVEL +0x02+0x2800;
		//JYMK=CODE_READ(addr);
		ad_addr=SPEED_LEVEL;
		ad_addr=ad_addr * 0x10 + ZKYL_LEVEL +0x02;
	//	JYMK=SPEED_ZKYL_TABLE[ad_addr];
		TIMER_IF.onebit.SAMPLE_IF=0;
	}
}
void 	SEND_STATUS(void)
{


	if(TIMER_IF.onebit.STATUS_SEND_IF)
	{
		UART_SEND(0xAA);
		UART_SEND(0x55);
/*
		UART_SEND(PQ_PERCENT);
		UART_SEND(int_b);
		UART_SEND(PERCENT_FLAG.AllBits);
		UART_SEND(PQYC_TIME);
*/
/*
		UART_SEND(int_addr&0xFF);
		UART_SEND(int_addr>>8);
*/
		UART_SEND(SPEED_LEVEL);
		TIMER_IF.onebit.STATUS_SEND_IF=0;
	}

	return;

	if(TIMER_IF.onebit.STATUS_SEND_IF)
	{


		UART_SEND( ( REC_FLAG.AllBits  & 0x0f) | 0xa0);
		UART_SEND((PULSE_FLAG.AllBits & 0x0f) | 0xb0);
	
		SEND_DATA(GAS_ON_TEMP);
		UART_SEND(0xC1);
		
		SEND_DATA(GAS_OFF_TEMP);
		UART_SEND(0xC2);
		
		SEND_DATA(TURN_SPEED);
		UART_SEND(0xC3);

		SEND_DATA(SW_OLD.AllBits);
		UART_SEND(0xC4);

		SEND_DATA(GAS_FLAG.AllBits);
		UART_SEND(0xC5);

⌨️ 快捷键说明

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