📄 rf.s
字号:
psha
lda #6
psha
jsr _RFRegWrite
ais #2
.dbline 209
; RFRegWrite(RegInterruptRq, 0x7f); //中断标识清零
lda #127
psha
lda #7
psha
jsr _RFRegWrite
ais #2
tsx
.dbline -2
L46:
.dbline 0 ; func end
rts
.dbend
.dbfunc e RC531_14443ABInit _RC531_14443ABInit fV
; i -> 0,X
; Tagtype -> 4,X
_RC531_14443ABInit::
.dbline -1
ais #-2
tsx
.dbline 223
; }
;
; //------------------------------------------------------------------------*
; //3.RC531的读卡操作 *
; //------------------------------------------------------------------------*
;
; //RC531_14443ABInit-------------------------------------------------------*
; //功 能: 初始化RC531各相关寄存器 *
; //参 数: Tagtype - 电子标签类型 *
; // 0 - ISO14443B; 1 - ISO14443A *
; //返 回: 无 *
; //------------------------------------------------------------------------*
; void RC531_14443ABInit(INT8U Tagtype)
; {
.dbline 227
; INT16U i;
;
; //设置线性地址模式
; RFRegWrite(RegPage, 0x00);
clra
psha
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 230
;
; //根据电子标签类型进行相应的RC531寄存器初始化
; if(Tagtype)
lda 4,X
bne X0
jmp L48
X0:
.dbline 231
; {
.dbline 234
; //ISO14443A电子标签
; //第2页 传送器与编码器控制
; RFRegWrite(RegTxControl, 0x5b); //0x5b, 幅移键控ASk 100%
lda #91
psha
lda #17
psha
jsr _RFRegWrite
ais #2
.dbline 235
; RFRegWrite(RegCwConductance, 0x3f); //0x3f, 设置输出驱动的电导系数
lda #63
psha
lda #18
psha
jsr _RFRegWrite
ais #2
.dbline 236
; RFRegWrite(RegModConductance, 0x3f); //0x3f, 调制比 100%
lda #63
psha
lda #19
psha
jsr _RFRegWrite
ais #2
.dbline 237
; RFRegWrite(RegCoderControl, 0x19); //0x19, TypeA模式,波特率106kbps,米勒编码
lda #25
psha
lda #20
psha
jsr _RFRegWrite
ais #2
.dbline 238
; RFRegWrite(RegTypeBFraming, 0x00); //0x00, EGT=0
clra
psha
lda #23
psha
jsr _RFRegWrite
ais #2
.dbline 241
;
; //第3页 接收器与解码器控制
; RFRegWrite(RegDecoderControl, 0x08); //0x08, ISO14443A帧,曼彻斯特编码
lda #8
psha
lda #26
psha
jsr _RFRegWrite
ais #2
.dbline 242
; RFRegWrite(RegRxThreshold, 0xff); //0xff, 可接收的最小信号强度
lda #-1
psha
lda #28
psha
jsr _RFRegWrite
ais #2
.dbline 243
; RFRegWrite(RegBPSKDemControl, 0x1e); //0x00, 忽略EOF,打开高通滤波
lda #30
psha
lda #29
psha
jsr _RFRegWrite
ais #2
.dbline 244
; RFRegWrite(RegClockQControl, 0x00); //0x3f, Q时钟控制
clra
psha
lda #31
psha
jsr _RFRegWrite
ais #2
.dbline 247
;
; //第4页 射频时间和通道冗余
; RFRegWrite(RegRxWait, 0x06); //0x06, 设置接收延时
lda #6
psha
lda #33
psha
jsr _RFRegWrite
ais #2
.dbline 248
; RFRegWrite(RegChannelRedundancy, 0x03); //0x03, TypeA接收冗余校验
lda #3
psha
lda #34
psha
jsr _RFRegWrite
ais #2
.dbline 249
; RFRegWrite(RegCRCPresetLSB, 0x63); //0x63, CRC预设值
lda #99
psha
lda #35
psha
jsr _RFRegWrite
ais #2
.dbline 250
; RFRegWrite(RegCRCPresetMSB, 0x63); //0x63, CRC预设值
lda #99
psha
lda #36
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 251
; }
jmp L49
L48:
.dbline 253
; else
; {
.dbline 256
; //ISO14443B电子标签
; //第2页 传送器与编码器控制
; RFRegWrite(RegTxControl, 0x4b); //0x4b, 13.56MHz
lda #75
psha
lda #17
psha
jsr _RFRegWrite
ais #2
.dbline 257
; RFRegWrite(RegCwConductance, 0x3f); //0x3f, 设置输出驱动的电导系数
lda #63
psha
lda #18
psha
jsr _RFRegWrite
ais #2
.dbline 258
; RFRegWrite(RegModConductance, 0x06); //0x06, 幅移键控ASk 12%
lda #6
psha
lda #19
psha
jsr _RFRegWrite
ais #2
.dbline 259
; RFRegWrite(RegCoderControl, 0x20); //0x20, TypeB,波特率106kbps, NRZ编码
lda #32
psha
lda #20
psha
jsr _RFRegWrite
ais #2
.dbline 260
; RFRegWrite(RegTypeBFraming, 0x23); //0x23, 定义ISO14443B帧格式
lda #35
psha
lda #23
psha
jsr _RFRegWrite
ais #2
.dbline 263
;
; //第3页 接收器与解码器控制
; RFRegWrite(RegDecoderControl, 0x19); //0x19, ISO14443B帧,BPSK编码
lda #25
psha
lda #26
psha
jsr _RFRegWrite
ais #2
.dbline 264
; RFRegWrite(RegRxThreshold, 0x44); //0x44, 可接收的最小信号强度
lda #68
psha
lda #28
psha
jsr _RFRegWrite
ais #2
.dbline 265
; RFRegWrite(RegBPSKDemControl, 0x3e); //0x3e, 忽略EOF,打开高通滤波
lda #62
psha
lda #29
psha
jsr _RFRegWrite
ais #2
.dbline 266
; RFRegWrite(RegClockQControl, 0x07); //0x3f, Q时钟控制
lda #7
psha
lda #31
psha
jsr _RFRegWrite
ais #2
.dbline 269
;
; //第4页 射频时间和通道冗余
; RFRegWrite(RegRxWait, 0x06); //0x06, 设置接收延时
lda #6
psha
lda #33
psha
jsr _RFRegWrite
ais #2
.dbline 270
; RFRegWrite(RegChannelRedundancy, 0x2c); //0x2c, TypeB接收冗余校验
lda #44
psha
lda #34
psha
jsr _RFRegWrite
ais #2
.dbline 271
; RFRegWrite(RegCRCPresetLSB, 0xff); //0xff, CRC预设值
lda #-1
psha
lda #35
psha
jsr _RFRegWrite
ais #2
.dbline 272
; RFRegWrite(RegCRCPresetMSB, 0xff); //0xff, CRC预设值
lda #-1
psha
lda #36
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 273
; }
L49:
.dbline 276
clr 1,X
clr ,X
bra L53
L50:
.dbline 276
L51:
.dbline 276
lda 1,X
add #1
sta 1,X
lda ,X
adc #0
sta ,X
L53:
.dbline 276
;
; //延时
; for(i = 0; i < 1000; i++);
lda 1,X
sta *__r1
lda ,X
sta *__r0
ldhx *__r0
cphx #1000
tsx
blo L50
.dbline -2
L47:
ais #2
.dbline 0 ; func end
rts
.dbsym l i 0 i
.dbsym l Tagtype 4 c
.dbend
.dbfunc e ReadTag _ReadTag fc
; flag -> 0,X
; UID_Buf -> 6,X
; UIDLen -> 4,X
; Tagtype -> 3,X
_ReadTag::
.dbline -1
ais #-1
tsx
.dbline 286
; }
;
; //ReadTag-----------------------------------------------------------------*
; //功 能: 读卡函数 *
; //参 数: Tagtype - 电子标签类型(0 - ISO14443B; 1 - ISO14443A) *
; //出 口: UIDLen - UID数据长度, UID_Buf[] - UID数据数组 *
; //返 回: 1,2,3 - 操作失败;0 - 操作成功 *
; //------------------------------------------------------------------------*
; INT8U ReadTag(INT8U Tagtype, INT8U *UIDLen, INT8U UID_Buf[])
; {
.dbline 289
; INT8U flag;
;
; if(Tagtype)
lda 3,X
beq L55
.dbline 290
; {
.dbline 292
; //读取ISO14443A
; flag = Request_TypeA(); //询卡
jsr _Request_TypeA
tsx
sta *__r1
sta ,X
.dbline 293
; if(flag) return 1;
beq L57
.dbline 293
lda #1
bra L54
L57:
.dbline 295
;
; flag = Get_UID_TypeA(UIDLen, UID_Buf); //读TypeA电子标签UID
lda 7,X
psha
lda 6,X
psha
lda 5,X
psha
lda 4,X
psha
jsr _Get_UID_TypeA
ais #4
tsx
sta *__r1
sta ,X
.dbline 296
; if(flag) return 3;
beq L56
.dbline 296
lda #3
bra L54
X1:
.dbline 297
; }
L55:
.dbline 299
; else
; {
.dbline 301
; //读取ISO14443B
; flag = Request_TypeB(); //询卡
jsr _Request_TypeB
tsx
sta *__r1
sta ,X
.dbline 302
; if(flag) return 1;
beq L61
.dbline 302
lda #1
bra L54
L61:
.dbline 304
;
; flag = ATTRIB_TypeB(); //选卡
jsr _ATTRIB_TypeB
tsx
sta *__r1
sta ,X
.dbline 305
; if(flag) return 2;
beq L63
.dbline 305
lda #2
bra L54
L63:
.dbline 307
;
; flag = Get_UID_TypeB(UIDLen, UID_Buf); //读TypeB卡号
lda 7,X
psha
lda 6,X
psha
lda 5,X
psha
lda 4,X
psha
jsr _Get_UID_TypeB
ais #4
tsx
sta *__r1
sta ,X
.dbline 308
; if(flag) return 3;
beq L65
.dbline 308
lda #3
bra L54
L65:
.dbline 309
; }
L56:
.dbline 310
; return 0; //操作成功
clra
.dbline -2
L54:
ais #1
.dbline 0 ; func end
rts
.dbsym l flag 0 c
.dbsym l UID_Buf 6 pc
.dbsym l UIDLen 4 pc
.dbsym l Tagtype 3 c
.dbend
.dbfunc e Request_TypeA _Request_TypeA fc
; ReData -> 0,X
; SndData -> 40,X
; Len -> 41,X
; Flag -> 42,X
; Data -> 43,X
_Request_TypeA::
.dbline -1
ais #-44
tsx
.dbline 324
; }
;
; //------------------------------------------------------------------------*
; //3.1 对ISO14443A电子标签的相关操作 *
; //------------------------------------------------------------------------*
;
;
; //Request_TypeA-----------------------------------------------------------*
; //功 能: 向TypeA卡发送request信号 *
; //参 数: 无 *
; //返 回: 1,2 - request命令执行失败;0 - request命令执行成功 *
; //------------------------------------------------------------------------*
; INT8U Request_TypeA(void)
; {
.dbline 332
; INT8U Data;
; INT8U Flag;
; INT8U Len;
; INT8U SndData[1];
; INT8U ReData[40];
;
; //写bitframing寄存器,7bit数据的发送,短帧格式
; RFRegWrite(RegBitFraming, 0x07);
lda #7
psha
lda #15
psha
jsr _RFRegWrite
ais #2
.dbline 335
;
; // Bit3=0 加密单元关闭
; Data = RFRegRead(RegControl);
lda #9
psha
jsr _RFRegRead
ais #1
tsx
sta *__r1
sta 43,X
.dbline 336
; Data &= 0xf7;
and #-9
sta 43,X
.dbline 337
; RFRegWrite(RegControl, Data);
psha
lda #9
psha
jsr _RFRegWrite
ais #2
.dbline 340
;
; //TypeA接收冗余校验
; RFRegWrite(RegChannelRedundancy, 0x03);
lda #3
psha
lda #34
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 343
;
; //ISO14443-A 询卡指令
; SndData[0] = 0x26;
lda #38
sta 40,X
.dbline 344
; Flag = Command_Send(SndData, 0x01, PCD_TRANSCEIVE);
lda #30
psha
lda #1
psha
aix #40
pshx
pshh
jsr _Command_Send
ais #4
tsx
sta *__r1
sta 42,X
.dbline 346
;
; if(Flag)
beq L68
.dbline 347
; {
.dbline 349
; //命令发送失败
; RFRegWrite(RegCommand, 0x00); //空闲指令(Idle)取消当前操作
clra
psha
lda #1
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 350
; return 1; //失败返回
lda #1
bra L67
L68:
.dbline 354
; }
;
; //命令发送成功
; Len = Read_FIFO(ReData); //接收2个字节的ATQA应答
pshx
pshh
jsr _Read_FIFO
ais #2
tsx
sta *__r1
sta 41,X
.dbline 355
; if(Len >= 2) //判断回读的应答数据长度为2否
cmp #2
blo L70
.dbline 356
; {
.dbline 359
; //判断回应的数据是否为"04,00" or "84,00"
;
; return 0; //成功
clra
bra L67
L70:
.dbline 361
; }
; return 2; //失败
lda #2
.dbline -2
L67:
ais #44
.dbline 0 ; func end
rts
.dbsym l ReData 0 A[40:40]c
.dbsym l SndData 40 A[1:1]c
.dbsym l Len 41 c
.dbsym l Flag 42 c
.dbsym l Data 43 c
.dbend
.dbfunc e Get_UID_TypeA _Get_UID_TypeA fc
; Flag -> 0,X
; SndData -> 1,X
; ReData -> 3,X
; Len -> 43,X
; i -> 44,X
; UID_Buf -> 49,X
; UIDLen -> 47,X
_Get_UID_TypeA::
.dbline -1
ais #-45
tsx
.dbline 370
; }
;
; //Get_UID_TypeA-----------------------------------------------------------*
; //功 能: 发送ANTICOLLISION指令,获得ISO14443A电子标签UID *
; //出 口: UIDLen - UID有效数据长度,UID_Buf - UID数据数组 *
; //返 回: 1,2,3 - 命令执行失败;0 - 命令执行成功 *
; //------------------------------------------------------------------------*
; INT8U Get_UID_TypeA(INT8U *UIDLen, INT8U UID_Buf[])
; {
.dbline 378
; INT8U i;
; INT8U Flag;
; INT8U Len;
; INT8U SndData[2];
; INT8U ReData[40];
;
; //TypeA接收冗余校验
; RFRegWrite(RegChannelRedundancy, 0x03);
lda #3
psha
lda #34
psha
jsr _RFRegWrite
ais #2
tsx
.dbline 381
;
; //ISO14443A ANTICOLLISION指令
; SndData[0] = 0x93; //SEL
lda #-109
sta 1,X
.dbline 382
; SndData[1] = 0x20; //NVB
lda #32
sta 2,X
.dbline 383
; Flag = Command_Send(SndData, 0x02, PCD_TRANSCEIVE);
lda #30
psha
lda #2
psha
aix #1
pshx
pshh
jsr _Command_Send
ais #4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -