📄 protocol.c
字号:
#include "REGX52.H"
#include "yk.h"
extern DWORD Read_Hdd(BYTE);
extern void Write_Hdd(BYTE);
extern BYTE Read1B(BYTE cAddress,bit bRegion);
extern void Write1B(BYTE cData,BYTE cAddress,bit bRegion);
extern void YkPro(unsigned char,unsigned char);
extern BYTE data Station;
extern BYTE data Trs_Buf[25];
extern BYTE idata Rcv_Buf[30];
extern bit Trs_Flag,Rcv_Flag;
extern bit data Yk_All,Disp_Flag;
extern BYTE data House_Max;
extern BYTE data Trs_Wp,Trs_Rp,Rcv_Wp,Rcv_Rp;
extern BYTE data Start;
extern BYTE idata YkNo,YkHf,YkStatus,Yk_En;
extern BYTE xdata Second ;// _at_ 0x00;
extern BYTE xdata Minute ;// _at_ 0x02;
extern BYTE xdata Hour ;// _at_ 0x04;
extern BYTE xdata Week ;// _at_ 0x06;
extern BYTE xdata Day ;// _at_ 0x07;
extern BYTE xdata Month ;// _at_ 0x08;
extern BYTE xdata Year ;// _at_ 0x09;
extern BYTE xdata RegB;
BYTE data Trs_Comm,Trs_Comm_Bak;
BYTE data Rcv_Comm,Trs_Check;
BYTE data House_R,Week_Tmp,No_Tmp;
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]=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 (0xbb):
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]=YkStatus;
Trs_Check=0;
for(i=8;i<13;i++)
{
Trs_Check+=Trs_Buf[i];
}
Trs_Buf[13]=Trs_Check;
Trs_Wp=14;
break;
case (0xd2): // 查询供电时段
eb90();
Trs_Length=13;
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]=0;
Trs_Buf[12]=0;
Trs_Buf[13]=0xff;
Trs_Buf[14]=Week_Tmp;
Trs_Buf[15]=No_Tmp;
Trs_Buf[16]=Read1B(20+10*(Week_Tmp-1)+2*(No_Tmp-1),0); //H Hour
Trs_Buf[17]=Read1B(20+10*(Week_Tmp-1)+2*(No_Tmp-1)+1,0); //H Minute
Trs_Buf[18]=Read1B(90+10*(Week_Tmp-1)+2*(No_Tmp-1),0); //F Hour
Trs_Buf[19]=Read1B(90+10*(Week_Tmp-1)+2*(No_Tmp-1)+1,0); //F Minute
Trs_Check=0;
for(i=8;i<20;i++)
{
Trs_Check+=Trs_Buf[i];
}
Trs_Buf[20]=Trs_Check;
Trs_Wp=21;
break;
case (0xd8): // 时钟
eb90();
Trs_Length=11;
Trs_Buf[6]=Trs_Length;
Trs_Buf[7]=0;
Trs_Buf[8]=Trs_Comm;
Trs_Buf[9]=Station;
Trs_Buf[10]=0;
Cs12887=0;
Trs_Buf[11]=Year;
Trs_Buf[12]=Month;
Trs_Buf[13]=Day;
Trs_Buf[14]=Hour;
Trs_Buf[15]=Minute;
Trs_Buf[16]=Second;
Trs_Buf[17]=Week;
Cs12887=1;
Trs_Check=0;
for(i=8;i<18;i++)
{
Trs_Check+=Trs_Buf[i];
}
Trs_Buf[18]=Trs_Check;
Trs_Wp=19;
break;
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;
BYTE Rcv_Check,Rcv_Length,Rcv_Tmp,Tmp,Tmp1;
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,0,0);
Trs_Comm=0xaa;
Trs_Comm_Bak=0xa1;
Trs_Flag=1;
}
break;
case (0x31):
if(Rcv_Buf[Rcv_Rp+7]==Station)
{
House_R=Rcv_Buf[Rcv_Rp+9];
if(House_R!=0xff)
{
Yk_En=Read1B(15+(House_R-1)/8,0);
if (Rcv_Buf[Rcv_Rp+10]&0x80)
{
Yk_En|=(1<<((House_R-1)%8));
YkStatus=0x81;
}
else
{
Yk_En&=~(1<<((House_R-1)%8));
YkStatus=0x80;
}
Write1B(Yk_En,15+(House_R-1)/8,0);
}
else //0xff
{
if (Rcv_Buf[Rcv_Rp+10]&0x80)
{
YkStatus=0x81;
for(i=0;i<5;i++)
{
Write1B(0xff,15+i,0);
}
}
else
{
YkStatus=0x80;
for(i=0;i<5;i++)
{
Write1B(0x0,15+i,0);
}
}
}
Trs_Comm=0xbb;
Trs_Comm_Bak=0xb1;
Trs_Flag=1;
Disp_Flag=1;
}
break;
case (0x36): // TongDuan Status
if(Rcv_Buf[Rcv_Rp+7]==Station)
{
Trs_Comm=0xbb;
Trs_Comm_Bak=0xb6;
Trs_Flag=1;
House_R=Rcv_Buf[Rcv_Rp+9];
i=(House_R-1)/8;
Tmp=Read1B(15+i,0);
i=(House_R-1)%8;
Tmp=Tmp>>i;
if(Tmp&1) //yk enable
{
i=(House_R-1)/8;
Tmp=Read1B(10+i,0);
i=(House_R-1)%8;
Tmp=Tmp>>i;
if(Tmp&1)
{
YkStatus=0xcc;
}
else
{
YkStatus=0x33;
}
}
else // yk disable
{
YkStatus=0x55;
}
}
break;
case (0x37): //Yk TongDuan
if(Rcv_Buf[Rcv_Rp+7]==Station
||(Rcv_Buf[Rcv_Rp+7]==0xff&&Rcv_Buf[Rcv_Rp+8]==0xff))
{
House_R=Rcv_Buf[Rcv_Rp+9];
YkNo=House_R-1; //YkNo
YkHf=Rcv_Buf[Rcv_Rp+10]; //YkHf
if(House_R==0xff)
{
Yk_All=1;
YkNo=0;
}
else
{
Yk_All=0;
i=YkNo/8;
Tmp=Read1B(15+i,0);
i=YkNo%8;
Tmp=(Tmp>>i)&1;
{
YkPro(YkNo,YkHf);
Trs_Comm=0xbb;
Trs_Comm_Bak=0xb7;
YkStatus=0xaa;
Trs_Flag=1;
}
}
}
break;
case (0x52): //供电时段查询
if(Rcv_Buf[Rcv_Rp+7]==Station)
{
Week_Tmp=Rcv_Buf[Rcv_Rp+12];
No_Tmp=Rcv_Buf[Rcv_Rp+13];
Trs_Comm=0xD2;
Trs_Flag=1;
}
break;
case (0x53): //供电时段设置
if(Rcv_Buf[Rcv_Rp+7]==Station
||(Rcv_Buf[Rcv_Rp+7]==0xff&&Rcv_Buf[Rcv_Rp+8]==0xff))
{
i=Rcv_Buf[Rcv_Rp+12]-1; //WEEK
Tmp=Rcv_Buf[Rcv_Rp+13]-1; //序号
if(i<7 && Tmp<5)
{
Tmp1=Rcv_Buf[Rcv_Rp+14];
Write1B(Tmp1,20+10*i+2*Tmp,0); //开始 时
Tmp1=Rcv_Buf[Rcv_Rp+15];
Write1B(Tmp1,20+10*i+2*Tmp+1,0); //开始 分
Tmp1=Rcv_Buf[Rcv_Rp+16];
Write1B(Tmp1,90+10*i+2*Tmp,0); //结束 时
Tmp1=Rcv_Buf[Rcv_Rp+17];
Write1B(Tmp1,90+10*i+2*Tmp+1,0); //结束 分
Trs_Comm=0xaa;
Trs_Comm_Bak=0xD3;
Trs_Flag=1;
}
}
break;
case (0x58): //查询时钟
if(Rcv_Buf[Rcv_Rp+7]==Station)
{
Trs_Comm=0xd8;
Trs_Flag=1;
}
break;
case (0x59): //对钟
if(Rcv_Buf[Rcv_Rp+7]==Station
||(Rcv_Buf[Rcv_Rp+7]==0xff&&Rcv_Buf[Rcv_Rp+8]==0xff))
{
Cs12887=0;
RegB|=0x80;
Year=Rcv_Buf[Rcv_Rp+9];
Month=Rcv_Buf[Rcv_Rp+10];
Day=Rcv_Buf[Rcv_Rp+11];
Hour=Rcv_Buf[Rcv_Rp+12];
Minute=Rcv_Buf[Rcv_Rp+13];
Second=Rcv_Buf[Rcv_Rp+14];
Week=Rcv_Buf[Rcv_Rp+15];
RegB&=0x7f;
Cs12887=1;
Trs_Comm=0xaa;
Trs_Comm_Bak=0xD9;
Trs_Flag=1;
}
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -