📄 jizhong.c
字号:
qh_temp.qhdata1=0x00;
qh_temp.qhdata2=0x01;
qh_temp.qhdata3=0x00;
qh_temp.qhdata4=dat_ptr->s_no[2];
qh_temp.qhdata5=dat_ptr->s_no[1];
qh_temp.qhdata6=dat_ptr->s_no[0];
qh_temp.qhdata7=dat_ptr->s_base[3];
qh_temp.qhdata8=dat_ptr->s_base[2];
qh_temp.qhdata9=dat_ptr->s_base[1];
qh_temp.qhdata10=dat_ptr->s_base[0];
qh_temp.qhdata11=dat_ptr->s_base2[3];
qh_temp.qhdata12=dat_ptr->s_base2[2];
qh_temp.qhdata13=dat_ptr->s_base2[1];
qh_temp.qhdata14=dat_ptr->s_base2[0];
qh_temp.qhdata15=dat_ptr->s_base4[3];
qh_temp.qhdata16=dat_ptr->s_base4[2];
qh_temp.qhdata17=dat_ptr->s_base4[1];
qh_temp.qhdata18=dat_ptr->s_base4[0];
P1=0xF4;P1=0xF1; // clear the dog
P1=0xFA; // change the workspace
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata1;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata2;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata3;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata4;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata5;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata6;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata7;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata8;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata9;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata10;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata11;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata12;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata13;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata14;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata15;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata16;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata17;
*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata18;
P1=0xF4;P1=0xF1;
}
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++)
{
ledst(0xd7);
P1=0xF4;P1=0xF1;
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;
P1=0xFA;
txdbyte(*(qhpm+255*cyc_flag+num_cyc));
info_check+=*(qhpm+255*cyc_flag+num_cyc);
P1=0xF1;
}
txdbyte(bn-cyc_flag);
info_check+=bn-cyc_flag;
txdbyte(0x00);
txdbyte(info_check%0x0100);
txdbyte(info_check/0x0100);
txdbyte(0xDD);
ledst(0xf7);
//等待应答 EA EA 00 00 40 00 00 00 14 02 DD
RI=0;ysrxd=60;cush_char=0x00;
while(ysrxd) // 开始接收信息包
{
if(RI==1)
{
cush_char=SBUF;
if(cush_char==0xEA)break;
RI=0;
}
P1=0xf4; P1=0xff;
}
if(cush_char==0xEA)
{
ledst(0xe7);
ys1(0xff);
ledst(0xf7);
}
else
{return(0);}
}
ledst(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;
P1=0xFA;
txdbyte(*(qhpm+255*cyc_flag+num_cyc));
info_check+=*(qhpm+255*cyc_flag+num_cyc);
P1=0xF1;
}
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;
P1=0xFA;
txdbyte(*(qhpm+255*cyc_flag+num_cyc));
info_check+=*(qhpm+255*cyc_flag+num_cyc);
P1=0xF1;
}
for(;num_cyc<0xFF;num_cyc++)
{
P1=0xF4;P1=0xF1;
txdbyte(0xFF);
info_check+=0xFF;
}
txdbyte(0x01);
info_check+=0x01;
txdbyte(0x00);
txdbyte(info_check%0x0100);
txdbyte(info_check/0x0100);
txdbyte(0xDD);
}
ledst(0xf7);
ysrxd=30;
while(ysrxd)
{P1=0xF4;P1=0xF1;}
return(0);
/*
temp_data[cyc_flag_acc]=0xFF;
temp_data[++cyc_flag_acc]='T';
temp_data[++cyc_flag_acc]=0xFF;
temp_data[++cyc_flag_acc]=read_dallas(0x8D);
temp_data[++cyc_flag_acc]=read_dallas(0x89);
temp_data[++cyc_flag_acc]=read_dallas(0x87);
temp_data[++cyc_flag_acc]=read_dallas(0x85);
temp_data[++cyc_flag_acc]=read_dallas(0x83);
temp_data[++cyc_flag_acc]=read_dallas(0x81);
temp_data[++cyc_flag_acc]='C';
jzq_ptr=(JZQ_HEAD xdata *)JZQ_ADD;
num_cyc=jzq_ptr->meter_num;
for(cyc_flag=1;cyc_flag<=num_cyc;cyc_flag++)
{
pm=(unsigned char xdata *)(JZQ_ADD+0x80*comp1(cyc_flag));
dat_ptr=(DAT_ITEM xdata *)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;
}
// 数据发送
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++)
{
ledst(0xd7);
P1=0xF4;P1=0xF1;
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;
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);
ledst(0xf7);
//等待应答 EA EA 00 00 40 00 00 00 14 02 DD
RI=0;ysrxd=60;cush_char=0x00;
while(ysrxd) // 开始接收信息包
{
if(RI==1)
{
cush_char=SBUF;
if(cush_char==0xEA)break;
RI=0;
}
P1=0xf4; P1=0xff;
}
if(cush_char==0xEA)
{
ledst(0xe7);
ys1(0xff);
ledst(0xf7);
}
else
{return(0);}
}
ledst(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;
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;
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;
txdbyte(0xFF);
info_check+=0xFF;
}
txdbyte(0x01);
info_check+=0x01;
txdbyte(0x00);
txdbyte(info_check%0x0100);
txdbyte(info_check/0x0100);
txdbyte(0xDD);
}
ledst(0xf7);
ysrxd=30;
while(ysrxd)
{P1=0xF4;P1=0xF1;}
return(0);*/
}
// 向集中器下载电表局编号(**)--<加载集中器抄表数据>
// 52 18 04 00 01 00 00 00 00 00 00 00 00 02 00 45 51 08 00 00 00 05 00 00 C2
// 52 18 04 00 02 00 00 00 00 00 00 00 00 02 00 45 91 00 00 00 00 04 00 00 FA
// 52 18 04 00 03 00 00 00 00 00 00 00 00 02 00 02 00 00 00 00 00 05 00 00 28
unsigned int loaddata(void)
{
// unsigned int data cyc_flag,info_check; // 循环标识,信息包校验标识
// unsigned char xdata *pm; // 地址指针
// pm=(unsigned char xdata *)(JZQ_ADD); // 取指针地址
return(0);
}
//>>>>>> 信息主包区--End <<<<<<<<<///////////////////
//qh 红外与串口共用,串口波特率为9600,N,8,1
// 红外接收==Test==Start===
// 说明;波特率为2400,N,8,1,
void plmrxd(void)
{
unsigned int data rev_falg_num,ass_flag; // 串口接收标识位,辅助标识符
unsigned int data cyc_flag,info_check,send_num; // 循环标识,信息包校验标识,发送字节数
unsigned char data time; // 12秒标识符
unsigned char data cush_char,begin_rev_flag; // 串口字符缓存,接收信息包标识
int3=0;int2=0; // 设置为红外接收状态
buf_ptr=(HBUF xdata *)BUF_ADD; // 指针指向接收绶冲首地址
ysrxd=240;time=0; // 初始化1分钟标识
while(1)
{
P1=0xF4;P1=0xF1;
ledst(0xf7);
if(ysrxd==0){ysrxd=240;time++;} // 12秒没有接收到信息 time标识加1
if(time>=5) break; // 5个12秒(1分钟)退出红外接收程序
if(RI==0) continue; // 没有接收信息,继续计时
buf_ptr=(HBUF xdata *)BUF_ADD;
begin_rev_flag=0;rev_falg_num=0;ysrxd=40;
while(ysrxd) // 开始接收信息包
{
if(RI==1)
{
cush_char=SBUF;
if(begin_rev_flag)
{
buf_ptr->buf0[++rev_falg_num]=cush_char;
if(cush_char==0xDD) break;
}
else
{
if(cush_char==0xEA)
{
buf_ptr->buf0[rev_falg_num]=cush_char;
begin_rev_flag=1;
}
}
RI=0;
}
P1=0xf4; P1=0xff;
}
if(rev_falg_num<10){RI=0;continue;} // 接收数据超时
if(buf_ptr->buf0[3]!=carr_svr_name[1] ||
buf_ptr->buf0[4]!=carr_svr_name[0]) // {RI=0;continue;}// 非本机指令
{
carr_svr_name[1]=buf_ptr->buf0[3];
carr_svr_name[0]=buf_ptr->buf0[4];
}
info_check=0;
for(cyc_flag=0;cyc_flag<=(7+buf_ptr->buf0[5]);cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
if((info_check%0x0100)!=buf_ptr->buf0[cyc_flag++] ||
(info_check/0x0100)!=buf_ptr->buf0[cyc_flag]){RI=0;continue;}// 校验出错
ass_flag=buf_ptr->buf0[2];send_num=0;
ledst(0xe7);
ys1(0xff);
ledst(0xf7);
switch(ass_flag)
{
case 0x01: // <读取集中器设置>--震旦公司增加协议
send_num=readsettings();break;
case 0x02: // 读取集中器时钟
send_num=readclock();break;
case 0x04: // 指定某表号实时抄表(点抄)
send_num=point_excerption();break;
case 0x05: // 设置集中器时钟
send_num=setclock();break;
case 0x06: // 向集中器下载主控程序
send_num=downpro();break;
case 0x07: // 清空集中器抄表数据
send_num=clear_data();break;
case 0x09: // 读取集中器运行主控版本号
send_num=readversion();break;
case 0x0C: // 向集中器下载电表局编号(*)<加载集中器抄表数据>
send_num=loaddata();break;
case 0x0D: // <加载集中器设置>--震旦公司增加协议
send_num=loadsettings();break;
case 0x0E: // 由集中器上装当月抄表数据(*)<抄录实时表底>
send_num=realtime(0x8E);break;
case 0x0F: // 由集中器上装当日抄表数据(*)<抄录实时表底>
send_num=realtime(0x8F);break;
case 0x10: // 集中器复位
send_num=ser_reposition();
ledst(0xd7);
for(cyc_flag=0;cyc_flag<=send_num;cyc_flag++)
{txdbyte(buf_ptr->buf0[cyc_flag]);}
while(1);break;
case 0x2C: // 向集中器下载
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -