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

📄 mmm.c

📁 矿工定位系统单端
💻 C
📖 第 1 页 / 共 2 页
字号:
    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,lensend=0 ; //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] =1 ;
				SerBuffer[3]= Numptr*2;

				break;  
          case 0x81:				  //green LED
             

				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;
			    lensend= Numptr*2;
			  	SerBuffer[1] =0;
				SerBuffer[2] =lensend+4;
                memcpy(&SerBuffer[3], RemainRec,lensend);
                SerBuffer[3+lensend]=0;//wasi
                SerBuffer[4+lensend]=0;//wasi

				rx_bcc.intX=cal_crc3964(&SerBuffer[3],2+lensend);//16);
                SerBuffer[5+lensend]=rx_bcc.chrX[0];
				SerBuffer[6+lensend]=rx_bcc.chrX[1];
			
				
               
                
                
				break;

	  case 0x85:				  //
               for(i=0;i<8;i++)
	  		   Call_id[i]= SerBuffer[i*2+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;
	};  
                         
}
/********************************************************************8*/
void Check_call(void)
{
   unsigned char idata i,tt;
   for(i=0;i<8;i++)
   {
    if((Call_id[i]>0)&&(Call_id[i]<201))
	{   
	   tt=Find(Call_id[i],1);
	   if(!tt)Find(Call_id[i],1);

	}
   }
}
//*********************************************************************8
void addNum(unsigned int num)
{
  inttem.intX= num;
  RemainRec[Numptr][0]=inttem.chrX[0];
  RemainRec[Numptr][1]=inttem.chrX[1];
  Numptr++;
}
//******************************************************
bit CheckNum(unsigned int num)
{
  unsigned char i;
  for(i=0;i<Numptr;i++)
  {
   inttem.chrX[0]=RemainRec[i][0];
   inttem.chrX[1]=RemainRec[i][1];
   if((inttem.intX&0x3fff)==num)
    return 1;
  }
  return 0;
}
//******************************************************
void SetWingNum(unsigned int num)
{
  unsigned char i;
  for(i=0;i<Numptr;i++)
  {
   inttem.chrX[0]=RemainRec[i][0];
   inttem.chrX[1]=RemainRec[i][1];
   if((inttem.intX&0x3fff)==num)
   {
     inttem.intX=inttem.intX|0x4000 ;
     RemainRec[i][0]=inttem.chrX[0];
     RemainRec[i][1]=inttem.chrX[1];
   }
  }
 
}
//******************************************************
void ClrWingNum(unsigned int num)
{
  unsigned char i;
  for(i=0;i<Numptr;i++)
  {
   inttem.chrX[0]=RemainRec[i][0];
   inttem.chrX[1]=RemainRec[i][1];
   if((inttem.intX&0x3fff)==num)
   {
     inttem.intX= num;
     RemainRec[i][0]=inttem.chrX[0];
     RemainRec[i][1]=inttem.chrX[1];
   }
  }
 
}
//******************************************************************
void DelNum(unsigned int num)
{
  unsigned char i,j;
  for(i=0;i<Numptr;i++)
  {
   inttem.chrX[0]=RemainRec[i][0];
   inttem.chrX[1]=RemainRec[i][1];
   if((inttem.intX&0x3fff)==num)
    break;
  }
  if(i<Numptr)
  {
    for(j=i;j<Numptr;j++)
    {
	 RemainRec[j][0]= RemainRec[j+1][0];
     RemainRec[j][1]= RemainRec[j+1][1];

	}
   Numptr--;
  }
}
/***************
void test(void)
{
  unsigned char x;
  while(1)
  {
    addNum(x);
	x++;
	if( CheckNum(8))
	{
	  DelNum(7);
	}
  }
}*/
//**************************************************************************
void main(void)
{
     unsigned int idata  xx=0;//,bcc;

     unsigned char idata i=0,ttt;
	 unsigned long idata yyy=0;
    unsigned int  numtem=0;
 //unsigned char xdata ccc[6]={0x00,0x18,0x00,0x1e,0x00,0x00};
     
	// numtem=cal_crc3964(ccc,6);//16);
   TX_EN=0;
   rest_delay=0;
   En485 = RECV;
   //Delay100ms(1);
   TX_EN=1;
   init_com();
   InitREG();
   UartInit();
   Test_led=!Test_led;
   Delay100ms(1);  
   Comm_Off();
   PWR_UP=1;
   Test_led=!Test_led;
   EA=1;
   Numptr=0;
   Init_X25045(0x00);


 
  for(i=0;i++;i<200)//clr
  {
   RemainRec[i][0]=0; RemainRec[i][1]=0;
  }
   if((ByteRead_Check(20)==0x00)||(ByteRead_Check(20)==0xff))ADDR=0XD2;
  else
   ADDR=ByteRead_Check(20);
  // ADDR=0xd2;
  if(ADDR%2)
   {
    CS=0;
   }
  else
   {
     CS=1;
    }
   CS=1;
 
   Watch_dog();
   for(i=0;i<8;i++)Call_id[i]=0;




  while(1)
   {
     /*init_com();
   InitREG();
   UartInit(); */
     TX_EN=1;
	 Watch_dog();
  if(rest_delay>750)while(1);
 
   if (Cmdok)		  //通讯
	{ 
	   
	    rest_delay=0;
	    Watch_dog();
      	Cmdok = FALSE;
		Waring=0;                    //报警清掉
	  	RecvReady = FALSE;
	  	SendReady = FALSE;
	  	cmd_execution();
	  	SendReady = TRUE ;   //发起始字
	  	TI = 1;
     
    }
 
   for(i=1;i<201;i++)
   { 
     if((i==1)||(i==150)||(i==50)||(i==100))Check_call();
     if(rest_delay>750)while(1);
     Watch_dog(); 
    if (Cmdok)		  //通讯
	 {
	    
	  	Waring=0;    
        rest_delay=0;
      	Cmdok = FALSE;
	  	RecvReady = FALSE;
	  	SendReady = FALSE;
	  	cmd_execution();
	  	SendReady = TRUE ;   //发起始字
	  	TI = 1;
       Test_led=!Test_led;
     }
	  Watch_dog(); 
     ttt=Find(i,0);
      if(ttt)
	    {
		  Card_id[i]=3;//循环监测的次数
	      Test_led=!Test_led;//在区域
          if(!CheckNum(i))
		  {
		    numtem=i;
		    if(ttt==2)
              {
                numtem=numtem|0x4000;
               /* for(j=0;j<10;j++)
                { Delay1ms(50);
                Test_led=!Test_led;
                }*/
              }
            addNum(numtem);   //加入
		  }
		  else
		  { 
		    if(ttt==2)
            {  
			   numtem=i;
		       SetWingNum(numtem);
                /*for(j=0;j<10;j++)
                { Delay1ms(50);
                Test_led=!Test_led;
                }*/
			}
			else
			{   
			     if(!Waring)              //已经取走
				  {  
			        numtem=i;
			        ClrWingNum(numtem);
				  }
			}
		  }
	    }
		else                                //不再区域
		{
           if(CheckNum(i)) //如果原来就存在
		   { 
	           ttt=Find(i,0);     //再次查找
               if(ttt==0)
	            {
				       Card_id[i]--;
					   if( Card_id[i]==0)
					   {
                          DelNum(i);
					   }
                }
		   }
		   else     //原来就不在
		   {	 
	            if(!Waring)              //没有报警信息
				  {
			        DelNum(i);
				  }
		   }
		     
		}
	
  }
}
}

⌨️ 快捷键说明

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