📄 att7027.src
字号:
; void ReadCALATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n)//*mt_data=xxxxxx00 n=3
RSEG ?PR?_ReadCALATT7027?ATT7027
_ReadCALATT7027:
USING 0
; SOURCE LINE # 119
MOV mt_data?462,R3
MOV mt_data?462+01H,R2
MOV mt_data?462+02H,R1
;---- Variable 'addr?461' assigned to Register 'R7' ----
; {
; SOURCE LINE # 120
; unsigned char delay,i=0;
; SOURCE LINE # 121
;---- Variable 'i?465' assigned to Register 'R6' ----
CLR A
MOV R6,A
; for(i=0;i<n;i++)
; SOURCE LINE # 122
?C0021:
MOV A,R6
CLR C
SUBB A,n?463
JNC ?C0026
; {
; SOURCE LINE # 123
; EPADR=addr; //write address
; SOURCE LINE # 124
MOV EPADR,R7
; delay=10;
; SOURCE LINE # 125
;---- Variable 'delay?464' assigned to Register 'R5' ----
MOV R5,#0AH
?C0024:
; while(delay>0) delay--; // wait 4.8us
; SOURCE LINE # 126
DJNZ R5,?C0024
?C0025:
; *(mt_data+2*i)=ECDATH;//读数据的高8位如果单字节数据可以忽略此操作
; SOURCE LINE # 127
MOV R3,mt_data?462
MOV R2,mt_data?462+01H
MOV R1,mt_data?462+02H
MOV B,#02H
MOV A,R6
MUL AB
MOV DPL,A
MOV DPH,B
MOV A,ECDATH
LCALL ?C?CSTOPTR
; *(mt_data+1+2*i)=ECDATL;//读数据的低8位
; SOURCE LINE # 128
MOV DPTR,#01H
MOV B,#02H
MOV A,R6
LCALL ?C?OFFXADD
MOV A,ECDATL
LCALL ?C?CSTOPTR
; addr=addr+1; //下一个校表参数
; SOURCE LINE # 129
INC R7
; }
; SOURCE LINE # 130
INC R6
SJMP ?C0021
; }
; SOURCE LINE # 131
?C0026:
RET
; END OF _ReadCALATT7027
; /****************************************************************************
; 电表寄存器经过转变为实际数据
; 函数原型:void EMU_Parameter_change1()
; 功能: 电表寄存器经过转变为实际数据
; 输入:
; Read Calibration registers at att7027
; addr:the address of the first register.
; comm:the val which written to the registers.
; ******************************************************************************/
; void EMU_Parameter_change1()
RSEG ?PR?EMU_Parameter_change1?ATT7027
EMU_Parameter_change1:
USING 0
; SOURCE LINE # 141
; {
; SOURCE LINE # 142
; unsigned char i;
; unsigned long *PA1,*PA2;
; unsigned long tempA;
; ReadATT7027(0,(unsigned char*)Emu_Parameter.Current_Waveform_Spl_I1,sizeof(Emu_Parameter));//SIZE_OF(Emu_Parameter,Current_Waveform_Spl_I1)Emu_Parameter_change
; SOURCE LINE # 146
MOV DPTR,#Emu_Parameter
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV R2,AR6
MOV R3,AR5
MOV ?_ReadATT7027?BYTE+04H,#040H
CLR A
MOV R7,A
LCALL _ReadATT7027
; PA1=&(Emu_Parameter.Current_Waveform_Spl_I1);
; SOURCE LINE # 147
MOV PA1?567,#01H
MOV PA1?567+01H,#HIGH (Emu_Parameter)
MOV PA1?567+02H,#LOW (Emu_Parameter)
; // *temp1= SIZE_OF(EEPROM_DATA,Apparent_Power_Gain_GS2);
; //*temp1= sizeof(Emu_Parameter.Current_Waveform_Spl_I1);
; //*temp1= SIZE_OF(Emu_Parameter.Current_Waveform_Spl_I1);
; PA2=&(Emu_Parameter_change.Current_Waveform_Spl_I1);
; SOURCE LINE # 151
MOV PA2?568,#01H
MOV PA2?568+01H,#HIGH (Emu_Parameter_change)
MOV PA2?568+02H,#LOW (Emu_Parameter_change)
; for(i=0;i<3;i++)// Current_Waveform_Spl_I1 Current_Waveform_Spl_I2 Voltage Waveform_Spl_U;
; SOURCE LINE # 152
CLR A
MOV i?566,A
?C0027:
; {
; SOURCE LINE # 153
; if((*PA1)>=0x8000) //2^15
; SOURCE LINE # 154
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
LCALL ?C?LLDPTR
CLR A
MOV R3,A
MOV R2,#080H
MOV R1,A
MOV R0,A
SETB C
LCALL ?C?ULCMP
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
JNC ?C0030
; *PA2=(0x10000-(*PA1)); //2^16
; SOURCE LINE # 155
LCALL ?C?LLDPTR0
CLR C
CLR A
SUBB A,R3
MOV R7,A
CLR A
SUBB A,R2
MOV R6,A
MOV A,#01H
SUBB A,R1
MOV R5,A
CLR A
SUBB A,R0
MOV R4,A
SJMP ?C0051
?C0030:
; else *PA2=*PA1;
; SOURCE LINE # 156
LCALL ?C?LLDPTR
?C0051:
MOV R3,PA2?568
MOV R2,PA2?568+01H
MOV R1,PA2?568+02H
LCALL ?C?LSTPTR
?C0031:
; PA1=PA1+1;
; SOURCE LINE # 157
MOV A,#04H
ADD A,PA1?567+02H
MOV PA1?567+02H,A
CLR A
ADDC A,PA1?567+01H
MOV PA1?567+01H,A
; PA2=PA2+1;
; SOURCE LINE # 158
MOV A,#04H
ADD A,PA2?568+02H
MOV PA2?568+02H,A
CLR A
ADDC A,PA2?568+01H
MOV PA2?568+01H,A
; }
; SOURCE LINE # 159
INC i?566
MOV A,i?566
CJNE A,#03H,?C0027
?C0028:
; for(i=0;i<3;i++)// Active_Power_Waveform_Spl_P
; SOURCE LINE # 160
CLR A
MOV i?566,A
?C0032:
; { //Reactive_Power_Waveform_Spl_Q Apparent Power Waveform_Spl_S ;
; SOURCE LINE # 161
; if((*PA1)>=0x800000) //2^23
; SOURCE LINE # 162
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
LCALL ?C?LLDPTR
CLR A
MOV R3,A
MOV R2,A
MOV R1,#080H
MOV R0,A
SETB C
LCALL ?C?ULCMP
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
JNC ?C0035
; *PA2=(0x1000000-(*PA1)); //2^24
; SOURCE LINE # 163
LCALL ?C?LLDPTR0
CLR C
CLR A
SUBB A,R3
MOV R7,A
CLR A
SUBB A,R2
MOV R6,A
CLR A
SUBB A,R1
MOV R5,A
MOV A,#01H
SUBB A,R0
MOV R4,A
SJMP ?C0052
?C0035:
; else *PA2=*PA1;
; SOURCE LINE # 164
LCALL ?C?LLDPTR
?C0052:
MOV R3,PA2?568
MOV R2,PA2?568+01H
MOV R1,PA2?568+02H
LCALL ?C?LSTPTR
?C0036:
; PA1=PA1+1;
; SOURCE LINE # 165
MOV A,#04H
ADD A,PA1?567+02H
MOV PA1?567+02H,A
CLR A
ADDC A,PA1?567+01H
MOV PA1?567+01H,A
; PA2=PA2+1;
; SOURCE LINE # 166
MOV A,#04H
ADD A,PA2?568+02H
MOV PA2?568+02H,A
CLR A
ADDC A,PA2?568+01H
MOV PA2?568+01H,A
; }
; SOURCE LINE # 167
INC i?566
MOV A,i?566
CJNE A,#03H,?C0032
?C0033:
; for(i=0;i<3;i++)//Current_Rms_I1 Current_Rms_I2 Current_Rms_U;
; SOURCE LINE # 168
CLR A
MOV i?566,A
?C0037:
; {
; SOURCE LINE # 169
; tempA=(*(unsigned long*)&Emu_Parameter_change.EMU_Krms_Rms[i])>>16;
; SOURCE LINE # 170
MOV A,i?566
ADD A,ACC
ADD A,#LOW (Emu_Parameter_change+042H)
MOV DPL,A
CLR A
ADDC A,#HIGH (Emu_Parameter_change+042H)
MOV DPH,A
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV R0,#010H
LCALL ?C?ULSHR
MOV tempA?569+03H,R7
MOV tempA?569+02H,R6
MOV tempA?569+01H,R5
MOV tempA?569,R4
; *PA2=((*PA1)*tempA);//Kp=5/234880*001000=2.1287466×10^(-4)
; SOURCE LINE # 171
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
LCALL ?C?LLDPTR
MOV R3,tempA?569+03H
MOV R2,tempA?569+02H
MOV R1,tempA?569+01H
MOV R0,tempA?569
LCALL ?C?LMUL
MOV R3,PA2?568
MOV R2,PA2?568+01H
MOV R1,PA2?568+02H
LCALL ?C?LSTPTR
; // PA=Emu_Parameter_change.EMU_Krms_Rms[i];
; PA1=PA1+1;
; SOURCE LINE # 173
MOV A,#04H
ADD A,PA1?567+02H
MOV PA1?567+02H,A
CLR A
ADDC A,PA1?567+01H
MOV PA1?567+01H,A
; PA2=PA2+1;
; SOURCE LINE # 174
MOV A,#04H
ADD A,PA2?568+02H
MOV PA2?568+02H,A
CLR A
ADDC A,PA2?568+01H
MOV PA2?568+01H,A
; }
; SOURCE LINE # 175
INC i?566
MOV A,i?566
CJNE A,#03H,?C0037
?C0038:
; *PA2=(5529600/6/(*PA1))<<8; //femu =5529600Hz f=femu/6/UFREQ Current_Freq_U;
; SOURCE LINE # 176
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
LCALL ?C?LLDPTR0
MOV R7,#00H
MOV R6,#010H
MOV R5,#0EH
MOV R4,#00H
LCALL ?C?ULDIV
MOV R0,#08H
LCALL ?C?LSHL
MOV R3,PA2?568
MOV R2,PA2?568+01H
MOV R1,PA2?568+02H
LCALL ?C?LSTPTR
; PA1=PA1+1;
; SOURCE LINE # 177
MOV A,#04H
ADD A,PA1?567+02H
MOV PA1?567+02H,A
CLR A
ADDC A,PA1?567+01H
MOV PA1?567+01H,A
; PA2=PA2+1;
; SOURCE LINE # 178
MOV A,#04H
ADD A,PA2?568+02H
MOV PA2?568+02H,A
CLR A
ADDC A,PA2?568+01H
MOV PA2?568+01H,A
; for(i=0;i<3;i++)// Active_Power_P Reactive_Power_Q Apparent_Power_S;
; SOURCE LINE # 179
CLR A
MOV i?566,A
?C0040:
; {
; SOURCE LINE # 180
; if((*PA1)>=0x800000) //2^23
; SOURCE LINE # 181
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
LCALL ?C?LLDPTR
CLR A
MOV R3,A
MOV R2,A
MOV R1,#080H
MOV R0,A
SETB C
LCALL ?C?ULCMP
JNC ?C0043
; *PA1=0x1000000-(*PA1); //2^24
; SOURCE LINE # 182
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
LCALL ?C?LLDPTR0
CLR C
CLR A
SUBB A,R3
MOV R7,A
CLR A
SUBB A,R2
MOV R6,A
CLR A
SUBB A,R1
MOV R5,A
MOV A,#01H
SUBB A,R0
MOV R4,A
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
LCALL ?C?LSTPTR
?C0043:
; tempA=*(unsigned long*)&Emu_Parameter_change.EMU_Krms_Kpqs[i]>>16;//Kpqs=1000/51673=0.01935
; SOURCE LINE # 183
MOV A,i?566
ADD A,ACC
ADD A,#LOW (Emu_Parameter_change+048H)
MOV DPL,A
CLR A
ADDC A,#HIGH (Emu_Parameter_change+048H)
MOV DPH,A
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV R0,#010H
LCALL ?C?ULSHR
MOV tempA?569+03H,R7
MOV tempA?569+02H,R6
MOV tempA?569+01H,R5
MOV tempA?569,R4
; //*temp2=(*temp1)*(*tempA);//P=Kpqs*Preg=0.01935*(-47820)= -925.3 w
; *PA2=((*PA1)*(tempA));
; SOURCE LINE # 185
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
LCALL ?C?LLDPTR
MOV R3,tempA?569+03H
MOV R2,tempA?569+02H
MOV R1,tempA?569+01H
MOV R0,tempA?569
LCALL ?C?LMUL
MOV R3,PA2?568
MOV R2,PA2?568+01H
MOV R1,PA2?568+02H
LCALL ?C?LSTPTR
; PA1=PA1+1;
; SOURCE LINE # 186
MOV A,#04H
ADD A,PA1?567+02H
MOV PA1?567+02H,A
CLR A
ADDC A,PA1?567+01H
MOV PA1?567+01H,A
; PA2=PA2+1;
; SOURCE LINE # 187
MOV A,#04H
ADD A,PA2?568+02H
MOV PA2?568+02H,A
CLR A
ADDC A,PA2?568+01H
MOV PA2?568+01H,A
; }
; SOURCE LINE # 188
INC i?566
MOV A,i?566
XRL A,#03H
JZ $ + 5H
LJMP ?C0040
?C0041:
; for(i=0;i<3;i++)// Active_Energy_P Reactive_Energy Apparent_Energy_S;
; SOURCE LINE # 189
CLR A
MOV i?566,A
?C0044:
; {
; SOURCE LINE # 190
; tempA=*(unsigned long*)meter_para.MeterConstantReal;
; SOURCE LINE # 191
MOV DPTR,#meter_para+010H
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV tempA?569+03H,A
MOV tempA?569+02H,R6
MOV tempA?569+01H,R5
MOV tempA?569,R4
; *PA2=((*PA1)/(tempA));
; SOURCE LINE # 192
MOV R3,PA1?567
MOV R2,PA1?567+01H
MOV R1,PA1?567+02H
LCALL ?C?LLDPTR
MOV R3,tempA?569+03H
MOV R2,tempA?569+02H
MOV R1,tempA?569+01H
MOV R0,tempA?569
LCALL ?C?ULDIV
MOV R3,PA2?568
MOV R2,PA2?568+01H
MOV R1,PA2?568+02H
LCALL ?C?LSTPTR
; PA1=PA1+1;
; SOURCE LINE # 193
MOV A,#04H
ADD A,PA1?567+02H
MOV PA1?567+02H,A
CLR A
ADDC A,PA1?567+01H
MOV PA1?567+01H,A
; PA2=PA2+1;
; SOURCE LINE # 194
MOV A,#04H
ADD A,PA2?568+02H
MOV PA2?568+02H,A
CLR A
ADDC A,PA2?568+01H
MOV PA2?568+01H,A
; }
; SOURCE LINE # 195
INC i?566
MOV A,i?566
CJNE A,#03H,?C0044
; }
; SOURCE LINE # 196
?C0047:
RET
; END OF EMU_Parameter_change1
;
; /****************************************************************************
; 电表通过RS485communicate进行校表
; 函数原型:void Calibration_meter(void)
; 功能: 读RS485communicate数据放到mt_data指针指向电表校验寄存器要存放的地址中
; 输入:
; Read Calibration registers at att7027
; addr:the address of the first register.
; comm:the val which written to the registers.
; ******************************************************************************/
; void Calibration_meter(void)
RSEG ?PR?Calibration_meter?ATT7027
Calibration_meter:
; SOURCE LINE # 207
; {
; SOURCE LINE # 208
; //unsigned char data_id;
; //unsigned char cali_data[3];
; /* data_id=rxdatabuffer[10];
; //较表写命令
; if((data_id>=0x41)&&(data_id<=0x48)||(data_id>=0x4A)&&(data_id<=0x4F))
; {
; cali_data[0]=rxdatabuffer[11];
; cali_data[1]=rxdatabuffer[12];
; // cali_data Data_ID write ram and ATT7027
; WriteCALATT7027(data_id,&cali_data[0],2)
; Write_EEPROM(2,&cali_data[0],(0x40+(data_id-1)*2));
; }
; //较表读电压电流
; else if((data_id==0x0F)||(data_id==0x10))
; {
; rxdatabuffer[9]=6;
; rxdatabuffer[8]+=0x40;
;
; //返回数据在10-15
; if(data_id==0x0F)
; {
; rxdatabuffer[10]=*((unsigned char *)&Emu_Parameter.Current_Rms_I1+2);
; rxdatabuffer[11]=*((unsigned char *)&Emu_Parameter.Current_Rms_I1+3);
; }
; else if(data_id==0x10)
; {
; rxdatabuffer[10]=*((unsigned char *)&Emu_Parameter.Current_Rms_I2+2);
; rxdatabuffer[11]=*((unsigned char *)&Emu_Parameter.Current_Rms_I2+3);
; }
; else
; {
; rxdatabuffer[10]=*((unsigned char *)&Emu_Parameter.Current_Rms_U+2);
; rxdatabuffer[11]=*((unsigned char *)&Emu_Parameter.Current_Rms_U+3);
; }
; }
; //错误命令回错误应答
; else
; {
; rxdatabuffer[9]=1;
; rxdatabuffer[8]+=0x40;
; }
; */
; } ; SOURCE LINE # 251
RET
; END OF Calibration_meter
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -