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

📄 protocol.c

📁 这是一个
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "P89C60X2.h"
#include "hicj6.h"
#include "fm25040.h"
#include "hd7279.h"
extern void TrsRelay(BYTE YkNo,BYTE YkHf);
extern BYTE xdata Trs_Buf[25];
extern BYTE xdata Rcv_Buf[30];
extern bit Trs_Flag,Rcv_Flag;
BYTE data House_Max,Station;
BYTE data Trs_Wp,Trs_Rp,Rcv_Wp,Rcv_Rp;
extern BYTE data Start;
extern union hdd_long {BYTE Hdd_B[4];unsigned long Hdd_L;} Hdd_Str;
extern union Full_Str {BYTE Full_B[4];unsigned long Full_L;} Full;
BYTE data Short_New[5],Break_New[5];
extern BYTE data Hdd_En,Short_En,Break_En;
extern BYTE data HddEn_Sum,Flash;
extern BYTE data Short_Bak,Break_Bak;
//extern BYTE xdata RelayOffTimes[40];
extern BYTE code Relay_Station;
extern bit Alarm_Flag,Alarm_Check,HddEn_Count;
BYTE data Trs_Comm;
BYTE data Rcv_Comm,Trs_Check;
BYTE data House_R;
BYTE data B3;
BYTE data Power_En,Alarm_Select,Trs_Comm_Bak;

bit All_Hdd;

void eb90(void)
{
  Trs_Buf[0]=0xeb;
  Trs_Buf[1]=0x90;
  Trs_Buf[2]=0x00;
  Trs_Buf[3]=0x00;
  Trs_Buf[4]=0x00;
  Trs_Buf[5]=0x00;
}

void Trs_Edit(void)
{
   BYTE i,Trs_Length;
   Trs_Flag=0;
   switch (Trs_Comm)
       {
        case (0xaa):
                eb90();
              	Trs_Length=5;
                Trs_Buf[6]=Trs_Length;
                Trs_Buf[7]=0;
                Trs_Buf[8]=Trs_Comm_Bak;
                Trs_Buf[9]=Station;
                Trs_Buf[10]=0;
                Trs_Buf[11]=Start&0x80;
                Trs_Check=0;
                for(i=8;i<12;i++)
                 {
                   Trs_Check+=Trs_Buf[i];
                 }
             Trs_Buf[12]=Trs_Check;
             Trs_Wp=13;

          break;


         case (0xb0):
                i=Read1B(250+(House_R-1)/8,0);
                if(i & (1<<((House_R-1)%8)) )
                  Start|=1;
                  else Start&=0x80;
                eb90();
              	Trs_Length=15;
                Trs_Buf[6]=Trs_Length;
                Trs_Buf[7]=0;
                Trs_Buf[8]=Trs_Comm;
                Trs_Buf[9]=Station;
                Trs_Buf[10]=0;
                Trs_Buf[11]=House_R;
                Trs_Buf[12]=Start;
                i=Read1B(200+House_R-1,0);
                Trs_Buf[13]=i&0x0f;// Type
                Trs_Buf[14]=Read1B((House_R-1)*3,1);
                Trs_Buf[15]=Read1B((House_R-1)*3+1,1);
                Trs_Buf[16]=Read1B((House_R-1)*3+2,1);
                i=Read1B(House_R-1+120,1);
                Trs_Buf[17]=i>>4;          //Constant
                Trs_Buf[18]=i&0x0f;
                i=Read1B(200+House_R-1,0);
                Trs_Buf[19]=i>>4;  //Point
                Trs_Buf[20]=0;
                i=Read1B(240+(House_R-1)/8,0);
                if(i & (1<<((House_R-1)%8)) )
                Trs_Buf[20]|=0x04;     //Short
                i=Read1B(245+(House_R-1)/8,0);
                if(i & (1<<((House_R-1)%8)) )
                Trs_Buf[20]|=0x10;     //Break
                i=Read1B(160+(House_R-1)/8,1);
                if(i & (1<<((House_R-1)%8)) )
                Trs_Buf[20]|=0x40;     //Power
                Trs_Buf[21]=0;
                Trs_Check=0;
                for(i=8;i<22;i++)
                 {
                   Trs_Check+=Trs_Buf[i];
                 }
             Trs_Buf[22]=Trs_Check;
             Trs_Wp=23;

          break;
         case (0xbb):
                i=Read1B((250+(House_R-1)/8),0);
                if((1<<((House_R-1)%8))&i)
                 {
                   Start|=0x01;
                 }
                 else Start&=0x80;
                eb90();
              	Trs_Length=6;
                Trs_Buf[6]=Trs_Length;
                Trs_Buf[7]=0;
                Trs_Buf[8]=Trs_Comm_Bak;
                Trs_Buf[9]=Station;
                Trs_Buf[10]=0;
                Trs_Buf[11]=House_R;
                Trs_Buf[12]=Start;
                Trs_Check=0;
                for(i=8;i<13;i++)
                 {
                   Trs_Check+=Trs_Buf[i];
                 }
             Trs_Buf[13]=Trs_Check;
             Trs_Wp=14;

          break;
         case (0xb2):
                if(House_R!=0xff)                    // One Hdd
                {
                    Hdd_Str.Hdd_L=Read_Hdd(House_R-1);
                    i=Read1B(250+((House_R-1)/8),0);
                    if((1<<((House_R-1)%8))&i)
                     {
                       Start|=0x01;
                     }
                     else Start&=0x80;
                  eb90();
              	  Trs_Length=10;
                  Trs_Buf[6]=Trs_Length;
                  Trs_Buf[7]=0;
                  Trs_Buf[8]=Trs_Comm;
                  Trs_Buf[9]=Station;
                  Trs_Buf[10]=0;
                  Trs_Buf[11]=House_R;
                  Trs_Buf[12]=Start;
                  Trs_Buf[13]=Hdd_Str.Hdd_B[3];
                  Trs_Buf[14]=Hdd_Str.Hdd_B[2];
                  Trs_Buf[15]=Hdd_Str.Hdd_B[1];
                  Trs_Buf[16]=Hdd_Str.Hdd_B[0];
                  Trs_Check=0;
                  for(i=8;i<17;i++)
                   {
                     Trs_Check+=Trs_Buf[i];
                   }
                 Trs_Buf[17]=Trs_Check;
                 Trs_Wp=18;
                }
                else                             //All Hdd
                {
                 if(B3==0)     // B3==0
                  {
                	eb90();
                	Trs_Length=HddEn_Sum*6+4;
                        if(HddEn_Sum==0) Trs_Length=10;
                        Trs_Buf[6]=Trs_Length;
                        Trs_Buf[7]=0;
                        Trs_Buf[8]=Trs_Comm;
                        Trs_Buf[9]=Station;
                        Trs_Buf[10]=0;
                        Trs_Check=0;
                        for(i=8;i<11;i++)
                         {
                          Trs_Check+=Trs_Buf[i];
                         }
                        Trs_Wp=11;
                        B3=1;
                        Trs_Flag=1;
                   }
                   else   //B3>0
                   {
                   B3Inc:
                        i=Read1B(250+((B3-1)/8),0);
                        if(HddEn_Sum)
                        {
                          if((1<<((B3-1)%8))&i)
                           {
                             Start|=0x01;
                           }
                           else
                           {
                             Start&=0x80;
                             B3++;
                            goto B3Inc;
                           }
                         }
                        Hdd_Str.Hdd_L=Read_Hdd(B3-1);
                        if(HddEn_Sum==0)
                         {
                          Hdd_Str.Hdd_L=0xffffffff;
                          B3=0xff;

                         }
                	Trs_Buf[0]=B3;
                	Trs_Buf[1]=Start;
                	Trs_Buf[2]=Hdd_Str.Hdd_B[3];
                 	Trs_Buf[3]=Hdd_Str.Hdd_B[2];
                	Trs_Buf[4]=Hdd_Str.Hdd_B[1];
                	Trs_Buf[5]=Hdd_Str.Hdd_B[0];
                	for(i=0;i<6;i++)
                	 {
                	    Trs_Check+=Trs_Buf[i];
                	 }
                	 Trs_Wp=6;
                         Trs_Flag=1;
                	 if(B3==House_Max||HddEn_Sum==0)
                	  {
                	  	Trs_Buf[Trs_Wp]=Trs_Check;
                	  	Trs_Wp++;
                	  	Trs_Flag=0;
                 	  }
                	 B3++;
                   }
                }

          break;

        case (0xb4):
                i=Read1B(250+((House_R-1)/8),0);
                if((1<<((House_R-1)%8))&i)
                 {
                   Start|=0x01;
                 }
                 else Start&=0x80;
                eb90();
              	Trs_Length=10;
                Trs_Buf[6]=Trs_Length;
                Trs_Buf[7]=0;
                Trs_Buf[8]=Trs_Comm;
                Trs_Buf[9]=Station;
                Trs_Buf[10]=0;
                Trs_Buf[11]=House_R;
                Trs_Buf[12]=Start;
                Trs_Buf[13]=0;
                i=Read1B(240+(House_R-1)/8,0);
                if(i & (1<<((House_R-1)%8)) )
                  Trs_Buf[13]|=0x04;     //Short
                i=Read1B(245+(House_R-1)/8,0);
                if(i & (1<<((House_R-1)%8)) )
                  Trs_Buf[13]|=0x10;     //Break
                i=Read1B(160+(House_R-1)/8,1);
                if(i & (1<<((House_R-1)%8)) )
                  Trs_Buf[13]|=0x40;     //Power
                Trs_Buf[14]=0;
                Trs_Buf[15]=0;
                if(Alarm_Select&0x04)
                 {
                  i=Short_New[(House_R-1)/8];
                  if(i & (1<<((House_R-1)%8)) )
                  Trs_Buf[15]|=0x04;     //Short
                  i=Read1B(170+(House_R-1)/8,0);
                  if(i & (1<<((House_R-1)%8)) )
                  Trs_Buf[15]|=0x08;     //Short_Bak
                 }
                if(Alarm_Select&0x10)
                 {
                  i=Break_New[(House_R-1)/8];
                  if(i & (1<<((House_R-1)%8)) )
                  Trs_Buf[15]|=0x10;     //Break
                  i=Read1B(175+(House_R-1)/8,0);
                  if(i & (1<<((House_R-1)%8)) )
                  Trs_Buf[15]|=0x20;     //Break
                 }
                Trs_Buf[16]=0;
                Trs_Check=0;
                for(i=8;i<17;i++)
                 {
                   Trs_Check+=Trs_Buf[i];
                 }
             Trs_Buf[17]=Trs_Check;
             Trs_Wp=18;

          break;

  case (0xe0):

                  eb90();
              	  Trs_Length=6;
                  Trs_Buf[6]=Trs_Length;
                  Trs_Buf[7]=0;
                  Trs_Buf[8]=Trs_Comm;
                  Trs_Buf[9]=Station;
                  Trs_Buf[10]=0;
                  Trs_Buf[11]=House_R;
                  Trs_Buf[12]=Read1B(200+(House_R-1),1);
                  Trs_Check=0;
                  for(i=8;i<13;i++)
                   {
                     Trs_Check+=Trs_Buf[i];
                   }
                 Trs_Buf[13]=Trs_Check;
                 Trs_Wp=14;


        default:
          break;
       }
       DIR485=0;
       if(Trs_Buf[0]==0xeb && Trs_Buf[1]==0x90)
        {
         SBUF=0xfe;
         Trs_Rp=0;
        }
        else
        {
         SBUF=Trs_Buf[0];
         Trs_Rp=1;
        }
}

void Rcv_Pro(void)
{
  BYTE i;//,YkNo,YkHf;
  BYTE Rcv_Check,Rcv_Length,Rcv_Tmp,Tmp;
  if((Rcv_Wp-Rcv_Rp)>(Rcv_Buf[Rcv_Rp+4]+5) && Rcv_Wp>11)
   {
   	Rcv_Flag=0;
   	Rcv_Wp=0;
   	Rcv_Length=Rcv_Buf[Rcv_Rp+4];
   	Rcv_Check=0;
   	for(i=Rcv_Rp+6;i<Rcv_Rp+Rcv_Length+5;i++)
   	 {
   	 	Rcv_Check+=Rcv_Buf[i];
   	 }
         Rcv_Comm=0;
   	if(Rcv_Check==Rcv_Buf[Rcv_Rp+5+Rcv_Length])
   	 {
   	 	Rcv_Comm=Rcv_Buf[Rcv_Rp+6];

   	 }
   	switch (Rcv_Comm)
   	 {
   	 	case (0x20):
                 if(Rcv_Buf[Rcv_Rp+7]==Station
                    ||(Rcv_Buf[Rcv_Rp+7]==0xff&&Rcv_Buf[Rcv_Rp+8]==0xff)&&(!Key))

                   {

                     Trs_Comm=0xaa;
                     Trs_Comm_Bak=0xa0;
                     Trs_Flag=1;

                   }
   	 	break;
               case (0x21):
                 if(!Key)
                   {
                    Station=Rcv_Buf[Rcv_Rp+7];
                    Write1B(Station,164,0);
                    Trs_Comm=0xaa;
                    Trs_Comm_Bak=0xa1;
                    Trs_Flag=1;
                   }
   	 	break;
               case (0x24):
                if(Rcv_Buf[Rcv_Rp+7]==Station
                    ||(Rcv_Buf[Rcv_Rp+7]==0xff&&Rcv_Buf[Rcv_Rp+8]==0xff))
                   {
                    Start=Rcv_Buf[Rcv_Rp+9];
                    if((Start&0x80)==0x80)
                      Write1B(0x80,255,0);
                      else
                      Write1B(0x00,255,0);
                      Flash=0;
                      for(i=0;i<5;i++)
                       {
                        Short_New[i]=0;
                        Break_New[i]=0;
                       }
                     Alarm_Check=1;
                   }
                 if(Rcv_Buf[Rcv_Rp+7]==Station)
                  {
                     Trs_Comm=0xaa;
                     Trs_Comm_Bak=0xa4;
                     Trs_Flag=1;
                  }

   	 	break;
               case (0x30):
                 if(Rcv_Buf[Rcv_Rp+7]==Station)
                   {
                    Trs_Comm=0xb0;
                    House_R=Rcv_Buf[Rcv_Rp+9];
                    Trs_Flag=1;
                   }

⌨️ 快捷键说明

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