⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 card1.asm

📁 EMV2000 LEVEL 1实现的源码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        jz      BWTrecvbyte96T11
        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      CPU1_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 CPU1_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	;超时错
;	m

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -