📄 para.src
字号:
MOV DPTR,#i?042
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
CLR A
MOV R5,A
LCALL _FlashWrByte
; }
; SOURCE LINE # 114
; }
; SOURCE LINE # 115
; }
; SOURCE LINE # 116
?C0009:
MOV DPTR,#i?042+01H
MOVX A,@DPTR
ADD A,#02H
MOVX @DPTR,A
MOV DPTR,#i?042
MOVX A,@DPTR
ADDC A,#00H
MOVX @DPTR,A
LJMP ?C0007
?C0008:
;
; // check redo flag
; if(fRedo)
; SOURCE LINE # 119
JNB fRedo?046,?C0016
; return -1;
; SOURCE LINE # 120
?C0069:
MOV R6,#0FFH
MOV R7,#0FFH
RET
?C0016:
;
; // copy parameters to new sector and erase old one
; // and update start address
; if(StartAddr == ParaStart+2)
; SOURCE LINE # 124
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#02H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
MOV DPTR,#StartAddr?045
MOVX A,@DPTR
XRL A,R6
JNZ ?C0054
INC DPTR
MOVX A,@DPTR
XRL A,R7
?C0054:
JNZ ?C0017
; {
; SOURCE LINE # 125
; ParaCopy(1);
; SOURCE LINE # 126
SETB ?ParaCopy?BIT
LCALL ParaCopy
; StartAddr = ParaStart + SECTOR_SIZE + 2;
; SOURCE LINE # 127
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#082H
; }
; SOURCE LINE # 128
SJMP ?C0067
?C0017:
; else
; {
; SOURCE LINE # 130
; ParaCopy(0);
; SOURCE LINE # 131
CLR ?ParaCopy?BIT
LCALL ParaCopy
; StartAddr = ParaStart + 2;
; SOURCE LINE # 132
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#02H
?C0067:
MOV R6,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV DPTR,#StartAddr?045
MOVX @DPTR,A
INC DPTR
XCH A,R6
MOVX @DPTR,A
; }
; SOURCE LINE # 133
?C0018:
;
; // update redo flag
; fRedo = 1;
; SOURCE LINE # 136
SETB fRedo?046
; // again
; goto Redo;
; SOURCE LINE # 138
LJMP ?_ParaWrite?Redo
; END OF _ParaWrite
; }
;
; // read a pafameter value
; // para: parameter to be read
; // return: positive value for reading, -1 for error
; int ParaRead(unsigned char para)
RSEG ?PR?_ParaRead?PARA
_ParaRead:
USING 0
; SOURCE LINE # 144
MOV DPTR,#para?147
MOV A,R7
MOVX @DPTR,A
; {
; SOURCE LINE # 145
; unsigned int i;
; unsigned int StartAddr;
; unsigned char oldpara;
;
; // find which sector is in use now
; if(FlashRdByte(ParaStart+1) == H_USING)
; SOURCE LINE # 151
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#01H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
LCALL _FlashRdByte
CJNE R7,#0F0H,?C0019
; StartAddr = ParaStart + 2;
; SOURCE LINE # 152
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#02H
SJMP ?C0070
?C0019:
; else if(FlashRdByte(ParaStart+SECTOR_SIZE+1) == H_USING)
; SOURCE LINE # 153
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#081H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
LCALL _FlashRdByte
CJNE R7,#0F0H,?C0021
; StartAddr = ParaStart + SECTOR_SIZE + 2;
; SOURCE LINE # 154
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#082H
?C0070:
MOV R6,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV DPTR,#StartAddr?149
MOVX @DPTR,A
INC DPTR
XCH A,R6
MOVX @DPTR,A
SJMP ?C0020
?C0021:
; else
; return -1;
; SOURCE LINE # 156
SJMP ?C0072
?C0020:
;
; // search parameter
; for(i=StartAddr; i<StartAddr+SECTOR_SIZE-2; i+=2)
; SOURCE LINE # 159
MOV DPTR,#StartAddr?149
MOVX A,@DPTR
MOV R7,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#i?148
XCH A,R7
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
?C0024:
MOV DPTR,#StartAddr?149+01H
MOVX A,@DPTR
ADD A,#07EH
MOV R5,A
MOV DPTR,#StartAddr?149
MOVX A,@DPTR
ADDC A,#00H
MOV R4,A
MOV DPTR,#i?148
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
CLR C
SUBB A,R5
MOV A,R6
SUBB A,R4
JNC ?C0025
; {
; SOURCE LINE # 160
; oldpara = FlashRdByte(i);
; SOURCE LINE # 161
LCALL _FlashRdByte
MOV DPTR,#oldpara?150
MOV A,R7
MOVX @DPTR,A
; if(oldpara == para)
; SOURCE LINE # 162
MOV DPTR,#para?147
MOVX A,@DPTR
XRL A,R7
JNZ ?C0027
; return FlashRdByte(i+1);
; SOURCE LINE # 163
MOV DPTR,#i?148+01H
MOVX A,@DPTR
ADD A,#01H
MOV R7,A
MOV DPTR,#i?148
MOVX A,@DPTR
ADDC A,#00H
MOV R6,A
LCALL _FlashRdByte
MOV R6,#00H
RET
?C0027:
; else if(oldpara == PARA_EMPTY)
; SOURCE LINE # 164
MOV DPTR,#oldpara?150
MOVX A,@DPTR
CJNE A,#0FFH,?C0026
; return -1;
; SOURCE LINE # 165
?C0071:
SJMP ?C0072
; }
; SOURCE LINE # 166
?C0026:
MOV DPTR,#i?148+01H
MOVX A,@DPTR
ADD A,#02H
MOVX @DPTR,A
MOV DPTR,#i?148
MOVX A,@DPTR
ADDC A,#00H
MOVX @DPTR,A
SJMP ?C0024
?C0025:
;
; return -1;
; SOURCE LINE # 168
?C0072:
MOV R6,#0FFH
MOV R7,#0FFH
; }
; SOURCE LINE # 169
?C0023:
RET
; END OF _ParaRead
;
; // parameter sector initialize
; // return: <2 for exist, >=2 for new formated
; unsigned char ParaMemInit(void)
RSEG ?PR?ParaMemInit?PARA
ParaMemInit:
USING 0
; SOURCE LINE # 173
; {
; SOURCE LINE # 174
; unsigned int s0head, s0flag;
; unsigned int s1head, s1flag;
; unsigned char ch = 0;
; SOURCE LINE # 177
CLR A
MOV DPTR,#ch?255
MOVX @DPTR,A
;
; ComWrite("Mem initializing...\r\n", 21);
; SOURCE LINE # 179
MOV R3,#0FFH
MOV R2,#HIGH (?SC_0)
MOV R1,#LOW (?SC_0)
MOV R5,#015H
MOV R4,A
LCALL _ComWrite
;
; s0head = FlashRdByte(ParaStart);
; SOURCE LINE # 181
MOV DPTR,#ParaStart
CLR A
MOVC A,@A+DPTR
MOV R6,A
MOV A,#01H
MOVC A,@A+DPTR
MOV R7,A
LCALL _FlashRdByte
MOV DPTR,#s0head?251
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; s0flag = FlashRdByte(ParaStart+1);
; SOURCE LINE # 182
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#01H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
LCALL _FlashRdByte
MOV DPTR,#s0flag?252
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; s1head = FlashRdByte(ParaStart+SECTOR_SIZE);
; SOURCE LINE # 183
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#080H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
LCALL _FlashRdByte
MOV DPTR,#s1head?253
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; s1flag = FlashRdByte(ParaStart+SECTOR_SIZE+1);
; SOURCE LINE # 184
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#081H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
LCALL _FlashRdByte
MOV DPTR,#s1flag?254
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
;
; checkhead:
; SOURCE LINE # 186
?ParaMemInit?checkhead:
; // check sector 0
; if(s0head != PARA_HEAD)
; SOURCE LINE # 188
MOV DPTR,#s0head?251
MOVX A,@DPTR
JNZ ?C0055
INC DPTR
MOVX A,@DPTR
XRL A,#055H
?C0055:
JZ ?C0031
; {
; SOURCE LINE # 189
; FlashErSector(ParaStart);
; SOURCE LINE # 190
MOV DPTR,#ParaStart
CLR A
MOVC A,@A+DPTR
MOV R6,A
MOV A,#01H
MOVC A,@A+DPTR
MOV R7,A
LCALL _FlashErSector
; FlashWrByte(ParaStart, PARA_HEAD);
; SOURCE LINE # 191
MOV DPTR,#ParaStart
CLR A
MOVC A,@A+DPTR
MOV R6,A
MOV A,#01H
MOVC A,@A+DPTR
MOV R7,A
MOV R5,#055H
LCALL _FlashWrByte
; s0flag = FlashRdByte(ParaStart+1);
; SOURCE LINE # 192
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#01H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
LCALL _FlashRdByte
MOV DPTR,#s0flag?252
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; ch ++;
; SOURCE LINE # 193
MOV DPTR,#ch?255
MOVX A,@DPTR
INC A
MOVX @DPTR,A
; ComWrite("S0 empty.\r\n", 11);
; SOURCE LINE # 194
MOV R3,#0FFH
MOV R2,#HIGH (?SC_22)
MOV R1,#LOW (?SC_22)
MOV R5,#0BH
MOV R4,#00H
LCALL _ComWrite
; }
; SOURCE LINE # 195
?C0031:
;
; // check sector 1
; if(s1head != PARA_HEAD)
; SOURCE LINE # 198
MOV DPTR,#s1head?253
MOVX A,@DPTR
JNZ ?C0056
INC DPTR
MOVX A,@DPTR
XRL A,#055H
?C0056:
JZ ?C0032
; {
; SOURCE LINE # 199
; FlashErSector(ParaStart+SECTOR_SIZE);
; SOURCE LINE # 200
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#080H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
LCALL _FlashErSector
; FlashWrByte(ParaStart+SECTOR_SIZE, PARA_HEAD);
; SOURCE LINE # 201
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#080H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
MOV R5,#055H
LCALL _FlashWrByte
; s1flag = FlashRdByte(ParaStart+SECTOR_SIZE+1);
; SOURCE LINE # 202
MOV DPTR,#ParaStart
MOV A,#01H
MOVC A,@A+DPTR
ADD A,#081H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
LCALL _FlashRdByte
MOV DPTR,#s1flag?254
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; ch ++;
; SOURCE LINE # 203
INC DPTR
MOVX A,@DPTR
INC A
MOVX @DPTR,A
; ComWrite("S1 empty.\r\n", 11);
; SOURCE LINE # 204
MOV R3,#0FFH
MOV R2,#HIGH (?SC_34)
MOV R1,#LOW (?SC_34)
MOV R5,#0BH
MOV R4,#00H
LCALL _ComWrite
; }
; SOURCE LINE # 205
?C0032:
;
; // deside which sector is to be used
; if((s0flag == H_EMPTY) && (s1flag == H_EMPTY))
; SOURCE LINE # 208
MOV DPTR,#s0flag?252
MOVX A,@DPTR
JNZ ?C0057
INC DPTR
MOVX A,@DPTR
CPL A
?C0057:
JNZ ?C0033
MOV DPTR,#s1flag?254
MOVX A,@DPTR
JNZ ?C0058
INC DPTR
MOVX A,@DPTR
CPL A
?C0058:
JNZ ?C0033
; {
; SOURCE LINE # 209
; FlashWrByte(ParaStart+1, H_USING);
; SOURCE LINE # 210
MOV DPTR,#ParaStart
INC A
MOVC A,@A+DPTR
ADD A,#01H
MOV R7,A
CLR A
MOVC A,@A+DPTR
ADDC A,#00H
MOV R6,A
MOV R5,#0F0H
LCALL _FlashWrByte
; ch += 2;
; SOURCE LINE # 211
MOV DPTR,#ch?255
MOVX A,@DPTR
ADD A,#02H
MOVX @DPTR,A
; ComWrite("Both empty, use S0.\r\n", 21);
; SOURCE LINE # 212
MOV R3,#0FFH
MOV R2,#HIGH (?SC_46)
MOV R1,#LOW (?SC_46)
MOV R5,#015H
; }
; SOURCE LINE # 213
SJMP ?C0074
?C0033:
; else if((s0flag == H_ERASED) && (s1flag == H_COPYING))
; SOURCE LINE # 214
MOV DPTR,#s0flag?252
MOVX A,@DPTR
JNZ ?C0059
INC DPTR
MOVX A,@DPTR
?C0059:
JNZ ?C0035
MOV DPTR,#s1flag?254
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -