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

📄 zijian_task.c

📁 c8051f020实现4个 产UART 口
💻 C
字号:
//  处理床体F76  和地震仪的任务==================================
//  处理床体F76  和地震仪的任务==================================
//  处理床体F76  和地震仪的任务==================================
//  处理床体F76  和地震仪的任务==================================
//  处理床体F76  和地震仪的任务==================================
//  处理床体F76  和地震仪的任务==================================
//  处理床体F76  和地震仪的任务==================================
//  处理床体F76  和地震仪的任务==================================
//  处理床体F76  和地震仪的任务==================================





#include  "all.h"

 //对码命令
code uchar DuiMa_Command[8]={0XEE,0XEE,2,0,2,0XAB};   //对码命令

code uchar DuiMaBoard_ZiJian_Command[8]={0XEE,0XEE,99,0,99,0XAB};   //对码命令
//返回 sum=99;
//       ShangZhuang_message(99, &sum, 1);


code uchar DuiMa_Clear_Command[8]={0XEE,0XEE,3,0,3,0XAB};   //清除对码命令

bit Xin_Status_B;   //新自检 状态标志

								 
void  Ying_da_error(uchar);
void  Ying_da_ok(uchar);
//void   F76_Attand_485(void) ;   

uchar    ZiJian_ChuangTi_Once() ;

uchar	ZiJian_DiZhenYi_Once() ;

/**********************************************************************
**函数原型:   void Attand_485(void)
**入口参数:     Xin_F76_RX_B=1
**出口参数:   无
**返 回 值:   无
**说    明:  处理床体F76  和地震仪的任务
************************************************************************/


uchar zi_s_cnt;
uchar zi_M_cnt;   
bit       En_zijian_B=0;   //强行自检位

//自检任务
 void ZiJian_ATAND (void) _task_ ZIJIAN  {
        while(1) {
		        os_wait2(K_TMO,2);

		   
			 
		        Dog_ZIJIAN_cnt=0;   //看门狗计数器

                      if( En_zijian_B)   {    //强行自检位)
                             
                                goto Ziiiiiiii;
			}
			En_zijian_B=0;
			
                      if(Second_ZiJian==0xff)    {   //自检计时
                                 Second_ZiJian=0;
				  if(++zi_s_cnt>=60)   {   //分钟
                                              zi_s_cnt=0;											  
						   if(Para_all_True.ZiJian_Time!=0)  {
                                                          if(++zi_M_cnt>=Para_all_True.ZiJian_Time)   {
		Ziiiiiiii:    			                           
		                                                  zi_M_cnt=0;
											if(ZiJian_ChuangTi_Once()==0) 
												  ZiJian_ChuangTi_Once();
												  
											if(ZiJian_DiZhenYi_Once()==0)
												  ZiJian_DiZhenYi_Once();		
											if(En_zijian_B==0)
												  Xin_Status_B=1;   //让KEY_232_ATTAND进行发送
											 En_zijian_B=0;   //强行自检位
											 Para_all_True.Change_Flag=1;
								   }
						   }	
						   else ;  //等于0 则不自检
											  
				  }				 

			}
		      //  F76_Attand_485() ;   
 
        }
 }




/**********************************************************************
**函数原型:   void Attand_485(void)
**入口参数:     Xin_F76_RX_B=1
**出口参数:   无

**返 回 值:    1:  成功进行了一次自检

**说    明:  床体自检一次子程序。

上位机指令格式
'@'	'2'	'1'	'0'	0dH
床体回复:
1当床体正常工作,压力正常,正确接收到指令时候通讯格式:
'@'	'O'	'K'	'.'	0dH
OK. :即为工作正常

2当床体正常工作,压力不正常,正确接收到指令时候通讯格式:
'@'	'P'	'N'	'O'	0dH
PNO:即为压力不正常。

3当床体正常工作,压力正常,不能正确接收到指令时候通讯格式:
如收到的指令是错误的,床体将不发送任何信息和动作。
4当床体正常工作,压力不正常,不能正确接收到指令时候通讯格式:
同第3条。
5当床体不正常工作
当床体在待机工作情况时,将不发送任何信息,如果床体在运行过程中,出现停止,而影响设备的运行,将发送信息,其通讯格式为:
'@'	'N'	'O'	'. '	0dH
NO. :即为工作不正常。


************************************************************************/

code  char ChuangTi_ZiJian_Command_1[8]="@210\r";   //床体自检自检命令


uchar    ZiJian_ChuangTi_Once()  {   //f76

              bit okbb=0;

              MoveByte(F76_TX_Buff, (uchar *)ChuangTi_ZiJian_Command_1, 8);
	       Xin_DiZh_RX_B=0;

		
		// FA_f76_Buff();
		 F76_TX_Len=5;  // DiZh_Tx_Buff[3]+6;		
		 F76_TX_cnt=0;	  	       
		 if(bUartBusy==0){	//判断发送中断是否处于激活状态,若没有激活则:
			 	SCON1|=2;  //TI=1;			//激活MCU的串口发送程序			
			 	bUartBusy=1;	//置发送程序已经激活的标志
		 }
		 //FA_F76_Buff();

		 okbb=0;
		 os_wait2(K_TMO,60);	
		 if(Xin_F76_RX_B)  {
		 	       Xin_F76_RX_B=0;
		 	        if(strstr(DiZh_Rx_Buff,"@OK.\r")!=0) {                    //如果收到确ok	
			 		      okbb=1;
					     Para_all_True.ChuangTi_status[0]=1;           // 1:床体正常工作
					     Para_all_True.ChuangTi_status[1]=1;           // 压力正常
					     Para_all_True.ChuangTi_status[2]=1;
					     Para_all_True.Is_ChuangTi_Ok=1;                // 正常
					
		 	  	 }
				 else if(  strstr(DiZh_Rx_Buff,"@PNO\r")!=0 ) {
				 	       okbb=1;
						     Para_all_True.ChuangTi_status[0]=1;    //1:床体正常工作
					     Para_all_True.ChuangTi_status[1]=0;          // 压力不正常
					     Para_all_True.ChuangTi_status[2]=0;
					     Para_all_True.Is_ChuangTi_Ok=0;              //不正常

				 }
				 else if(  strstr(DiZh_Rx_Buff,"@NO.\r")!=0 )  {
				 	       okbb=1;
					      Para_all_True.ChuangTi_status[0]=0;    //1:床体不正常工作
					     Para_all_True.ChuangTi_status[1]=0;          // 压力不正常
					     Para_all_True.ChuangTi_status[2]=0;
					     Para_all_True.Is_ChuangTi_Ok=0;              //不正常

				 }
				 else  {
                                            return(0);   //应答出错
				 }
	 	}	
              else {
			  Para_all_True.ChuangTi_status[0]=0;    //1:床体不正常工作
 		     Para_all_True.ChuangTi_status[1]=0;          // 压力不正常
 		     Para_all_True.ChuangTi_status[2]=0;
 		     Para_all_True.Is_ChuangTi_Ok=0;              //不正常
                     return(0);   //没有应答
		} 

		 
		if(okbb==1)  {
			    Para_all_True.DiZhenYi_status[0]=1;  //正常
			    Para_all_True.Is_DiZhenYi_Ok=1;   //正常
		}
		else  {
                         Para_all_True.DiZhenYi_status[0]=0;  //不正常
                         Para_all_True.Is_DiZhenYi_Ok=0;     //不正常

		}
		 return(1);

}


/*

 3字节数据(Byte1Byte2Byte3)
  Byte1:  0:床体不正常工作,1:床体正常工作
Byte2:  0:压力不正常      1:压力正常
Byte3:  (备用)



*/









/**********************************************************************
**函数原型:   void Attand_485(void)
**入口参数:     Xin_F76_RX_B=1
**出口参数:   无
**返 回 值:   1:成功进行了一次自检
**说    明:  地震仪自检一次子程序。

收到上位机命令(4字节):ZJ+空格+回车
强震仪进行自检,如无故障向上位机发送(4字节):TU+空格+回车
                如有故障向上位机发送(4字节):FS+空格+回车

                

************************************************************************/

code  char Dizh_ZiJian_Command[8]="ZJ \r";   //地震仪自检命令
code  char Dizh_ZiJian_OK[8]="TU \r";   //地震仪自检OK

uchar	ZiJian_DiZhenYi_Once()  {
	
	      bit okbb=0;

              MoveByte(DiZh_Tx_Buff, (uchar *)Dizh_ZiJian_Command, 8);
	       Xin_DiZh_RX_B=0;

		 //FA_DiZhen_Buff();
		 DiZh_TX_Len=4;  // DiZh_Tx_Buff[3]+6;		
		 DiZh_TX_cnt=0;	  	       
		 if(bUartBusy==0){	//判断发送中断是否处于激活状态,若没有激活则:
			 	SCON1|=2;  //TI=1;			//激活MCU的串口发送程序			
			 	bUartBusy=1;	//置发送程序已经激活的标志
		 }
		//FA_DiZhen_Buff();

		 okbb=0;
		 os_wait2(K_TMO,60);	
		 if(Xin_DiZh_RX_B)  {
		 	      Xin_DiZh_RX_B=0;
		 	      if(strstr(DiZh_Rx_Buff,"TU \r")!=0) {
			  	
			 	         //如果收到确ok
			 		   okbb=1;
					
		 	  	}
	 	}	
              else {
			 Para_all_True.DiZhenYi_status[0]=0;  //不正常
                     Para_all_True.Is_DiZhenYi_Ok=0;     //不正常
                     return(0);
		} 
		 
		if(okbb==1)  {
			    Para_all_True.DiZhenYi_status[0]=1;  //正常
			    Para_all_True.Is_DiZhenYi_Ok=1;   //正常
		}
		else  {
                         Para_all_True.DiZhenYi_status[0]=0;  //不正常
                         Para_all_True.Is_DiZhenYi_Ok=0;     //不正常

		}
		 return(1);
}
											
/*
 2字节数据 (Byte1Byte2)
  Byte1:  0:地震仪发生故障,1:地震仪正常工作
Byte2:  (备用)

*/





/**********************************************************************
**函数原型:   void Attand_485(void)
**入口参数:     Xin_F76_RX_B=1
**出口参数:   无
**返 回 值:   无
**说    明:  处理报警板  485   命令之子程序。
************************************************************************/

/*
void F76_Attand_485(void)         //注:中断里面使用寄存器组0,??是否与主程序有冲突
  {  unsigned int i;     //     不用寄存器组0的话,RW24XX不能正常读写时钟
     uchar j;  //,Mlen;
     uchar fun;
     //uchar Tem_lei;
     uchar sum;
    // uchar *Poit;
    //uchar Tem_nuff[32];
   
    fun=0;
    if(  Xin_F76_RX_B==1)
        {
          //Wait(250);
            Xin_F76_RX_B=0;
          i=F76_RX_Buff[1];
          i=i+2;
          sum=0;
          //goto dddd;
          for(j=0;j<i;j++)
             {
               sum=sum+F76_RX_Buff[j];                  //  求代数和
             }
          if(sum==F76_RX_Buff[i]&&F76_RX_Buff[i+1]==0xab)  //校验和等且最后的字节为0XAB
             {

                 switch (F76_RX_Buff[0])
                    {
	                      case 0:      //接收到error ***********************************************************************

	                       break;
	                       case 1:      //接收到OK ***********************************************************************
		  	                          
	                       break;
	                       case 2:      //***********************************************************

	                          
	                      break;
			        case 3:      //**********************************************************
	                        
	                       break;
				  case 4:      //********************************************************
	                          
	                       break;	  		
				  case 5:      //************* 查询所返回数据:Byte2 Byte1 Byte0*******************************************
                                          

						   Ying_da_ok(5);	  
	                       break;	  
				  case 6:      //接收警情的功能码子程序************************************************************
                                     
							  
	                       break;	  	

						   //状态上传
						  //  10:发生 车辆熄火
							//11:发生 车辆点火

				  case 7:    //***********************************
				      
	                      break;
						
				   //车辆的当前状态(布防,撤防, 修车)变化上传送
				  case 8:    //***********************************
                                     
	                      break;
	                      case 16:    //***********************************
	                                 Ying_da_ok(16);
	                      break;
	                      case 17:   //********************************
	                                 Ying_da_ok(17);
	                      break;
	                      case 18:    //****************************
	                               
	                       break;
	                      default:  ;

	                       break;
                    }     // switch (GPRS_F76_RX_Buff[0])   de
             } //if de
             else   {

                      Ying_da_error(F76_RX_Buff[0]);

	      }
   }
}


*/



//=====================================================================================
   //------以上是对上位机的485命令进行处理------------------------------
//=====================================================================================



















/**********************************************************************
**函数原型:   void  Ying_da_error(uchar)
**入口参数:   485的功能码uchar fun
**出口参数:   无
**返 回 值:   无
**说    明:  485应答出错信息的子程序。
************************************************************************/
void  Ying_da_error(uchar fun)
      {
       
            //========== get fa 232 right=============================   
              while(F76_TX_is_over_B==0)   {     //TX所完标志位,没发完再发时要等待	               
			 os_wait2(K_TMO, 25);   //50ms			
	        }		
		 F76_TX_is_over_B=0;   //抢到标志,处暑、延时100MS再发, 串间隔
		 os_wait2(K_TMO, 5);    //10ms 
            //==========get fa 232 right=============================   
	     Fa_F76_buffer(0,&fun,1);
      }
 //===============================================================================





/**********************************************************************
**函数原型:   void   Ying_da_ok(uchar fun)
**入口参数:   485的功能码uchar fun
**出口参数:   无
**返 回 值:   无
**说    明:  485应答正确信息的子程序。
************************************************************************/
void   Ying_da_ok(uchar fun)
     {
        
		  
            //========== get fa 232 right=============================   
              while(F76_TX_is_over_B==0)   {     //TX所完标志位,没发完再发时要等待	               
			 os_wait2(K_TMO, 25);   //50ms			
	        }		
		 F76_TX_is_over_B=0;   //抢到标志,处暑、延时100MS再发, 串间隔
		 os_wait2(K_TMO, 5);    //10ms 
            //==========get fa 232 right=============================   
	     Fa_F76_buffer(1,&fun,1);
	   
     }
 //===============================================================================






⌨️ 快捷键说明

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