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

📄 mmm.c

📁 矿工定位系统单端
💻 C
📖 第 1 页 / 共 3 页
字号:
		                            }
		                            else
		                            {
			                           DataDleReceived = FALSE;   //如果不是结束标记  留下
		                            };
							      };

							 if (Index < SERBUFLEN)		    //将数据写入SerBuffer[]
		                     {
		                       SerBuffer[Index++] = c;
		                     };
		                     RecvState = RECV_DATA_DLE_ETX;
		                     START_T0(T_533_ms);
							 break;

      case RECV_DLE: //Recieve answer from HOST
							 if ( c == DLE)
							 {
                                En485 = SEND;
                                //Ir_En = SEND;
							    for (i = 0; i < (3 + SerBuffer[2] +1); i++)  //send data
		                        {  
			                       SBUF = SerBuffer[i];
			                       while (!TI);
			                       TI = FALSE;
			                       if ( SerBuffer[i] == DLE )	   //send DLE two
			                       {
			                         SBUF = DLE;
			                         while (!TI);
			                         TI = FALSE;
			                       };
		                        };
							 
							 	SBUF = DLE;		   //send END
							 	while (!TI);
			                    TI = FALSE;

								SBUF = ETX;
							 	while (!TI);
			                    TI = FALSE;
							 	RecvState = RECV_DLE_OR_NAK ;
			                    START_T0(T_533_ms);
                                En485 = RECV;
                                //Ir_En = RECV;
							 }
							 else
							 {
							   CALL_isr_T0() ;
							 };
							 break;

      case RECV_DLE_OR_NAK: //Recieve answer from HOST
							 if ( c == DLE)
							 {
							   SendOk = TRUE;
							   SendReady = FALSE;
							   RecvReady = TRUE;
							   RecvState = RECV_STX;
							 }
							 else 
							 {
							   SendOk = FALSE;
							   SendReady = TRUE;
							   RecvReady = FALSE;
							   CALL_isr_T0() ;
							 };
                             En485 = RECV;
                             //Ir_En = RECV;
							 break;

	  default:			     
	                         CALL_isr_T0() ;
					         break;

	};//end of case
   }  //end of if(RecvReady)
  };//end of if(RI)


  if ( TI && !RI )
  {  
	 TI = 0 ;
	 if ( SendReady )
	 {  
		SendReady = FALSE ;
		
	    bcc = SerBuffer[0];   //计算BCC
	    for ( i = 1 ; i < SerBuffer[2]+3 ; i++ )
		{
		  bcc = bcc ^ SerBuffer[i]  ;
		};
		SerBuffer[SerBuffer[2]+3] = bcc;
	    En485 = SEND;
        //Ir_En = SEND;
        SBUF = STX ;             //发送起始位}
		RecvReady = TRUE ;
		RecvState = RECV_DLE ;   //准备接收应答
	//	LED_GREEN = ~LED_GREEN;
		while(!TI) ;
		TI = FALSE ;
        En485 = RECV;
        //Ir_En = RECV;
		START_T0(T_533_ms) ;	    //chao shi 
	 } ;
  };

}
/*************************原有的函数需改变*************************************
*                                                                           *
* Function:     isr_timer0                                                  *
*                                                                           *
* Input:        -                                                           *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
*                                                                           *
*                                                                           *
****************************************************************************/
void isr_timer0(void) interrupt 1 using 0
{
  //TR0=0;
  rest_delay++;
  if(com2)
  {
   if(RXTimerOUT!=0)        //此if{}else{} 为新加入的判断超时功能
    { 
       RXTimerOUT--;
    }
    else
    {
	 
      RXSTAT=0;
      RXNOM=0;
    }
  }//end ifcom2

  if(com1)
  {
    if ( Timer0Cnt != 0 )
    {
	  --Timer0Cnt;
    }
    else
    {
     TR0 = 0 ;
	 if ((RecvState == RECV_DLE) || (RecvState == RECV_DLE_OR_NAK)) //发送起始字超时
	 {
	   ErrorCount++;
	   if ( ErrorCount <= 1)
	   {  	   
	      SendReady = TRUE;
		  TI = 1;
	   }
	   else
	   {
	   	  ErrorCount = 0 ; 
	      SendReady = FALSE;
	      RecvReady = TRUE; 
	      RecvState = RECV_STX;
	      En485 = RECV;
  	      //Ir_En = RECV;

        }
 	  }
	 else					  //接收超时
	  {
	   SendReady = FALSE;
	   RecvReady = TRUE; 
	   RecvState = RECV_STX;
       En485 = RECV;
      
	};
  };
 }
  
   TR0=1;   
  TH0=0X90;
  TL0=0X95;
  //TR0=1;   
}
//**************************************************************
unsigned char  Find(unsigned char addr,bit call)
{	
    unsigned char data i=0,j;
     unsigned int data crc;
    TX_EN=1;
    Delay1ms(2);
   // Test_led=!Test_led;
     RXtem[0]=0X55;
     RXtem[1]=0XAA;
	 RXtem[2]=addr;
	if(call)                //有传呼信息
	{
	   RXtem[3]=0x33;
	 // PutChar1(0x33);
    }
	else
	{
	     RXtem[3]=0x44;
       // PutChar1(0x44);
	}
    crc=cal_crc(RXtem, 4);
    RXtem[4]=crc>>8; 
    RXtem[5]=(unsigned char)crc;
	for(j=0;j<3;j++)
	{
	  for(i=0;i<6;i++)
	  {
	   PutChar1( RXtem[i]);
	  }
    }
	TX_EN=0;
    Comm_On();
   Delay1ms(1);
    rxok=0;              //add
 /*while(!rxok)
	{
	  Delay1ms(1);
	  i++;
	  if(i>15)break;
	}*/
	Delay1ms(22);
   Comm_Off();
    TX_EN=1;
   if(rxok)
   {
     rxok=0;
     if(ring_flg==2)Waring=1;
     return(ring_flg);
   }
   else
    {
	  return 0;// return 0;
	}	

}

/****************************************************************************
*                                                                           *
* Function:     TransferRecord                                              *
*                                                                           *
* Input:        -  uchar 1                                                  *
* Output:       -  0                                                        *
*                                                                           *
* Description:                                                              *
****************************************************************************/
 TransferRecord(unsigned char Day , unsigned int i)
{    
       Day=0;
  		SerBuffer[3] = RemainRec[i][0];//.Flg ;

		SerBuffer[4] = RemainRec[i][1];//ParkingRecord[i].CardID.chrX[3] ;
		SerBuffer[5] =RemainRec[i][2];//ParkingRecord[i].CardID.chrX[2] ;
		SerBuffer[6] =RemainRec[i][3];//ParkingRecord[i].CardID.chrX[1] ;
		SerBuffer[7] =RemainRec[i][4];//ParkingRecord[i].CardID.chrX[0] ;

		SerBuffer[8] = RemainRec[i][5];// ParkingRecord[i].BeginTime.hour ;
		SerBuffer[9] =RemainRec[i][6];// ParkingRecord[i].BeginTime.minute ;
		SerBuffer[10]= RemainRec[i][7];// ParkingRecord[i].BeginTime.second ;

		SerBuffer[11] =RemainRec[i][8];					// ParkingRecord[i].BeginTime.century ;
		SerBuffer[12] =RemainRec[i][9];// ParkingRecord[i].BeginTime.year ;
		SerBuffer[13] =RemainRec[i][10];// ParkingRecord[i].BeginTime.month ;
		SerBuffer[14] =RemainRec[i][11];// ParkingRecord[i].BeginTime.day ;
        SerBuffer[15] =RemainRec[i][12];
        SerBuffer[16] =RemainRec[i][13];
        SerBuffer[17] =RemainRec[i][14];
        SerBuffer[18] =RemainRec[i][15];
        //SerBuffer[14] =RemainRec[i][16];
}
//*************************************************************************
void  SetPosNum(unsigned char xdata *dat)
{
 //ByteWrite_Check (124,dat[0]); 
  ByteWrite_Check(20,dat[0]);
 ADDR=dat[0];
 
}
 /****************************************************************************
*              	cmd_execution();                                                             *
* Function:                                            *
*                                                                           *
* Input:                                                                    *
* Output:       -                                                           *
*                                                                           *
* Description:                                                              *
****************************************************************************/
void cmd_execution(void)
{   unsigned char len ; //Status ;//, adr ;
	//unsigned int e;
    //unsigned char idata size , tt[2];
      unsigned char i;
	//WatchDog();
	len = SerBuffer[2] ; 
	SerBuffer[2] = 0 ;

    switch ( SerBuffer[1] )
	{ 
        case 0x80:				  //Write time
                
				SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;  
          case 0x81:				  //green LED
                if ( SerBuffer[3] == 1) {LED_GREEN  = 1;}
				else if( SerBuffer[3] == 0) { LED_GREEN  = 0;};    

				SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;

	  case 0x82:				  //red RED
                if ( SerBuffer[3] == 1) {LED_RED  = 1;}
				else if( SerBuffer[3] == 0) { LED_RED  = 0;};    

				SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;


	  case 0x83:				  //Transfer Record
	  		//	Status = TransferRecord(SerBuffer[3],SerBuffer[4]);
			//	SerBuffer[1] = Status;
			    recordint.chrX[1]=SerBuffer[4];
			    recordint.chrX[0]=SerBuffer[5];
                
	  		    TransferRecord(SerBuffer[3],recordint.intX);
				SerBuffer[1] =0;
				SerBuffer[2] =16;
				
               
                
                
				break;

	  case 0x85:				  //Config FeeRate
               for(i=0;i<8;i++)
	  		   Call_id[i]= SerBuffer[i+4]; 
				SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;

	  case 0x86:				  //return ocuppy or vacance
			
				SerBuffer[2] = 0;
				break;

	  case 0x87:				  //Set Meter Number
				//MeterNum.chrX[3] = SerBuffer[3]; 
			//	MeterNum.chrX[2] = SerBuffer[4]; 
			//	MeterNum.chrX[1] = SerBuffer[5]; 
			//	MeterNum.chrX[0] = SerBuffer[6]; 
				SetPosNum(&SerBuffer[3]); //add
	  			SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;
      case 0x90:
               	SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;
      case 0x91:
               	SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;
      case 0x92:
               	SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				
				break;
      case 0x93:
               	SerBuffer[1] = 0;
				SerBuffer[2] = 0;
				break;


	  default:
				SerBuffer[1] = 250;  //command error
				SerBuffer[2] = 0;
			    break;
	};  

⌨️ 快捷键说明

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