⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 att7027.src

📁 att7025是一个单相SOC的单心片电表方案
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; 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 + -