📄 mfrc500uc.lis
字号:
028A EC2D mov R30,R12
028C FF27 clr R31
028E E80F add R30,R24
0290 F91F adc R31,R25
0292 2080 ldd R2,z+0
0294 40900E01 lds R4,_MSndBuffer
0298 50900F01 lds R5,_MSndBuffer+1
029C EC2D mov R30,R12
029E FF27 clr R31
02A0 E40D add R30,R4
02A2 F51D adc R31,R5
02A4 2282 std z+2,R2
02A6 .dbline 145
02A6 L43:
02A6 .dbline 142
02A6 C394 inc R12
02A8 L45:
02A8 .dbline 142
02A8 0884 ldd R0,y+8
02AA C014 cp R12,R0
02AC 60F3 brlo L42
02AE .dbline 146
02AE ; {
02AE ; MSndBuffer[i + 2] = snr_in[i];
02AE ; }
02AE ; MInfo.nBytesToSend = 2 + nbytes;
02AE 802D mov R24,R0
02B0 8E5F subi R24,254 ; addi 2
02B2 80930601 sts _MInfo+4,R24
02B6 .dbline 147
02B6 ; status = PcdSingleResponseCmd(0x1e,
02B6 80E0 ldi R24,<_MInfo
02B8 90E0 ldi R25,>_MInfo
02BA 9B83 std y+3,R25
02BC 8A83 std y+2,R24
02BE 20900C01 lds R2,_MRcvBuffer
02C2 30900D01 lds R3,_MRcvBuffer+1
02C6 3982 std y+1,R3
02C8 2882 std y+0,R2
02CA 20910E01 lds R18,_MSndBuffer
02CE 30910F01 lds R19,_MSndBuffer+1
02D2 0EE1 ldi R16,30
02D4 F9D6 xcall _PcdSingleResponseCmd
02D6 202E mov R2,R16
02D8 3324 clr R3
02DA 3B86 std y+11,R3
02DC 2A86 std y+10,R2
02DE .dbline 151
02DE ; MSndBuffer,
02DE ; MRcvBuffer,
02DE ; &MInfo);
02DE ; if (nbits == 7)
02DE 8985 ldd R24,y+9
02E0 8730 cpi R24,7
02E2 09F0 breq X6
02E4 41C0 xjmp L47
02E6 X6:
02E6 .dbline 152
02E6 ; {
02E6 .dbline 153
02E6 ; dummyShift1 = 0x00;
02E6 4427 clr R20
02E8 .dbline 154
02E8 ; for (i = 0; i < MInfo.nBytesReceived; i++)
02E8 CC24 clr R12
02EA 1FC0 xjmp L52
02EC L49:
02EC .dbline 155
02EC .dbline 156
02EC 20900C01 lds R2,_MRcvBuffer
02F0 30900D01 lds R3,_MRcvBuffer+1
02F4 EC2D mov R30,R12
02F6 FF27 clr R31
02F8 E20D add R30,R2
02FA F31D adc R31,R3
02FC E080 ldd R14,z+0
02FE .dbline 157
02FE 4C2C mov R4,R12
0300 5524 clr R5
0302 420C add R4,R2
0304 531C adc R5,R3
0306 17E0 ldi R17,7
0308 1C19 sub R17,R12
030A F201 movw R30,R4
030C 0081 ldd R16,z+0
030E 0E940000 xcall lsl8
0312 202E mov R2,R16
0314 1C2D mov R17,R12
0316 1F5F subi R17,255 ; addi 1
0318 042F mov R16,R20
031A 0E940000 xcall lsr8
031E 302E mov R3,R16
0320 3228 or R3,R2
0322 F201 movw R30,R4
0324 3082 std z+0,R3
0326 .dbline 158
0326 4E2D mov R20,R14
0328 .dbline 159
0328 L50:
0328 .dbline 154
0328 C394 inc R12
032A L52:
032A .dbline 154
032A 20900701 lds R2,_MInfo+5
032E C214 cp R12,R2
0330 E8F2 brlo L49
0332 .dbline 160
0332 ; {
0332 ; dummyShift2 = MRcvBuffer[i];
0332 ; MRcvBuffer[i] = (dummyShift1 >> (i+1)) | (MRcvBuffer[i] << (7-i));
0332 ; dummyShift1 = dummyShift2;
0332 ; }
0332 ; MInfo.nBitsReceived -= MInfo.nBytesReceived; // subtract received parity bits
0332 3324 clr R3
0334 40900801 lds R4,_MInfo+6
0338 50900901 lds R5,_MInfo+6+1
033C 4218 sub R4,R2
033E 5308 sbc R5,R3
0340 50920901 sts _MInfo+6+1,R5
0344 40920801 sts _MInfo+6,R4
0348 .dbline 161
0348 ; if ( MInfo.collPos ) MInfo.collPos += 7 - (MInfo.collPos + 6) / 9;
0348 20900B01 lds R2,_MInfo+9
034C 2220 tst R2
034E 61F0 breq L56
0350 .dbline 161
0350 19E0 ldi R17,9
0352 022D mov R16,R2
0354 0A5F subi R16,250 ; addi 6
0356 0E940000 xcall div8u
035A 87E0 ldi R24,7
035C 801B sub R24,R16
035E 20900B01 lds R2,_MInfo+9
0362 280E add R2,R24
0364 20920B01 sts _MInfo+9,R2
0368 L56:
0368 .dbline 162
0368 ; }
0368 L47:
0368 .dbline 163
0368 ; if ( status == MI_OK || status == MI_COLLERR) // no other occured
0368 0A84 ldd R0,y+10
036A 1B84 ldd R1,y+11
036C 0020 tst R0
036E 11F4 brne X2
0370 1120 tst R1
0372 39F0 breq L63
0374 X2:
0374 8A85 ldd R24,y+10
0376 9B85 ldd R25,y+11
0378 883E cpi R24,232
037A EFEF ldi R30,255
037C 9E07 cpc R25,R30
037E 09F0 breq X7
0380 78C0 xjmp L61
0382 X7:
0382 L63:
0382 .dbline 164
0382 ; {
0382 .dbline 165
0382 ; if ( MInfo.nBitsReceived != (40 - bcnt) ) // not 5 bytes answered
0382 288C ldd R2,y+24
0384 3324 clr R3
0386 88E2 ldi R24,40
0388 90E0 ldi R25,0
038A 8219 sub R24,R2
038C 9309 sbc R25,R3
038E 20900801 lds R2,_MInfo+6
0392 30900901 lds R3,_MInfo+6+1
0396 2816 cp R2,R24
0398 3906 cpc R3,R25
039A 29F0 breq L64
039C .dbline 166
039C ; {
039C .dbline 167
039C ; status = MI_BITCOUNTERR;
039C 85EF ldi R24,-11
039E 9FEF ldi R25,-1
03A0 9B87 std y+11,R25
03A2 8A87 std y+10,R24
03A4 .dbline 168
03A4 ; }
03A4 66C0 xjmp L65
03A6 L64:
03A6 .dbline 170
03A6 ; else
03A6 ; {
03A6 .dbline 171
03A6 ; byteOffset = 0;
03A6 6627 clr R22
03A8 .dbline 172
03A8 ; if ( nbits != 0 ) // last byte was not complete
03A8 0984 ldd R0,y+9
03AA 0020 tst R0
03AC A9F0 breq L67
03AE .dbline 173
03AE ; {
03AE .dbline 174
03AE ; snr_in[nbytes - 1] = snr_in[nbytes - 1] | MRcvBuffer[0];
03AE CE01 movw R24,R28
03B0 0396 adiw R24,3
03B2 E885 ldd R30,y+8
03B4 FF27 clr R31
03B6 E80F add R30,R24
03B8 F91F adc R31,R25
03BA 2080 ldd R2,z+0
03BC E0910C01 lds R30,_MRcvBuffer
03C0 F0910D01 lds R31,_MRcvBuffer+1
03C4 3080 ldd R3,z+0
03C6 2328 or R2,R3
03C8 CE01 movw R24,R28
03CA 0396 adiw R24,3
03CC E885 ldd R30,y+8
03CE FF27 clr R31
03D0 E80F add R30,R24
03D2 F91F adc R31,R25
03D4 2082 std z+0,R2
03D6 .dbline 175
03D6 ; byteOffset = 1;
03D6 61E0 ldi R22,1
03D8 .dbline 176
03D8 ; }
03D8 L67:
03D8 .dbline 177
03D8 ; for ( i =0; i < (4 - nbytes); i++)
03D8 CC24 clr R12
03DA 19C0 xjmp L74
03DC L71:
03DC .dbline 178
03DC .dbline 179
03DC 262E mov R2,R22
03DE 3324 clr R3
03E0 EC2D mov R30,R12
03E2 FF27 clr R31
03E4 E20D add R30,R2
03E6 F31D adc R31,R3
03E8 20900C01 lds R2,_MRcvBuffer
03EC 30900D01 lds R3,_MRcvBuffer+1
03F0 E20D add R30,R2
03F2 F31D adc R31,R3
03F4 2080 ldd R2,z+0
03F6 3C2C mov R3,R12
03F8 4424 clr R4
03FA E885 ldd R30,y+8
03FC FF27 clr R31
03FE E30D add R30,R3
0400 F41D adc R31,R4
0402 CE01 movw R24,R28
0404 0496 adiw R24,4
0406 E80F add R30,R24
0408 F91F adc R31,R25
040A 2082 std z+0,R2
040C .dbline 180
040C L72:
040C .dbline 177
040C C394 inc R12
040E L74:
040E .dbline 177
040E 84E0 ldi R24,4
0410 0884 ldd R0,y+8
0412 8019 sub R24,R0
0414 C816 cp R12,R24
0416 10F3 brlo L71
0418 .dbline 181
0418 ; {
0418 ; snr_in[nbytes + i] = MRcvBuffer[i + byteOffset];
0418 ; }
0418 ; if (status != MI_COLLERR ) // no error and no collision
0418 8A85 ldd R24,y+10
041A 9B85 ldd R25,y+11
041C 883E cpi R24,232
041E EFEF ldi R30,255
0420 9E07 cpc R25,R30
0422 E1F0 breq L75
0424 .dbline 182
0424 ; {
0424 .dbline 183
0424 ; snr_crc = snr_in[0] ^ snr_in[1] ^ snr_in[2] ^ snr_in[3];
0424 2D80 ldd R2,y+5
0426 4C81 ldd R20,y+4
0428 4225 eor R20,R2
042A 2E80 ldd R2,y+6
042C 4225 eor R20,R2
042E 2F80 ldd R2,y+7
0430 4225 eor R20,R2
0432 .dbline 184
0432 ; snr_check = MRcvBuffer[MInfo.nBytesReceived - 1];
0432 20900C01 lds R2,_MRcvBuffer
0436 30900D01 lds R3,_MRcvBuffer+1
043A E0910701 lds R30,_MInfo+5
043E FF27 clr R31
0440 3197 sbiw R30,1
0442 E20D add R30,R2
0444 F31D adc R31,R3
0446 E080 ldd R14,z+0
0448 .dbline 185
0448 ; if (snr_crc != snr_check)
0448 4E15 cp R20,R14
044A 29F0 breq L81
044C .dbline 186
044C ; {
044C .dbline 187
044C ; status = MI_SERNRERR;
044C 88EF ldi R24,-8
044E 9FEF ldi R25,-1
0450 9B87 std y+11,R25
0452 8A87 std y+10,R24
0454 .dbline 188
0454 ; }
0454 0EC0 xjmp L76
0456 L81:
0456 .dbline 190
0456 ; else
0456 ; {
0456 .dbline 191
0456 ; complete = 1;
0456 AA24 clr R10
0458 A394 inc R10
045A .dbline 192
045A ; }
045A .dbline 193
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -