📄 card2.asm
字号:
mov a,BWI
subb a,#2
jz BWTrecvbyte96T12
mov a,BWI
subb a,#3
jz BWTrecvbyte96T13
mov a,BWI
subb a,#4
jz BWTrecvbyte96T14
mov a,WTX
jnz WTX10
mov r3,#31h ;2e ;175.890ms 每次14.7ms
mov r4,#00h
jmp BWTrecv9600
WTX10:
mov r3,#2bh;3dh;2eh
mov r4,#67h;0b2h;00h
mov r6,WTX
jmp BWTrecv9600
BWTrecvbyte96T11:
mov a,WTX
jnz WTX11
mov r3,#46h;46h ;46
mov r4,#0ddh;0ddh ;0a
jmp BWTrecv9600
WTX11:
mov r3,#44h
mov r4,#0ffh
mov r6,WTX
jmp BWTrecv9600
BWTrecvbyte96T12:
mov a,WTX
jnz WTX12
mov r3,#7fh ;7a
mov r4,#7dh ;7d
jmp BWTrecv9600
WTX12:
mov r3,#75h
mov r4,#86h
mov r6,WTX
jmp BWTrecv9600
BWTrecvbyte96T13:
mov a,WTX
jnz WTX13
mov r3,#0e1h;0e1h ;d1
mov r4,#079h;79h
jmp BWTrecv9600
WTX13:
mov r3,#0d2h;0bah
mov r4,#86h;38h
mov r6,WTX
jmp BWTrecv9600
BWTrecvbyte96T14:
mov a,WTX
jnz WTX14
mov r3,#0a2h;0a2h ;82
mov r4,#0aeh;0a0h
mov r2,#15h
mov r5,#0c7h
jmp BWTrecv9600
WTX14:
mov r3,#6bh;6bh
mov r4,#5ah;5ah
mov r2,#15h;14h
mov r5,#0c7h;0c7h
mov r6,WTX
BWTrecv9600:
mov timer1,r2
jnb I_O,BWTrb_next;等待一个起始位
jb IC_SW, BWTrb_err1
mov timer1+01H,r5
clr ET1
jnb I_O,BWTrb_next;等待一个起始位
mov a,timer1+01H
jnb I_O,BWTrb_next;等待一个起始位
orl a,timer1
jz BWTrb_beging1
mov timer1,#14h
jnb I_O,BWTrb_next;等待一个起始位
setb ET1
jnb I_O,BWTrb_next;等待一个起始位
BWTrb_begin:
jnb I_O,BWTrb_next;等待一个起始位
jb IC_SW, BWTrb_err1
jnb I_O,BWTrb_next;等待一个起始位
mov a,timer1 + 01H
jnb I_O,BWTrb_next;等待一个起始位
orl a,timer1
jnb I_O,BWTrb_next;等待一个起始位
jz BWTrb_beging1
jnb I_O,BWTrb_next;等待一个起始位
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
jb I_O,BWTrb_begin;等待一个起始位
jmp BWTrb_next
BWTrb_beging1:
clr ET1
clr ET0
mov timer0,r3
jnb I_O,BWTrb_next;等待一个起始位
mov timer0+01H,r4
jnb I_O,BWTrb_next;等待一个起始位
setb ET0
jnb I_O,BWTrb_next;等待一个起始位
BWTrb_beging2:
jnb I_O,BWTrb_next;等待一个起始位
jb IC_SW, BWTrb_err1
jnb I_O,BWTrb_next;等待一个起始位
mov a,timer0 + 01H
jnb I_O,BWTrb_next;等待一个起始位
orl a,timer0
jnb I_O,BWTrb_next;等待一个起始位
jz BWTrb_err
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
jb I_O,BWTrb_beging2;等待一个起始位
jmp BWTrb_next
BWTrb_err1:
;clr ET0
;clr ET1
;setb STATE_FLAG ;超时错
;mov r7, #0fch;//#define IFD_ICC_NoResponse -4 //卡片无应答
;ret
jmp BWTrb_err;
BWTrb_jmp:
jmp BWTrecv9600
BWTrb_next:
clr ET0 ;//124/2 = 62T
clr ET1 ;8C 24
jb I_O,BWTrb_begin;16C 40 延时0.25etu 再检起始位 2 3
lcall D40T ;480C 520
jb I_O,BWTrb_begin;16C 536 延时0.25etu 再检起始位 2 5
lcall D39T ;468C 1004
lcall D40T ;480C 1484
clr a ;4C 1488
; 9600bps 1etu=1488C
;; 接收第0位
lcall recv1bit9600
rrc a
;; 接收第1位
lcall recv1bit9600
rrc a
;; 接收第2位
lcall recv1bit9600
rrc a
;; 接收第3位
lcall recv1bit9600
rrc a
;; 接收第4位
lcall recv1bit9600
rrc a
;; 接收第5位
lcall recv1bit9600
rrc a
;; 接收第6位
lcall recv1bit9600
rrc a
;; 接收第7位
lcall recv1bit9600
rrc a
; 接收奇偶位(未比较)
lcall recv1bit9600
mov r7,a ; 保存数据, 不影响C
mov a, r7 ; 置P,不影响C
jc BWTrb_c1 ; c = 0
jb P, BWTrb_again ; c=0 & p=1 err
jmp BWTrb_ok ; c=0 & p=0 ok
BWTrb_c1: ; c = 1
jb P, BWTrb_ok ; c=1 & p=1 ok ; c=1 & p=0 err
BWTrb_again:
jb CPU2_T0_T1,BWTparity1
BWTrb_err:
clr ET0
clr ET1
mov a,r6
jz SetWTX
djnz r6,BWTrb_jmp
mov WTX,#00h
setb STATE_FLAG
SetWTX:
setb I_O
setb STATE_FLAG ;超时错
mov r7, #0fch;//#define IFD_ICC_NoResponse -4 //卡片无应答
ret
BWTrb_ok:
setb I_O
mov WTX,#00h
clr STATE_FLAG
ret
BWTparity1:
mov WTX,#00h
setb parity_bit
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BWTrecvbyte19200:
clr parity_bit
mov r2,#0
mov r5,#0
mov r6,#0
jnb reverse, BWTrecv192
jmp recvbyteRV19200
BWTrecv192:
mov a,BWI
clr C
subb a,#01
jz BWTrecvbyte92T11
mov a,BWI
subb a,#02
jz BWTrecvbyte92T12
mov a,BWI
subb a,#03
jz BWTrecvbyte92T13
mov a,BWI
subb a,#04
jz BWTrecvbyte92T14
mov a,WTX
jnz WTX20
mov r3,#31h
mov r4,#00h
jmp BWTrecvbyte1920
WTX20:
mov r3,#3fh;22h
mov r4,#0ffh;60h
mov r6,WTX
jmp BWTrecvbyte1920
BWTrecvbyte92T11:
mov a,WTX
jnz WTX21
mov r3,#47h
mov r4,#0dch
jmp BWTrecvbyte1920
WTX21:
mov r3,#47h
mov r4,#0a2h
mov r6,WTX
jmp BWTrecvbyte1920
BWTrecvbyte92T12:
mov a,WTX
jnz WTX22
mov r3,#76h
mov r4,#5bh
jmp BWTrecvbyte1920
WTX22:
mov r3,#77h
mov r4,#22h
mov r6,WTX
jmp BWTrecvbyte1920
BWTrecvbyte92T13:
mov a,WTX
jnz WTX23
mov r3,#0e1h
mov r4,#59h
jmp BWTrecvbyte1920
WTX23:
mov r3,#0eah
mov r4,#38h
mov r6,WTX
jmp BWTrecvbyte1920
BWTrecvbyte92T14:
mov a,WTX
jnz WTX24
mov r3,#82h
mov r4,#82h
mov r2,#15h
mov r5,#0c7h
jmp BWTrecvbyte1920
WTX24:
mov r3,#6bh
mov r4,#5ah
mov r2,#16h
mov r5,#0c7h
mov r6,WTX
BWTrecvbyte1920:
mov timer1,r2
jnb I_O,BWTrb19200_next;等待一个起始位
mov timer1+01H,r5
clr ET1
jnb I_O,BWTrb19200_next;等待一个起始位
mov a,timer1+01H
jnb I_O,BWTrb19200_next;等待一个起始位
orl a,timer1
jz BWTrb19200_beging1
jnb I_O,BWTrb19200_next;等待一个起始位
setb ET1
jnb I_O,BWTrb19200_next;等待一个起始位
BWTrb19200_begin:
jnb I_O,BWTrb19200_next;等待一个起始位
jb IC_SW, BWTrb_err2
jnb I_O,BWTrb19200_next;等待一个起始位
mov a,timer1 + 01H
jnb I_O,BWTrb19200_next;等待一个起始位
orl a,timer1
jnb I_O,BWTrb19200_next;等待一个起始位
jz BWTrb19200_beging1
jnb I_O,BWTrb19200_next;等待一个起始位
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
jb I_O,BWTrb19200_begin;等待一个起始位
jmp BWTrb19200_next
BWTrb19200_beging1:
clr ET1
clr ET0
mov timer0,r3
jnb I_O,BWTrb19200_next;等待一个起始位
mov timer0+01H,r4
jnb I_O,BWTrb19200_next;等待一个起始位
setb ET0
jnb I_O,BWTrb19200_next;等待一个起始位
BWTrb19200_beging2:
jnb I_O,BWTrb19200_next;等待一个起始位
jb IC_SW, BWTrb_err2
jnb I_O,BWTrb19200_next;等待一个起始位
mov a,timer0 + 01H
jnb I_O,BWTrb19200_next;等待一个起始位
orl a,timer0
jnb I_O,BWTrb19200_next;等待一个起始位
jz BWTrb19200_err
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
jb I_O,BWTrb19200_beging2;等待一个起始位
jmp BWTrb19200_next
BWTrb_err2:
; clr ET0
; clr ET1
; setb STATE_FLAG ;超时错;
; mov r7, #0fch;//#define IFD_ICC_NoResponse -4 //卡片无应答
; ret
jmp BWTrb19200_err
BWTrb_jmp1:
jmp BWTrecvbyte1920
BWTrb19200_next:
clr ET0
clr ET1 ;8C 24
jb I_O,BWTrb19200_begin;16C 40 延时0.25etu 再检起始位 2 3
lcall D20T ;240C 280
jb I_O,BWTrb19200_begin;16C 296 延时0.25etu 再检起始位 2 5
lcall D37T ;444C 740
clr a ;4C 744
;19200bps 1etu=744C
;; 接收第0位
lcall recv1bit19200
rrc a
;; 接收第1位
lcall recv1bit19200
rrc a
;; 接收第2位
lcall recv1bit19200
rrc a
;; 接收第3位
lcall recv1bit19200
rrc a
;; 接收第4位
lcall recv1bit19200
rrc a
;; 接收第5位
lcall recv1bit19200
rrc a
;; 接收第6位
lcall recv1bit19200
rrc a
;; 接收第7位
lcall recv1bit19200
rrc a
; 接收奇偶位(未比较)
lcall recv1bit19200
mov r7,a
mov a,r7
jc BWTrb19200_c1
jb P,BWTrb19200_again
jmp BWTrb19200_ok
BWTrb19200_c1:
jb P,BWTrb19200_ok
BWTrb19200_again:
jb CPU2_T0_T1,BWT19200parity
BWTrb19200_err:
clr ET0
clr ET1
mov a,r6
jz Set19200WTX
djnz r6,BWTrb_jmp1
mov WTX,#00h
setb STATE_FLAG ;超时错
ret
Set19200WTX:
setb I_O
setb STATE_FLAG ;超时错
mov r7, #0fch;//#define IFD_ICC_NoResponse -4 //卡片无应答
ret
BWTrb19200_ok:
setb I_O
mov WTX,#00h
clr STATE_FLAG
ret
BWT19200parity:
mov WTX,#00
setb parity_bit
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BWTrecvbyte38400:
mov r2,#0
mov r5,#0
mov r6,#0
jnb reverse, BWTrecv384
jmp recvbyteRV38400
BWTrecv384:
clr C
mov a,BWI
subb a,#1
jz BWTrecvbyte38T11
mov a,BWI
subb a,#2
jz BWTrecvbyte38T12
mov a,BWI
subb a,#3
jz BWTrecvbyte38T13
mov a,BWI
subb a,#4
jz BWTrecvbyte38T14
mov a,WTX
jnz WTX30
mov r3,#31h
mov r4,#00h
jmp BWTrecvbyte3840
WTX30:
mov r3,#3fh;17h
mov r4,#0b2h;51h
mov r6,WTX
jmp BWTrecvbyte3840
BWTrecvbyte38T11:
mov a,WTX
jnz WTX31
mov r3,#47h ;5f
mov r4,#0ddh ;d2
jmp BWTrecvbyte3840
WTX31:
mov r3,#3fh
mov r4,#93h
mov r6,WTX
jmp BWTrecvbyte3840
BWTrecvbyte38T12:
mov a,WTX
jnz WTX32
mov r3,#7fh
mov r4,#0d1h
jmp BWTrecvbyte3840
WTX32:
mov r3,#6dh
mov r4,#10h
mov r6,WTX
jmp BWTrecvbyte3840
BWTrecvbyte38T13:
mov a,WTX
jnz WTX33
mov r3,#0e1h;d1
mov r4,#79h
jmp BWTrecvbyte3840
WTX33:
mov r3,#0cah
mov r4,#10h
mov r6,WTX
jmp BWTrecvbyte3840
BWTrecvbyte38T14:
mov a,WTX
jnz WTX44
mov r3,#85h ;82
mov r4,#7bh
mov r2,#15h
mov r5,#0c7h
jmp BWTrecvbyte3840
WTX44:
mov r3,#6bh
mov r4,#5ah
mov r2,#15h
mov r5,#0c7h
mov r6,WTX
BWTrecvbyte3840:
mov timer1,r2
jnb I_O,BWTrb38400_next;等待一个起始位
mov timer1+01H,r5
clr ET1
jnb I_O,BWTrb38400_next;等待一个起始位
mov a,timer1+01H
jnb I_O,BWTrb38400_next;等待一个起始位
orl a,timer1
jz BWTrb38400_beging1
jnb I_O,BWTrb38400_next;等待一个起始位
setb ET1
jnb I_O,BWTrb38400_next;等待一个起始位
BWTrb38400_begin:
jnb I_O,BWTrb38400_next;等待一个起始位
jb IC_SW, BWTrb_err3
jnb I_O,BWTrb38400_next;等待一个起始位
mov a,timer1 + 01H
jnb I_O,BWTrb38400_next;等待一个起始位
orl a,timer1
jnb I_O,BWTrb38400_next;等待一个起始位
jz BWTrb38400_beging1
jnb I_O,BWTrb38400_next;等待一个起始位
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
jb I_O,BWTrb38400_begin;等待一个起始位
jmp BWTrb38400_next
BWTrb38400_beging1:
clr ET1
clr ET0
mov timer0,r3
jnb I_O,BWTrb38400_next;等待一个起始位
mov timer0+01H,r4
jnb I_O,BWTrb38400_next;等待一个起始位
setb ET0
jnb I_O,BWTrb38400_next;等待一个起始位
BWTrb38400_beging2:
jnb I_O,BWTrb38400_next;等待一个起始位
jb IC_SW, BWTrb_err3
jnb I_O,BWTrb38400_next;等待一个起始位
mov a,timer0 + 01H
jnb I_O,BWTrb38400_next;等待一个起始位
orl a,timer0
jnb I_O,BWTrb38400_next;等待一个起始位
jz BWTrb38400_err
mov WDTC, #0a7h ;2 //ebable WDT and set time periods with PS[2:0]=111 (262.144ms)
jb I_O,BWTrb38400_beging2;等待一个起始位
jmp BWTrb38400_next
BWTrb_err3:
; clr ET0
; clr ET1
; setb STATE_FLAG ;超时错
; mov r7, #0fch;//#define IFD_ICC_NoResponse -4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -