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

📄 main.c

📁 Keil 下编译的基于mcs51单片机的PCA82C250CAN收发器控制的程序源代码。
💻 C
📖 第 1 页 / 共 2 页
字号:
//****************************************************************************************************
void float_to_bcd(unsigned char xdata *pBCD,float Float)
{
	*(pBCD+5)=Float/100000;

	Float-=*(pBCD+5)*100000;
	*(pBCD+4)=Float/10000;

	Float-=*(pBCD+4)*10000;
	*(pBCD+3)=Float/1000;

	Float-=*(pBCD+3)*1000;
	*(pBCD+2)=Float/100;

	Float-=*(pBCD+2)*100;
	*(pBCD+1)=Float/10;

	Float-=*(pBCD+1)*10;
	*pBCD=Float;
}
//****************************************************************************************************
//function:		void float_to_bcd1(unsigned char *pBCD,float Float);
//description:	convert float variable to 6 bits BCD code ,stored into buffer pointed by pBCD,
//				with one decimal
//parameter:	pBCD---pointer of buffer to store BCD code 
//				Char---char  to be converted
//return:		none
//****************************************************************************************************
void float_to_bcd1(unsigned char xdata *pBCD,float Float)
{

	*(pBCD+4)=Float/1000;
	Float-=*(pBCD+4)*1000;
	*(pBCD+3)=Float/100;
	Float-=*(pBCD+3)*100;
	*(pBCD+2)=Float/10;
	Float-=*(pBCD+2)*10;
	*(pBCD+1)=Float;
	Float-=*(pBCD+1);
	*pBCD=Float/0.1;
}

//****************************************************************************************************
//function:			unsigned char find_data(unsigned int keyword,unsigned int *DataArrayPointer,unsigned n)
//description:		find data by keyword(unsigned int type) from given data array that is in order,return the data's index
//					the found data is always less or equal to the key word
//parameter:		keyword---keyword which to be found;	n---total data number
//					DataArrayPointer---pointer of data array
//return:			zero-base index of the keyword
//****************************************************************************************************
unsigned char find_data(unsigned int keyword,unsigned int code *DataArrayPointer,unsigned char n)
{
	unsigned char m;//compare counter
	unsigned char TempN;//index 
	bit ThanMax=1;//keyword more than maximal element flag
	m=0;
	while(m<n)//
	{
		if(*DataArrayPointer>keyword)//if find element more than keyword
		{
			if(m>0)
				TempN=m-1;//get the less element's index
			else
				TempN=0;
			m=n;//exit
			ThanMax=0;//find the element
		}
		else if(*DataArrayPointer==keyword)//if find element equal to keyword
		{
			TempN=m;
			m=n;//exit
			ThanMax=0;//find the element
		}
		else
		{		
			m++;//next element
			DataArrayPointer++;
		}
	}
	if(ThanMax)//not find element,get the maximal element's index
	{
		TempN=n-1;
	}
	return TempN;
}

//////////////////////////////main function/////////////////////////////////
void main(void) 
{   
	unsigned char loop;
	unsigned char sum;
	unsigned int loop1;
	unsigned int loop2;
	unsigned int loop3;
	unsigned char WaitTimer;
	union {float Float;unsigned char FloatArray[4];}xdata EUnion;
	float xdata TempFloat;

	unsigned char TempLogic;
	wdt_init();
	wdt_refresh();
	init_5045wdt(0x20);
//	SlaveTimer1=SlaveTimer2=0;
	cs5045=0;
	cs5045=1;
	Project_Init();
	wdt_refresh();
	if(read_page_float4(EE_POWER1)!=123.4567)
	{
		////write 1 page,include RunMileage,SingleMileage,TotalMileage,ErrorTimes,FuelUse
		RunTime=0;
		RunErrorTimes=0;
		FuelUse=0;
		RunMileage=0;
		SingleMileage=0;
		TotalMileage=0;

		write_page_float4(RUN_MILEAGE,0);
		write_page_float4(SINGLE_MILEAGE,0);
		wdt_refresh();
		write_page_float4(TOTAL_MILEAGE,0);
		write_byte(RUN_ERROR_TIMES,0);
		write_byte(RUN_TIME,0);
		write_byte(FUEL_USE,0);
		wdt_refresh();
		write_byte(ERROR_CODE0,0);
		write_byte(ERROR_CODE1,0);
		write_byte(ERROR_CODE2,0);
		write_byte(ERROR_CODE3,0);
		wdt_refresh();
		write_byte(ERROR_CODE4,0);
		write_byte(ERROR_CODE5,0);
		write_byte(ERROR_CODE6,0);
		write_byte(ERROR_CODE7,0);
		wdt_refresh();
		for(loop1=0;loop1<10000;loop1++)
		{
			;
		}
		write_page_float4(EE_POWER1,123.4567);          
	}
	
	wdt_refresh();
	cs5045=0;
	_nop_();
	_nop_();
	cs5045=1;
	RunMileage=read_page_float4(RUN_MILEAGE);
	SingleMileage=read_page_float4(SINGLE_MILEAGE);
	TotalMileage=read_page_float4(TOTAL_MILEAGE);
	if((SingleMileage>9999.9)||(SingleMileage<0.01))	
	{
		write_page_float4(SINGLE_MILEAGE,0);
		SingleMileage=0;
	}
	if((TotalMileage>999999)||(TotalMileage<0))	
	{
		write_page_float4(TOTAL_MILEAGE,0);
		TotalMileage=0;
	}
	RunTime=read_byte(RUN_TIME);
	RunErrorTimes=read_byte(RUN_ERROR_TIMES);
	FuelUse=read_byte(FUEL_USE);
	wdt_refresh();
	cs5045=0;
	_nop_();
	_nop_();
	cs5045=1;

	for(loop1=0;loop1<20;loop1++)
	{
		for(loop2=0;loop2<8;loop2++)
		{
			MsgTrans[loop1][loop2]=0;
		}
	}
	for(loop=0;loop<13;loop++)
	{
		ReceiveBuffer[loop]=0;
	}
	wdt_refresh();
	cs5045=0;
	_nop_();
	_nop_();
	cs5045=1;
	for(loop=0;loop<4;loop++)
	{
			fre[loop]=0;
	}
	for(loop=0;loop<5;loop++)
		{
			EngineSpeedArray[loop]=0;
		}
	
	for(loop=0;loop<51;loop++)
	{
		SendBuffer[loop]=0;
	}
	diagnostic[0]=read_byte(ERROR_CODE0);
	diagnostic[1]=read_byte(ERROR_CODE1);
	diagnostic[2]=read_byte(ERROR_CODE2);
	diagnostic[3]=read_byte(ERROR_CODE3);
	diagnostic[4]=read_byte(ERROR_CODE4);
	diagnostic[5]=read_byte(ERROR_CODE6);
	diagnostic[6]=read_byte(ERROR_CODE6);
	diagnostic[7]=read_byte(ERROR_CODE7);

	wdt_refresh();
	cs5045=0;
	_nop_();
	_nop_();
	cs5045=1;

	for(loop=0;loop<8;loop++)
	{
		ADValue[0][loop]=ad_single(0);
	}
	for(loop=0;loop<8;loop++)
	{
		ADValue[1][loop]=ad_single(1);
	}
	wdt_refresh();
	cs5045=0;
	_nop_();
	_nop_();
	cs5045=1;
	SensorValue=0;//calculate sum
	for(loop=0;loop<8;loop++)
	{
		ADValue[1][loop]=ad_single(1);/////////added 2004/09/15//by lihx
		SensorValue+=ADValue[1][loop];
		
	}
	ADResult=SensorValue/8.0+0.5;//calculate average
	SensorValue=sensor_value(300,ADResult);
	if(SensorValue>180)	SensorValue=180;
	if(SensorValue<10)	SensorValue=10;
	FuelQ=10.0/17.0*SensorValue-100.0/17.0+0.5;

	SensorValue=0;//calculate sum
	for(loop=0;loop<8;loop++)
	{
		ADValue[0][loop]=ad_single(0);/////////added 2004/09/15//by lihx
		SensorValue+=ADValue[0][loop];
	}
	ADResult=SensorValue/8.0+0.5;//calculate average
	SensorValue=sensor_value(300,ADResult);
	WaterT=WaterTTable[find_data(SensorValue,WaterTSensorTable,81)];	
	if(WaterT>=44)
	{
		WaterT-=4;
	}
	wdt_refresh();
	cs5045=0;
	_nop_();
	_nop_();
	cs5045=1;
	///////////////////////added for DFqc ////////////////////////////////
///////////////////////20041022//////////////////////////////////////
	SensorValue=0;//calculate sum
	for(loop=0;loop<8;loop++)
	{
		ADValue[2][loop]=ad_single(2);/////////added 2004/09/15//by lihx
		SensorValue+=ADValue[2][loop];
	}
	ADResult=SensorValue/8.0+0.5;//calculate average
	SensorValue=sensor_value(300,ADResult);
	WaterT1=Water1TTable[find_data(SensorValue,Water1TSensorTable,81)];	
/////////////////////////////////////////////////////////////////////

	ClearDelayTimer1=0;
	ClearDelayTimer2=0;
	ClearOnTimer1=0;
	ClearOnTimer2=0;
	ClearErrorFlag=0;
	ClearMileageFlag=0;
	KeyBuffer=0;
	TH0Buffer=0;
	TL0Buffer=0;
	T0IntBuffer=0;
	T0IntCounter=0;
	PowerOnTimer=0;
 ////////////////////////////////////////////////////////////////////////////////////////////////////////
    for(;;)
    {
        wdt_refresh();
		p=MsgTrans;
	    ////////read and send transmission message
			for(loop1=0;loop1<8;loop1++)
			{
				for(loop2=0;loop2<8;loop2++)
				{
				MsgTrans[loop1][loop2]=99;
				}
			}
		cs5045=0;
		_nop_();
		_nop_();
		cs5045=1;
	//	TurnLeft=get_bit(_C_111XM,O11_111XM,p);
	//	TurnRight=get_bit(_C_111XM,O12_111XM,p);
		lamp[0]=Sort_Port_Bit(
								0,//TurnLeft,//左转

⌨️ 快捷键说明

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