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