📄 iccpdir.src
字号:
JNB ACC.4,?C0101
; {
; SOURCE LINE # 647
; /*TA3: IC卡信息域大小整数*/ /* T=1 时存在=0xb7 */
; i=IccRead(&inchar, 1);
; SOURCE LINE # 649
LCALL L?0193
MOV i?955,R7
; if (i < 1)
; SOURCE LINE # 650
MOV A,i?955
CLR C
SUBB A,#01H
JNC ?C0102
; {
; SOURCE LINE # 651
; TIME_OUT_MS = oldtmo;
; SOURCE LINE # 652
?C0189:
; return j;
; SOURCE LINE # 653
LJMP ?C0191
; }
; SOURCE LINE # 654
?C0102:
; mylrc ^= inchar;
; SOURCE LINE # 655
MOV A,inchar?961
XRL mylrc?958,A
; buf[j++] = inchar;
; SOURCE LINE # 656
MOV DPTR,#buf?954
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV R7,j?956
INC j?956
MOV DPL,R7
MOV DPH,#00H
MOV A,inchar?961
LCALL ?C?CSTOPTR
; // info->infolen = inchar;
; }
; SOURCE LINE # 658
?C0101:
; if (format & 0x20)
; SOURCE LINE # 659
MOV A,format?957
JNB ACC.5,?C0103
; {
; SOURCE LINE # 660
; /*TB3: CWI和BWI*/ /* T=1 时存在=0x45 */
; i=IccRead(&inchar, 1);
; SOURCE LINE # 662
LCALL L?0193
MOV i?955,R7
; if (i < 1)
; SOURCE LINE # 663
MOV A,i?955
CLR C
SUBB A,#01H
JNC ?C0104
; {
; SOURCE LINE # 664
; TIME_OUT_MS = oldtmo;
; SOURCE LINE # 665
?C0190:
; return j;
; SOURCE LINE # 666
SJMP ?C0191
; }
; SOURCE LINE # 667
?C0104:
; mylrc ^= inchar;
; SOURCE LINE # 668
MOV A,inchar?961
XRL mylrc?958,A
; buf[j++] = inchar;
; SOURCE LINE # 669
MOV DPTR,#buf?954
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV R7,j?956
INC j?956
MOV DPL,R7
MOV DPH,#00H
MOV A,inchar?961
LCALL ?C?CSTOPTR
; CWI = inchar >> 4;
; SOURCE LINE # 670
MOV A,inchar?961
SWAP A
ANL A,#0FH
MOV CWI?959,A
; BWI = inchar & 0x0f;
; SOURCE LINE # 671
MOV A,inchar?961
ANL A,#0FH
MOV BWI?960,A
; //计算CWT、BWT
; }
; SOURCE LINE # 673
?C0103:
; if (format & 0x40)
; SOURCE LINE # 674
MOV A,format?957
JNB ACC.6,?C0091
; {
; SOURCE LINE # 675
; /*TC3: 块错误检测代码类型*/
; i=IccRead(&inchar, 1);
; SOURCE LINE # 677
LCALL L?0193
MOV i?955,R7
; if (i < 1)
; SOURCE LINE # 678
MOV A,i?955
CLR C
SUBB A,#01H
JNC ?C0106
; {
; SOURCE LINE # 679
; TIME_OUT_MS = oldtmo;
; SOURCE LINE # 680
?C0191:
MOV TIME_OUT_MS,oldtmo?962
MOV TIME_OUT_MS+01H,oldtmo?962+01H
; return j;
; SOURCE LINE # 681
MOV R7,j?956
MOV R6,#00H
RET
; }
; SOURCE LINE # 682
?C0106:
; mylrc ^= inchar;
; SOURCE LINE # 683
MOV A,inchar?961
XRL mylrc?958,A
; buf[j++] = inchar;
; SOURCE LINE # 684
MOV DPTR,#buf?954
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV R7,j?956
INC j?956
MOV DPL,R7
MOV DPH,#00H
MOV A,inchar?961
LCALL ?C?CSTOPTR
; }
; SOURCE LINE # 685
; }
; SOURCE LINE # 686
; }
; SOURCE LINE # 687
?C0091:
;
; i = IccRead(buf+j, nhistory); /* 获取历史字符 */
; SOURCE LINE # 689
MOV DPTR,#buf?954
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R6,#00H
ADD A,j?956
MOV R1,A
MOV A,R6
ADDC A,R2
MOV R2,A
MOV A,nhistory?963
MOV R5,A
MOV R4,#00H
LCALL _IccRead
MOV i?955,R7
; if(i < nhistory)
; SOURCE LINE # 690
MOV A,i?955
CLR C
SUBB A,nhistory?963
JNC ?C0107
; {
; SOURCE LINE # 691
; TIME_OUT_MS = oldtmo;
; SOURCE LINE # 692
MOV TIME_OUT_MS,oldtmo?962
MOV TIME_OUT_MS+01H,oldtmo?962+01H
; return j+i;
; SOURCE LINE # 693
MOV A,j?956
ADD A,R7
SJMP ?C0178
; }
; SOURCE LINE # 694
?C0107:
;
; /*
; if (info->protocolid != 0)
; {
; i = IccRead(&inchar, 1);
; if(i < 1)
; {
; TIME_OUT_MS = oldtmo;
; return 0;
; }
;
; for(i=0; i<info->historylen; i++)
; mylrc ^= info->history[i];
;
; if(mylrc != inchar) // 校验错误
; {
; TIME_OUT_MS = oldtmo;
; return 0;
; }
; }
; */
;
; /*reset success*/
; TIME_OUT_MS = oldtmo;
; SOURCE LINE # 718
MOV TIME_OUT_MS,oldtmo?962
MOV TIME_OUT_MS+01H,oldtmo?962+01H
; return j+nhistory;
; SOURCE LINE # 719
MOV A,j?956
ADD A,nhistory?963
?C0178:
MOV R7,A
CLR A
RLC A
MOV R6,A
; }
; SOURCE LINE # 720
?C0076:
RET
; END OF _IccOpen
;
; /*** install etu for sam ***/
; void IccInit(void)
RSEG ?PR?IccInit?ICCPDIR
IccInit:
USING 0
; SOURCE LINE # 723
; {
; SOURCE LINE # 724
; // disable user power
; IccUserPower(0);
; SOURCE LINE # 726
CLR ?IccUserPower?BIT
LCALL IccUserPower
;
; // start sam clk
; StartCLKO(2);
; SOURCE LINE # 729
MOV R7,#02H
MOV R6,#00H
LCALL _StartCLKO
;
; // preparing for transmiting and receiving
; RxWorking = 0;
; SOURCE LINE # 732
CLR RxWorking
; TxParity = 0;
; SOURCE LINE # 733
CLR TxParity
; TxNotRx = 0;
; SOURCE LINE # 734
CLR TxNotRx
;
; //
; ICCUSEREJECT = 1; // disable eject card
; SOURCE LINE # 737
SETB P1_4
; ICCUSERCLS = 1; // set to input mode
; SOURCE LINE # 738
SETB P2_5
; ICCUSEROVLD = 1; // set to input mode
; SOURCE LINE # 739
SETB P2_6
; ICCIO = 1; // set to input mode
; SOURCE LINE # 740
SETB P3_3
; ICCRST = 0; //
; SOURCE LINE # 741
CLR P3_4
; USERRST = 0;
; SOURCE LINE # 742
CLR P2_0
;
; // set transmit and receive interrupt
; SetIntPri(IE1_VECTOR, 3);
; SOURCE LINE # 745
MOV R5,#03H
MOV R7,#02H
LCALL _SetIntPri
;
; IT1 = 1; // 下降沿触发
; SOURCE LINE # 747
SETB IT1
; }
; SOURCE LINE # 748
RET
; END OF IccInit
;
; // power on/off user card and enable/disable clock output
; void IccUserPower(bit en)
RSEG ?PR?IccUserPower?ICCPDIR
IccUserPower:
; SOURCE LINE # 751
; {
; SOURCE LINE # 752
; // disable clock out
; ICCUSERSCLK = 0;
; SOURCE LINE # 754
CLR P1_2
; ICCUSERCLKC = 0;
; SOURCE LINE # 755
CLR P1_1
;
; if(en)
; SOURCE LINE # 757
JNB en?1164,?C0109
; {
; SOURCE LINE # 758
; // VCC on
; ICCUSERVCCC = 0;
; SOURCE LINE # 760
CLR P2_1
; }
; SOURCE LINE # 761
RET
?C0109:
; else
; {
; SOURCE LINE # 763
; // RST = 0
; USERRST = 0;
; SOURCE LINE # 765
CLR P2_0
; // VCC off
; ICCUSERVCCC = 1;
; SOURCE LINE # 767
SETB P2_1
; }
; SOURCE LINE # 768
; }
; SOURCE LINE # 769
?C0111:
RET
; END OF IccUserPower
;
;
; ///////////////////////////////////////////
; // for user card mechanical interface
;
; bit IccUserTest(void)
RSEG ?PR?IccUserTest?ICCPDIR
IccUserTest:
; SOURCE LINE # 775
; {
; SOURCE LINE # 776
; return ICCUSERCLS;
; SOURCE LINE # 777
MOV C,P2_5
; }
; SOURCE LINE # 778
?C0112:
RET
; END OF IccUserTest
;
; // eject card
; bit IccUserEject(void)
RSEG ?PR?IccUserEject?ICCPDIR
IccUserEject:
USING 0
; SOURCE LINE # 781
; {
; SOURCE LINE # 782
; unsigned char i;
;
; ICCUSERCLKC = 0;
; SOURCE LINE # 785
CLR P1_1
; for(i=0; i<6; i++)
; SOURCE LINE # 786
CLR A
MOV DPTR,#i?1365
MOVX @DPTR,A
?C0113:
; {
; SOURCE LINE # 787
; ICCUSEREJECT = 0;
; SOURCE LINE # 788
CLR P1_4
; delay(80);
; SOURCE LINE # 789
MOV R7,#050H
MOV R6,#00H
LCALL _delay
; ICCUSEREJECT = 1;
; SOURCE LINE # 790
SETB P1_4
; if(!ICCUSERCLS)
; SOURCE LINE # 791
JB P2_5,?C0116
; return 1;
; SOURCE LINE # 792
SETB C
RET
?C0116:
; delay(50);
; SOURCE LINE # 793
MOV R7,#032H
MOV R6,#00H
LCALL _delay
; }
; SOURCE LINE # 794
MOV DPTR,#i?1365
MOVX A,@DPTR
INC A
MOVX @DPTR,A
MOVX A,@DPTR
CLR C
SUBB A,#06H
JC ?C0113
?C0114:
;
; return 0;
; SOURCE LINE # 796
CLR C
; }
; SOURCE LINE # 797
?C0117:
RET
; END OF IccUserEject
;
; // get overload status
; bit IccUserOverLoad(void)
RSEG ?PR?IccUserOverLoad?ICCPDIR
IccUserOverLoad:
USING 0
; SOURCE LINE # 800
; {
; SOURCE LINE # 801
; static unsigned int ovtime = 0;
;
; if(ICCUSEROVLD)
; SOURCE LINE # 804
JNB P2_6,?C0118
; {
; SOURCE LINE # 805
; ovtime = GetTickCount();
; SOURCE LINE # 806
LCALL GetTickCount
MOV DPTR,#ovtime?1466
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; return 0;
; SOURCE LINE # 807
CLR C
RET
; }
; SOURCE LINE # 808
?C0118:
; else
; {
; SOURCE LINE # 810
; if(GetTickCount() - ovtime >= 20)
; SOURCE LINE # 811
LCALL GetTickCount
MOV DPTR,#ovtime?1466
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
CLR C
MOV A,R7
SUBB A,R5
MOV R7,A
MOV A,R6
SUBB A,R4
MOV R6,A
CLR C
MOV A,R7
SUBB A,#014H
MOV A,R6
SUBB A,#00H
JC ?C0121
; {
; SOURCE LINE # 812
; // power off and eject card
; IccUserPower(0);
; SOURCE LINE # 814
CLR ?IccUserPower?BIT
LCALL IccUserPower
; IccUserEject();
; SOURCE LINE # 815
LCALL IccUserEject
; return 1;
; SOURCE LINE # 816
SETB C
RET
; }
; SOURCE LINE # 817
?C0121:
; else
; return 0;
; SOURCE LINE # 819
CLR C
; }
; SOURCE LINE # 820
; }
; SOURCE LINE # 821
?C0119:
RET
; END OF IccUserOverLoad
;
; // write some bytes and read some bytes
; bit IccSyncWRWithACK(void *wbuf, int wlen, void *rbuf, int rlen)
RSEG ?PR?_IccSyncWRWithACK?ICCPDIR
_IccSyncWRWithACK:
USING 0
; SOURCE LINE # 824
MOV DPTR,#wbuf?1567
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 # 825
; int i;
;
; // start
; IccSyncStart();
; SOURCE LINE # 829
LCALL IccSyncStart
;
; // write
; for(i=0; i<wlen; i++)
; SOURCE LINE # 832
CLR A
MOV DPTR,#i?1571
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
?C0123:
MOV DPTR,#wlen?1568
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#i?1571
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
CLR C
SUBB A,R7
MOV A,R6
XRL A,#080H
MOV R0,A
MOV A,R4
XRL A,#080H
SUBB A,R0
JNC ?C0124
; {
; SOURCE LINE # 833
; if(!IccSyncPutCharWaitACK(((unsigned char *)wbuf)[i]))
; SOURCE LINE # 834
MOV DPTR,#wbuf?1567
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
M
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -