📄 main.c
字号:
U16 setclock(void)
{
//uint data cyc_flag,info_check; // 循环标识,信息包校验标识
U16 cyc_flag,info_check; // 循环标识,信息包校验标识
write_dallas(0x80,buf_ptr->buf0[11]);write_dallas(0x82,buf_ptr->buf0[10]);
write_dallas(0x84,buf_ptr->buf0[9]);write_dallas(0x86,buf_ptr->buf0[8]);
write_dallas(0x88,buf_ptr->buf0[7]);write_dallas(0x8C,buf_ptr->buf0[6]);
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0x85;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x00;
buf_ptr->buf0[6]=0x00;
buf_ptr->buf0[7]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[8]=info_check%0x0100;
buf_ptr->buf0[9]=info_check/0x0100;
buf_ptr->buf0[10]=0xDD;
return(10);
}
// 读取集中器运行主控版本号
//uint readversion(void)
U16 readversion(void)
{
//uint data cyc_flag,info_check; // 循环标识,信息包校验标识
U16 cyc_flag,info_check; // 循环标识,信息包校验标识
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0x89;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x07;
buf_ptr->buf0[6]=carr_svr_ver[0];
buf_ptr->buf0[7]=carr_svr_ver[1];
buf_ptr->buf0[8]=carr_svr_ver[2];
buf_ptr->buf0[9]=carr_svr_ver[3];
buf_ptr->buf0[10]=carr_svr_ver[4];
buf_ptr->buf0[11]=carr_svr_ver[5];
buf_ptr->buf0[12]=carr_svr_ver[6];
buf_ptr->buf0[13]=0x00;
buf_ptr->buf0[14]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=12;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[15]=info_check%0x0100;
buf_ptr->buf0[16]=info_check/0x0100;
buf_ptr->buf0[17]=0xDD;
return(17);
}
U16 point_excerption(void)
{
//uint data cyc_flag,info_check; // 循环标识,信息包校验标识
U16 cyc_flag,info_check; // 循环标识,信息包校验标识
//uchar xdata carr_page[34]; // 临时载波包
uchar carr_page[34]; // 临时载波包
carr_page[0]=0x09;
carr_page[1]=0xAF;
carr_page[2]=buf_ptr->buf0[11];
carr_page[3]=buf_ptr->buf0[10];
carr_page[4]=buf_ptr->buf0[9];
carr_page[5]=0x01;
carr_page[6]=0x05;
carr_page[7]=0x1F;
carr_page[8]=0x90;
carr_page[9]=0xBB;
carr_page[10]=0xBB;
carr_page[11]=0xBB;
carr_page[12]=0x00;
for(cyc_flag=2;cyc_flag<=11;cyc_flag++)
{carr_page[12]+=carr_page[cyc_flag];}
carr_page[13]=0x03;
// 信息包正向转换
buf_ptr->buf0[0]=0x18;
buf_ptr->buf0[1]=0x06;
buf_ptr->buf0[2]=0x01;
buf_ptr->buf0[3]=0xFF;
buf_ptr->buf0[4]=0xFF;
buf_ptr->buf0[5]=0xFF;
buf_ptr->buf0[6]=0xFF;
buf_ptr->buf0[7]=0xFF;
buf_ptr->buf0[8]=0xFF;
for(cyc_flag=0;cyc_flag<=13;cyc_flag++)
{buf_ptr->buf0[9+cyc_flag]=carr_page[cyc_flag];}
buf_ptr->buf0[23]=0x00;
for(cyc_flag=1;cyc_flag<=22;cyc_flag++)
{buf_ptr->buf0[23]+=buf_ptr->buf0[cyc_flag];}
if(PLM_snd_rcv1())
{
for(cyc_flag=0;cyc_flag<=33;cyc_flag++)
{carr_page[cyc_flag]=buf_ptr->buf0[cyc_flag];}
// 信息包反向转换
if(carr_page[1]==0x00)
{
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0xC4;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x00;
buf_ptr->buf0[6]=0x00;
buf_ptr->buf0[7]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[8]=info_check%0x0100;
buf_ptr->buf0[9]=info_check/0x0100;
buf_ptr->buf0[10]=0xDD;
return(10);
}
else
{
buf_ptr->buf0[0]='S';
buf_ptr->buf0[1]=0x30;
buf_ptr->buf0[2]=0x30;
buf_ptr->buf0[3]=0x30;
buf_ptr->buf0[4]=0x31;
buf_ptr->buf0[5]=0x30;
buf_ptr->buf0[6]=0x30;
buf_ptr->buf0[7]=(carr_page[13]/0x10) + 0x30;
buf_ptr->buf0[8]=(carr_page[13]%0x10) + 0x30;
buf_ptr->buf0[9]=(carr_page[12]/0x10) + 0x30;;
buf_ptr->buf0[10]=(carr_page[12]%0x10) + 0x30;
buf_ptr->buf0[11]=(carr_page[11]/0x10) + 0x30;
buf_ptr->buf0[12]=(carr_page[11]%0x10) + 0x30;
buf_ptr->buf0[13]=carr_page[18];
buf_ptr->buf0[14]=carr_page[17];
buf_ptr->buf0[15]=carr_page[16];
buf_ptr->buf0[16]=carr_page[15];
buf_ptr->buf0[17]=carr_page[22];
buf_ptr->buf0[18]=carr_page[21];
buf_ptr->buf0[19]=carr_page[20];
buf_ptr->buf0[20]=carr_page[19];
buf_ptr->buf0[21]=carr_page[30];
buf_ptr->buf0[22]=carr_page[29];
buf_ptr->buf0[23]=carr_page[28];
buf_ptr->buf0[24]=carr_page[27];
buf_ptr->buf0[25]='E';
return(25);
}
}
else
{
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0xC4;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x00;
buf_ptr->buf0[6]=0x00;
buf_ptr->buf0[7]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[8]=info_check%0x0100;
buf_ptr->buf0[9]=info_check/0x0100;
buf_ptr->buf0[10]=0xDD;
return(10);
}
}
U16 downpro(void)
{
//uint data cyc_flag,info_check; // 循环标识,信息包校验标识
U16 cyc_flag,info_check; // 循环标识,信息包校验标识
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0xC6;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x00;
buf_ptr->buf0[6]=0x00;
buf_ptr->buf0[7]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[8]=info_check%0x0100;
buf_ptr->buf0[9]=info_check/0x0100;
buf_ptr->buf0[10]=0xDD;
return(10);
}
U16 ser_reposition(void)
{
//uint data cyc_flag,info_check; // 循环标识,信息包校验标识
U16 cyc_flag,info_check; // 循环标识,信息包校验标识
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0x90;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x00;
buf_ptr->buf0[6]=0x00;
buf_ptr->buf0[7]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[8]=info_check%0x0100;
buf_ptr->buf0[9]=info_check/0x0100;
buf_ptr->buf0[10]=0xDD;
return(10);
}
U16 clear_data(void)
{
//uint data cyc_flag,info_check; // 循环标识,信息包校验标识
U16 cyc_flag,info_check; // 循环标识,信息包校验标识
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0xC7;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x00;
buf_ptr->buf0[6]=0x00;
buf_ptr->buf0[7]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[8]=info_check%0x0100;
buf_ptr->buf0[9]=info_check/0x0100;
buf_ptr->buf0[10]=0xDD;
return(10);
}
U16 realtime(uchar char_temp)
{
//uchar data cush_char; // 接收信息包标识
uchar cush_char; // 接收信息包标识
//uint data cyc_flag,cyc_flag_acc,num_cyc,info_check; // 大循环标识,小循环标识,标识,信息包校验标识
U16 cyc_flag,cyc_flag_acc,num_cyc,info_check; // 大循环标识,小循环标识,标识,信息包校验标识
//uint data bn; // 包标识符
U16 bn; // 包标识符
//uchar xdata temp_data[8000]; // 临时包 //
uchar temp_data[8000]; // 临时包 //
//uchar xdata *pm; // 地址指针
uchar *pm; // 地址指针
//P1=0xF4;P1=0xF1;
//qwe
cyc_flag_acc=0;
temp_data[cyc_flag_acc]=0xFF;
temp_data[++cyc_flag_acc]='T';
temp_data[++cyc_flag_acc]=0xFF;
rRTCCON=0x01;
temp_data[++cyc_flag_acc]=rBCDYEAR;
temp_data[++cyc_flag_acc]=rBCDMON;
temp_data[++cyc_flag_acc]=rBCDDAY;
temp_data[++cyc_flag_acc]=rBCDHOUR;
temp_data[++cyc_flag_acc]=rBCDMIN;
temp_data[++cyc_flag_acc]=rBCDSEC;
rRTCCON=0x00;
temp_data[++cyc_flag_acc]='C';
//jzq_ptr=(JZQ_HEAD xdata *)JZQ_ADD;
jzq_ptr=(JZQ_HEAD *)JZQ_ADD;
num_cyc=jzq_ptr->meter_num;
for(cyc_flag=1;cyc_flag<=num_cyc;cyc_flag++)
{
//pm=(unsigned char xdata *)(JZQ_ADD+DAT_ADD*comp1(cyc_flag));
pm=(unsigned char *)(JZQ_ADD+DAT_ADD*comp(cyc_flag));
//dat_ptr=(DAT_ITEM xdata *)pm;
dat_ptr=(DAT_ITEM *)pm;
// 取出所需数据<<表号6字节为压缩BCD码,后12字节为4字节总、4字节峰、4字节谷>>
temp_data[++cyc_flag_acc]=0x00;
temp_data[++cyc_flag_acc]=0x01;
temp_data[++cyc_flag_acc]=0x00;
temp_data[++cyc_flag_acc]=dat_ptr->s_no[2];
temp_data[++cyc_flag_acc]=dat_ptr->s_no[1];
temp_data[++cyc_flag_acc]=dat_ptr->s_no[0];
temp_data[++cyc_flag_acc]=dat_ptr->s_base[3];
temp_data[++cyc_flag_acc]=dat_ptr->s_base[2];
temp_data[++cyc_flag_acc]=dat_ptr->s_base[1];
temp_data[++cyc_flag_acc]=dat_ptr->s_base[0];
temp_data[++cyc_flag_acc]=dat_ptr->s_base2[3];
temp_data[++cyc_flag_acc]=dat_ptr->s_base2[2];
temp_data[++cyc_flag_acc]=dat_ptr->s_base2[1];
temp_data[++cyc_flag_acc]=dat_ptr->s_base2[0];
temp_data[++cyc_flag_acc]=dat_ptr->s_base4[3];
temp_data[++cyc_flag_acc]=dat_ptr->s_base4[2];
temp_data[++cyc_flag_acc]=dat_ptr->s_base4[1];
temp_data[++cyc_flag_acc]=dat_ptr->s_base4[0];
//P1=0xF4;P1=0xF1;
//qwe
}
// 数据发送
if(cyc_flag_acc%0xFF==0)
{bn=cyc_flag_acc/0xFF;}
else
{bn=cyc_flag_acc/0xFF+1;}
for(cyc_flag=0;cyc_flag<bn-1;cyc_flag++)
{
ledstm(0xd7);
//P1=0xF4;P1=0xF1;
//qwe
txdbyte(0xEA);
txdbyte(0xEA);
txdbyte(char_temp + 0x20);
txdbyte(carr_svr_name[1]);
txdbyte(carr_svr_name[0]);
txdbyte(0xFF);
info_check=0x02F3 + carr_svr_name[0] + carr_svr_name[1] + char_temp;
for(num_cyc=0;num_cyc<0xFF;num_cyc++)
{
//P1=0xF4;P1=0xF1;
//qwe
txdbyte(temp_data[255 * cyc_flag + num_cyc]);
info_check+=temp_data[255 * cyc_flag + num_cyc];
}
txdbyte(bn-cyc_flag);
info_check+=bn-cyc_flag;
txdbyte(0x00);
txdbyte(info_check%0x0100);
txdbyte(info_check/0x0100);
txdbyte(0xDD);
ledstm(0xf7);
//等待应答 EA EA 00 00 40 00 00 00 14 02 DD
//RI=0;
ysrxd=60;cush_char=0x00;
while(ysrxd) // 开始接收信息包
{
//if(RI==1)
if((rUTRSTAT0&0x1)==1)
{
//cush_char=SBUF;
cush_char=rURXH0;
if(cush_char==0xEA)break;
//RI=0;
}
//P1=0xf4; P1=0xff;
//qwe
}
if(cush_char==0xEA)
{
ledstm(0xe7);
ys(0x01);
ledstm(0xf7);
}
else
{return(0);}
}
ledstm(0xd7);
if(cyc_flag_acc % 0x100==0)
{
txdbyte(0xEA);
txdbyte(0xEA);
txdbyte(char_temp);
txdbyte(carr_svr_name[1]);
txdbyte(carr_svr_name[0]);
txdbyte(0xFF);
info_check=0x02D3 + carr_svr_name[0] + carr_svr_name[1] + char_temp;
for(num_cyc=0;num_cyc<0xFF;num_cyc++)
{
//P1=0xF4;P1=0xF1;
//qwe
txdbyte(temp_data[255 * cyc_flag + num_cyc]);
info_check+=temp_data[255 * cyc_flag + num_cyc];
}
txdbyte(0x01);
info_check+=0x01;
txdbyte(0x00);
txdbyte(info_check%0x0100);
txdbyte(info_check/0x0100);
txdbyte(0xDD);
}
else
{
txdbyte(0xEA);
txdbyte(0xEA);
txdbyte(char_temp);
txdbyte(carr_svr_name[1]);
txdbyte(carr_svr_name[0]);
txdbyte(0xFF);
info_check=0x02D3 + carr_svr_name[0] + carr_svr_name[1] + char_temp;
for(num_cyc=0;num_cyc<=(cyc_flag_acc % 0xFF);num_cyc++)
{
//P1=0xF4;P1=0xF1;
//qwe
txdbyte(temp_data[255 * cyc_flag + num_cyc]);
info_check+=temp_data[255 * cyc_flag + num_cyc];
}
for(;num_cyc<0xFF;num_cyc++)
{
//P1=0xF4;P1=0xF1;
//qwe
txdbyte(0xFF);
info_check+=0xFF;
}
txdbyte(0x01);
info_check+=0x01;
txdbyte(0x00);
txdbyte(info_check%0x0100);
txdbyte(info_check/0x0100);
txdbyte(0xDD);
}
ledstm(0xf7);
ysrxd=30;
while(ysrxd)
{//P1=0xF4;P1=0xF1;
//qwe
}
return(0);
}
U16 loaddata(void)
{
// uint data cyc_flag,info_check; // 循环标识,信息包校验标识
// uchar xdata *pm; // 地址指针
// pm=(unsigned char xdata *)(JZQ_ADD); // 取指针地址
return(0);
}
void plmrxd(void)
{
//uint data rev_falg_num,ass_flag; // 串口接收标识位,辅助标识符
U16 rev_falg_num,ass_flag; // 串口接收标识位,辅助标识符
//uint data cyc_flag,info_check,send_num; // 循环标识,信息包校验标识,发送字节数
U16 cyc_flag,info_check,send_num; // 循环标识,信息包校验标识,发送字节数
//uchar data time; // 12秒标识符
uchar time; // 12秒标识符
//uchar data cush_char,begin_rev_flag; // 串口字符缓存,接收信息包标识
uchar cush_char,begin_rev_flag; // 串口字符缓存,接收信息包标识
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -