mfrc500.src
来自「mifarea卡程序mifarea卡程序mifarea卡程序」· SRC 代码 · 共 2,801 行 · 第 1/5 页
SRC
2,801 行
; SOURCE LINE # 97
MOV R5,#09H
MOV R7,#02AH
LCALL _WriteIO
; WriteIO(RegTimerReload,0xff);
; SOURCE LINE # 98
MOV R5,#0FFH
?C0371:
; break;
; SOURCE LINE # 99
SJMP ?C0375
; case 5:
; SOURCE LINE # 100
?C0010:
; WriteIO(RegTimerClock,0x0b);
; SOURCE LINE # 101
MOV R5,#0BH
MOV R7,#02AH
LCALL _WriteIO
; WriteIO(RegTimerReload,0xff);
; SOURCE LINE # 102
MOV R5,#0FFH
?C0372:
; break;
; SOURCE LINE # 103
SJMP ?C0375
; case 6:
; SOURCE LINE # 104
?C0011:
; WriteIO(RegTimerClock,0x0d);
; SOURCE LINE # 105
MOV R5,#0DH
MOV R7,#02AH
LCALL _WriteIO
; WriteIO(RegTimerReload,0xff);
; SOURCE LINE # 106
MOV R5,#0FFH
?C0373:
; break;
; SOURCE LINE # 107
SJMP ?C0375
; case 7:
; SOURCE LINE # 108
?C0012:
; WriteIO(RegTimerClock,0x0f);
; SOURCE LINE # 109
MOV R5,#0FH
MOV R7,#02AH
LCALL _WriteIO
; WriteIO(RegTimerReload,0xff);
; SOURCE LINE # 110
MOV R5,#0FFH
?C0374:
; break;
; SOURCE LINE # 111
SJMP ?C0375
; default:
; SOURCE LINE # 112
?C0013:
; WriteIO(RegTimerClock,0x07);
; SOURCE LINE # 113
MOV R5,#07H
MOV R7,#02AH
LCALL _WriteIO
; WriteIO(RegTimerReload,tmoLength);
; SOURCE LINE # 114
MOV DPTR,#tmoLength?447
MOVX A,@DPTR
MOV R5,A
?C0375:
MOV R7,#02CH
LCALL _WriteIO
; break;
; SOURCE LINE # 115
; }
; SOURCE LINE # 116
; }
; SOURCE LINE # 117
?C0014:
RET
; END OF _M500PcdSetTmo
;
; /****************************
; * excute mfrc500 command *
; ****************************/
; #if 1
; uchar M500PcdCmd(uchar cmdcode, uchar* send, uchar* rcv, MfCmdInfo *info)
RSEG ?PR?_M500PcdCmd?MFRC500
L?0391:
USING 0
MOV R0,#LOW (SndBuffer+02H)
MOV R4,#HIGH (SndBuffer+02H)
MOV R5,#01H
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV R6,#00H
MOV R7,#04H
LCALL ?C?COPY
MOV DPTR,#SndBuffer+03H
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#SndBuffer+02H
MOVX A,@DPTR
XRL A,R7
MOV R7,A
MOV DPTR,#SndBuffer+04H
MOVX A,@DPTR
XRL A,R7
MOV R7,A
INC DPTR
MOVX A,@DPTR
XRL A,R7
INC DPTR
MOVX @DPTR,A
MOV A,#07H
L?0392:
MOV DPTR,#MInfo+03H
L?0393:
MOVX @DPTR,A
L?0394:
MOV DPTR,#?_M500PcdCmd?BYTE+04H
MOV A,#01H
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (RcvBuffer)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (RcvBuffer)
MOVX @DPTR,A
INC DPTR
MOV A,#01H
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (MInfo)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (MInfo)
MOVX @DPTR,A
MOV R3,#01H
L?0395:
MOV R2,#HIGH (SndBuffer)
MOV R1,#LOW (SndBuffer)
MOV R7,#01EH
_M500PcdCmd:
USING 0
; SOURCE LINE # 123
MOV DPTR,#cmdcode?548
MOV A,R7
MOVX @DPTR,A
INC DPTR
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; {
; SOURCE LINE # 124
; uchar data tmpStatus;
; uchar data lastBits;
; uchar data status = MI_OK;
; SOURCE LINE # 127
CLR A
MOV status?554,A
; uchar data irqEn = 0x00;
; SOURCE LINE # 128
MOV irqEn?555,A
; uchar data waitFor = 0x00;
; SOURCE LINE # 129
MOV waitFor?556,A
; uint data starttime;
;
; WriteIO(RegInterruptEn,0x7F); // disable all interrupts
; SOURCE LINE # 132
MOV R5,#07FH
MOV R7,#06H
LCALL _WriteIO
; WriteIO(RegInterruptRq,0x7F); // reset interrupt requests
; SOURCE LINE # 133
MOV R5,#07FH
MOV R7,#07H
LCALL _WriteIO
; WriteIO(RegCommand,PCD_IDLE); // terminate probably running command
; SOURCE LINE # 134
CLR A
MOV R5,A
MOV R7,#01H
LCALL _WriteIO
;
; FlushFIFO(); // flush FIFO buffer
; SOURCE LINE # 136
LCALL FlushFIFO
;
; // save info structures to module pointers
; MpIsrInfo = info;
; SOURCE LINE # 139
MOV DPTR,#info?551
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#MpIsrInfo
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; MpIsrOut = send;
; SOURCE LINE # 140
MOV DPTR,#send?549
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#MpIsrOut
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; MpIsrIn = rcv;
; SOURCE LINE # 141
MOV DPTR,#rcv?550
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#MpIsrIn
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
;
; info->irqSource = 0x0; // reset interrupt flags
; SOURCE LINE # 143
MOV DPTR,#info?551
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#07H
CLR A
LCALL ?C?CSTOPTR
;
; enableme();
; SOURCE LINE # 145
SETB EX0
;
; // depending on the command code, appropriate interrupts are enabled (irqEn)
; // and the commit interrupt is choosen (waitFor).
; switch(cmdcode)
; SOURCE LINE # 149
MOV DPTR,#cmdcode?548
MOVX A,@DPTR
LCALL ?C?CCASE
DW ?C0016
DB 00H
DW ?C0017
DB 01H
DW ?C0018
DB 03H
DW ?C0025
DB 07H
DW ?C0025
DB 0BH
DW ?C0025
DB 0CH
DW ?C0022
DB 012H
DW ?C0023
DB 014H
DW ?C0024
DB 016H
DW ?C0025
DB 019H
DW ?C0025
DB 01AH
DW ?C0027
DB 01EH
DW 00H
DW ?C0028
; {
; SOURCE LINE # 150
; case PCD_IDLE: // nothing else required
; SOURCE LINE # 151
?C0016:
; irqEn = 0x00;
; SOURCE LINE # 152
CLR A
MOV irqEn?555,A
; waitFor = 0x00;
; SOURCE LINE # 153
MOV waitFor?556,A
; break;
; SOURCE LINE # 154
SJMP ?C0015
;
; case PCD_WRITEE2: // LoAlert and TxIRq
; SOURCE LINE # 156
?C0017:
; irqEn = 0x11;
; SOURCE LINE # 157
; waitFor = 0x10;
; SOURCE LINE # 158
; break;
; SOURCE LINE # 159
SJMP ?C0376
;
; case PCD_READE2: // HiAlert, LoAlert and IdleIRq
; SOURCE LINE # 161
?C0018:
; irqEn = 0x07;
; SOURCE LINE # 162
MOV irqEn?555,#07H
; waitFor = 0x04;
; SOURCE LINE # 163
; break;
; SOURCE LINE # 164
SJMP ?C0382
;
; case PCD_LOADCONFIG: // IdleIRq and LoAlert
; SOURCE LINE # 166
; case PCD_LOADKEYE2: // IdleIRq and LoAlert
; SOURCE LINE # 167
; case PCD_AUTHENT1: // IdleIRq and LoAlert
; SOURCE LINE # 168
; irqEn = 0x05;
; waitFor = 0x04;
; break;
;
; case PCD_CALCCRC: // LoAlert and TxIRq
; SOURCE LINE # 173
?C0022:
; irqEn = 0x11;
; SOURCE LINE # 174
?C0376:
MOV irqEn?555,#011H
; waitFor = 0x10;
; SOURCE LINE # 175
MOV waitFor?556,#010H
; break;
; SOURCE LINE # 176
SJMP ?C0015
;
; case PCD_AUTHENT2: // IdleIRq
; SOURCE LINE # 178
?C0023:
; irqEn = 0x04;
; SOURCE LINE # 179
MOV irqEn?555,#04H
; waitFor = 0x04;
; SOURCE LINE # 180
?C0378:
; break;
; SOURCE LINE # 181
SJMP ?C0382
;
; case PCD_RECEIVE: // HiAlert and IdleIRq
; SOURCE LINE # 183
?C0024:
; info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4); ////////////////
; SOURCE LINE # 184
MOV R7,#0FH
LCALL _ReadIO
MOV A,R7
SWAP A
ANL A,#0FH
MOV R7,A
CLR C
CLR A
SUBB A,R7
MOV R7,A
CLR A
SUBB A,#00H
MOV R6,A
MOV DPTR,#info?551
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#05H
MOV A,R6
MOV B,R7
LCALL ?C?ISTOPTR
; irqEn = 0x06;
; SOURCE LINE # 185
MOV irqEn?555,#06H
; waitFor = 0x04;
; SOURCE LINE # 186
?C0379:
; break;
; SOURCE LINE # 187
SJMP ?C0382
;
; case PCD_LOADKEY: // IdleIRq
; SOURCE LINE # 189
?C0025:
; irqEn = 0x05;
; SOURCE LINE # 190
MOV irqEn?555,#05H
; waitFor = 0x04;
; SOURCE LINE # 191
?C0380:
; break;
; SOURCE LINE # 192
SJMP ?C0382
;
; case PCD_TRANSMIT: // LoAlert and IdleIRq
; SOURCE LINE # 194
; irqEn = 0x05;
; waitFor = 0x04;
; break;
;
; case PCD_TRANSCEIVE: // TxIrq, RxIrq, IdleIRq and LoAlert
; SOURCE LINE # 199
?C0027:
; info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4); //////////////
; SOURCE LINE # 200
MOV R7,#0FH
LCALL _ReadIO
MOV A,R7
SWAP A
ANL A,#0FH
MOV R7,A
CLR C
CLR A
SUBB A,R7
MOV R7,A
CLR A
SUBB A,#00H
MOV R6,A
MOV DPTR,#info?551
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#05H
MOV A,R6
MOV B,R7
LCALL ?C?ISTOPTR
; irqEn = 0x3d; //0x1D;
; SOURCE LINE # 201
MOV irqEn?555,#03DH
; waitFor = 0x04;
; SOURCE LINE # 202
?C0382:
MOV waitFor?556,#04H
; break;
; SOURCE LINE # 203
SJMP ?C0015
;
; default:
; SOURCE LINE # 205
?C0028:
; status = MI_UNKNOWN_COMMAND;
; SOURCE LINE # 206
MOV status?554,#0FH
; break;
; SOURCE LINE # 207
; }
; SOURCE LINE # 208
?C0015:
;
; if (status == MI_OK)
; SOURCE LINE # 210
MOV A,status?554
JZ $ + 5H
LJMP ?C0029
; {
; SOURCE LINE # 211
; irqEn |= 0x20;
; SOURCE LINE # 212
ORL irqEn?555,#020H
; waitFor |= 0x20;
; SOURCE LINE # 213
ORL waitFor?556,#020H
; WriteIO(RegInterruptEn,irqEn | 0x80); // enable interrupt
; SOURCE LINE # 214
MOV A,irqEn?555
ORL A,#080H
MOV R5,A
MOV R7,#06H
LCALL _WriteIO
;
; WriteIO(RegCommand,cmdcode); // send command
; SOURCE LINE # 216
MOV DPTR,#cmdcode?548
MOVX A,@DPTR
MOV R5,A
MOV R7,#01H
LCALL _WriteIO
; starttime = GetTickCount();
; SOURCE LINE # 217
LCALL GetTickCount
MOV starttime?557,R6
MOV starttime?557+01H,R7
?C0030:
;
; while (!((MpIsrInfo->irqSource & waitFor)
; SOURCE LINE # 219
MOV DPTR,#MpIsrInfo
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#07H
LCALL ?C?CLDOPTR
ANL A,waitFor?556
JNZ ?C0031
LCALL GetTickCount
CLR C
MOV A,R7
SUBB A,starttime?557+01H
MOV R7,A
MOV A,R6
SUBB A,starttime?557
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?