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

📄 gas2.c

📁 发动机点火提前角的一个程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			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(PYMK);
		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);
//		_asm CLRWDT _endasm
		SEND_DATA(LEDV5);
		UART_SEND(0xC6);

		SEND_DATA(LEDV4);
		UART_SEND(0xC7);

		SEND_DATA(LEDV3);
		UART_SEND(0xC8);

		SEND_DATA(LEDV2);
		UART_SEND(0xC9);

		SEND_DATA(LEDV1);
		UART_SEND(0xCA);
//		_asm CLRWDT _endasm

	
		SEND_DATA(ZKYL);
		UART_SEND(0x80);

		SEND_DATA(RQYL);
		UART_SEND(0x81);

		SEND_DATA(QYCG);
		UART_SEND(0x82);

		SEND_DATA(HYCG);
		UART_SEND(0x83);
//		_asm CLRWDT _endasm
		SEND_DATA(WATER_TEMP);
		UART_SEND(0x84);

		SEND_DATA(QLSR);
		UART_SEND(0x86);

		SEND_DATA(PYMK);
		UART_SEND(0x88);
//		_asm CLRWDT _endasm
		SEND_DATA(PZ_PERIOD);
		UART_SEND(0x8a);

		SEND_DATA(PZ_PERIOD>>8);
		UART_SEND(0x8b);

		SEND_DATA(SPEED_LEVEL);
		UART_SEND(0x8C);
//		_asm CLRWDT _endasm
		//SEND_DATA(PYMK_LEVEL);
		SEND_DATA(0x01);
		UART_SEND(0x8D);

		SEND_DATA(ZKYL_LEVEL);
		UART_SEND(0x8E);

		SEND_DATA(JYMK);
		UART_SEND(0x8F);
		TIMER_IF.onebit.STATUS_SEND_IF=0;
	}
}
void UART_SEND(unsigned char data)
{
	while (BusyUSART());
	WriteUSART(data);
}
void SEND_DATA(unsigned char data)
{
	UART_SEND((data & 0x0f) | 0x60);
	UART_SEND( ( (data >>4) & 0x0f) | 0x70);
}
// _________________________________________________________________________________________________ 
 unsigned char CODE_READ(unsigned long addr)
{
   	TBLPTRL = *((unsigned char *)&addr); 
//	TBLPTRL &=  0xfe;
   	TBLPTRH =*((unsigned char *)&addr+1);
   	TBLPTRU =*((unsigned char *)&addr+2);
	TableRead_PostInc();
	return 	TABLAT;
}//
void CODEwritePage (unsigned long addr,unsigned char data) 
{ 
	signed char    i,j; 
	unsigned char temp[64];

   	TBLPTRL =*((unsigned char *)&addr);
   	TBLPTRH =*((unsigned char *)&addr+1);
   	TBLPTRU =*((unsigned char *)&addr+2); 
   	TBLPTRL &= 0xC0;       
   	for (i=0;i<=63;i++) 
	{ 
       	TableRead_PostInc(); 
       	temp[i] = TABLAT; 
   	}

	temp[addr & 0x3f]=data;
	while (EECON1bits.WR) {};


	TBLPTRU = *((unsigned char *)&addr+2); 
	TBLPTRH = *((unsigned char *)&addr+1);
	TBLPTRL = *((unsigned char *)&addr);   
	TBLPTRL &= 0xC0;                      

	EECON1bits.EEPGD = 1;       
	EECON1bits.CFGS = 0;         
	EECON1bits.WREN = 1;         
	EECON1bits.FREE = 1;        

	INTCONbits.GIEL = 0;                   
	INTCONbits.GIEH = 0;                   
	EECON2 = 0x55;                         
	EECON2 = 0xAA;                         
	EECON1bits.WR = 1;                     
	Nop();                                 
	INTCONbits.GIEL = 1;                   
	INTCONbits.GIEH = 1; 

	TableRead_PostDec();                   

	FSR0H = ((((unsigned int)&temp[0])>>8)&0xFF); 
	FSR0L = (((unsigned int)&temp[0])&0xFF);       

	for(j=0;j<8;j++){
		for (i=0;i<8;i++) { 
   			TABLAT = (POSTINC0);                
   			TableWrite_PreInc();               
		} 
		EECON1bits.EEPGD = 1;                
		EECON1bits.CFGS = 0;                  
		EECON1bits.WREN = 1; 

		INTCONbits.GIEL = 0;                   
		INTCONbits.GIEH = 0;                 
		EECON2 = 0x55;                         

⌨️ 快捷键说明

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