?? pincard.a51
字號(hào):
ICC1_IO BIT P1.0;
ICC1_CLK BIT P1.1;
ICC1_RST BIT P1.2;
MEMCLK BIT P1.3;
SPEAKER BIT P1.4;
ICC1_PWR BIT P1.5;
ICC2_IO BIT P1.6;
ICC3_IO BIT P1.7;
LCDA0 BIT P2.0;
R_W BIT P2.1;
E2 BIT P2.2;
E1 BIT P2.3;
_8255 BIT P2.4;
A0 BIT P2.5;
A1 BIT P2.6;
LCDB BIT P2.7;
ICC_INS BIT P3.2;
PORTA EQU 00H
PORTB EQU 01H
PORTC EQU 02H
COMMD EQU 03H
T_HLF EQU 14H
T_WHL EQU 26H ;T_HLF+T_HLF
EXTRN IDATA(DATBUF)
;EXTRN BIT(IC_PCB1)
PUBLIC APRST1,T1_COM,APRST2,T2_COM,APRST3,T3_COM,T1_OUT,T1_IN,T2_OUT,T2_IN,T3_IN,T3_OUT,UNLOAD1,UNLOAD2,UNLOAD3
DT_P SEGMENT DATA
YANS SEGMENT CODE
IC_CARD SEGMENT CODE
ER_FLAG SEGMENT BIT
RSEG DT_P
DT_P1: DS 1
DT_P2: DS 1
DT_P3: DS 1
;TM_DT: DS 1
;DT_BF: DS 32
RSEG ER_FLAG
IC_ER_F: DBIT 1
;IC_PCB1: DBIT 1
;IC_PCB2: DBIT 1
;IC_PCB3: DBIT 1
RSEG YANS
D500MS: MOV DT_P3,#32H
D500M0: LCALL D10MS
DJNZ DT_P3,D500M0
RET
D3MS: MOV DT_P2,#03H
SJMP D_1MS
D1MS: MOV DT_P2,#01H
SJMP D_1MS
D10MS: MOV DT_P2, #0AH
D_1MS: MOV DT_P1, #0C8H
DW7: NOP
NOP
NOP
DJNZ DT_P1, DW7
DJNZ DT_P2,D_1MS
RET
D500US: MOV DT_P1,#0E0H
D500U0: DJNZ DT_P1,D500U0
RET
D12MS: MOV DT_P2,#17H
D12MS0: LCALL D500US
DJNZ DT_P2,D12MS0
RET
D100MS: MOV DT_P2,#064H
SJMP D_1MS
D50MS: MOV DT_P2,#020H
SJMP D_1MS
D60US: MOV DT_P1,#1EH
D60U0: DJNZ DT_P1,D60U0
RET
D30US: MOV DT_P1,#0FH
SJMP D60U0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 0.052ms delay sub-routine ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DHLF: MOV DT_P2,#T_HLF
W0: DJNZ DT_P2, W0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 0.104ms delay for one bit ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DWHL: MOV DT_P2,#T_WHL ;55H ;T_HLF+T_HLF
SJMP W0
DWHL2: MOV DT_P2,#T_WHL+02H
SJMP W0
DWHL3: MOV DT_P2,#03H
SJMP W0
DWHL4: MOV DT_P2,#27H
SJMP W0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CWT delay sub-routine ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DCWT: MOV DT_P1, #10H
W2: MOV DT_P2, #10H
W3: DJNZ DT_P2, W3
DJNZ DT_P1, W2
RET
RSEG IC_CARD
UNLOAD1:
clr ICC1_RST; /*clear RST1*/
clr ICC1_CLK; /*clear CLK1*/
clr ICC1_IO ; /*clear IO1*/
setb ICC1_PWR; /*ICC1 power off*/
RET
UNLOAD2:
; SETB A0
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#02H ; /*clear RST2*/
MOVX @R0,A
SETB _8255 ;
;SETB A0
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#04H
MOVX @R0,A ; /*clear CLK2*/
SETB _8255
CLR ICC2_IO ; /*clear IO2*/
;SETB A0
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#00H ; /*ICC2 power off*/
MOVX @R0,A
SETB _8255
RET
UNLOAD3:
;SETB A0
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#0AH ; /*clear RST3*/
MOVX @R0,A
SETB _8255
;SETB A0
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#0CH
MOVX @R0,A ; /*clear CLK3*/
SETB _8255
CLR ICC3_IO ; /*clear IO3*/
;SETB A0
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#08H ; /*ICC3 power off*/
MOVX @R0,A
SETB _8255
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Get One Byte From IC Card ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GET_FIRST_BYTE:
MOV DT_P1,#0FFH
MOV R6,#02H
SJMP GTB00
GET_BYTE:
MOV DT_P1,#0FFH
GTB00:
MOV R3,#08H ;8 bits
SETB ICC1_IO
GTB08:
MOV DT_P1,#0FFH
GTB02:
MOV DT_P2, #0FFH
GTB03:
JNB ICC1_IO,GTB05 ;detect start bit
GTB04:
DJNZ DT_P2, GTB03
DJNZ DT_P1, GTB02
DJNZ R6, GTB08
GTBER:
SETB IC_ER_F ;get byte error
RET
GTB05:
LCALL DHLF
GTB06:
LCALL DWHL
MOV C,ICC1_IO
GTB07:
MOV A,@R0
RRC A
MOV @R0,A
DJNZ R3,GTB06
LCALL DWHL
LCALL DWHL
JNB ICC1_IO,GTBER ;detect stop bit
MOV ACC,A
GTB0A:
LCALL DWHL
INC R0
CLR IC_ER_F
RET
BGET_FIRST_BYTE:
MOV DT_P1,#0FFH
MOV R6,#02H
SJMP BGTB00
BGET_BYTE:
MOV DT_P1,#0FFH
BGTB00:
MOV R3,#08H ; 8 bits
SETB ICC2_IO
BGTB08: MOV DT_P1,#0FFH
BGTB02: MOV DT_P2, #0FFH
BGTB03: JNB ICC2_IO,BGTB05 ;detect start bit
BGTB04: DJNZ DT_P2, BGTB03
DJNZ DT_P1, BGTB02
DJNZ R6, BGTB08
BGTBER: SETB IC_ER_F ;get byte error
RET
BGTB05: LCALL DHLF
BGTB06: LCALL DWHL
MOV C,ICC2_IO
BGTB07: MOV A,@R0
RRC A
MOV @R0,A
DJNZ R3,BGTB06
LCALL DWHL
LCALL DWHL
JNB ICC2_IO,BGTBER ;detect stop bit
BGTB0A: LCALL DWHL
INC R0
CLR IC_ER_F
RET
CGET_FIRST_BYTE:
MOV DT_P1,#0ffH
MOV R6,#02H
SJMP CGTB00
CGET_BYTE:
MOV DT_P1,#0ffH
CGTB00:
MOV R3,#08H ; 8 bits
SETB ICC3_IO
CGTB08: MOV DT_P1,#0FFH
CGTB02: MOV DT_P2, #0FFH
CGTB03: JNB ICC3_IO,CGTB05 ;detect start bit
CGTB04: DJNZ DT_P2, CGTB03
DJNZ DT_P1, CGTB02
DJNZ R6, CGTB08
CGTBER: SETB IC_ER_F ;get byte error
RET
CGTB05: LCALL DHLF
CGTB06: LCALL DWHL
MOV C,ICC3_IO
CGTB07: MOV A,@R0
RRC A
MOV @R0,A
DJNZ R3,CGTB06
LCALL DWHL
LCALL DWHL
JNB ICC3_IO,CGTBER ;detect stop bit
CGTB0A: LCALL DWHL
INC R0
CLR IC_ER_F
RET
APRST1:
;LCALL D12MS
ACALL UNLOAD1
A_RST1:
CLR ICC1_PWR ;ICC1 power on
LCALL D30US
SETB ICC1_IO ;ICC1 recept state
SETB ICC1_CLK ;ICC1 clock on
LCALL D12MS
SETB ICC1_RST ;ICC1 reset on
RST_ANSWER:
MOV R0,#DATBUF
LCALL GET_FIRST_BYTE ;get TS of ATR
JB IC_ER_F,RST_A4
LCALL GET_BYTE
JB IC_ER_F,RST_A4 ;get T0 of ATR
MOV R2,#03H ;loop 3 times
RST_A1: DEC R0
MOV A,@R0
MOV B,A
INC R0
JNB B.4,TB1 ;TA exist?
LCALL GET_BYTE ;get TA
JB IC_ER_F,RST_A4
TB1: JNB B.5,TC1 ;TB exist?
LCALL GET_BYTE ;get TB
JB IC_ER_F,RST_A4
TC1: JNB B.6,TD1 ;TC exist?
LCALL GET_BYTE ;get TC
JB IC_ER_F,RST_A4
TD1: JNB B.7,RST_A2 ;TD exist?
LCALL GET_BYTE ;get TD
JB IC_ER_F,RST_A4
;DEC R0
;MOV B,@R0
;INC R0
DJNZ R2,RST_A1
RST_A2:
MOV R1,#DATBUF+01H
MOV A,@R1
ANL A,#0FH
INC A ; T=1 have checksum byte
MOV R2,A
MOV A,@R1
ANL A,#0F0H
JB ACC.7,RST_A3
DEC R2
RST_A3: LCALL GET_BYTE ;get historical data
JB IC_ER_F,RST_A4
DJNZ R2,RST_A3
;CLR IC_PCB1 ;clear PCB of iccard 1
RST_A4: MOV C,IC_ER_F
RET
APRST2:
;LCALL D12MS
ACALL UNLOAD2
BA_RST1:
;SETB ICC2_PWR ;ICC2 power on
;SETB A0
;SETB A1
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#01H
MOVX @R0,A
SETB _8255
LCALL D30US
SETB ICC2_IO ;ICC2 recept state
;SETB ICC2_CLK ;ICC2 clock on
;SETB A0
;SETB A1
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#05H
MOVX @R0,A
SETB _8255
LCALL D12MS
;SETB ICC1_RST ;ICC2 reset on
;SETB A0
;SETB A1
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#03H
MOVX @R0,A
SETB _8255
BRST_ANSWER:
MOV R0,#DATBUF
LCALL BGET_FIRST_BYTE ;get TS of ATR
JB IC_ER_F,BRST_A4
LCALL BGET_BYTE
JB IC_ER_F,BRST_A4 ;get T0 of ATR
MOV R2,#03H ;loop 3 times
BRST_A1: DEC R0
MOV A,@R0
MOV B,A
INC R0
JNB B.4,BTB1 ;TA exist?
LCALL BGET_BYTE ;get TA
JB IC_ER_F,BRST_A4
BTB1: JNB B.5,BTC1 ;TB exist?
LCALL BGET_BYTE ;get TB
JB IC_ER_F,BRST_A4
BTC1: JNB B.6,BTD1 ;TC exist?
LCALL BGET_BYTE ;get TC
JB IC_ER_F,BRST_A4
BTD1: JNB B.7,BRST_A2 ;TD exist?
LCALL BGET_BYTE ;get TD
JB IC_ER_F,BRST_A4
;DEC R0
;MOV B,@R0
;INC R0
DJNZ R2,BRST_A1
BRST_A2:
MOV R1,#DATBUF+01H
MOV A,@R1
ANL A,#0FH
INC A ; T=1 have checksum byte
MOV R2,A
MOV A,@R1
ANL A,#0F0H
JB ACC.7,BRST_A3
DEC R2
BRST_A3: LCALL BGET_BYTE ;get historical data
JB IC_ER_F,BRST_A4
DJNZ R2,BRST_A3
;CLR IC_PCB2 ;clear PCB of iccard 1
BRST_A4: MOV C,IC_ER_F
RET
APRST3:
;LCALL D12MS
ACALL UNLOAD3
CA_RST1:
;SETB ICC3_PWR ;ICC3 power on
;SETB A0
;SETB A1
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#09H
MOVX @R0,A
SETB _8255
LCALL D30US
SETB ICC3_IO ;ICC3 recept state
;SETB ICC3_CLK ;ICC3 clock on
;SETB A0
;SETB A1
CLR A0
SETB A1
CLR _8255
MOV R0,#COMMD
MOV A,#0DH
MOVX @R0,A
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -