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

📄 eepromctrlex0205.asm

📁 如何使用flash来模拟EEPROM
💻 ASM
📖 第 1 页 / 共 5 页
字号:
$DGS	REG_PAR, _p,		0103H,	0FFFFH,	010CH,	011H,	00H,	01H
$DGS	BEG_BLK, ??bb00_ucBlankBlock,	U,	U,	00H,	064H,	01H,	00H
$DGS	AUX_BEG, 03H,		00H,	00H
$DGS	END_BLK, ??eb00_ucBlankBlock,	U,	U,	00H,	064H,	01H,	00H
$DGS	AUX_END, 05H
$DGS	END_FUN, ??ef_ucBlankBlock,	U,	U,	00H,	065H,	01H,	00H
$DGS	AUX_END, 07H
$DGS	GLV_SYM, _ucParamCheck,	U,	U,	0800CH,	020H,	01H,	02H
$DGS	AUX_FUN, 00H,		U,	U,	02A0H,	00H
$DGS	BEG_FUN, ??bf_ucParamCheck,	U,	U,	00H,	065H,	01H,	00H
$DGS	AUX_BEG, 0391H,		00H,	028EH
$DGS	BEG_BLK, ??bb00_ucParamCheck,	U,	U,	00H,	064H,	01H,	00H
$DGS	AUX_BEG, 02H,		00H,	0292H
$DGS	END_BLK, ??eb00_ucParamCheck,	U,	U,	00H,	064H,	01H,	00H
$DGS	AUX_END, 04H
$DGS	BEG_BLK, ??bb01_ucParamCheck,	U,	U,	00H,	064H,	01H,	00H
$DGS	AUX_BEG, 05H,		00H,	0296H
$DGS	END_BLK, ??eb01_ucParamCheck,	U,	U,	00H,	064H,	01H,	00H
$DGS	AUX_END, 07H
$DGS	BEG_BLK, ??bb02_ucParamCheck,	U,	U,	00H,	064H,	01H,	00H
$DGS	AUX_BEG, 08H,		00H,	029AH
$DGS	END_BLK, ??eb02_ucParamCheck,	U,	U,	00H,	064H,	01H,	00H
$DGS	AUX_END, 0AH
$DGS	BEG_BLK, ??bb03_ucParamCheck,	U,	U,	00H,	064H,	01H,	00H
$DGS	AUX_BEG, 0BH,		00H,	00H
$DGS	END_BLK, ??eb03_ucParamCheck,	U,	U,	00H,	064H,	01H,	00H
$DGS	AUX_END, 0DH
$DGS	END_FUN, ??ef_ucParamCheck,	U,	U,	00H,	065H,	01H,	00H
$DGS	AUX_END, 0FH
$DGS	GLV_SYM, _ucEEPROM_BLOCK,	U,	U,	0500CH,	020H,	01H,	03H
$DGS	AUX_STR, 00H,		00H,	02H,	02H,	00H,	00H,	00H
$DGS	GLV_SYM, _ucEEPROM_BANK,	U,	U,	0500CH,	020H,	01H,	03H
$DGS	AUX_STR, 00H,		00H,	02H,	02H,	00H,	00H,	00H
$DGS	GLV_SYM, _ucDataBuf,	U,	U,	0CH,	020H,	01H,	03H
$DGS	AUX_STR, 00H,		00H,	04H,	04H,	00H,	00H,	00H
$DGS	GLV_SYM, _WordAddr,	U,	U,	08H,	020H,	01H,	00H
$DGS	AUX_STR, 0EH,		00H,	04H,	00H,	00H,	00H,	00H
$DGS	GLV_SYM, _ucEntryRAM,	U,	U,	030CH,	020H,	01H,	03H
$DGS	AUX_STR, 00H,		00H,	064H,	064H,	00H,	00H,	00H
$DGS	GLV_SYM, _FlashStart,	U,	U,	08001H,	02H,	00H,	02H
$DGS	GLV_SYM, _FlashEnd,	U,	U,	08001H,	02H,	00H,	02H
$DGS	GLV_SYM, _FlashEnv,	U,	U,	08001H,	02H,	00H,	02H
$DGS	GLV_SYM, _CheckFLMD,	U,	U,	0800CH,	02H,	00H,	02H
$DGS	GLV_SYM, _FlashBlockBlankCheck,	U,	U,	0800CH,	02H,	00H,	02H
$DGS	GLV_SYM, _FlashBlockErase,	U,	U,	0800CH,	02H,	00H,	02H
$DGS	GLV_SYM, _EEPROMWrite,	U,	U,	0800CH,	02H,	00H,	02H
$DGS	GLV_SYM, _FlashWordWrite,	U,	U,	0800CH,	02H,	00H,	02H

	EXTRN	_FlashStart
	EXTRN	_FlashEnd
	EXTRN	_FlashEnv
	EXTRN	_CheckFLMD
	EXTRN	_FlashBlockBlankCheck
	EXTRN	_FlashBlockErase
	EXTRN	_EEPROMWrite
	EXTRN	_FlashWordWrite
	PUBLIC	_ucEEPROM_BLOCK
	PUBLIC	_ucEEPROM_BANK
	PUBLIC	_ucDataBuf
	PUBLIC	_WordAddr
	PUBLIC	_ucEntryRAM
	PUBLIC	_ucEEPROMInitEx
	PUBLIC	_ucEEPROMReadEx
	PUBLIC	_ucEEPROMWriteEx
	PUBLIC	_ucEEPROMChangeEx
	PUBLIC	_ucEEPROMEraseEx
	PUBLIC	_ucEEPROMGetRemainEx
	PUBLIC	_ucEEPROMUseBlockSearchEx
	PUBLIC	_usEEPROMWriteTopSearchEx
	PUBLIC	_usEEPROMDataSearchEx
	PUBLIC	_ucEEPROMUnableEx
	PUBLIC	_SelfFlashModeOn
	PUBLIC	_SelfFlashModeOff
	PUBLIC	_ucSelfFlashInitialize
	PUBLIC	_ucSelfFlashBlockErase
	PUBLIC	_ucSelfFlashEEPROMWrite
	PUBLIC	_ucSelfFlashWordWrite
	PUBLIC	_usBlockToAddress
	PUBLIC	_ucUseProhibitionBlock
	PUBLIC	_ucEffectiveBlock
	PUBLIC	_ucBlankBlock
	PUBLIC	_ucParamCheck

@@BITS	BSEG

@@CNST	CSEG	UNITP
_ucEEPROM_BLOCK:	DB	09H	; 9
	DB	0AH	; 10
_ucEEPROM_BANK:	DB	00H	; 0
	DB	00H	; 0

@@R_INIT	CSEG	UNITP

@@INIT	DSEG	UNITP

@@DATA	DSEG	UNITP
_ucDataBuf:	DS	(4)
_WordAddr:	DS	(4)

@@R_INIS	CSEG	UNITP

@@INIS	DSEG	SADDRP

@@DATS	DSEG	SADDRP
_ucEntryRAM:	DS	(100)

@@CALT	CSEG	CALLT0

; line     1 : /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;              +++++
; line     2 :   System       : EEPROM emulation
; line     3 :   Module name  : EEPROM emulation control processing
; line     4 :   File name    : EEPROMCtrlEx.c
; line     5 :   Version name : 1.00
; line     6 :   Target CPU   : uPD78F0547(78K0/KF2)
; line     7 :   Last updated : 2005/09/08
; line     8 : ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;              +++*/
; line     9 : 
; line    10 : #pragma section @@CODE	SLF_CTRL	AT	7400H
; line    11 : 
; line    12 : #include "EEPROMCtrlEx0205.h"
; line    13 : 
; line    14 : 
; line    15 : /*--------------------------------------------------------------
;              -----
; line    16 :  Function name : ucEEPROMInitEx(user access function)
; line    17 :  Arguments     : None
; line    18 :  Return value  : Normal(TRUE:00H) / Noemal end(Block error)(NMLB
;              LK:01H) /
; line    19 :                  Prohibition of all block use(ERRALL:FBH) / Devi
;              ce error(ERRDEV:FDH) / 
; line    20 :                  Initialization error(ERRINIT:FEH)
; line    21 :  Summary       : initialize EEPROM emulation
; line    22 : ----------------------------------------------------------------
;              --*/
; line    23 : UCHAR ucEEPROMInitEx( void )										/* EEPROM emulation Initia
;              lize processing */
; line    24 : {

SLF_CTRL	CSEG	AT 7400H
_ucEEPROMInitEx:
$DGL	1,20
	push	hl						;[INF] 1, 4
	push	ax						;[INF] 1, 4
	push	ax						;[INF] 1, 4
	push	ax						;[INF] 1, 4
	push	ax						;[INF] 1, 4
	movw	ax,sp						;[INF] 2, 8
	movw	hl,ax						;[INF] 1, 4
??bf_ucEEPROMInitEx:
; line    25 : 	USHORT	usFlagAdr;			/* Effective/invalid flag address */
; line    26 : 	UCHAR	ucFindBlock;		/* Discovery block num ber        */
; line    27 : 	UCHAR	ucCount;			/* Elimination counter            */
; line    28 : 	UCHAR	ucFlags;			/* Various flags                  */
; line    29 : 								/*   D7:Block error               */
; line    30 : 								/*   D6:Block elimination         */
; line    31 : 								/*   D5:not use                   */
; line    32 : 								/*   D4:not use                   */
; line    33 : 								/*   D3:not use                   */
; line    34 : 								/*   D2:not use                   */
; line    35 : 								/*   D1:not use                   */
; line    36 : 								/*   D0:not use                   */
; line    37 : 	UCHAR	ucResult;			/* Processing result              */
; line    38 : 	UCHAR	i;
; line    39 : 	
; line    40 : 	/* Parameter Check */
; line    41 : 	if( PARAM_OK == FALSE ){										/* parameter error? */
$DGL	0,18
	call	!_ucParamCheck					;[INF] 3, 7
	inc	c						;[INF] 1, 2
	bnz	$?L0003						;[INF] 2, 6
??bb00_ucEEPROMInitEx:
; line    42 : 		return( ERRPRM );											/* then rerun */
$DGL	0,19
	movw	bc,#0F4H	; 244 				;[INF] 3, 6
	br	!?L0002						;[INF] 3, 6
??eb00_ucEEPROMInitEx:
?L0003:
; line    43 : 	}
; line    44 : 	
; line    45 : 	/* Variable initialization */
; line    46 : 	ucFindBlock = 0xFF;												/* Discovery block number initia
;              lization */
$DGL	0,23
	mov	a,#0FFH	; 255 					;[INF] 2, 4
	mov	[hl+5],a	; ucFindBlock 			;[INF] 2, 8
; line    47 : 	ucFlags		= 0x00;												/* Various flag initialization */
$DGL	0,24
	inc	a						;[INF] 1, 2
	mov	[hl+3],a	; ucFlags 			;[INF] 2, 8
; line    48 : 	/* Block elimination and effective block setting processing */
; line    49 : 	for ( i = 0 ; i < EEPROM_BLOCK_NO ; i++ ){						/* loop for use
;               block several minutes */
$DGL	0,26
	mov	[hl+1],a	; i 				;[INF] 2, 8
?L0005:
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	cmp	a,#02H	; 2 					;[INF] 2, 4
	bc	$$+5						;[INF] 2, 6
	br	!?L0006						;[INF] 3, 6
??bb01_ucEEPROMInitEx:
; line    50 : 		/* Elimination flag Off */
; line    51 : 		ucFlags &= ~FL_DOERS;
$DGL	0,28
	mov	a,[hl+3]	; ucFlags 			;[INF] 2, 8
	and	a,#0F7H	; 247 					;[INF] 2, 4
	mov	[hl+3],a	; ucFlags 			;[INF] 2, 8
; line    52 : 		/* Bank setting */
; line    53 : 		SET_BANK( ucEEPROM_BANK[ i ] );
$DGL	0,30
	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	BANK,a						;[INF] 2, 5
; line    54 : 		/* The bank top address (a flag storage address) acquisition *
;              /
; line    55 : 		usFlagAdr = BLOCK_TO_ADDRESS( ucEEPROM_BLOCK[ i ] );
$DGL	0,32
	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    56 : 		/* An elimination condition judgment */
; line    57 : 		if( BLOCK_IS_PROHIBIT( (UCHAR*)usFlagAdr ) == FALSE ){		/* A b
;              lock is a ban on use state? */
$DGL	0,34
	xch	a,x						;[INF] 1, 2
	call	!_ucUseProhibitionBlock				;[INF] 3, 7
	inc	c						;[INF] 1, 2
	bnz	$?L0011						;[INF] 2, 6
??bb02_ucEEPROMInitEx:
; line    58 : 			if ( BLOCK_IS_EFFECTIVE( (UCHAR*)usFlagAdr ) == TRUE ){	/* A 
;              block is effective? */
$DGL	0,35
	mov	a,[hl+6]	; usFlagAdr 			;[INF] 2, 8
	xch	a,x						;[INF] 1, 2
	mov	a,[hl+7]	; usFlagAdr 			;[INF] 2, 8
	call	!_ucEffectiveBlock				;[INF] 3, 7
	inc	c						;[INF] 1, 2
	dec	c						;[INF] 1, 2
	bnz	$?L0010						;[INF] 2, 6
??bb03_ucEEPROMInitEx:
; line    59 : 				if ( ucFindBlock == 0xFF ){							/* Effective block non-dis
;              covery */
$DGL	0,36
	mov	a,[hl+5]	; ucFindBlock 			;[INF] 2, 8
	inc	a						;[INF] 1, 2
	bnz	$?L0012						;[INF] 2, 6
??bb04_ucEEPROMInitEx:
; line    60 : 					ucFindBlock = i;								/* Block number setting */
$DGL	0,37
	mov	a,[hl+1]	; i 				;[INF] 2, 8
	mov	[hl+5],a	; ucFindBlock 			;[INF] 2, 8
??eb04_ucEEPROMInitEx:
	br	$?L0011						;[INF] 2, 6
?L0012:
; line    61 : 				}
; line    62 : 				else{												/* finished with effective block discovery 
;              */
$DGL	0,39
??bb05_ucEEPROMInitEx:
; line    63 : 					ucFlags |= FL_DOERS;							/* Elimination flag On */
$DGL	0,40
	mov	a,[hl+3]	; ucFlags 			;[INF] 2, 8
	or	a,#08H	; 8 					;[INF] 2, 4
	mov	[hl+3],a	; ucFlags 			;[INF] 2, 8
??eb05_ucEEPROMInitEx:
??eb03_ucEEPROMInitEx:
	br	$?L0011						;[INF] 2, 6
?L0010:
; line    64 : 				}
; line    65 : 			}
; line    66 : 			else{													/* block=An invalid state (an abnormal stat
;              e) */
$DGL	0,43
??bb06_ucEEPROMInitEx:
; line    67 : 				ucFlags |= FL_DOERS;								/* Elimination flag On */
$DGL	0,44
	mov	a,[hl+3]	; ucFlags 			;[INF] 2, 8
	or	a,#08H	; 8 					;[INF] 2, 4
	mov	[hl+3],a	; ucFlags 			;[INF] 2, 8
??eb06_ucEEPROMInitEx:
?L0011:
??eb02_ucEEPROMInitEx:
; line    68 : 			}
; line    69 : 		}
; line    70 : 		/* Processing to erase a block */
; line    71 : 		if ( ucFlags & FL_DOERS ){									/* Elimination flag On? */
$DGL	0,48
	mov	a,[hl+3]	; ucFlags 			;[INF] 2, 8
	bf	a.3,$?L0014					;[INF] 3, 8
??bb07_ucEEPROMInitEx:
; line    72 : 			SelfFlashModeOn();										/* changes to a self-programming 
;              mode */
$DGL	0,49
	call	!_SelfFlashModeOn				;[INF] 3, 7
; line    73 : 			if ( ucSelfFlashInitialize() == FALSE ){				/* self-programmi
;              ng Initialization */
$DGL	0,50
	call	!_ucSelfFlashInitialize				;[INF] 3, 7
	inc	c						;[INF] 1, 2
	bnz	$?L0016						;[INF] 2, 6
??bb08_ucEEPROMInitEx:
; line    74 : 				SelfFlashModeOff();									/* changes to a normal mode */
$DGL	0,51
	call	!_SelfFlashModeOff				;[INF] 3, 7
; line    75 : 				return ( ERRINIT );									/* An initialization error */
$DGL	0,52
	movw	bc,#0FEH	; 254 				;[INF] 3, 6
	br	!?L0002						;[INF] 3, 6
??eb08_ucEEPROMInitEx:
?L0016:
; line    76 : 			}
; line    77 : 			/* An elimination counter minute loop */
; line    78 : 			for ( ucCount = ERASENUM + 1; ucCount > 0; ucCount-- ) {
$DGL	0,55
	mov	a,#01H	; 1 					;[INF] 2, 4

⌨️ 快捷键说明

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