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

📄 att7027.src

📁 att7025是一个单相SOC的单心片电表方案
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; .\ATT7027.SRC generated from: F:\ATT7025\ATT7027.c
; COMPILER INVOKED BY:
;        C:\Keil\C51\BIN\C51.EXE F:\ATT7025\ATT7027.c BROWSE DEBUG OBJECTEXTEND PRINT(.\ATT7027.lst) SRC(.\ATT7027.SRC)

$NOMOD51

NAME	ATT7027

CRTCCAL	DATA	0F2H
CMTHR	DATA	0FDH
KEYCR	DATA	0F7H
P0	DATA	080H
P1	DATA	090H
P2	DATA	0A0H
CHOUR	DATA	0FBH
P3	DATA	0B0H
T0	BIT	0B0H.4
AC	BIT	0D0H.6
T1	BIT	0B0H.5
T2	BIT	090H.0
EA	BIT	0A8H.7
PDMSR	DATA	0C7H
RXCON	DATA	0C6H
DPH0	DATA	083H
IE	DATA	0A8H
DPH1	DATA	085H
DPL0	DATA	082H
DPL1	DATA	084H
EXF2	BIT	0C8H.6
RD	BIT	0B0H.7
ES	BIT	0A8H.4
CP3CFG	DATA	0BBH
IP	DATA	0B8H
LEDC	DATA	0AEH
RI	BIT	098H.0
LEDE	DATA	0AFH
INT0	BIT	0B0H.2
CY	BIT	0D0H.7
DDRA	DATA	09BH
TI	BIT	098H.1
INT1	BIT	0B0H.3
DDRB	DATA	09CH
DDRC	DATA	09DH
DDRD	DATA	09EH
SPC_FNC	DATA	08FH
RSTSR	DATA	0B7H
DDRE	DATA	09FH
RCAP2H	DATA	0CBH
PS	BIT	0B8H.4
SP	DATA	081H
T2EX	BIT	090H.1
LADR	DATA	0C4H
OV	BIT	0D0H.2
RCAP2L	DATA	0CAH
LDAT	DATA	0C5H
ALHR	DATA	0F5H
CFMCFG	DATA	0BEH
C_T2	BIT	0C8H.1
WR	BIT	0B0H.6
ECDATH	DATA	0DBH
RCLK	BIT	0C8H.5
ALMR	DATA	0F4H
EXIF	DATA	091H
TCLK	BIT	0C8H.4
ECDATL	DATA	0DAH
LCDCLK	DATA	0C2H
PCON	DATA	087H
TMOD	DATA	089H
TCON	DATA	088H
EPDATH	DATA	0DFH
EPDATL	DATA	0DDH
BWPR	DATA	09AH
EPDATM	DATA	0DEH
IE0	BIT	088H.1
IE1	BIT	088H.3
B	DATA	0F0H
SECCNT	DATA	0F3H
CP_RL2	BIT	0C8H.0
CSUPDC	DATA	0BFH
ACC	DATA	0E0H
CP02CFG	DATA	0BAH
LVDCON	DATA	0B5H
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
ET2	BIT	0A8H.5
TF1	BIT	088H.7
RTCCON	DATA	0F1H
RB8	BIT	098H.2
TF2	BIT	0C8H.7
TH0	DATA	08CH
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
TB8	BIT	098H.3
EX1	BIT	0A8H.2
IT1	BIT	088H.2
TH2	DATA	0CDH
TEMPDR	DATA	0C9H
P	BIT	0D0H.0
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
TL1	DATA	08BH
SM2	BIT	098H.5
TL2	DATA	0CCH
EIE	DATA	0E8H
PT0	BIT	0B8H.1
PT1	BIT	0B8H.3
RS0	BIT	0D0H.3
PT2	BIT	0B8H.5
TR0	BIT	088H.4
RS1	BIT	0D0H.4
LEDP0	DATA	0A5H
TR1	BIT	088H.6
LEDP1	DATA	0A6H
TR2	BIT	0C8H.2
PX0	BIT	0B8H.0
PX1	BIT	0B8H.2
LEDP3	DATA	0A7H
DDRP0	DATA	0A1H
DDRP1	DATA	0A2H
DDRP2	DATA	0A3H
EIP	DATA	0F8H
DDRP3	DATA	0A4H
ECADR	DATA	0D9H
SBUF0	DATA	099H
SBUF1	DATA	0C1H
EXEN2	BIT	0C8H.3
SCON0	DATA	098H
REN	BIT	098H.4
SCON1	DATA	0C0H
PTA	DATA	093H
PTB	DATA	094H
T2CON	DATA	0C8H
PTC	DATA	095H
DPS	DATA	086H
CLCDCFG	DATA	0B9H
PTD	DATA	096H
LCDCR	DATA	0C3H
SYSSCR	DATA	0B6H
PTE	DATA	097H
FCCON	DATA	0F6H
MPAGE	DATA	092H
EPADR	DATA	0DCH
RXD	BIT	0B0H.0
SCIIE	DATA	0ABH
EICON	DATA	0D8H
CCLKCFG	DATA	0BDH
SCIIF	DATA	0B3H
CKCON	DATA	08EH
TXD	BIT	0B0H.1
CSECR	DATA	0F9H
CDAYR	DATA	0FCH
F0	BIT	0D0H.5
CYEAR	DATA	0FEH
EMUIE	DATA	0A9H
EMUIF	DATA	0B1H
CBORCFG	DATA	0BCH
KEYIE	DATA	0ADH
RTCIE	DATA	0AAH
RTCIF	DATA	0B2H
CMINR	DATA	0FAH
PSW	DATA	0D0H
LVIIE	DATA	0ACH
LVIIF	DATA	0B4H
CWKDR	DATA	0FFH
?PR?_Flash_Write_ATT7027?ATT7027         SEGMENT CODE 
?DT?_Flash_Write_ATT7027?ATT7027         SEGMENT DATA OVERLAYABLE 
?PR?_Flash_Read_ATT7027?ATT7027          SEGMENT CODE 
?DT?_Flash_Read_ATT7027?ATT7027          SEGMENT DATA OVERLAYABLE 
?PR?_WriteCALATT7027?ATT7027             SEGMENT CODE 
?DT?_WriteCALATT7027?ATT7027             SEGMENT DATA OVERLAYABLE 
?PR?_ReadATT7027?ATT7027                 SEGMENT CODE 
?DT?_ReadATT7027?ATT7027                 SEGMENT DATA OVERLAYABLE 
?PR?_ReadCALATT7027?ATT7027              SEGMENT CODE 
?DT?_ReadCALATT7027?ATT7027              SEGMENT DATA OVERLAYABLE 
?PR?EMU_Parameter_change1?ATT7027        SEGMENT CODE 
?DT?EMU_Parameter_change1?ATT7027        SEGMENT DATA OVERLAYABLE 
?PR?Calibration_meter?ATT7027            SEGMENT CODE 
	EXTRN	XDATA (meter_para)
	EXTRN	XDATA (Emu_Parameter)
	EXTRN	XDATA (Emu_Parameter_change)
	EXTRN	CODE (?C?CLDPTR)
	EXTRN	CODE (?C?CSTPTR)
	EXTRN	CODE (?C?CLDOPTR)
	EXTRN	CODE (?C?OFFXADD)
	EXTRN	CODE (?C?CSTOPTR)
	EXTRN	CODE (?C?LLDPTR)
	EXTRN	CODE (?C?ULCMP)
	EXTRN	CODE (?C?LLDPTR0)
	EXTRN	CODE (?C?LSTPTR)
	EXTRN	CODE (?C?ULSHR)
	EXTRN	CODE (?C?LMUL)
	EXTRN	CODE (?C?ULDIV)
	EXTRN	CODE (?C?LSHL)
	PUBLIC	Calibration_meter
	PUBLIC	EMU_Parameter_change1
	PUBLIC	?_ReadCALATT7027?BYTE
	PUBLIC	_ReadCALATT7027
	PUBLIC	?_ReadATT7027?BYTE
	PUBLIC	_ReadATT7027
	PUBLIC	?_WriteCALATT7027?BYTE
	PUBLIC	_WriteCALATT7027
	PUBLIC	?_Flash_Read_ATT7027?BYTE
	PUBLIC	_Flash_Read_ATT7027
	PUBLIC	?_Flash_Write_ATT7027?BYTE
	PUBLIC	_Flash_Write_ATT7027

	RSEG  ?DT?_ReadATT7027?ATT7027
?_ReadATT7027?BYTE:
       addr?356:   DS   1
    mt_data?357:   DS   3
          n?358:   DS   1

	RSEG  ?DT?_Flash_Read_ATT7027?ATT7027
?_Flash_Read_ATT7027?BYTE:
       addr?147:   DS   2
    mt_data?148:   DS   3
          n?149:   DS   1

	RSEG  ?DT?_Flash_Write_ATT7027?ATT7027
?_Flash_Write_ATT7027?BYTE:
       addr?040:   DS   2
    mt_data?041:   DS   3
          n?042:   DS   1
	ORG  6
      ADDRL?044:   DS   1
      ADDRH?045:   DS   1
       TEMP?046:   DS   1

	RSEG  ?DT?EMU_Parameter_change1?ATT7027
?EMU_Parameter_change1?BYTE:
          i?566:   DS   1
        PA1?567:   DS   3
        PA2?568:   DS   3
      tempA?569:   DS   4

	RSEG  ?DT?_ReadCALATT7027?ATT7027
?_ReadCALATT7027?BYTE:
       addr?461:   DS   1
    mt_data?462:   DS   3
          n?463:   DS   1

	RSEG  ?DT?_WriteCALATT7027?ATT7027
?_WriteCALATT7027?BYTE:
       addr?251:   DS   1
    mt_data?252:   DS   3
          n?253:   DS   1
;  #include <ATT7027.H>
;  #include <MAIN.H>
; // #include <stddef.h>
;  void Flash_Write_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n);
;  void Flash_Read_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n);
;  void WriteCALATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n);
;  void ReadATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n);
;  void ReadCALATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n);
;  void EMU_Parameter_change1();
; /*******************************************************************
;                  写FLASH数据
; 函数原型: void Flash_Write_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)
; 功能:     将要写的数据写到FLASH中
; 输入:    addr 地址,n个数,mt_data存放RAM的指针
; 输出:    
; ********************************************************************/
; void Flash_Write_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)

	RSEG  ?PR?_Flash_Write_ATT7027?ATT7027
_Flash_Write_ATT7027:
	USING	0
			; SOURCE LINE # 17
	MOV  	addr?040,R6
	MOV  	addr?040+01H,R7
;---- Variable 'mt_data?041' assigned to Register 'R1/R2/R3' ----
; {
			; SOURCE LINE # 18
; 	unsigned char i,ADDRL,ADDRH,TEMP;
; 	CFMCFG|=0x04;//	允许系统调用
			; SOURCE LINE # 20
	ORL  	CFMCFG,#04H
;  for(i=0;i<n;i++)
			; SOURCE LINE # 21
;---- Variable 'i?043' assigned to Register 'R5' ----
	CLR  	A
	MOV  	R5,A
?C0001:
	MOV  	A,R5
	CLR  	C
	SUBB 	A,n?042
	JNC  	?C0004
;   { 
			; SOURCE LINE # 22
; 	ADDRL=addr;
			; SOURCE LINE # 23
	MOV  	ADDRL?044,addr?040+01H
; 	ADDRH=addr>>4;
			; SOURCE LINE # 24
	MOV  	A,addr?040
	SWAP 	A
	MOV  	R0,A
	ANL  	A,#0F0H
	XCH  	A,R0
	MOV  	A,addr?040+01H
	SWAP 	A
	ANL  	A,#0FH
	ORL  	A,R0
	MOV  	ADDRH?045,A
; 	TEMP=*mt_data;
			; SOURCE LINE # 25
	LCALL	?C?CLDPTR
	MOV  	TEMP?046,A
; 	BWPR=0xC3;//使能写PMOD[1:0]操作
			; SOURCE LINE # 26
	MOV  	BWPR,#0C3H
; 	BWPR=0x9B;//开启所有受保护位的写使能	
			; SOURCE LINE # 27
	MOV  	BWPR,#09BH
;  /* #pragma asm
; 	MOV	R6,ADDRH						//指定要擦除的页的高地址
; 	MOV	R7,ADDRL						//指定要擦除的页的低地址
; 	MOV	R3,1								//指定要擦除DATA FLASH
;   LCALL	0FFD7H	
;   MOV DPTRH0,ADDLH
;   MOV DPTRL0,ADDRL
;   MOV	A,TEMP;
;   LCALL	0FFD9H  
;   #pragma endasm */
;   addr=addr+1;
			; SOURCE LINE # 38
	INC  	addr?040+01H
	MOV  	A,addr?040+01H
	JNZ  	?C0049
	INC  	addr?040
?C0049:
;   mt_data=mt_data+1;
			; SOURCE LINE # 39
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
;   }	
			; SOURCE LINE # 40
	INC  	R5
	SJMP 	?C0001
; }
			; SOURCE LINE # 41
?C0004:
	RET  	
; END OF _Flash_Write_ATT7027

; /*******************************************************************
;                  读FLASH数据
; 函数原型:void Flash_Read_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)
; 功能:     读FLASH数据放到mt_data指针指向要存放的地址中
; 输入:    addr子地址,n个数,*mt_data要存放的指针
; 输出: 
; ********************************************************************/
; void Flash_Read_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)

	RSEG  ?PR?_Flash_Read_ATT7027?ATT7027
_Flash_Read_ATT7027:
	USING	0
			; SOURCE LINE # 49
	MOV  	addr?147,R6
	MOV  	addr?147+01H,R7
;---- Variable 'mt_data?148' assigned to Register 'R1/R2/R3' ----
; {
			; SOURCE LINE # 50
;  unsigned char i;
;  for(i=0;i<n;i++)
			; SOURCE LINE # 52
;---- Variable 'i?150' assigned to Register 'R7' ----
	CLR  	A
	MOV  	R7,A
?C0005:
	MOV  	A,R7
	CLR  	C
	SUBB 	A,n?149
	JNC  	?C0008
;   { 
			; SOURCE LINE # 53
;   *mt_data=CBYTE[addr];
			; SOURCE LINE # 54
	MOV  	DPL,addr?147+01H
	MOV  	DPH,addr?147
	CLR  	A
	MOVC 	A,@A+DPTR
	LCALL	?C?CSTPTR
;   addr=addr+1;
			; SOURCE LINE # 55
	INC  	addr?147+01H
	MOV  	A,addr?147+01H
	JNZ  	?C0050
	INC  	addr?147
?C0050:
;   mt_data=mt_data+1;
			; SOURCE LINE # 56
	MOV  	A,#01H
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
;   }	
			; SOURCE LINE # 57
	INC  	R7
	SJMP 	?C0005
; }
			; SOURCE LINE # 58
?C0008:
	RET  	
; END OF _Flash_Read_ATT7027

; 
; 
; 
; /****************************************************************************
;                  写数据到校表寄存器中
; 函数原型:void WriteCALATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n)
; 功能:     数据放到mt_data指针指向要存放的地址中
; 输入:    addr子地址,n个数,*mt_data要存放的指针
; 输出	comm:the val which written to the registers.
; writes Calibration registers at att7027	addr:the address of the first register.
; ******************************************************************************/
; void WriteCALATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n)

	RSEG  ?PR?_WriteCALATT7027?ATT7027
_WriteCALATT7027:
	USING	0
			; SOURCE LINE # 70
	MOV  	mt_data?252,R3
	MOV  	mt_data?252+01H,R2
	MOV  	mt_data?252+02H,R1
;---- Variable 'addr?251' assigned to Register 'R7' ----
; {
			; SOURCE LINE # 71
; 	unsigned char i,delay;
; 	EPADR=0xA6;//ECR writes Calibration registers寄存器写保护使能
			; SOURCE LINE # 73
	MOV  	EPADR,#0A6H
; 	for(i=0;i<n;i++)
			; SOURCE LINE # 74
;---- Variable 'i?254' assigned to Register 'R6' ----
	CLR  	A
	MOV  	R6,A
?C0009:
	MOV  	A,R6
	CLR  	C
	SUBB 	A,n?253
	JNC  	?C0010
; 	{ 
			; SOURCE LINE # 75
; 	ECADR=addr; //write address
			; SOURCE LINE # 76
	MOV  	ECADR,R7
; 		delay=10;
			; SOURCE LINE # 77
;---- Variable 'delay?255' assigned to Register 'R5' ----
	MOV  	R5,#0AH
?C0012:
; 	while(delay>0) delay--;			// wait 4.8us
			; SOURCE LINE # 78
	DJNZ 	R5,?C0012
?C0013:
; 	ECDATH=*(mt_data+2*i);//写入数据的高8位如果单字节数据可以忽略此操作
			; SOURCE LINE # 79
	MOV  	R3,mt_data?252
	MOV  	R2,mt_data?252+01H
	MOV  	R1,mt_data?252+02H
	MOV  	B,#02H
	MOV  	A,R6
	MUL  	AB
	MOV  	DPL,A
	MOV  	DPH,B
	LCALL	?C?CLDOPTR
	MOV  	ECDATH,A
; 	ECDATL=*(mt_data+1+2*i);//写入数据的低8位
			; SOURCE LINE # 80
	MOV  	DPTR,#01H
	MOV  	B,#02H
	MOV  	A,R6
	LCALL	?C?OFFXADD
	LCALL	?C?CLDOPTR
	MOV  	ECDATL,A
; 	addr=addr+1;		//下一个校表参数
			; SOURCE LINE # 81
	INC  	R7
; 	}   
			; SOURCE LINE # 82
	INC  	R6
	SJMP 	?C0009
?C0010:
; EPADR=0xA9;	//ECR writes Calibration registers寄存器写保护禁止  
			; SOURCE LINE # 83
	MOV  	EPADR,#0A9H
; }
			; SOURCE LINE # 84
	RET  	
; END OF _WriteCALATT7027

; /***********************************************************************
;                  读电表寄存器数据
; 函数原型:void ReadATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)
; 功能:     读电表寄存器数据放到mt_data指针指向要存放的地址中
; 输入:    addr子地址,n个数,*mt_data要存放的指针
; 输出: 	This subroutine functions as reading n*bits registers from att7027.
; 	Considering the compatibilities, reading the 24bits register as 
; 		3*8bits, and reads 8bits once.
; ***********************************************************************/
; 
; void ReadATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n)//*mt_data=xxxxxx00 n=3

	RSEG  ?PR?_ReadATT7027?ATT7027
_ReadATT7027:
	USING	0
			; SOURCE LINE # 95
	MOV  	mt_data?357,R3
	MOV  	mt_data?357+01H,R2
	MOV  	mt_data?357+02H,R1
;---- Variable 'addr?356' assigned to Register 'R7' ----
; {
			; SOURCE LINE # 96
;   unsigned char delay,i=0;
			; SOURCE LINE # 97
;---- Variable 'i?360' assigned to Register 'R6' ----
	CLR  	A
	MOV  	R6,A
; 	for(i=0;i<n;i++)
			; SOURCE LINE # 98
?C0015:
	MOV  	A,R6
	CLR  	C
	SUBB 	A,n?358
	JNC  	?C0020
; 	{ 	
			; SOURCE LINE # 99
; 	EPADR=addr;  //write address
			; SOURCE LINE # 100
	MOV  	EPADR,R7
; 	delay=10;
			; SOURCE LINE # 101
;---- Variable 'delay?359' assigned to Register 'R5' ----
	MOV  	R5,#0AH
?C0018:
; 	while(delay>0) delay--;			// wait 4.8us
			; SOURCE LINE # 102
	DJNZ 	R5,?C0018
?C0019:
;     *(mt_data+3*i)=0;
			; SOURCE LINE # 103
	MOV  	R3,mt_data?357
	MOV  	R2,mt_data?357+01H
	MOV  	R1,mt_data?357+02H
	MOV  	B,#03H
	MOV  	A,R6
	MUL  	AB
	MOV  	DPL,A
	MOV  	DPH,B
	CLR  	A
	LCALL	?C?CSTOPTR
; 	*(mt_data+1+3*i)=EPDATH;//读数据的高位如果寄存器为2字节,EPDATH 为符号扩展位
			; SOURCE LINE # 104
	MOV  	DPTR,#01H
	MOV  	B,#03H
	MOV  	A,R6
	LCALL	?C?OFFXADD
	MOV  	A,EPDATH
	LCALL	?C?CSTOPTR
; 	*(mt_data+2+3*i)=EPDATM;//读数据的中间8位
			; SOURCE LINE # 105
	MOV  	R3,mt_data?357
	MOV  	R2,mt_data?357+01H
	MOV  	R1,mt_data?357+02H
	MOV  	DPTR,#02H
	MOV  	B,#03H
	MOV  	A,R6
	LCALL	?C?OFFXADD
	MOV  	A,EPDATM
	LCALL	?C?CSTOPTR
; 	*(mt_data+3+3*i)=EPDATL;//读数据的低8位
			; SOURCE LINE # 106
	MOV  	R3,mt_data?357
	MOV  	R2,mt_data?357+01H
	MOV  	R1,mt_data?357+02H
	MOV  	DPTR,#03H
	MOV  	B,#03H
	MOV  	A,R6
	LCALL	?C?OFFXADD
	MOV  	A,EPDATL
	LCALL	?C?CSTOPTR
; 	addr=addr+1;		
			; SOURCE LINE # 107
	INC  	R7
; 	} 	
			; SOURCE LINE # 108
	INC  	R6
	SJMP 	?C0015
; }
			; SOURCE LINE # 109
?C0020:
	RET  	
; END OF _ReadATT7027

; /****************************************************************************
;                  读电表校验寄存器数据
; 函数原型:void ReadCALATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)
; 功能:     读电表校验寄存器数据放到mt_data指针指向要存放的地址中
; 输入:    addr子地址,n个数,*mt_data要存放的指针
; 	Read Calibration registers at att7027
; 	addr:the address of the first register.
; 	comm:the val which written to the registers.
; ******************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -