📄 eepromctrlex0205.asm
字号:
; line 146 : Arguments : ucDataNo:Read data No.
; line 147 : : *pDataAddress:Read data storage address
; line 148 : Return value : Normal completion(TRUE:00H) / Reading data noth
; ing(ERRNODAT:F7H) /
; line 149 : With no effective block(ERRNOUSE:FAH)
; line 150 : Summary : Data with the specified number is read from EEP
; ROM to the storage address.
; line 151 : : 1.Searches for blocks being used as EEPROM.
; line 152 : : 2.Searches for latest data's address among valid bloc
; ks.
; line 153 : : 3.Reads latest data from searched address.
; line 154 : ----------------------------------------------------------------
; ---*/
; line 155 : UCHAR ucEEPROMReadEx( UCHAR ucDataNo, UCHAR *pDataAddress ) /*
; EEPROM data read processing */
; line 156 : {
_ucEEPROMReadEx:
$DGL 1,124
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_ucEEPROMReadEx:
; line 157 : USHORT usDataSrcAdr;
; line 158 : UCHAR ucBlockTBLNo;
; line 159 : UCHAR *pReadAdr;
; line 160 : UCHAR i;
; line 161 :
; line 162 : /* Parameter Check */
; line 163 : if( PARAM_OK == FALSE ){ /* parameter error? */
$DGL 0,8
call !_ucParamCheck ;[INF] 3, 7
inc c ;[INF] 1, 2
bnz $?L0048 ;[INF] 2, 6
??bb00_ucEEPROMReadEx:
; line 164 : return( ERRPRM ); /* then rerun */
$DGL 0,9
movw bc,#0F4H ; 244 ;[INF] 3, 6
br !?L0047 ;[INF] 3, 6
??eb00_ucEEPROMReadEx:
?L0048:
; line 165 : }
; line 166 :
; line 167 : /* Searches for valid blocks currently used as EEPROM */
; line 168 : ucBlockTBLNo = ucEEPROMUseBlockSearchEx();
$DGL 0,13
call !_ucEEPROMUseBlockSearchEx ;[INF] 3, 7
mov a,c ;[INF] 1, 2
mov [hl+3],a ; ucBlockTBLNo ;[INF] 2, 8
; line 169 : if ( ucBlockTBLNo == FALSE ){ /* abnormal end? */
$DGL 0,14
inc a ;[INF] 1, 2
bnz $?L0050 ;[INF] 2, 6
??bb01_ucEEPROMReadEx:
; line 170 : return ( ERRNOUSE ); /* With no effective block */
$DGL 0,15
movw bc,#0FAH ; 250 ;[INF] 3, 6
br $?L0047 ;[INF] 2, 6
??eb01_ucEEPROMReadEx:
?L0050:
; line 171 : }
; line 172 : /* Obtains address of latest data for specified number */
; line 173 : usDataSrcAdr = usEEPROMDataSearchEx( ucDataNo, ucBlockTBLNo );
$DGL 0,18
mov a,[hl+3] ; ucBlockTBLNo ;[INF] 2, 8
mov x,#00H ; 0 ;[INF] 2, 4
xch a,x ;[INF] 1, 2
push ax ;[INF] 1, 4
mov a,[hl+6] ; ucDataNo ;[INF] 2, 8
mov x,#00H ; 0 ;[INF] 2, 4
xch a,x ;[INF] 1, 2
call !_usEEPROMDataSearchEx ;[INF] 3, 7
pop ax ;[INF] 1, 4
movw ax,bc ;[INF] 1, 4
mov [hl+5],a ; usDataSrcAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov [hl+4],a ; usDataSrcAdr ;[INF] 2, 8
; line 174 : if ( usDataSrcAdr == 0x00 ){
$DGL 0,19
or a,[hl+5] ; usDataSrcAdr ;[INF] 2, 8
bnz $?L0052 ;[INF] 2, 6
??bb02_ucEEPROMReadEx:
; line 175 : return( ERRNODAT ); /* no data */
$DGL 0,20
movw bc,#0F7H ; 247 ;[INF] 3, 6
br $?L0047 ;[INF] 2, 6
??eb02_ucEEPROMReadEx:
?L0052:
; line 176 : }
; line 177 : /* Reads latest data from obtained address */
; line 178 : pReadAdr = (UCHAR*)( usDataSrcAdr +1 );
$DGL 0,23
mov a,[hl+4] ; usDataSrcAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov a,[hl+5] ; usDataSrcAdr ;[INF] 2, 8
incw ax ;[INF] 1, 4
mov [hl+2],a ; pReadAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov [hl+1],a ; pReadAdr ;[INF] 2, 8
; line 179 : for ( i=0 ; i < DATALENGTH ; i++ ){
$DGL 0,24
mov a,#00H ; 0 ;[INF] 2, 4
mov [hl],a ; i ;[INF] 1, 4
?L0054:
mov a,[hl] ; i ;[INF] 1, 4
cmp a,#01H ; 1 ;[INF] 2, 4
bnc $?L0055 ;[INF] 2, 6
??bb03_ucEEPROMReadEx:
; line 180 : *pDataAddress++ = *pReadAdr++;
$DGL 0,25
mov a,[hl+1] ; pReadAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov a,[hl+2] ; pReadAdr ;[INF] 2, 8
movw de,ax ;[INF] 1, 4
incw ax ;[INF] 1, 4
mov [hl+2],a ; pReadAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov [hl+1],a ; pReadAdr ;[INF] 2, 8
mov a,[de] ;[INF] 1, 4
mov c,a ;[INF] 1, 2
mov a,[hl+12] ; pDataAddress ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov a,[hl+13] ; pDataAddress ;[INF] 2, 8
movw de,ax ;[INF] 1, 4
incw ax ;[INF] 1, 4
mov [hl+13],a ; pDataAddress ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov [hl+12],a ; pDataAddress ;[INF] 2, 8
mov a,c ;[INF] 1, 2
mov [de],a ;[INF] 1, 4
??eb03_ucEEPROMReadEx:
; line 181 : }
$DGL 0,26
mov a,[hl] ; i ;[INF] 1, 4
inc a ;[INF] 1, 2
mov [hl],a ; i ;[INF] 1, 4
br $?L0054 ;[INF] 2, 6
?L0055:
; line 182 : if ( ( (USHORT)pReadAdr & 0x0003 ) == 0x0003 ){ /* Offset i
; s +3 located (a 4byte unit) */
$DGL 0,27
mov a,[hl+1] ; pReadAdr ;[INF] 2, 8
and a,#03H ; 3 ;[INF] 2, 4
xch a,x ;[INF] 1, 2
mov a,#00H ; 0 ;[INF] 2, 4
cmpw ax,#03H ; 3 ;[INF] 3, 6
bnz $?L0057 ;[INF] 2, 6
??bb04_ucEEPROMReadEx:
; line 183 : /* Since the delimiter is read, it rewrites by the last byte d
; ata */
; line 184 : pDataAddress--; /* One pointer is returned */
$DGL 0,29
mov a,[hl+12] ; pDataAddress ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov a,[hl+13] ; pDataAddress ;[INF] 2, 8
decw ax ;[INF] 1, 4
mov [hl+13],a ; pDataAddress ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov [hl+12],a ; pDataAddress ;[INF] 2, 8
; line 185 : *pDataAddress = *pReadAdr;
$DGL 0,30
mov a,[hl+1] ; pReadAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov a,[hl+2] ; pReadAdr ;[INF] 2, 8
movw de,ax ;[INF] 1, 4
mov a,[de] ;[INF] 1, 4
mov c,a ;[INF] 1, 2
mov a,[hl+12] ; pDataAddress ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov a,[hl+13] ; pDataAddress ;[INF] 2, 8
movw de,ax ;[INF] 1, 4
mov a,c ;[INF] 1, 2
mov [de],a ;[INF] 1, 4
??eb04_ucEEPROMReadEx:
?L0057:
; line 186 : }
; line 187 : return( TRUE );
$DGL 0,32
movw bc,#00H ; 0 ;[INF] 3, 6
?L0047:
; line 188 : }
$DGL 0,33
??ef_ucEEPROMReadEx:
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_ucEEPROMReadEx:
; line 189 :
; line 190 : /*--------------------------------------------------------------
; -----
; line 191 : Function name : ucEEPROMWriteEx(user access function)
; line 192 : Arguments : ucDataNo:Write data number
; line 193 : : *pDataAddress:Write data storage address
; line 194 : Return value : Normal completion(TRUE:00H) / Data full(ERRFULL
; :F5H) / Write error(ERRWRITE:F6H) /
; line 195 : With no effective block(ERRNOUSE:FAH) / Initial
; ization error(ERRINIT:FEH)
; line 196 : Summary : Writes data with specified number from the stor
; age address to EEPROM.
; line 197 : : 1.Searches for blocks being used as EEPROM.
; line 198 : : 2:Searches for addresses to enable writing to valid bloc
; k.
; line 199 : : 3:Creates write data.
; line 200 : : 4:Writes to valid blocks.
; line 201 : ----------------------------------------------------------------
; ---*/
; line 202 : UCHAR ucEEPROMWriteEx( UCHAR ucDataNo, UCHAR *pDataAddress ) /*
; EEPROM data write processing */
; line 203 : {
_ucEEPROMWriteEx:
$DGL 1,156
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
push ax ;[INF] 1, 4
movw ax,sp ;[INF] 2, 8
movw hl,ax ;[INF] 1, 4
??bf_ucEEPROMWriteEx:
; line 204 : USHORT usBlockAdr;
; line 205 : USHORT usWriteAdr;
; line 206 : UCHAR ucBlockTBLNo;
; line 207 : UCHAR ucCount;
; line 208 : UCHAR ucResult;
; line 209 : UCHAR i;
; line 210 :
; line 211 : /* Parameter Check */
; line 212 : if( PARAM_OK == FALSE ){ /* parameter error? */
$DGL 0,10
call !_ucParamCheck ;[INF] 3, 7
inc c ;[INF] 1, 2
bnz $?L0061 ;[INF] 2, 6
??bb00_ucEEPROMWriteEx:
; line 213 : return( ERRPRM ); /* then rerun */
$DGL 0,11
movw bc,#0F4H ; 244 ;[INF] 3, 6
br !?L0060 ;[INF] 3, 6
??eb00_ucEEPROMWriteEx:
?L0061:
; line 214 : }
; line 215 :
; line 216 : /* Searches for valid blocks being used as EEPROM */
; line 217 : ucBlockTBLNo = ucEEPROMUseBlockSearchEx();
$DGL 0,15
call !_ucEEPROMUseBlockSearchEx ;[INF] 3, 7
mov a,c ;[INF] 1, 2
mov [hl+3],a ; ucBlockTBLNo ;[INF] 2, 8
; line 218 : if ( ucBlockTBLNo == FALSE ){ /* abnormal end */
$DGL 0,16
inc a ;[INF] 1, 2
bnz $?L0063 ;[INF] 2, 6
??bb01_ucEEPROMWriteEx:
; line 219 : return( ERRNOUSE ); /* With no effective block */
$DGL 0,17
movw bc,#0FAH ; 250 ;[INF] 3, 6
br !?L0060 ;[INF] 3, 6
??eb01_ucEEPROMWriteEx:
?L0063:
; line 220 : }
; line 221 :
; line 222 : /* Bank set */
; line 223 : SET_BANK( ucEEPROM_BANK[ ucBlockTBLNo ] );
$DGL 0,21
mov a,[hl+3] ; ucBlockTBLNo ;[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 224 : /* Bank final address acquisition */
; line 225 : usBlockAdr = BLOCK_TO_ADDRESS( ucEEPROM_BLOCK[ ucBlockTBLNo ] )
; ;
$DGL 0,23
mov a,[hl+3] ; ucBlockTBLNo ;[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 ; usBlockAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov [hl+6],a ; usBlockAdr ;[INF] 2, 8
; line 226 : usBlockAdr += DATA_END_OFFSET;
$DGL 0,24
xch a,x ;[INF] 1, 2
add a,#04H ; 4 ;[INF] 2, 4
mov [hl+7],a ; usBlockAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov [hl+6],a ; usBlockAdr ;[INF] 2, 8
; line 227 : /* Obtains EEPROM write address */
; line 228 : usWriteAdr = usEEPROMWriteTopSearchEx( ucBlockTBLNo );
$DGL 0,26
mov a,[hl+3] ; ucBlockTBLNo ;[INF] 2, 8
mov x,#00H ; 0 ;[INF] 2, 4
xch a,x ;[INF] 1, 2
call !_usEEPROMWriteTopSearchEx ;[INF] 3, 7
movw ax,bc ;[INF] 1, 4
mov [hl+5],a ; usWriteAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov [hl+4],a ; usWriteAdr ;[INF] 2, 8
; line 229 : /* Uses data specified by DataNo to create data to write to EEP
; ROM */
; line 230 : ucDataBuf[ WRITE_DATA_LENGTH ] = 0xFF; /* Last field: D
; elimiter */
$DGL 0,28
mov a,#0FFH ; 255 ;[INF] 2, 4
mov !_ucDataBuf+3,a ;[INF] 3, 8
; line 231 : ucDataBuf[ WRITE_DATA_LENGTH -1 ] = 0xFF;
$DGL 0,29
mov !_ucDataBuf+2,a ;[INF] 3, 8
; line 232 : ucDataBuf[ WRITE_DATA_LENGTH -2 ] = 0xFF;
$DGL 0,30
mov !_ucDataBuf+1,a ;[INF] 3, 8
; line 233 : ucDataBuf[ WRITE_DATA_LENGTH -3 ] = 0xFF; /* FFH setting o
; f empty data */
$DGL 0,31
mov !_ucDataBuf,a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -