📄 rf.s
字号:
tsx
sta *__r1
sta ,X
.dbline 384
; if(Flag)
beq L74
.dbline 385
; {
.dbline 387
; //命令发送失败
; RFRegWrite(RegCommand, 0x00); //空闲指令(Idle)取消当前操作
clra
psha
lda #1
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 388
; return 1; //失败
lda #1
jmp L72
L74:
.dbline 392
; }
;
; //接收ANTICOLLISION指令应答,UID
; Len = Read_FIFO(ReData); //读出FIFO寄存器的内容
aix #3
pshx
pshh
jsr _Read_FIFO
ais #2
tsx
sta *__r1
sta 43,X
.dbline 393
; if(Len == 5)
cmp #5
bne L76
.dbline 394
; {
.dbline 396
;
; if(Check_UID(Len, ReData) == 0) //校验得到的5位UID是否正确
aix #3
pshx
pshh
tsx
aix #2
lda 43,X
psha
jsr _Check_UID
ais #3
tsx
tsta
bne L78
.dbline 397
; {
.dbline 399
; //设置出口参数
; *UIDLen = 4;
lda 48,X
sta *__r1
lda 47,X
sta *__r0
lda #4
ldhx *__r0
sta ,x
tsx
.dbline 400
; for(i = 0; i < Len; i++)
clr 44,X
bra L83
L80:
.dbline 401
.dbline 402
aix #3
sthx *__r0
tsx
clr *__r2
lda 44,X
add *__r1
sta *__r1
lda *__r2
adc *__r0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
clr *__r2
lda 44,X
add 50,X
sta *__r3
lda *__r2
adc 49,X
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 403
L81:
.dbline 400
inc 44,X
L83:
.dbline 400
lda 44,X
cmp 43,X
blo L80
.dbline 404
; {
; UID_Buf[i] = ReData[i];
; }
; return 0; //成功
clra
bra L72
L78:
.dbline 406
; }
; return 3; //失败
lda #3
bra L72
L76:
.dbline 408
; }
; return 2; //失败
lda #2
.dbline -2
L72:
ais #45
.dbline 0 ; func end
rts
.dbsym l Flag 0 c
.dbsym l SndData 1 A[2:2]c
.dbsym l ReData 3 A[40:40]c
.dbsym l Len 43 c
.dbsym l i 44 c
.dbsym l UID_Buf 49 pc
.dbsym l UIDLen 47 pc
.dbend
.dbfunc e Check_UID _Check_UID fc
; Data -> 0,X
; i -> 1,X
; CheckData -> 5,X
; Len -> 4,X
_Check_UID::
.dbline -1
ais #-2
tsx
.dbline 417
; }
;
; //Check_UID---------------------------------------------------------------*
; //功 能: 对收到的UID号进行校验 *
; //参 数: Len - 数据长度, CheckData - 待校验数据 *
; //返 回: 1 - 校验错误;0 - 校验成功 *
; //------------------------------------------------------------------------*
; INT8U Check_UID(INT8U Len, INT8U CheckData[])
; {
.dbline 418
; INT8U i,Data = 0;
clr ,X
.dbline 420
;
; for(i = 0; i < Len; i++)
clr 1,X
bra L88
L85:
.dbline 421
.dbline 423
clr *__r0
lda 1,X
add 6,X
sta *__r1
lda *__r0
adc 5,X
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
lda ,X
eor *__r1
sta ,X
.dbline 424
L86:
.dbline 420
inc 1,X
L88:
.dbline 420
lda 1,X
cmp 4,X
blo L85
.dbline 425
; {
; //对5位UID号进行异或操作
; Data ^= CheckData[i];
; }
; if(Data) return 1; //校验错误
lda ,X
beq L89
.dbline 425
lda #1
bra L84
L89:
.dbline 426
; return 0; //校验成功
clra
.dbline -2
L84:
ais #2
.dbline 0 ; func end
rts
.dbsym l Data 0 c
.dbsym l i 1 c
.dbsym l CheckData 5 pc
.dbsym l Len 4 c
.dbend
.dbfunc e Request_TypeB _Request_TypeB fc
; ReData -> 0,X
; Len -> 40,X
; Flag -> 41,X
; Data -> 42,X
; SndData -> 43,X
_Request_TypeB::
.dbline -1
ais #-46
tsx
.dbline 439
; }
;
; //------------------------------------------------------------------------*
; //3.2 对ISO14443B电子标签的相关操作 *
; //------------------------------------------------------------------------*
;
; //Request_TypeB-----------------------------------------------------------*
; //功 能: 向ISO14443B电子标签发送询卡命令 *
; //参 数: 无 *
; //返 回: 1,2 - 询卡命令执行失败; 0 - 询卡命令执行成功 *
; //------------------------------------------------------------------------*
; INT8U Request_TypeB(void)
; {
.dbline 447
; INT8U Data;
; INT8U Flag;
; INT8U Len;
; INT8U SndData[3];
; INT8U ReData[40];
;
; //TypeB接收冗余校验
; RFRegWrite(RegChannelRedundancy, 0x2c);
lda #44
psha
lda #34
psha
jsr _RFRegWrite
ais #2
.dbline 450
;
; // Bit3=0 加密单元关闭
; Data = RFRegRead(RegControl);
lda #9
psha
jsr _RFRegRead
ais #1
tsx
sta *__r1
sta 42,X
.dbline 451
; Data &= 0xf7;
and #-9
sta 42,X
.dbline 452
; RFRegWrite(RegControl, Data);
psha
lda #9
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 455
;
; //ISO14443-B 询卡指令
; SndData[0] = 0x05;
lda #5
sta 43,X
.dbline 456
; SndData[1] = 0x00;
clr 44,X
.dbline 457
; SndData[2] = 0x00;
clr 45,X
.dbline 458
; Flag = Command_Send(SndData, 0x03, PCD_TRANSCEIVE);
lda #30
psha
lda #3
psha
aix #43
pshx
pshh
jsr _Command_Send
ais #4
tsx
sta *__r1
sta 41,X
.dbline 459
; if(Flag)
beq L94
.dbline 460
; {
.dbline 462
; //取消当前操作
; RFRegWrite(RegCommand, 0x00);
clra
psha
lda #1
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 463
; return 1; //失败
lda #1
bra L91
L94:
.dbline 467
; }
;
; //接收询卡应答
; Len = Read_FIFO(ReData);
pshx
pshh
jsr _Read_FIFO
ais #2
tsx
sta *__r1
sta 40,X
.dbline 469
;
; if(Len >= 12)
cmp #12
blo L96
.dbline 470
; {
.dbline 473
; //判断回应的数据是否为"50,00,...."
;
; return 0; //成功
clra
bra L91
L96:
.dbline 475
; }
; return 2; //失败
lda #2
.dbline -2
L91:
ais #46
.dbline 0 ; func end
rts
.dbsym l ReData 0 A[40:40]c
.dbsym l Len 40 c
.dbsym l Flag 41 c
.dbsym l Data 42 c
.dbsym l SndData 43 A[3:3]c
.dbend
.dbfunc e ATTRIB_TypeB _ATTRIB_TypeB fc
; ReData -> 0,X
; Len -> 40,X
; Flag -> 41,X
; SndData -> 42,X
_ATTRIB_TypeB::
.dbline -1
ais #-51
tsx
.dbline 484
; }
;
; //ATTRIB_TypeB------------------------------------------------------------*
; //功 能: 向TypeB卡发送ATTRIB指令 *
; //参 数: 无 *
; //返 回: 1,2 - ATTRIB命令执行失败; 0 - ATTRIB命令执行成功 *
; //------------------------------------------------------------------------*
; INT8U ATTRIB_TypeB(void)
; {
.dbline 491
; INT8U Flag;
; INT8U Len;
; INT8U SndData[9];
; INT8U ReData[40];
;
; //发送激活指令ATTRIB
; SndData[0] = 0x1d;
lda #29
sta 42,X
.dbline 492
; SndData[1] = 0x00;
clr 43,X
.dbline 493
; SndData[2] = 0x00;
clr 44,X
.dbline 494
; SndData[3] = 0x00;
clr 45,X
.dbline 495
; SndData[4] = 0x00;
clr 46,X
.dbline 496
; SndData[5] = 0x00;
clr 47,X
.dbline 497
; SndData[6] = 0x08;
lda #8
sta 48,X
.dbline 498
; SndData[7] = 0x01;
lda #1
sta 49,X
.dbline 499
; SndData[8] = 0x08;
lda #8
sta 50,X
.dbline 500
; Flag = Command_Send(SndData, 0x09, PCD_TRANSCEIVE);
lda #30
psha
lda #9
psha
aix #42
pshx
pshh
jsr _Command_Send
ais #4
tsx
sta *__r1
sta 41,X
.dbline 501
; if(Flag)
beq L107
.dbline 502
; {
.dbline 504
; //取消当前操作
; RFRegWrite(RegCommand, 0x00);
clra
psha
lda #1
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 505
; return 1; //失败
lda #1
bra L98
L107:
.dbline 509
; }
;
; //接收激活指令ATTRIB应答
; Len = Read_FIFO(ReData);
pshx
pshh
jsr _Read_FIFO
ais #2
tsx
sta *__r1
sta 40,X
.dbline 510
; if(Len >= 1)
cmp #1
blo L109
.dbline 511
; {
.dbline 514
; //判断回应的数据是否为"08"
;
; return 0; //成功
clra
bra L98
L109:
.dbline 516
; }
; return 2; //失败
lda #2
.dbline -2
L98:
ais #51
.dbline 0 ; func end
rts
.dbsym l ReData 0 A[40:40]c
.dbsym l Len 40 c
.dbsym l Flag 41 c
.dbsym l SndData 42 A[9:9]c
.dbend
.dbfunc e Get_UID_TypeB _Get_UID_TypeB fc
; Flag -> 0,X
; Len -> 1,X
; ReData -> 2,X
; SndData -> 42,X
; i -> 47,X
; UID_Buf -> 52,X
; UIDLen -> 50,X
_Get_UID_TypeB::
.dbline -1
ais #-48
tsx
.dbline 525
; }
;
; //Get_UID_TypeB-----------------------------------------------------------*
; //功 能: 向TypeB卡发送Get_UID信号 *
; //出 口: UIDLen - UID有效数据长度,UID_Buf - UID数据数组 *
; //返 回: 1,2 - Get_UID命令执行失败; 0 - Get_UID命令执行成功 *
; //------------------------------------------------------------------------*
; INT8U Get_UID_TypeB(INT8U *UIDLen, INT8U UID_Buf[])
; {
.dbline 533
; INT8U i;
; INT8U Flag;
; INT8U Len;
; INT8U SndData[5];
; INT8U ReData[40];
;
; //发送命令,获取二代证UID
; SndData[0] = 0x00;
clr 42,X
.dbline 534
; SndData[1] = 0x36;
lda #54
sta 43,X
.dbline 535
; SndData[2] = 0x00;
clr 44,X
.dbline 536
; SndData[3] = 0x00;
clr 45,X
.dbline 537
; SndData[4] = 0x08;
lda #8
sta 46,X
.dbline 540
;
; //执行发送接收命令
; Flag = Command_Send(SndData, 0x05, PCD_TRANSCEIVE);
lda #30
psha
lda #5
psha
aix #42
pshx
pshh
jsr _Command_Send
ais #4
tsx
sta *__r1
sta ,X
.dbline 541
; if(Flag)
beq L116
.dbline 542
; {
.dbline 544
; //取消当前操作
; RFRegWrite(RegCommand, 0x00);
clra
psha
lda #1
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 545
; return 1; //失败
lda #1
bra L111
L116:
.dbline 549
; }
;
; //接收应答
; Len = Read_FIFO(ReData);
aix #2
pshx
pshh
jsr _Read_FIFO
ais #2
tsx
sta *__r1
sta 1,X
.dbline 550
; if(Len == 10)
cmp #10
bne L118
.dbline 551
; {
.dbline 555
; //判断回应的数据是否为UID "....9000"
;
; //设置出口参数
; for (i = 0; i < 10; i++)
clr 47,X
bra L123
L120:
.dbline 556
.dbline 557
aix #2
sthx *__r0
tsx
clr *__r2
lda 47,X
add *__r1
sta *__r1
lda *__r2
adc *__r0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
clr *__r2
lda 47,X
add 53,X
sta *__r3
lda *__r2
adc 52,X
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 558
L121:
.dbline 555
inc 47,X
L123:
.dbline 555
lda 47,X
cmp #10
blo L120
.dbline 559
; {
; UID_Buf[i] = ReData[i];
; }
; *UIDLen = Len;
lda 51,X
sta *__r1
lda 50,X
sta *__r0
lda 1,X
ldhx *__r0
sta ,x
tsx
.dbline 561
;
; return 0; //成功
clra
bra L111
L118:
.dbline 563
; }
; return 2; //失败
lda #2
.dbline -2
L111:
ais #48
.dbline 0 ; func end
rts
.dbsym l Flag 0 c
.dbsym l Len 1 c
.dbsym l ReData 2 A[40:40]c
.dbsym l SndData 42 A[5:5]c
.dbsym l i 47 c
.dbsym l UID_Buf 52 pc
.dbsym l UIDLen 50 pc
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -