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

📄 framemodule.c

📁 该程序完成了c8051外围电路的驱动和串口协议的编写。希望能给大家学习51单片机带来帮助
💻 C
📖 第 1 页 / 共 5 页
字号:
							JudgeAndReportSpecialSystemEvenStatus(MainModule.uchReportNumber + 3);						
						}
					}	
				}				
			}	

			break;

		case 0x02:	   //Config状态

			break;

		case 0x03:
			if (MainModule.uchSelfTestControlStatus == 0x00)   //停止自检
			{
				StopSelfLEDControl();		
			}
			else if (MainModule.uchSelfTestControlStatus == 0x02)
			{
				StartSelfLEDControl();			
			}
			else if (MainModule.uchSelfTestControlStatus == 0x03)
			{
				StopSelfLEDControl();						
			}
			break;
												  
		case 0x04:			//标定
			switch(MainModule.uchCalibrationStatus[0])			//第一通道
	   		{
	   			case 0:							      //电流标定,
					CalculateCalibrateValue(1,0xff);
//					InitCalibrationPara(1);					
					WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
					MainModule.uchCalibrationStatus[0] = 0xff;		 //不做任何标定
					InitFramemoduleParameters();		//标定完成后重新初始化
					
					break;

				case 1:	                             //Caculate Zero
					CalculateCalibrationAD(1,0);
					WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
					MainModule.uchCalibrationStatus[0] = 0xff;
					InitFramemoduleParameters();
				
					break;

				case 2:	                             //Caculate Span
					CalculateCalibrationAD(1,1);
					WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
					MainModule.uchCalibrationStatus[0] = 0xff;
					InitFramemoduleParameters();
					break;

				case 3:	                            //GAP Zero
					CalculateCalibrateGAPAD(1,0);
					WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
					MainModule.uchCalibrationStatus[0] = 0xff;
					InitFramemoduleParameters();
					break;

				case 4:	                             //GAP Span
					CalculateCalibrateGAPAD(1,1);
					WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
					MainModule.uchCalibrationStatus[0] = 0xff;
					InitFramemoduleParameters();
					break;	

				case 5:							 //温度模块的标定
					break;

				case 6:							//	温度模块的标定
					break;

				case 7:							// 温度模块的标定
					break;

				case 8:
					DirectCurrentOutput(1, 430);	 //输出大约2.50到2.51mA的电流
					s_uchDACalibrationComplete1 = 1;
					MainModule.uchCalibrationStatus[0] = 0xff;
					break;

				case 9:					
					DirectCurrentOutput(1, 3700);	 //输出大约21.29到21.30mA的电流
					s_uchDACalibrationComplete1 = 1;
					MainModule.uchCalibrationStatus[0] = 0xff;
					break;

				default:                            //Do Nothing
					break;
	   		}
	   		switch(MainModule.uchCalibrationStatus[1])	   //第二通道
	   		{
	   			case 0:							      //不标定,
					CalculateCalibrateValue(2,0xff);
//					InitCalibrationPara(2);
					WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
					MainModule.uchCalibrationStatus[1] = 0xff;
					InitFramemoduleParameters();		//标定完成后重新初始化
					break;
				case 1:	                            //Caculate Zero
					CalculateCalibrationAD(2,0);
					WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
					MainModule.uchCalibrationStatus[1] = 0xff;
					InitFramemoduleParameters();
					break;
				case 2:	                            //Caculate Span
					CalculateCalibrationAD(2,1);
					WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
					MainModule.uchCalibrationStatus[1] = 0xff;
					InitFramemoduleParameters();
					break;
				case 3:	                              //GAP Zero
					CalculateCalibrateGAPAD(2,0);
					WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
					MainModule.uchCalibrationStatus[1] = 0xff;
					InitFramemoduleParameters();
					break;
				case 4:	                               //GAP Span
					CalculateCalibrateGAPAD(2,1);
					WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
					MainModule.uchCalibrationStatus[1] = 0xff;
					InitFramemoduleParameters();
					break;	   
				case 5:							 //温度模块的标定
					break;

				case 6:							//	温度模块的标定
					break;

				case 7:							// 温度模块的标定
					break;

				case 8:
					DirectCurrentOutput(2, 430);	 //输出大约2.50到2.51mA的电流
					s_uchDACalibrationComplete2 = 1;
					MainModule.uchCalibrationStatus[1] = 0xff;
					break;

				case 9:
					DirectCurrentOutput(2, 3700);	 //输出大约21.29到21.30mA的电流
					s_uchDACalibrationComplete2 = 1;
					MainModule.uchCalibrationStatus[1] = 0xff;
					break;
				default:                             //Do Nothing
					break;
	   		}  
			break;
	}
}
//--------------------------------------------------------------------------------------
//函数名称:void CaculateReportMeasureValue(unsigned char uchChannel)
//功    能:根据状态计算返回上位机的实时测量值	  
//输入参数:通道号
//返    回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void CaculateReportMeasureValue(unsigned char uchChannel)
{	
	long xdata lTempReportCurrentMeasureValue;	
	
	if ((MainModule.uchEnableStatus[uchChannel - 1] == 1) && (MainModule.uchChannelOK[uchChannel - 1] == 0))
	{	
		if (MainModule.uchNotOKToOKStatus[uchChannel - 1] == 1)
		{
			lTempReportCurrentMeasureValue = (long)MainModule.iPercentValue[uchChannel - 1] * All.Para.iDataSpan / 5000;   
			if (lTempReportCurrentMeasureValue > 32767)
			{
				lTempReportCurrentMeasureValue = 32767;	
			}
			MainModule.iReportCurrentMeasureValue[uchChannel - 1] = lTempReportCurrentMeasureValue;  
		}		        	
	}
	else if ((MainModule.uchEnableStatus[uchChannel - 1] == 1) && (MainModule.uchChannelOK[uchChannel - 1] != 0))	
	{	
		MainModule.iReportCurrentMeasureValue[uchChannel - 1] = 0;

	}
	else if (MainModule.uchEnableStatus[uchChannel - 1] == 0)
	{
		MainModule.uchChannelOK[uchChannel - 1] = 0;			  //通道状态及间隙电压为零
		MainModule.iReportCurrentMeasureValue[uchChannel - 1] = 0;		   //实时测量值为零
		MainModule.uchChannelGapStatus[uchChannel - 1] = 0;		
	}
	FeedDog();
}

//--------------------------------------------------------------------------------------
//函数名称:void SetNotOKToOKFlag(unsigned char uchChannel,unsigned char uchNOTOKTOOKFlag)
//功    能:将NOTOK到OK状态的标志创送到框架模块
//输入参数:通道号,标志位												 
//返    回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void SetNotOKToOKFlag(unsigned char uchChannel,unsigned char uchNOTOKTOOKFlag)
{
	MainModule.uchNotOKToOKStatus[uchChannel - 1] = uchNOTOKTOOKFlag;
}

//--------------------------------------------------------------------------------------
//函数名称:void SetFullScale(unsigned int uiFullScaleValue)
//功    能:将满量程数据范围设置到框架参数中
//输入参数:满量程数据范围数据												 
//返    回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void SetFullScale(unsigned int uiFullScaleValue)
{
	All.Para.iDataSpan = uiFullScaleValue;
}

//--------------------------------------------------------------------------------------
//函数名称:void CaculateReportGapValue(unsigned char uchChannel)
//功    能:根据状态计算返回上位机的实时间隙电压值	  	
//输入参数:通道号												 
//返    回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void CaculateReportGapValue(unsigned char uchChannel)
{
	if (MainModule.uchEnableStatus[uchChannel - 1] == 1) 
	{
		MainModule.iReportCurrentGAPValue[uchChannel - 1] = MainModule.iGapVoltage[uchChannel - 1];
		if ((All.Para.Ch[0].uiChType == 13) || (All.Para.Ch[0].uiChType == 14) || (All.Para.Ch[0].uiChType == 16)
			|| (All.Para.Ch[0].uiChType == 17) || (All.Para.Ch[0].uiChType == 18))			//
		{
			if(MainModule.uchChannelOK[uchChannel - 1] != 0)
			{
				MainModule.iReportCurrentGAPValue[uchChannel - 1] = MainModule.iNOTOKGapVoltage[uchChannel - 1];
			}
			else
			{
				;
			}
		}
	}	
	else 
	{
		MainModule.uchChannelOK[uchChannel - 1] = 0;
		MainModule.uchChannelGapStatus[uchChannel - 1] = 0;	
		MainModule.iReportCurrentGAPValue[uchChannel - 1] = 10 * 1000;	//间隙电压×1000 
	}
}

//--------------------------------------------------------------------------------------
//函数名称:void SetGapStatusMain(unsigned char uchChannel)
//功    能:状态模块给主框架设置通道Gap状态
//输入参数:通道号;Gap状态
//返    回:无
//完成日期:6/21/2007
//---------------------------------------------------------------------------------------
void SetGapStatusMain(unsigned char uchChannel, unsigned char uchGapStatus)
{
	MainModule.uchChannelGapStatus[uchChannel - 1] = uchGapStatus;		
}

//-----------------------------------------------------------------------
//函数名称: unsigned char AlertStatus(unsigned char uchChannel)
//功    能:返回通道的Alert状态
//输入参数:通道号
//返    回:1 Alert 有报警; 0 Alert 无报警
//完成日期:6/21/2007
//-----------------------------------------------------------------------

unsigned char AlertStatus(unsigned char uchChannel)
{
	unsigned char uchAlarmStatus = 0;
	uchAlarmStatus = MainModule.uchChannelAlarm[uchChannel - 1] & 0x06;
	if(uchAlarmStatus != 0)
	{
		return 1;
	}
	else
	{
		return 0;	
	}
}

//-----------------------------------------------------------------------
//函数名称: unsigned char DangerStatus(unsigned char uchChannel)
//功    能:返回通道的Danger状态
//输入参数:通道号
//返    回:1 Danger 有报警; 0 Danger 无报警
//完成日期:6/21/2007
//-----------------------------------------------------------------------

unsigned char DangerStatus(unsigned char uchChannel)
{
	unsigned char uchAlarmStatus = 0;
	uchAlarmStatus = MainModule.uchChannelAlarm[uchChannel - 1] & 0x09;
	if(uchAlarmStatus != 0)
	{
		return 1;
	}
	else
	{
		return 0;	
	} 
}

//-----------------------------------------------------------------------
//函数名称: void ChannelStatus(unsigned char uchChannel)
//功    能:将通道的各个状态组合到一个字节中,目的是上报状态时应用
//输入参数:通道号
//返    回:通道状态
//完成日期:6/21/2007
//-----------------------------------------------------------------------
unsigned char ChannelStatus(unsigned char uchChannel)
{
	unsigned char xdata uchChannelStatus;	
	unsigned char xdata uchTempData[2];	
	unsigned char xdata uchTempTripleData;	
	
	uchChannelStatus = 0;
	if (MainModule.uchEnableStatus[uchChannel - 1] == 1)
	{
		if (MainModule.uchChannelOK[uchChannel - 1] == 0)	//当通道OK时,使原值,否则无论是通道高报警或是低报警,通道都是NOT OK 
		{
			uchTempData[uchChannel - 1] = 0;
		}
		else 
		{
			uchTempData[uchChannel - 1] = 1;
		}
		uchChannelStatus |= uchTempData[uchChannel - 1];
		uchChannelStatus |= (AlertStatus(uchChannel) << 1);
		uchChannelStatus |= (DangerStatus(uchChannel) << 2);
		JudgeBypassFlag(uchChannel);
		uchChannelStatus |= (MainModule.uchBypassFlag[uchChannel - 1] << 3);

		uchTempTripleData = JudgeTripleStatus(uchChannel);
		uchChannelStatus |= (uchTempTripleData << 4);
		uchChannelStatus |= ((All.Para.Ch[uchChannel - 1].uiChEnable ^ 0x01) << 5); 
/*		if (MainModule.uchChannelGapStatus[uchChannel - 1] == 0)
		{
			uchTempData[uchChannel - 1] = 0;
		}
		else
		{
			uchTempData[uchChannel - 1] = 1;
		}		*/

		if (All.Para.Ch[0].uiChType == 22)
		{
			if ((MainModule.uchChannelGapStatus[0] == 0) && (MainModule.uchChannelGapStatus[1] == 0))
			{
				uchTempData[uchChannel - 1] = 0;
			}
			else
			{
				uchTempData[uchChannel - 1] = 1;
			}	
		}
		else
		{
			if (MainModule.uchChannelGapStatus[uchChannel - 1] == 0)
			{
				uchTempData[uchChannel - 1] = 0;
			}
			else
			{
				uchTempData[uchChannel - 1] = 1;
			}
		}





⌨️ 快捷键说明

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