📄 rf.lis
字号:
.module RF.c
.area text
0000 .dbfile RF.c
0000 .dbfunc e RFRegRead _RFRegRead fc
0000 ; ReData1 -> 0,X
0000 ; ReData2 -> 1,X
0000 ; SndData -> 2,X
0000 ; addr -> 5,X
0000 _RFRegRead::
0000 .dbline -1
0000 A7FD ais #-3
0002 95 tsx
0003 .dbline 21
0003 ; //------------------------------------------------------------------------*
0003 ; //文件名:RF.C *
0003 ; //功 能:与射频读卡芯片通信相关程序。 *
0003 ; //包 含: *
0003 ; // (1)RC531的驱动函数 *
0003 ; // (2)RC531的复位及初始化 *
0003 ; // (3)RC531的读卡操作 *
0003 ; //------------------------------------------------------------------------*
0003 ; #include "RF.h"
0003 ;
0003 ; //------------------------------------------------------------------------*
0003 ; //1.RC531的驱动函数 *
0003 ; //------------------------------------------------------------------------*
0003 ;
0003 ; //RFRegRead---------------------------------------------------------------*
0003 ; //功 能: 读出给定地址的寄存器的值并返回 *
0003 ; //参 数: adder 被访问寄存器的地址 *
0003 ; //返 回: 读出的数据 *
0003 ; //------------------------------------------------------------------------*
0003 ; INT8U RFRegRead(INT8U addr)
0003 ; {
0003 .dbline 26
0003 ; INT8U ReData1,ReData2; //接收数据变量
0003 ; INT8U SndData; //发送数据变量
0003 ;
0003 ; //处理第一个字节,bit7:MSB=1,bit6~1:addr,bit0:RFU=0
0003 ; SndData = (addr << 1);
0003 E605 lda 5,X
0005 48 lsla
0006 E702 sta 2,X
0008 .dbline 27
0008 ; SndData |= (1 << 7);
0008 AA80 ora #-128
000A E702 sta 2,X
000C .dbline 28
000C ; SndData &= ~(1 << 0);
000C A4FE and #-2
000E E702 sta 2,X
0010 .dbline 31
0010 ;
0010 ; //SPI1_SS引脚拉低,选中从机
0010 ; SPI1_P &= ~(1 << SPI1_SS);
0010 1F03 bclr #7,0x3
0012 .dbline 34
0012 ;
0012 ; //读取过程
0012 ; ReData1 = SPI1MASTERCOM(SndData); //发送读取目的寄存器地址
0012 87 psha
0013 CD0000 jsr _SPI1MASTERCOM
0016 A701 ais #1
0018 95 tsx
0019 B700 sta *__r1
001B F7 sta ,X
001C .dbline 35
001C ; ReData2 = SPI1MASTERCOM(0x00); //读取结束,取回寄存器内容
001C 4F clra
001D 87 psha
001E CD0000 jsr _SPI1MASTERCOM
0021 A701 ais #1
0023 95 tsx
0024 B700 sta *__r1
0026 E701 sta 1,X
0028 .dbline 38
0028 ;
0028 ; //SPI1_SS引脚拉高,取消选中
0028 ; SPI1_P |= (1 << SPI1_SS);
0028 1E03 bset #7,0x3
002A .dbline 40
002A ;
002A ; return ReData2; //返回接收数据
002A .dbline -2
002A L1:
002A A703 ais #3
002C .dbline 0 ; func end
002C 81 rts
002D .dbsym l ReData1 0 c
002D .dbsym l ReData2 1 c
002D .dbsym l SndData 2 c
002D .dbsym l addr 5 c
002D .dbend
002D .dbfunc e RFRegWrite _RFRegWrite fV
002D ; ReData2 -> 0,X
002D ; ReData1 -> 1,X
002D ; SndAddr -> 2,X
002D ; Data -> 6,X
002D ; addr -> 5,X
002D _RFRegWrite::
002D .dbline -1
002D A7FD ais #-3
002F 95 tsx
0030 .dbline 49
0030 ; }
0030 ;
0030 ; //RFRegWrite--------------------------------------------------------------*
0030 ; //功 能: 向给定地址的寄存器写一个值 *
0030 ; //参 数: adder 被访问寄存器的地址; Data 写入的数据 *
0030 ; //返 回: 无 *
0030 ; //------------------------------------------------------------------------*
0030 ; void RFRegWrite(INT8U addr, INT8U Data)
0030 ; {
0030 .dbline 54
0030 ; INT8U ReData1,ReData2;
0030 ; INT8U SndAddr;
0030 ;
0030 ; //处理第一个字节,bit7:MSB=0,bit6~1:addr,bit0:RFU=0
0030 ; SndAddr = (addr << 1);
0030 E605 lda 5,X
0032 48 lsla
0033 E702 sta 2,X
0035 .dbline 55
0035 ; SndAddr &= 0x7E;
0035 A47E and #126
0037 E702 sta 2,X
0039 .dbline 58
0039 ;
0039 ; //SPI1_SS引脚拉低,选中从机
0039 ; SPI1_P &= ~(1 << SPI1_SS);
0039 1F03 bclr #7,0x3
003B .dbline 61
003B ;
003B ; //写入过程
003B ; ReData1 = SPI1MASTERCOM(SndAddr); //写入目标地址
003B 87 psha
003C CD0000 jsr _SPI1MASTERCOM
003F A701 ais #1
0041 95 tsx
0042 B700 sta *__r1
0044 E701 sta 1,X
0046 .dbline 62
0046 ; ReData2 = SPI1MASTERCOM(Data); //写入内容
0046 E606 lda 6,X
0048 87 psha
0049 CD0000 jsr _SPI1MASTERCOM
004C A701 ais #1
004E 95 tsx
004F B700 sta *__r1
0051 F7 sta ,X
0052 .dbline 65
0052 ;
0052 ; //SPI1_SS引脚拉高,取消选中
0052 ; SPI1_P |= (1 << SPI1_SS);
0052 1E03 bset #7,0x3
0054 .dbline -2
0054 L2:
0054 A703 ais #3
0056 .dbline 0 ; func end
0056 81 rts
0057 .dbsym l ReData2 0 c
0057 .dbsym l ReData1 1 c
0057 .dbsym l SndAddr 2 c
0057 .dbsym l Data 6 c
0057 .dbsym l addr 5 c
0057 .dbend
0057 .dbfunc e Command_Send _Command_Send fc
0057 ; time -> 0,X
0057 ; Data -> 1,X
0057 ; i -> 2,X
0057 ; j -> 3,X
0057 ; comm_set -> 9,X
0057 ; Length -> 8,X
0057 ; Send_Buf -> 6,X
0057 _Command_Send::
0057 .dbline -1
0057 A7FC ais #-4
0059 95 tsx
005A .dbline 76
005A ; }
005A ;
005A ; //Command_Send------------------------------------------------------------*
005A ; //功 能: 向MF RC531发送命令 *
005A ; //参 数: Length: 要写入的字节数 *
005A ; // Send_Buf: 待发送数据应放在Send_Buf缓冲区中 *
005A ; // comm_set: 命令操作码 *
005A ; //返 回: 1 - 命令执行失败; 0 - 命令执行成功 *
005A ; //------------------------------------------------------------------------*
005A ; INT8U Command_Send(INT8U *Send_Buf, INT8U Length, INT8U comm_set)
005A ; {
005A .dbline 82
005A ; INT8U Data;
005A ; INT8U time;
005A ; INT8U i,j;
005A ;
005A ; //清空FIFO缓冲区
005A ; Clear_FIFO();
005A CD00AA jsr _Clear_FIFO
005D 95 tsx
005E .dbline 85
005E ;
005E ; //写命令参数
005E ; Write_FIFO(Send_Buf, Length);
005E E608 lda 8,X
0060 87 psha
0061 E607 lda 7,X
0063 87 psha
0064 E606 lda 6,X
0066 87 psha
0067 CD0131 jsr _Write_FIFO
006A A703 ais #3
006C 95 tsx
006D .dbline 88
006D ;
006D ; //设置延时时间
006D ; time = 0xff;
006D A6FF lda #-1
006F F7 sta ,X
0070 .dbline 91
0070 ;
0070 ; //向command寄存器写控制命令码
0070 ; RFRegWrite(RegCommand, comm_set);
0070 E609 lda 9,X
0072 87 psha
0073 A601 lda #1
0075 87 psha
0076 CD002D jsr _RFRegWrite
0079 A702 ais #2
007B 95 tsx
007C .dbline 94
007C ;
007C ; //检测命令是否被执行
007C ; for(i = 0; i < time; i++)
007C 6F02 clr 2,X
007E 2020 bra L7
0080 L4:
0080 .dbline 95
0080 ; {
0080 .dbline 96
0080 ; Data = RFRegRead(RegCommand); //读取Command_Reg寄存器
0080 A601 lda #1
0082 87 psha
0083 CD0000 jsr _RFRegRead
0086 A701 ais #1
0088 95 tsx
0089 B700 sta *__r1
008B E701 sta 1,X
008D .dbline 97
008D ; if(Data == 0) //判断Command_Reg寄存器是否已为0
008D 2603 bne L8
008F .dbline 98
008F ; return 0; //成功
008F 4F clra
0090 2015 bra L3
0092 L8:
0092 .dbline 99
0092 6F03 clr 3,X
0094 2002 bra L13
0096 L10:
0096 .dbline 99
0096 L11:
0096 .dbline 99
0096 6C03 inc 3,X
0098 L13:
0098 .dbline 99
0098 E603 lda 3,X
009A A1FA cmp #-6
009C 25F8 blo L10
009E .dbline 100
009E L5:
009E .dbline 94
009E 6C02 inc 2,X
00A0 L7:
00A0 .dbline 94
00A0 E602 lda 2,X
00A2 F1 cmp ,X
00A3 25DB blo L4
00A5 .dbline 101
00A5 ; for(j = 0; j < 250; j++); //延时
00A5 ; }
00A5 ; return 1; //失败
00A5 A601 lda #1
00A7 .dbline -2
00A7 L3:
00A7 A704 ais #4
00A9 .dbline 0 ; func end
00A9 81 rts
00AA .dbsym l time 0 c
00AA .dbsym l Data 1 c
00AA .dbsym l i 2 c
00AA .dbsym l j 3 c
00AA .dbsym l comm_set 9 c
00AA .dbsym l Length 8 c
00AA .dbsym l Send_Buf 6 pc
00AA .dbend
00AA .dbfunc e Clear_FIFO _Clear_FIFO fc
00AA ; i -> 0,X
00AA ; Data -> 1,X
00AA ; j -> 2,X
00AA _Clear_FIFO::
00AA .dbline -1
00AA A7FD ais #-3
00AC 95 tsx
00AD .dbline 110
00AD ; }
00AD ;
00AD ; //Clear_FIFO--------------------------------------------------------------*
00AD ; //功 能: 清空RC531的FIFO寄存器 *
00AD ; //参 数: 无 *
00AD ; //返 回: 1 - 命令执行失败; 0 - 命令执行成功 *
00AD ; //------------------------------------------------------------------------*
00AD ; INT8U Clear_FIFO(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -