calibriap.a51

来自「P89V51Rd2下的IAP flash读取」· A51 代码 · 共 265 行

A51
265
字号
NAME	CALIBR_1

?PR?Write_IAP?CALIBR_1                   SEGMENT CODE 
?XD?Write_IAP?CALIBR_1                   SEGMENT XDATA OVERLAYABLE 
?PR?Read_IAP?CALIBR_1                    SEGMENT CODE 
?XD?Read_IAP?CALIBR_1                    SEGMENT XDATA OVERLAYABLE 
?PR?SecErase?CALIBR_1                    SEGMENT CODE 
?XD?SecErase?CALIBR_1                    SEGMENT XDATA OVERLAYABLE 
?PR?cRead_IAP?CALIBR_1                   SEGMENT CODE 
?XD?cRead_IAP?CALIBR_1                   SEGMENT XDATA OVERLAYABLE 
?PR?cWrite_IAP?CALIBR_1                  SEGMENT CODE 
?XD?cWrite_IAP?CALIBR_1                  SEGMENT XDATA OVERLAYABLE 
	PUBLIC	?cWrite_IAP?BYTE
	PUBLIC	cWrite_IAP
	PUBLIC	?cRead_IAP?BYTE
	PUBLIC	cRead_IAP
	PUBLIC	?SecErase?BYTE
	PUBLIC	SecErase
	PUBLIC	?Read_IAP?BYTE
	PUBLIC	Read_IAP
	PUBLIC	?Write_IAP?BYTE
	PUBLIC	Write_IAP

	RSEG  ?XD?SecErase?CALIBR_1
?SecErase?BYTE:
Sec_Address?243:   DS   2

	RSEG  ?XD?cRead_IAP?CALIBR_1
?cRead_IAP?BYTE:
Flash_Address?344:   DS   2

	RSEG  ?XD?cWrite_IAP?CALIBR_1
?cWrite_IAP?BYTE:
Flash_Address?445:   DS   2
      Value?446:   DS   1

	RSEG  ?XD?Read_IAP?CALIBR_1
?Read_IAP?BYTE:
Flash_Address?142:   DS   2

	RSEG  ?XD?Write_IAP?CALIBR_1
?Write_IAP?BYTE:
Flash_Address?040:   DS   2
      Value?041:   DS   4
;  #pragma src(CalibrIAP.a51)
;  unsigned char Write_IAP(unsigned int Flash_Address,float Value)

	RSEG  ?PR?Write_IAP?CALIBR_1
Write_IAP:
;  {
			PUSH	ACC
			PUSH	DPL
			PUSH	DPH
			MOV		R1,#02H
			ANL 	0B1H,#0FCH           ;change to boot flash
			MOV		DPTR,#Value?041
			MOVX	A,@DPTR
			MOV 	R5,A                 ;value
			MOV 	DPTR,#Flash_Address?040 
			MOVX	A,@DPTR
			MOV		R7,A                 ;address(upper)
			INC		DPTR
			MOVX	A,@DPTR
			MOV		R6,A                 ;address(lower)
			MOV		DPH,R7
			MOV		DPL,R6
			MOV		A,R5                 ;value
			PUSH    DPH
			PUSH    DPL
			LCALL	1FF0H                ;write
			JNZ		W1
			MOV		DPTR,#Value?041+01H  
			MOVX	A,@DPTR
			MOV 	R5,A                 ;value
			POP     DPL
			POP     DPH   
			INC     DPTR
			MOV		A,R5                 ;value
			PUSH    DPH
			PUSH    DPL
			LCALL	1FF0H
			JNZ		W1
			MOV		DPTR,#Value?041+02H
			MOVX	A,@DPTR
			MOV 	R5,A                 ;value
			POP     DPL
			POP     DPH
			INC     DPTR
			MOV		A,R5                 ;value
			PUSH    DPH
			PUSH    DPL
			LCALL	1FF0H                ;write
			JNZ		W1
			MOV		DPTR,#Value?041+03H
			MOVX	A,@DPTR
			MOV 	R5,A                 ;value
			POP     DPL
			POP     DPH
			INC     DPTR
			MOV		A,R5                 ;value
			LCALL	1FF0H                ;write
			JZ		W2
		W1: MOV 	R7,#01H
			LJMP	W3				
        W2:	MOV		R7,#00H
        W3: ORL		0B1H,#01H            ;return to user flash
        	POP		DPH
        	POP		DPL
        	POP		ACC
;  }
        	RET  	
; END OF Write_IAP

;  float Read_IAP(unsigned int Flash_Address)

	RSEG  ?PR?Read_IAP?CALIBR_1
Read_IAP:
;  {
            PUSH	ACC
			PUSH	DPH
			PUSH	DPL
			MOV		R1,#03H
			ANL 	0B1H,#0FCH          ;change to boot flash
			MOV 	DPTR,#Flash_Address?142 
			MOVX	A,@DPTR              
			MOV		R3,A                ;address(upper)
			INC		DPTR
			MOVX	A,@DPTR
			MOV		R2,A                ;address(lower)
			MOV		DPH,R3
			MOV		DPL,R2
			PUSH    DPH
			PUSH    DPL
			LCALL	1FF0H               ;read
			MOV		R4,A                ;return value(SEEE)
			POP     DPL
			POP     DPH
			INC		DPTR
			PUSH    DPH
			PUSH    DPL
			LCALL	1FF0H               ;read
			MOV		R5,A                ;return value(EMMM)
			POP     DPL
			POP     DPH
			INC		DPTR
			PUSH    DPH
			PUSH    DPL
			LCALL	1FF0H               ;read
			MOV		R6,A                ;return value(MMMM)
			POP     DPL
			POP     DPH
			INC		DPTR
			LCALL	1FF0H               ;read
			MOV		R7,A                ;return value(MMMM)
			ORL		0B1H,#01H           ;return to user flash
			POP		DPL
			POP		DPH
			POP		ACC		
;  }
         	RET  	
; END OF Read_IAP

;  unsigned char SecErase(unsigned int Sec_Address)

	RSEG  ?PR?SecErase?CALIBR_1
SecErase:
;  {
			PUSH ACC
			PUSH DPL
			PUSH DPH
			MOV     20H,#00
            SETB    008H
			MOV		R1,#08H
			ANL 	0B1H,#0FCH           ;change to boot flash
            MOV 	DPTR,#Sec_Address?243 
			MOVX	A,@DPTR
			MOV		R7,A                 ;address(upper)
			INC		DPTR
			MOVX	A,@DPTR
			MOV		R6,A                 ;address(lower)
			MOV		DPH,R7
			MOV		DPL,R6
			LCALL	1FF0H                ;ERASE
			JNZ		L1
			MOV		R7,#00H
			LJMP	L2
        L1: MOV 	R7,#01H	             
        L2: ORL		0B1H,#01H            ;return to user flash	
			POP  DPH
			POP  DPL
			POP  ACC
;  }
	        RET  	
; END OF SecErase

;  unsigned char cRead_IAP(unsigned int Flash_Address)

	RSEG  ?PR?cRead_IAP?CALIBR_1
cRead_IAP:
;  {
			PUSH	ACC
			PUSH	DPH
			PUSH	DPL
			MOV		R1,#03H
			ANL 	0B1H,#0FCH          ;change to boot flash
			MOV 	DPTR,#Flash_Address?344 
			MOVX	A,@DPTR              
			MOV		R3,A                ;address(upper)
			INC		DPTR
			MOVX	A,@DPTR
			MOV		R2,A                ;address(lower)
			MOV		DPH,R3
			MOV		DPL,R2
			LCALL	1FF0H               ;read
			MOV		R7,A                ;return value
			ORL		0B1H,#01H           ;return to user flash
			POP		DPL
			POP		DPH
			POP		ACC		
;  }
         	RET  	
; END OF cRead_IAP

;  unsigned char cWrite_IAP(unsigned int Flash_Address,unsigned char Value)

	RSEG  ?PR?cWrite_IAP?CALIBR_1
cWrite_IAP:
;  {
			PUSH	ACC
			PUSH	DPL
			PUSH	DPH
			MOV		R1,#02H
			ANL 	0B1H,#0FCH           ;change to boot flash
			MOV		DPTR,#Value?446
			MOVX	A,@DPTR
			MOV 	R5,A                 ;value
			MOV 	DPTR,#Flash_Address?445 
			MOVX	A,@DPTR
			MOV		R7,A                 ;address(upper)
			INC		DPTR
			MOVX	A,@DPTR
			MOV		R6,A                 ;address(lower)
			MOV		DPH,R7
			MOV		DPL,R6
			MOV		A,R5                 ;value
			LCALL	1FF0H                ;write
			JNZ		Z1
			MOV		R7,#00H
			LJMP	Z2	
		Z1: MOV		R7,#01H	
        Z2: ORL		0B1H,#01H            ;return to user flash
        	POP		DPH
        	POP		DPL
        	POP		ACC
;  }
        	RET  	
; END OF cWrite_IAP

	END





⌨️ 快捷键说明

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