📄 iccpdir.src
字号:
?C0006:
; else
; {
; SOURCE LINE # 130
; if(dir)
; SOURCE LINE # 131
MOV A,mycharp
JNB dir,?C0008
; mycharp >>= 1;
; SOURCE LINE # 132
CLR C
RRC A
MOV mycharp,A
SJMP ?C0009
?C0008:
; else
; mycharp <<= 1;
; SOURCE LINE # 134
ADD A,ACC
MOV mycharp,A
?C0009:
;
; ICCIO = CY;
; SOURCE LINE # 136
MOV P3_3,C
; bitcounter --;
; SOURCE LINE # 137
DEC bitcounter
; }
; SOURCE LINE # 138
RET
; return;
; }
; SOURCE LINE # 140
?C0001:
; else
; {
; SOURCE LINE # 142
; bioport = dir ? ICCIO : ~ICCIO; // 首先取得端口数据,保证时间准确
; SOURCE LINE # 143
JNB dir,?C0012
MOV C,P3_3
SJMP ?C0013
?C0012:
MOV C,P3_3
CPL C
?C0013:
MOV bioport?040,C
;
; if(parityerror)
; SOURCE LINE # 145
MOV A,parityerror
JZ ?C0014
; {
; SOURCE LINE # 146
; if(parityerror == 1) // parity error bit start
; SOURCE LINE # 147
CJNE A,#01H,?C0015
; {
; SOURCE LINE # 148
; ICCIO = 0; // show error
; SOURCE LINE # 149
CLR P3_3
; parityerror ++;
; SOURCE LINE # 150
INC parityerror
; }
; SOURCE LINE # 151
RET
?C0015:
; else // parity error bit end
; {
; SOURCE LINE # 153
; ICCIO = 1;
; SOURCE LINE # 154
SETB P3_3
;
; parityerror = 0;
; SOURCE LINE # 156
CLR A
MOV parityerror,A
; DiUserTimer(); // disable user timer interrupt
; SOURCE LINE # 157
CLR ET0
; IccEnable();
; SOURCE LINE # 158
CLR IE1
SETB EX1
; RxWorking = 0;
; SOURCE LINE # 159
CLR RxWorking
; }
; SOURCE LINE # 160
RET
; return;
; }
; SOURCE LINE # 162
?C0014:
;
; // if(!endflag)
; if(bitcounter)
; SOURCE LINE # 165
MOV A,bitcounter
JZ ?C0017
; {
; SOURCE LINE # 166
; if(dir)
; SOURCE LINE # 167
MOV A,mycharp
JNB dir,?C0018
; {
; SOURCE LINE # 168
; /*
; mycharp >>= 1;
; if(bioport)
; mycharp |= 0x80;
; */
; ACC = mycharp;
; SOURCE LINE # 174
; CY = bioport;
; SOURCE LINE # 175
MOV C,bioport?040
; #pragma asm
; RRC A;
RRC A;
; #pragma endasm
; mycharp = ACC;
; SOURCE LINE # 179
MOV mycharp,A
; }
; SOURCE LINE # 180
SJMP ?C0019
?C0018:
; else
; {
; SOURCE LINE # 182
; /*
; mycharp <<= 1;
; if(bioport)
; mycharp |= 0x01;
; */
; ACC = mycharp;
; SOURCE LINE # 188
; CY = bioport;
; SOURCE LINE # 189
MOV C,bioport?040
; #pragma asm
; RLC A;
RLC A;
; #pragma endasm
; mycharp = ACC;
; SOURCE LINE # 193
MOV mycharp,A
; }
; SOURCE LINE # 194
?C0019:
;
; bitcounter --; /////////////////////////
; SOURCE LINE # 196
DEC bitcounter
RET
;
; return;
; }
; SOURCE LINE # 199
?C0017:
;
; ACC = mycharp;
; SOURCE LINE # 201
MOV A,mycharp
; if(P == bioport) /* 校验正确 */
; SOURCE LINE # 202
MOV C,P
JNB bioport?040,?C0167
CPL C
?C0167:
JC ?C0020
; {
; SOURCE LINE # 203
; FillBuf:
; SOURCE LINE # 204
?iccgetputonebit?FillBuf:
; if(ibufputidx != ibufgetidx-1) // ;
; SOURCE LINE # 205
MOV A,ibufgetidx
DEC A
XRL A,ibufputidx
JZ ?C0022
; { // |
; SOURCE LINE # 206
; if( (ibufputidx != SSBUF_SIZE-1) || (ibufgetidx != 0) ) // |
; SOURCE LINE # 207
MOV A,ibufputidx
CJNE A,#03FH,?C0024
MOV A,ibufgetidx
JZ ?C0022
?C0024:
; { // |
; SOURCE LINE # 208
; IBUF[ibufputidx++] = mycharp; // > fill buf
; SOURCE LINE # 209
MOV R7,ibufputidx
INC ibufputidx
MOV A,#LOW (IBUF)
ADD A,R7
MOV R0,A
MOV @R0,mycharp
; if(ibufputidx == SSBUF_SIZE) // |
; SOURCE LINE # 210
MOV A,ibufputidx
CJNE A,#040H,?C0022
; ibufputidx = 0; // |
; SOURCE LINE # 211
CLR A
MOV ibufputidx,A
; } // |
; SOURCE LINE # 212
; } // /
; SOURCE LINE # 213
?C0022:
;
; DiUserTimer(); // disable user timer interrupt
; SOURCE LINE # 215
CLR ET0
; IccEnable();
; SOURCE LINE # 216
CLR IE1
SETB EX1
; RxWorking = 0;
; SOURCE LINE # 217
CLR RxWorking
; // clear reseting flag
; fReset = 0;
; SOURCE LINE # 219
CLR fReset
RET
; return;
; }
; SOURCE LINE # 221
?C0020:
;
; // 校验不正确,首先看是否是复位应答的开始字节TS
; if(fReset && (mycharp == 0x03))
; SOURCE LINE # 224
JNB fReset,?C0026
MOV A,mycharp
CJNE A,#03H,?C0026
; {
; SOURCE LINE # 225
; dir = 0; // 反向协议
; SOURCE LINE # 226
CLR dir
; mycharp = 0x3f;
; SOURCE LINE # 227
MOV mycharp,#03FH
; goto FillBuf;
; SOURCE LINE # 228
SJMP ?iccgetputonebit?FillBuf
; }
; SOURCE LINE # 229
?C0026:
;
; // 设校验错误标志并计数
; // P2_0 = 1;/////////////////////////////////////////////////////////////////////////////////////////////////////////
; parityerror = 1;
; SOURCE LINE # 233
MOV parityerror,#01H
; parityerrorcnt ++;
; SOURCE LINE # 234
INC parityerrorcnt
; // clear reseting flag
; fReset = 0;
; SOURCE LINE # 236
CLR fReset
; return;
; }
; SOURCE LINE # 238
; }
; SOURCE LINE # 239
?C0010:
RET
; END OF iccgetputonebit
CSEG AT 00013H
LJMP TxRxdata
;
; void TxRxdata(void) interrupt IE1_VECTOR using 3 //2
RSEG ?PR?TxRxdata?ICCPDIR
USING 3
TxRxdata:
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
USING 3
MOV PSW,#018H
; SOURCE LINE # 241
; {
; if(TxNotRx)
; SOURCE LINE # 243
JB TxNotRx,?C0029
; {
; SOURCE LINE # 244
; // do nothing
; }
; SOURCE LINE # 246
?C0027:
; else
; {
; SOURCE LINE # 248
; InitUserTimer(RLD, RxRLDStart);
; SOURCE LINE # 249
MOV R5,RxRLDStart
MOV R7,RLD
LCALL _InitUserTimer
;
; // mycharp = 0x80;
; bitcounter = RxBits;
; SOURCE LINE # 252
MOV bitcounter,RxBits
; RxWorking = 1;
; SOURCE LINE # 253
SETB RxWorking
;
; IccDisable(); // EX1 = 0; // 禁止中断
; SOURCE LINE # 255
CLR EX1
; parityerror = 0; // clear parity error flag
; SOURCE LINE # 256
MOV parityerror,#00H
; endflag = 0;
; SOURCE LINE # 257
MOV endflag,#00H
; }
; SOURCE LINE # 258
; }
; SOURCE LINE # 259
?C0029:
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF TxRxdata
;
; static bit GetInputData( unsigned char *addr )
RSEG ?PR?_GetInputData?ICCPDIR
_GetInputData:
USING 0
; SOURCE LINE # 261
;---- Variable 'addr?241' assigned to Register 'R1/R2/R3' ----
; {
; SOURCE LINE # 262
; if( ibufgetidx == ibufputidx )
; SOURCE LINE # 263
MOV A,ibufgetidx
XRL A,ibufputidx
JNZ ?C0030
; {
; SOURCE LINE # 264
; return 0; //buf empty
; SOURCE LINE # 265
CLR C
RET
; }
; SOURCE LINE # 266
?C0030:
; else
; {
; SOURCE LINE # 268
; *addr = IBUF[ibufgetidx++];
; SOURCE LINE # 269
MOV R7,ibufgetidx
INC ibufgetidx
MOV A,#LOW (IBUF)
ADD A,R7
MOV R0,A
MOV A,@R0
LCALL ?C?CSTPTR
;
; if(ibufgetidx == SSBUF_SIZE)
; SOURCE LINE # 271
MOV A,ibufgetidx
CJNE A,#040H,?C0033
; ibufgetidx = 0;
; SOURCE LINE # 272
CLR A
MOV ibufgetidx,A
?C0033:
; return 1;
; SOURCE LINE # 273
SETB C
; }
; SOURCE LINE # 274
; }
; SOURCE LINE # 275
?C0031:
RET
; END OF _GetInputData
;
; static void IccInitETU(unsigned int etu)
RSEG ?PR?_IccInitETU?ICCPDIR
L?0196:
USING 0
MOV DPL,A
CLR A
ADDC A,#HIGH (attr)
MOV DPH,A
MOVX A,@DPTR
ANL A,#03H
MOV DPTR,#IccEtu
MOVC A,@A+DPTR
MOV R7,A
MOV R6,#00H
_IccInitETU:
USING 0
; SOURCE LINE # 277
;---- Variable 'etu?342' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 278
; ETU = etu;
; SOURCE LINE # 279
MOV ETU,R6
MOV ETU+01H,R7
; RLD = 256 - ETU;
; SOURCE LINE # 280
MOV A,ETU+01H
CPL A
INC A
MOV RLD,A
; TxRLDStart = RLD + 30;
; SOURCE LINE # 281
ADD A,#01EH
MOV TxRLDStart,A
; if(etu >= 170)
; SOURCE LINE # 282
CLR C
MOV A,R7
SUBB A,#0AAH
MOV A,R6
SUBB A,#00H
MOV A,ETU
JC ?C0034
; {
; SOURCE LINE # 283
; RxRLDStart = RLD + (ETU >> 1) + 60;
; SOURCE LINE # 284
RRC A
MOV A,ETU+01H
RRC A
ADD A,RLD
ADD A,#03CH
MOV RxRLDStart,A
; RxBits = 9;
; SOURCE LINE # 285
MOV RxBits,#09H
; }
; SOURCE LINE # 286
RET
?C0034:
; else
; {
; SOURCE LINE # 288
; RxRLDStart = RLD - (ETU >> 1) + 60;
; SOURCE LINE # 289
CLR C
RRC A
MOV A,ETU+01H
RRC A
MOV R7,A
CLR C
MOV A,RLD
SUBB A,R7
ADD A,#03CH
MOV RxRLDStart,A
; RxBits = 8;
; SOURCE LINE # 290
MOV RxBits,#08H
; }
; SOURCE LINE # 291
; }
; SOURCE LINE # 292
?C0036:
RET
; END OF _IccInitETU
;
; void IccSelect(unsigned char cardid)
RSEG ?PR?_IccSelect?ICCPDIR
_IccSelect:
USING 0
; SOURCE LINE # 294
;---- Variable 'cardid?443' assigned to Register 'R5' ----
XCH A,R5
MOV A,R7
XCH A,R5
; {
; SOURCE LINE # 295
; // inhabit
; ICCINH = 1;
; SOURCE LINE # 297
SETB P1_7
;
; // backup card id
; CardId = cardid & 0x03;
; SOURCE LINE # 300
MOV A,R5
ANL A,#03H
MOV DPTR,#CardId
MOVX @DPTR,A
;
; // switch to specified card
; if(cardid & 0x01)
; SOURCE LINE # 303
MOV A,R5
JNB ACC.0,?C0037
; ICCA0 = 1;
; SOURCE LINE # 304
SETB P1_6
SJMP ?C0038
?C0037:
; else
; ICCA0 = 0;
; SOURCE LINE # 306
CLR P1_6
?C0038:
; if(cardid & 0x02)
; SOURCE LINE # 307
MOV A,R5
JNB ACC.1,?C0039
; ICCA1 = 1;
; SOURCE LINE # 308
SETB P1_5
SJMP ?C0040
?C0039:
; else
; ICCA1 = 0;
; SOURCE LINE # 310
CLR P1_5
?C0040:
;
; // habit
; ICCINH = 0;
; SOURCE LINE # 313
CLR P1_7
;
; // init card etu and direciton
; IccInitETU(IccEtu[attr[cardid].etu]);
; SOURCE LINE # 316
MOV A,#LOW (attr)
ADD A,R5
LCALL L?0196
; dir = attr[cardid].dir;
; SOURCE LINE # 317
MOV A,#LOW (attr)
ADD A,R5
MOV DPL,A
CLR A
ADDC A,#HIGH (attr)
MOV DPH,A
MOVX A,@DPTR
RRC A
RRC A
RRC A
ANL A,#01FH
RRC A
MOV dir,C
; }
; SOURCE LINE # 318
RET
; END OF _IccSelect
;
; int IccRead( char *buf, int len )
RSEG ?PR?_IccRead?ICCPDIR
L?0192:
USING 0
L?0193:
MOV R2,#HIGH (inchar?961)
MOV R1,#LOW (inchar?961)
L?0194:
MOV R3,#00H
L?0195:
MOV R5,#01H
MOV R4,#00H
_IccRead:
USING 0
; SOURCE LINE # 320
MOV DPTR,#buf?544
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
; {
; SOURCE LINE # 321
; int data i;
; unsigned int data starttime;
;
; for(i=0; i<len; i++)
; SOURCE LINE # 325
CLR A
MOV i?546,A
MOV i?546+01H,A
?C0042:
SETB C
MOV DPTR,#len?545+01H
MOVX A,@DPTR
SUBB A,i?546+01H
MOV A,i?546
XRL A,#080H
MOV R0,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -