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

📄 eepromctrlex0205.asm

📁 如何使用flash来模拟EEPROM
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	mov	[hl+4],a	; ucCount 			;[INF] 2, 8
?L0018:
	mov	a,#00H	; 0 					;[INF] 2, 4
	cmp	a,[hl+4]	; ucCount 			;[INF] 2, 8
	bnc	$?L0019						;[INF] 2, 6
??bb09_ucEEPROMInitEx:
; line    79 : 				/* Erases data in the block next used as EEPROM */
; line    80 : 				if ( ucSelfFlashBlockErase( ucEEPROM_BANK[ i ], ucEEPROM_BLO
;              CK[ i ] ) == TRUE ){	/* 惓忢廔椆 */
$DGL	0,57
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	mov	c,a						;[INF] 1, 2
	push	hl						;[INF] 1, 4
	movw	hl,#_ucEEPROM_BLOCK				;[INF] 3, 6
	mov	a,[hl+c]					;[INF] 1, 6
	pop	hl						;[INF] 1, 4
	mov	x,#00H	; 0 					;[INF] 2, 4
	xch	a,x						;[INF] 1, 2
	push	ax						;[INF] 1, 4
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	mov	c,a						;[INF] 1, 2
	push	hl						;[INF] 1, 4
	movw	hl,#_ucEEPROM_BANK				;[INF] 3, 6
	mov	a,[hl+c]					;[INF] 1, 6
	pop	hl						;[INF] 1, 4
	mov	x,#00H	; 0 					;[INF] 2, 4
	xch	a,x						;[INF] 1, 2
	call	!_ucSelfFlashBlockErase				;[INF] 3, 7
	pop	ax						;[INF] 1, 4
	inc	c						;[INF] 1, 2
	dec	c						;[INF] 1, 2
	bz	$?L0019						;[INF] 2, 6
??bb0A_ucEEPROMInitEx:
; line    81 : 					break;											/* loop end */
$DGL	0,58
??eb0A_ucEEPROMInitEx:
??eb09_ucEEPROMInitEx:
; line    82 : 				}
; line    83 : 			}
$DGL	0,60
	mov	a,[hl+4]	; ucCount 			;[INF] 2, 8
	dec	a						;[INF] 1, 2
	mov	[hl+4],a	; ucCount 			;[INF] 2, 8
	br	$?L0018						;[INF] 2, 6
?L0019:
; line    84 : 			/* An elimination result judgment */
; line    85 : 			if ( ucCount <= 0 ){									/* Count<=0 (re-try over) */
$DGL	0,62
	mov	a,#00H	; 0 					;[INF] 2, 4
	cmp	a,[hl+4]	; ucCount 			;[INF] 2, 8
	bc	$?L0023						;[INF] 2, 6
??bb0B_ucEEPROMInitEx:
; line    86 : 				/* make a block the ban on use */
; line    87 : 				if ( ucEEPROMUnableEx( i ) == FALSE ){				/* Abnormal termin
;              ation */
$DGL	0,64
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	mov	x,#00H	; 0 					;[INF] 2, 4
	xch	a,x						;[INF] 1, 2
	call	!_ucEEPROMUnableEx				;[INF] 3, 7
	inc	c						;[INF] 1, 2
	bnz	$?L0025						;[INF] 2, 6
??bb0C_ucEEPROMInitEx:
; line    88 : 					SelfFlashModeOff();								/* changes to a normal mode */
$DGL	0,65
	call	!_SelfFlashModeOff				;[INF] 3, 7
; line    89 : 					return ( ERRDEV );								/* device error */
$DGL	0,66
	movw	bc,#0FDH	; 253 				;[INF] 3, 6
	br	!?L0002						;[INF] 3, 6
??eb0C_ucEEPROMInitEx:
?L0025:
; line    90 : 				}
; line    91 : 				ucFlags |= FL_BLKERR;								/* Block error flag On */
$DGL	0,68
	mov	a,[hl+3]	; ucFlags 			;[INF] 2, 8
	or	a,#080H	; 128 					;[INF] 2, 4
	mov	[hl+3],a	; ucFlags 			;[INF] 2, 8
??eb0B_ucEEPROMInitEx:
?L0023:
; line    92 : 			}
; line    93 : 			SelfFlashModeOff();										/* changes to a normal mode */
$DGL	0,70
	call	!_SelfFlashModeOff				;[INF] 3, 7
??eb07_ucEEPROMInitEx:
?L0014:
??eb01_ucEEPROMInitEx:
; line    94 : 		}
; line    95 : 	}
$DGL	0,72
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	inc	a						;[INF] 1, 2
	mov	[hl+1],a	; i 				;[INF] 2, 8
	br	!?L0005						;[INF] 3, 6
?L0006:
; line    96 : 	
; line    97 : 	/* Setting handling of effective blocking */
; line    98 : 	ucResult = TRUE;												/* Return value setting */
$DGL	0,75
	mov	a,#00H	; 0 					;[INF] 2, 4
	mov	[hl+2],a	; ucResult 			;[INF] 2, 8
; line    99 : 	if ( ucFindBlock == 0xFF ){										/* Effective block non-dis
;              covery */
$DGL	0,76
	mov	a,[hl+5]	; ucFindBlock 			;[INF] 2, 8
	inc	a						;[INF] 1, 2
	bz	$$+5						;[INF] 2, 6
	br	!?L0040						;[INF] 3, 6
??bb0D_ucEEPROMInitEx:
; line   100 : 		for ( i = 0 ; i < EEPROM_BLOCK_NO ; i++ ){					/* loop for use
;               block several minutes */
$DGL	0,77
	mov	a,#00H	; 0 					;[INF] 2, 4
	mov	[hl+1],a	; i 				;[INF] 2, 8
?L0029:
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	cmp	a,#02H	; 2 					;[INF] 2, 4
	bc	$$+5						;[INF] 2, 6
	br	!?L0030						;[INF] 3, 6
??bb0E_ucEEPROMInitEx:
; line   101 : 			/* Bank setting */
; line   102 : 			SET_BANK( ucEEPROM_BANK[ i ] );
$DGL	0,79
	mov	c,a						;[INF] 1, 2
	push	hl						;[INF] 1, 4
	movw	hl,#_ucEEPROM_BANK				;[INF] 3, 6
	mov	a,[hl+c]					;[INF] 1, 6
	pop	hl						;[INF] 1, 4
	mov	BANK,a						;[INF] 2, 5
; line   103 : 			/* The bank top address (a flag storage address) acquisition 
;              */
; line   104 : 			usFlagAdr = BLOCK_TO_ADDRESS( ucEEPROM_BLOCK[ i ] );
$DGL	0,81
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	mov	c,a						;[INF] 1, 2
	push	hl						;[INF] 1, 4
	movw	hl,#_ucEEPROM_BLOCK				;[INF] 3, 6
	mov	a,[hl+c]					;[INF] 1, 6
	pop	hl						;[INF] 1, 4
	mov	x,#00H	; 0 					;[INF] 2, 4
	xch	a,x						;[INF] 1, 2
	call	!_usBlockToAddress				;[INF] 3, 7
	movw	ax,bc						;[INF] 1, 4
	mov	[hl+7],a	; usFlagAdr 			;[INF] 2, 8
	xch	a,x						;[INF] 1, 2
	mov	[hl+6],a	; usFlagAdr 			;[INF] 2, 8
; line   105 : 			/* A flag state judgment */
; line   106 : 			if( BLOCK_IS_BLANK( (UCHAR*)usFlagAdr ) == TRUE ){		/* A bloc
;              k is a state finished with elimination? */
$DGL	0,83
	xch	a,x						;[INF] 1, 2
	call	!_ucBlankBlock					;[INF] 3, 7
	inc	c						;[INF] 1, 2
	dec	c						;[INF] 1, 2
	bnz	$?L0032						;[INF] 2, 6
??bb0F_ucEEPROMInitEx:
; line   107 : 				ucDataBuf[ 0 ] = 0x55;
$DGL	0,84
	mov	a,#055H	; 85 					;[INF] 2, 4
	mov	!_ucDataBuf,a					;[INF] 3, 8
; line   108 : 				ucDataBuf[ 1 ] = 0x55;
$DGL	0,85
	mov	!_ucDataBuf+1,a					;[INF] 3, 8
; line   109 : 				ucDataBuf[ 2 ] = 0x55;
$DGL	0,86
	mov	!_ucDataBuf+2,a					;[INF] 3, 8
; line   110 : 				ucDataBuf[ 3 ] = 0x55;								/* Provids block validity sett
;              ing data */
$DGL	0,87
	mov	!_ucDataBuf+3,a					;[INF] 3, 8
; line   111 : 				SelfFlashModeOn();									/* changes to a self-programming 
;              mode */
$DGL	0,88
	call	!_SelfFlashModeOn				;[INF] 3, 7
; line   112 : 				if ( ucSelfFlashInitialize() == FALSE ){			/* self-programmi
;              ng Initialization */
$DGL	0,89
	call	!_ucSelfFlashInitialize				;[INF] 3, 7
	inc	c						;[INF] 1, 2
	bnz	$?L0034						;[INF] 2, 6
??bb10_ucEEPROMInitEx:
; line   113 : 					SelfFlashModeOff();								/* changes to a normal mode */
$DGL	0,90
	call	!_SelfFlashModeOff				;[INF] 3, 7
; line   114 : 					return ( ERRINIT );								/* initialization error */
$DGL	0,91
	movw	bc,#0FEH	; 254 				;[INF] 3, 6
	br	$?L0002						;[INF] 2, 6
??eb10_ucEEPROMInitEx:
?L0034:
; line   115 : 				}
; line   116 : 				if ( ucSelfFlashEEPROMWrite( ucEEPROM_BANK[ i ], usFlagAdr, 
;              4-1 ) == TRUE ){	/* Sets block 0 as valid block */
$DGL	0,93
	movw	ax,#03H	; 3 					;[INF] 3, 6
	push	ax						;[INF] 1, 4
	mov	a,[hl+6]	; usFlagAdr 			;[INF] 2, 8
	xch	a,x						;[INF] 1, 2
	mov	a,[hl+7]	; usFlagAdr 			;[INF] 2, 8
	push	ax						;[INF] 1, 4
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	mov	c,a						;[INF] 1, 2
	push	hl						;[INF] 1, 4
	movw	hl,#_ucEEPROM_BANK				;[INF] 3, 6
	mov	a,[hl+c]					;[INF] 1, 6
	pop	hl						;[INF] 1, 4
	mov	x,#00H	; 0 					;[INF] 2, 4
	xch	a,x						;[INF] 1, 2
	call	!_ucSelfFlashEEPROMWrite			;[INF] 3, 7
	pop	ax						;[INF] 1, 4
	pop	ax						;[INF] 1, 4
	inc	c						;[INF] 1, 2
	dec	c						;[INF] 1, 2
	bnz	$?L0036						;[INF] 2, 6
??bb11_ucEEPROMInitEx:
; line   117 : 					SelfFlashModeOff();								/* changes to a normal mode */
$DGL	0,94
	call	!_SelfFlashModeOff				;[INF] 3, 7
; line   118 : 					break;
$DGL	0,95
	br	$?L0030						;[INF] 2, 6
??eb11_ucEEPROMInitEx:
?L0036:
; line   119 : 				}
; line   120 : 				else {
$DGL	0,97
??bb12_ucEEPROMInitEx:
; line   121 : 					/* make a block the ban on use */
; line   122 : 					if ( ucEEPROMUnableEx( i ) == FALSE ){			/* abnormal end */
$DGL	0,99
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	mov	x,#00H	; 0 					;[INF] 2, 4
	xch	a,x						;[INF] 1, 2
	call	!_ucEEPROMUnableEx				;[INF] 3, 7
	inc	c						;[INF] 1, 2
	bnz	$?L0038						;[INF] 2, 6
??bb13_ucEEPROMInitEx:
; line   123 : 						SelfFlashModeOff();							/* changes to a normal mode */
$DGL	0,100
	call	!_SelfFlashModeOff				;[INF] 3, 7
; line   124 : 						ucResult = ERRDEV;							/* device error */
$DGL	0,101
	mov	a,#0FDH	; 253 					;[INF] 2, 4
	mov	[hl+2],a	; ucResult 			;[INF] 2, 8
; line   125 : 						break;
$DGL	0,102
	br	$?L0030						;[INF] 2, 6
??eb13_ucEEPROMInitEx:
?L0038:
; line   126 : 					}
; line   127 : 					ucFlags |= FL_BLKERR;							/* Block error flag On */
$DGL	0,104
	mov	a,[hl+3]	; ucFlags 			;[INF] 2, 8
	or	a,#080H	; 128 					;[INF] 2, 4
	mov	[hl+3],a	; ucFlags 			;[INF] 2, 8
??eb12_ucEEPROMInitEx:
; line   128 : 				}
; line   129 : 				SelfFlashModeOff();									/* changes to a normal mode */
$DGL	0,106
	call	!_SelfFlashModeOff				;[INF] 3, 7
??eb0F_ucEEPROMInitEx:
?L0032:
??eb0E_ucEEPROMInitEx:
; line   130 : 			}
; line   131 : 		}
$DGL	0,108
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	inc	a						;[INF] 1, 2
	mov	[hl+1],a	; i 				;[INF] 2, 8
	br	!?L0029						;[INF] 3, 6
?L0030:
; line   132 : 		if ( i >= EEPROM_BLOCK_NO ){								/* not able to set a block
;               effectively */
$DGL	0,109
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	cmp	a,#02H	; 2 					;[INF] 2, 4
	bc	$?L0040						;[INF] 2, 6
??bb14_ucEEPROMInitEx:
; line   133 : 			ucResult = ERRALL;										/* Prohibition of all block use *
;              /
$DGL	0,110
	mov	a,#0FBH	; 251 					;[INF] 2, 4
	mov	[hl+2],a	; ucResult 			;[INF] 2, 8
??eb14_ucEEPROMInitEx:
?L0040:
??eb0D_ucEEPROMInitEx:
; line   134 : 		}
; line   135 : 	}
; line   136 : 	if ( ucResult == TRUE ){										/* Normal end */
$DGL	0,113
	mov	a,[hl+2]	; ucResult 			;[INF] 2, 8
	cmp	a,#00H	; 0 					;[INF] 2, 4
	bnz	$?L0044						;[INF] 2, 6
??bb15_ucEEPROMInitEx:
; line   137 : 		if ( ucFlags & FL_BLKERR ){									/* Those with a block erro
;              r */
$DGL	0,114
	mov	a,[hl+3]	; ucFlags 			;[INF] 2, 8
	bf	a.7,$?L0044					;[INF] 3, 8
??bb16_ucEEPROMInitEx:
; line   138 : 			ucResult = NMLBLK;										/* Normal end(Block error generat
;              ing) */
$DGL	0,115
	mov	a,#01H	; 1 					;[INF] 2, 4
	mov	[hl+2],a	; ucResult 			;[INF] 2, 8
??eb16_ucEEPROMInitEx:
?L0044:
??eb15_ucEEPROMInitEx:
; line   139 : 		}
; line   140 : 	}
; line   141 : 	return ( ucResult );
$DGL	0,118
	mov	a,[hl+2]	; ucResult 			;[INF] 2, 8
	mov	b,#00H	; 0 					;[INF] 2, 4
	xch	a,c						;[INF] 1, 2
?L0002:
; line   142 : }
$DGL	0,119
??ef_ucEEPROMInitEx:
	pop	ax						;[INF] 1, 4
	pop	ax						;[INF] 1, 4
	pop	ax						;[INF] 1, 4
	pop	ax						;[INF] 1, 4
	pop	hl						;[INF] 1, 4
	ret							;[INF] 1, 6
??ee_ucEEPROMInitEx:
; line   143 : 
; line   144 : /*--------------------------------------------------------------
;              -----
; line   145 :  Function name : ucEEPROMReadEx(user access function)

⌨️ 快捷键说明

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