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

📄 test.c

📁 发动机点火提前角的一个程序
💻 C
📖 第 1 页 / 共 4 页
字号:
			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())ClrWdt();	 
		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() )ClrWdt();	 
		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() )ClrWdt();	 
		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() )ClrWdt();	 
		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() )ClrWdt();	 

		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)
	{
		TIMER_IF.onebit.STATUS_SEND_IF=0;
		UART_SEND(0xAA);
		UART_SEND(PQ_PERCENT);
		UART_SEND(PERCENT_FLAG.AllBits);
	}
	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())ClrWdt();;
	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;                         
		EECON2 = 0xAA;                        
		EECON1bits.WR = 1;                    
		Nop();  
		INTCONbits.GIEL = 1;                   
		INTCONbits.GIEH = 1;							
	}       
	EECON1bits.WREN = 0;                                
} 

/*
void SELF_STUDY(void)
{
	switch(STUDY_STATE){
	case(JudgeSpeedOk)
	case(JudgeStudyEnable)
	case(JudgeJymkEqualPymk)
	case(RecGasPymk)
	case(RecPetrolPymk)
	case(CalPercent)
	case(JudgePercent)
	case(ChangePercent)
	case(SavePercentJymk)
	default:
	}

	if(STUDY_FLAG.onebit.START==0){
		//if(ABS(JYMK-PYMK)>8)
		STUDY_FLAG.onebit.START=1;
		STUDY_FLAG.onebit.REC_PETROL_TIME=1;
	}
	if(STUDY_FLAG.onebit.REC_PETROL_TIME)
		if(PETROL_TIMER>=5){
			PETROL_TIMER=0;
			STUDY_FLAG.onebit.REC_PETROL_TIME=0;
			STUDY_FLAG.onebit.REC_GAS_TIME=1;
		return;
		}
	if(STUDY_FLAG.onebit.REC_GAS_TIME)
		if(GAS_TIMER>=5){
			STUDY_FLAG.onebit.REC_GAS_TIME=0;
			STUDY_FLAG.onebit.REC_TIME_OK=1;
		}
	if(STUDY_FLAG.onebit.REC_TIME_OK){
		STUDY_FLAG.onebit.REC_TIME_OK=0;
		a=(GAS_PYTIME-PETROL_PYTIME)*100/PETROL_PYTIME;
		if(ABS(a)>5)
	}

	//学习开始
	//用油5秒,计算喷油时间
	//用气5秒,计算喷油时间,计算喷气时间
	//计算两次喷油时间差值
	//a=(GAS_PYTIME-PETROL_PYTIME)*100/PETROL_PYTIME
	//if(ABS(a)>5) write percent 学习结束
	//else PQ_PERCENT=PQ_PERCENT-a/2;

}

*/
#pragma code

⌨️ 快捷键说明

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