📄 mainback.c
字号:
///ES=0;RI=0;TI=1;///mod,03-8-22
printf("AT+CMGD=1\r\n"); //删除no.1
Clear_rcv_buff();
delay(1);ES=1;
//delay(2000);
t50ms=0;t1s1=0;
//Clear_rcv_buff();///add,12-13
message_bit=0;///add,03-8-22来短信标志
return;
}
if((rcv_buff[i+3]=='*')&&(rcv_buff[i+4]=='*')&&(rcv_buff[i+5]=='*'))
{
temp= data_two_one(rcv_buff[i+6],rcv_buff[i+7]) ;
write_24c64(type_adr,temp);//选择设备类型
Clear_rcv_buff();
data_bit=0;
ES=1;
return;
}
if((rcv_buff[i+3]=='#')&&(rcv_buff[i+4]=='#')&&(rcv_buff[i+5]=='#'))
{
temp= data_two_one(rcv_buff[i+6],rcv_buff[i+7]) ;
write_24c64(net_adr,temp); //选择网络01为C网 00为G网
Clear_rcv_buff();
data_bit=0;
ES=1;
return;
}
if((rcv_buff[i+3]=='8')&&(rcv_buff[i+4]=='8')&&(rcv_buff[i+5]=='8'))
{
temp= data_two_one(rcv_buff[i+6],rcv_buff[i+7]) ;
device_use_bit=(bit)temp;
write_24c64(device_use_adr,temp); //选择设备是否已经使用0X00未使用
Clear_rcv_buff();
data_bit=0;
ES=1;
return;
}
if((rcv_buff[i+3]=='7')&&(rcv_buff[i+4]=='7')&&(rcv_buff[i+5]=='7'))
{
temp= data_two_one(rcv_buff[i+6],rcv_buff[i+7]) ;
write_24c64(upa_max_adr,temp);
Clear_rcv_buff();
data_bit=0;
ES=1;
return;
//设置上行最大功率
}
if((rcv_buff[i+3]=='6')&&(rcv_buff[i+4]=='6')&&(rcv_buff[i+5]=='6'))
{
temp= data_two_one(rcv_buff[i+6],rcv_buff[i+7]) ;
write_24c64(dpa_max_adr,temp);
Clear_rcv_buff();
data_bit=0;
ES=1;
return;
//设置下行最大功率
}
if((rcv_buff[i+3]=='5')&&(rcv_buff[i+4]=='5')&&(rcv_buff[i+5]=='5'))
{
rest_24c64_data();
Clear_rcv_buff();
data_bit=0;
ES=1;
return;
}
error= 0x00;
treatment(i+1);
if(send_bit)
{
if(error!=0)
{
decode_buff[11]= 0x00;
decode_buff[10]=error;
crc_value=cal_crc(decode_buff, 12);
decode_buff[12]= (uchar)crc_value;
crc_value=crc_value>>8;
decode_buff[12+1]=crc_value;
data_one_two(decode_buff ,code_buff , 12+2);
code_buff[24+4]=0;
send_data();
}
else send_data();
}
}
void treatment(uchar temp)
{
uchar i,temp1,temp3;
uint crc_value,temp2;
for(i=0;i<12;i++)
decode_buff[i]=data_two_one(rcv_buff[temp+2*i],rcv_buff[temp+2*i+1]) ;
if((decode_buff[4]==0x10)&&(decode_buff[10]==0x00))
{
success_bit=1;
times=3;
send_bit=0;
message_bit=0;
data_bit=0;
Clear_rcv_buff();
ES=1;
return;
}
else send_bit=1;
if(device_use_bit)
{
if(decode_buff[3]!=read_24c64(type_adr))
{
error=0x06 ;
return;
}
if((decode_buff[5]!=read_24c64(device_adr))||(decode_buff[6]!=read_24c64(device_adr+1))||
(decode_buff[7]!=read_24c64(device_adr+2))||(decode_buff[8]!=read_24c64(device_adr+3)))
{
error=0x02 ;
return;
}
if(decode_buff[9]!=read_24c64(device_adr+4))
{
error=0x03 ;
return;
}
temp1=decode_buff[11];// command length
for(i=12;i<temp1+2+12;i++)
decode_buff[i]=data_two_one(rcv_buff[temp+2*i],rcv_buff[temp+2*i+1]);
crc_value=cal_crc(decode_buff,temp1+12);
temp2=decode_buff[temp1+1+12];
temp2=temp2<<8;
temp2=temp2+decode_buff[temp1+12];
if(crc_value!=temp2)
{
error=0x05;
return;
}
if(decode_buff[10]!=0x00)
{
error=0xA0;
return;
}
}
temp1=decode_buff[4];
if(!device_use_bit )
{
if(temp1!=0x30) {error=0x02 ;return;};
temp3=decode_buff[11];// command length
for(i=12;i<temp3+2+12;i++)
decode_buff[i]=data_two_one(rcv_buff[temp+2*i],rcv_buff[temp+2*i+1]);
crc_value=cal_crc(decode_buff,temp3+12);
temp2=decode_buff[temp3+1+12];
temp2=temp2<<8;
temp2=temp2+decode_buff[temp3+12];
if(crc_value!=temp2)
{
error=0x05;
return;
}
}
switch(temp1)
{
case 0x20:
{ decode_buff[11]=0x22;
for(i=0;i<15;i++)
decode_buff[12+i]=read_24c64(control_hao_adr+i);
for(i=0;i<15;i++)
decode_buff[12+15+i]=read_24c64(alarm_hao_adr+i);
decode_buff[12+30]=read_24c64(com_mode_adr);
decode_buff[12+31]=alarm_enable1;
decode_buff[12+32]=alarm_enable2;
decode_buff[12+33]=alarm_enable3;
crc_value=cal_crc(decode_buff,34+12);
decode_buff[12+34]= (uchar)crc_value;
crc_value=crc_value>>8;
decode_buff[12+35]=(uchar)crc_value;
data_one_two(decode_buff ,code_buff , 12+36);
code_buff[24+72]=0;
// send_data();
break;
}
case 0x21:
{
decode_buff[11]=0x1D;
decode_buff[12]=read_24c64(factory_id_adr);
decode_buff[12+1]=read_24c64(factory_id_adr+1);
decode_buff[12+2]=read_24c64(type_adr);
decode_buff[12+3]=read_24c64(version_adr);
decode_buff[12+4]=read_24c64(version_adr+1);
decode_buff[12+5]=~read_24c64(pa_on_adr);
decode_buff[12+6]=~read_24c64(upa_weaken_adr);
decode_buff[12+7]=read_24c64(dpa_weaken_adr);
for(i=0;i<8;i++)
{
decode_buff[12+8+i]=read_24c64(freq_adr+i);
//putunchar( read_24c64(freq_adr));//test
}
decode_buff[12+16]=upa_pow;
decode_buff[12+17]=dpa_pow;
decode_buff[12+18]=read_24c64(upa_max_adr);
decode_buff[12+19]=read_24c64(dpa_max_adr);
decode_buff[12+20]= upa_tem;
decode_buff[12+21]= dpa_tem;
decode_buff[12+22]= alarm1;
decode_buff[12+23]= alarm2;
decode_buff[12+24]= alarm3;
for(i=0;i<4;i++)
decode_buff[12+25+i]=read_24c64(alc_adr+i);
crc_value=cal_crc(decode_buff,29+12);
decode_buff[12+29]= (uchar)crc_value;
crc_value=crc_value>>8;
decode_buff[12+30]=(uchar)crc_value;
data_one_two(decode_buff ,code_buff , 12+31);
code_buff[24+62]=0;
//send_data();
break;
}
case 0x30:
{
decode_buff[11]= 0x00;
for(i=0;i<5;i++)
{
write_24c64((device_adr+i),decode_buff[12+i]);
// putunchar(decode_buff[12+i]);//test
}
for(i=0;i<5;i++)
decode_buff[5+i]=read_24c64(device_adr+i);
crc_value=cal_crc(decode_buff, 12);
decode_buff[12]= (uchar)crc_value;
crc_value=crc_value>>8;
decode_buff[12+1]=(uchar)crc_value;
data_one_two(decode_buff ,code_buff , 12+2);
code_buff[24+4]=0;
if(!device_use_bit )
{
write_24c64(device_use_adr,0x01);
device_use_bit=1;
}
// send_data();
break;
}
case 0x31:
{
decode_buff[11]= 0x00;
for(i=0;i<15;i++)
write_24c64((control_hao_adr+i),decode_buff[12+i]);
for(i=0;i<15;i++)
write_24c64((alarm_hao_adr+i),decode_buff[12+15+i]);
write_24c64(com_mode_adr,decode_buff[12+30]);
crc_value=cal_crc(decode_buff, 12);
decode_buff[12]= (uchar)crc_value;
crc_value=crc_value>>8;
decode_buff[12+1]=(uchar)crc_value;
data_one_two(decode_buff ,code_buff , 12+2);
code_buff[24+4]=0;
// send_data();
break;
}
case 0x32:
{
decode_buff[11]= 0x00;
for(i=0;i<3;i++)
write_24c64((alarm_enable_adr+i),decode_buff[12+i]);
alarm_enable1=decode_buff[12];
alarm_enable2=decode_buff[13];
alarm_enable3=decode_buff[14];
crc_value=cal_crc(decode_buff, 12);
decode_buff[12]= (uchar)crc_value;
crc_value=crc_value>>8;
decode_buff[12+1]=crc_value;
data_one_two(decode_buff ,code_buff , 12+2);
code_buff[24+4]=0;
// send_data();
break;
}
case 0x34:
{
decode_buff[11]= 0x00;
write_24c64(pa_on_adr,~decode_buff[12]);
setting_pa_bit=1;
crc_value=cal_crc(decode_buff, 12);
decode_buff[12]= (uchar)crc_value;
crc_value=crc_value>>8;
decode_buff[12+1]=(uchar)crc_value;
data_one_two(decode_buff ,code_buff , 12+2);
code_buff[24+4]=0;
// send_data();
break;
}
case 0x35:
{
decode_buff[11]= 0x00;
write_24c64(upa_weaken_adr,~decode_buff[12]);
write_24c64(dpa_weaken_adr,decode_buff[13]);
setting_weaken_bit=1;
crc_value=cal_crc(decode_buff, 12);
decode_buff[12]= (uchar)crc_value;
crc_value=crc_value>>8;
decode_buff[12+1]=(uchar)crc_value;
data_one_two(decode_buff ,code_buff,12+2);
code_buff[24+4]=0;
// send_data();
break;
}
case 0x36:
{
decode_buff[11]= 0x00;
for(i=0;i<8;i++)
{
write_24c64(freq_adr+i,decode_buff[12+i]);
}
setting_freq_bit=1;
crc_value=cal_crc(decode_buff, 12);
decode_buff[12]= (uchar)crc_value;
crc_value=crc_value>>8;
decode_buff[12+1]=(uchar)crc_value;
data_one_two(decode_buff ,code_buff,12+2);
code_buff[24+4]=0;
//send_data();
break;
}
case 0xD0:
{
decode_buff[11]= 0x00;
for(i=0;i<4;i++)
write_24c64(alc_adr+i,decode_buff[12+i]);
setting_alc_bit=1;
crc_value=cal_crc(decode_buff, 12);
decode_buff[12]= (uchar)crc_value;
crc_value=crc_value>>8;
decode_buff[12+1]=(uchar)crc_value;
data_one_two(decode_buff ,code_buff,12+2);
code_buff[24+4]=0;
//send_data();
break;
}
default : error=0xA0; break;
}
}
void send_data()
{
uchar i;
if(message_bit)
{
printf("AT+CMGS=\"+86");
for(i=0;i<11;i++)
putunchar(read_24c64(control_hao_adr+i));
delay(50);
printf("\"\r\n");
delay(500);
putunchar('X');
printf(code_buff);
putunchar('X');
delay(500);
printf("\x1A");
delay(100);ES=1;///mod,9-30
delay(2000);
delay(2000);
delay(2000);
t50ms=0;t1s1=0;
do{delay(100);i=rcv_serch("CMGS:");}while(i>BUFF_LEN1 && t1s1<5);
//message_bit=0;
// delay(500);
printf("AT+CMGD=1\r\n"); //删除no.1
delay(1);ES=1;
delay(2000);
t50ms=0;t1s1=0;
Clear_rcv_buff();
delay(10);
message_bit=0;
}
else if(data_bit)
{
printf("###") ;
putunchar('X');
printf(code_buff);
putunchar('X');
data_bit=0;
}
Clear_rcv_buff();
ES=1;
}
unsigned int cal_crc(unsigned char *ptr, unsigned char len)
{
unsigned char i;
unsigned int crc=0;
while(len--!=0)
{
for(i=0x80; i!=0; i/=2)
{
if((crc&0x8000)!=0) {crc*=2; crc^=0x1021;} /* 余式CRC乘以2再求CRC */
else crc*=2;
if((*ptr&i)!=0) crc^=0x1021; /* 再加上本位的CRC */
}
ptr++;
}
return(crc);
}
//void code_data()
//{
uchar data_two_one(uchar Hight,uchar Low)
{
if(Hight<0x40){Hight=(Hight-0x30)<<4;}
else{Hight=(Hight-0x37)<<4;}
if(Low<0x40){Low=Low-0x30;}
else{Low=Low-0x37;}
return((Hight+Low));
}
void data_one_two(uchar *source_adr ,uchar *destination_adr , uchar len)
{
uchar Temp,i;
for(i=0;i<len;i++)
{
Temp=*source_adr&0xf0;
Temp=Temp>>4;
if(Temp<0x0a) *destination_adr=Temp+0x30;
else *destination_adr=Temp+0x37;
destination_adr++;
Temp=*source_adr&0x0f;
if(Temp<0x0a) *destination_adr=Temp+0x30;
else *destination_adr=Temp+0x37;
destination_adr++;
source_adr++;
}
}
void search_net()
{
uchar i;
// i=printat("AT+CREG?\r\n",",1");
delay(1000);
i=printat("AT+CREG?\r\n",",1");
if(i>BUFF_LEN1)
{
do{
WDT=1;
printf("NOSIGNAL");
ES=1;
delay(1000);
//WDT=1;
//delay(500);
WDT=1;
t1s1=0;
do{delay(50);i=rcv_serch("X02");}while(i>BUFF_LEN1 && t1s1<2);///mod,03-8-22
ES=0;
if((rcv_buff[i+3]=='4')&&(rcv_buff[i+4]=='4')&&(rcv_buff[i+5]=='4'))
{ write_24c64(com_mode_adr,2); break;}
} while(1);
}
}
/*void resetTC35()
{
TC35_IGT=0;
delay(200);
TC35_IGT=1;
delay(100);
TC35_IGT=0;
delay(1000);
TC35_IGT=1;
}*/
void delay(uint dat)
{
uchar i;
while(dat--)
{
WDT=1;
for(i=0;i<120;i++)
{;}
}
}
/**************************************************************************
* 函数原型: void delay_70us(void)
* 功 能: 延时70us
**************************************************************************/
/*void delay_70us(void){
unsigned int idata count;
for(count=350;count>0;count--);
}*/
void init_CPU()
{
//MUSIC1=0;MUSIC2=0;
//SFCF=0x42;
WDTD=100;
WDTC=0x0f;
SCON=0x50;
TMOD=0x21; // T1:baut,T0:Time 16bit
TCON=0x50; // TR0,TR1=1
TH1=0xfd;TL1=0xfd;PCON=0; // Uart Baut=9600
TH0=0x4c;TL0=0x00; // T0=50ms
//T2CON=0x04; // T2:Time 16bit
//RCAP2H=0x00;RCAP2L=0x00;
IE=0x92; //开全局中断,定时器0。串口中断。
IP=0x10; // UART高
AUXR=0x00;//内部XRAM,ALE为1/6FOSC,AUXR=0x10外部XRAM
}
void rest_24c64_data(void)
{
uchar i;
write_array(start_control_hao,control_hao_adr,15);///add,03-8-22
write_array(start_alarm_hao,alarm_hao_adr,15);
write_24c64(reset_24c64_adr,start_flag[0]);
write_24c64(device_use_adr,0);
for(i=0;i<5;i++)
write_24c64(device_adr,0);
write_24c64(type_adr,0);
write_24c64(com_mode_adr,2);
write_24c64(factory_id_adr,1);
write_24c64(factory_id_adr+1,4);
write_24c64(version_adr ,1);
write_24c64(version_adr+1 ,1);
for(i=0;i<3;i++)
write_24c64(pa_on_adr+i ,0);
for(i=0;i<8;i++)
write_24c64(freq_adr+i ,0xff);
write_24c64(upa_max_adr ,0x00);
write_24c64(dpa_max_adr ,0x00);
for(i=0;i<4;i++)
write_24c64(alc_adr+i ,0x00);
write_24c64(device_use_adr ,0x00);
for(i=0;i<3;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -