📄 modbus.lis
字号:
0266 A02C mov R10,R0
0268 .dbline 237
0268 ;
0268 ; for(i=0;i<byteCount;i+=2,tempAddr++)
0268 6627 clr R22
026A 7727 clr R23
026C 1BC0 rjmp L64
026E L61:
026E .dbline 238
026E .dbline 239
026E 9E01 movw R18,R28
0270 8601 movw R16,R12
0272 48D0 rcall _getRegisterVal
0274 .dbline 240
0274 80E0 ldi R24,<_sendBuf
0276 90E0 ldi R25,>_sendBuf
0278 FB01 movw R30,R22
027A 3396 adiw R30,3
027C E80F add R30,R24
027E F91F adc R31,R25
0280 2880 ldd R2,y+0
0282 3980 ldd R3,y+1
0284 232C mov R2,R3
0286 3324 clr R3
0288 2082 std z+0,R2
028A .dbline 241
028A FB01 movw R30,R22
028C 3496 adiw R30,4
028E E80F add R30,R24
0290 F91F adc R31,R25
0292 8881 ldd R24,y+0
0294 9981 ldd R25,y+1
0296 9070 andi R25,0
0298 8083 std z+0,R24
029A .dbline 242
029A L62:
029A .dbline 237
029A 6E5F subi R22,254 ; offset = 2
029C 7F4F sbci R23,255
029E C601 movw R24,R12
02A0 0196 adiw R24,1
02A2 6C01 movw R12,R24
02A4 L64:
02A4 .dbline 237
02A4 2A2C mov R2,R10
02A6 3324 clr R3
02A8 6215 cp R22,R2
02AA 7305 cpc R23,R3
02AC 00F3 brlo L61
02AE .dbline 244
02AE ; {
02AE ; getRegisterVal(tempAddr,&tempData);
02AE ; sendBuf[i+3] = tempData >> 8;
02AE ; sendBuf[i+4] = tempData & 0xff;
02AE ; }
02AE ;
02AE ; sendBuf[0] = 0xff;
02AE 8FEF ldi R24,255
02B0 80931B00 sts _sendBuf,R24
02B4 .dbline 245
02B4 ; sendBuf[1] = 3;
02B4 83E0 ldi R24,3
02B6 80931C00 sts _sendBuf+1,R24
02BA .dbline 246
02BA ; sendBuf[2] = byteCount;
02BA A0921D00 sts _sendBuf+2,R10
02BE .dbline 247
02BE ; byteCount += 3;
02BE 822D mov R24,R2
02C0 8D5F subi R24,253 ; addi 3
02C2 A82E mov R10,R24
02C4 .dbline 248
02C4 ; crcData = CRC16(sendBuf,byteCount);
02C4 282F mov R18,R24
02C6 3327 clr R19
02C8 00E0 ldi R16,<_sendBuf
02CA 10E0 ldi R17,>_sendBuf
02CC 7ADF rcall _CRC16
02CE A801 movw R20,R16
02D0 .dbline 249
02D0 ; sendBuf[byteCount] = crcData >> 8;
02D0 80E0 ldi R24,<_sendBuf
02D2 90E0 ldi R25,>_sendBuf
02D4 EA2D mov R30,R10
02D6 FF27 clr R31
02D8 E80F add R30,R24
02DA F91F adc R31,R25
02DC 1A01 movw R2,R20
02DE 232C mov R2,R3
02E0 3324 clr R3
02E2 2082 std z+0,R2
02E4 .dbline 250
02E4 ; byteCount++;
02E4 A394 inc R10
02E6 .dbline 251
02E6 ; sendBuf[byteCount] = crcData & 0xff;
02E6 EA2D mov R30,R10
02E8 FF27 clr R31
02EA E80F add R30,R24
02EC F91F adc R31,R25
02EE CA01 movw R24,R20
02F0 9070 andi R25,0
02F2 8083 std z+0,R24
02F4 .dbline 253
02F4 ; //----------
02F4 ; sendCount = byteCount + 1;
02F4 8A2D mov R24,R10
02F6 8F5F subi R24,255 ; addi 1
02F8 80932F00 sts _sendCount,R24
02FC .dbline 256
02FC ; // sendCount = 7;
02FC ; //----------
02FC ; beginSend();
02FC 93DE rcall _beginSend
02FE .dbline -2
02FE L56:
02FE 2296 adiw R28,2
0300 00D0 rcall pop_gset4
0302 .dbline 0 ; func end
0302 0895 ret
0304 .dbsym l finsh 1 c
0304 .dbsym l result 1 i
0304 .dbsym r readCount 20 c
0304 .dbsym r addr 20 i
0304 .dbsym r crcData 20 i
0304 .dbsym r byteCount 10 c
0304 .dbsym r tempAddr 12 i
0304 .dbsym l tempData 0 i
0304 .dbsym r i 22 i
0304 .dbend
0304 .dbfunc e getRegisterVal _getRegisterVal fi
.area func_lit(rom, con, rel)
0000 L87:
0000 BD01 .word `L69
0002 9E01 .word `L71
0004 A601 .word `L72
0006 AE01 .word `L73
0008 B601 .word `L74
000A BD01 .word `L69
000C BD01 .word `L69
000E BD01 .word `L69
0010 BD01 .word `L69
0012 BD01 .word `L69
0014 BD01 .word `L69
0016 BD01 .word `L69
0018 BD01 .word `L69
001A BD01 .word `L69
001C BD01 .word `L69
001E BD01 .word `L69
0020 BD01 .word `L69
.area text(rom, con, rel)
0304 .dbfile D:\ICCTES~1\1128\modbus.c
0304 ; tempAddr -> <dead>
0304 ; result -> R20,R21
0304 ; p_tempData -> R22,R23
0304 ; addr -> R10,R11
.even
0304 _getRegisterVal::
0304 00D0 rcall push_gset3
0306 B901 movw R22,R18
0308 5801 movw R10,R16
030A .dbline -1
030A .dbline 262
030A ; }//void readRegisters(void)
030A ;
030A ;
030A ; //取寄存器值 返回0表示成功
030A ; uint getRegisterVal(uint addr,uint *p_tempData)
030A ; {
030A .dbline 263
030A ; uint result = 0;
030A 4427 clr R20
030C 5527 clr R21
030E .dbline 267
030E ; uint tempAddr;
030E ;
030E ; // tempAddr = addr & 0xfff;
030E ; addr = addr - 40000;
030E C501 movw R24,R10
0310 8054 subi R24,64
0312 9C49 sbci R25,156
0314 5C01 movw R10,R24
0316 .dbline 268
0316 ; switch(addr) //(tempAddr) // & 0xff)
0316 80E1 ldi R24,16
0318 90E0 ldi R25,0
031A 8A15 cp R24,R10
031C 9B05 cpc R25,R11
031E 0CF4 brge X12
0320 2CC0 rjmp L69
0322 X12:
0322 02E0 ldi R16,2
0324 10E0 ldi R17,0
0326 9501 movw R18,R10
0328 00D0 rcall empy16s
032A F801 movw R30,R16
032C 80E0 ldi R24,<L87
032E 90E0 ldi R25,>L87
0330 E80F add R30,R24
0332 F91F adc R31,R25
0334 0590 lpm R0,Z+
0336 1490 lpm R1,Z
0338 F001 movw R30,R0
033A 0994 ijmp
033C X11:
033C .dbline 269
033C ; {
033C .dbline 271
033C ; case 0:
033C ; break;
033C L71:
033C .dbline 273
033C ; case 1:
033C ; *p_tempData = testVarAnalog; // 模拟量当前值.
033C 20900900 lds R2,_testVarAnalog
0340 30900A00 lds R3,_testVarAnalog+1
0344 FB01 movw R30,R22
0346 3182 std z+1,R3
0348 2082 std z+0,R2
034A .dbline 274
034A ; break;
034A 17C0 rjmp L69
034C L72:
034C .dbline 276
034C ; case 2:
034C ; *p_tempData = testVarPoint; // 小数点位置.
034C 20900700 lds R2,_testVarPoint
0350 30900800 lds R3,_testVarPoint+1
0354 FB01 movw R30,R22
0356 3182 std z+1,R3
0358 2082 std z+0,R2
035A .dbline 277
035A ; break;
035A 0FC0 rjmp L69
035C L73:
035C .dbline 279
035C ; case 3:
035C ; *p_tempData = testVarInputUp; // 上限.
035C 20900500 lds R2,_testVarInputUp
0360 30900600 lds R3,_testVarInputUp+1
0364 FB01 movw R30,R22
0366 3182 std z+1,R3
0368 2082 std z+0,R2
036A .dbline 280
036A ; break;
036A 07C0 rjmp L69
036C L74:
036C .dbline 282
036C ; case 4:
036C ; *p_tempData = testVarInputDown;// 下限.
036C 20900300 lds R2,_testVarInputDown
0370 30900400 lds R3,_testVarInputDown+1
0374 FB01 movw R30,R22
0376 3182 std z+1,R3
0378 2082 std z+0,R2
037A .dbline 283
037A ; break;
037A .dbline 285
037A ; case 5:
037A ; break;
037A .dbline 287
037A ; case 6:
037A ; break;
037A .dbline 289
037A ; case 7:
037A ; break;
037A .dbline 291
037A ; case 8:
037A ; break;
037A .dbline 293
037A ; case 9:
037A ; break;
037A .dbline 295
037A ; case 10:
037A ; break;
037A .dbline 297
037A ; case 11:
037A ; break;
037A .dbline 299
037A ; case 12:
037A ; break;
037A .dbline 301
037A ; case 13:
037A ; break;
037A .dbline 303
037A ; case 14:
037A ; break;
037A .dbline 305
037A ; case 15:
037A ; break;
037A .dbline 308
037A ; case 16:
037A ; //*tempData = testRegister;
037A ; break;
037A .dbline 310
037A ; default:
037A ; break;
037A L69:
037A .dbline 312
037A ; }
037A ; return result;
037A 8A01 movw R16,R20
037C .dbline -2
037C L67:
037C 00D0 rcall pop_gset3
037E .dbline 0 ; func end
037E 0895 ret
0380 .dbsym l tempAddr 1 i
0380 .dbsym r result 20 i
0380 .dbsym r p_tempData 22 pi
0380 .dbsym r addr 10 i
0380 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\ICCTES~1\1128\modbus.c
0000 _GetKeyValue::
0000 .blkb 1
0001 .dbsym e GetKeyValue _GetKeyValue c
0001 _crc_result::
0001 .blkb 2
0003 .dbsym e crc_result _crc_result i
0003 _testVarInputDown::
0003 .blkb 2
0005 .dbsym e testVarInputDown _testVarInputDown i
0005 _testVarInputUp::
0005 .blkb 2
0007 .dbsym e testVarInputUp _testVarInputUp i
0007 _testVarPoint::
0007 .blkb 2
0009 .dbsym e testVarPoint _testVarPoint i
0009 _testVarAnalog::
0009 .blkb 2
000B .dbsym e testVarAnalog _testVarAnalog i
000B _receBuf::
000B .blkb 16
001B .dbsym e receBuf _receBuf A[16:16]c
001B _sendBuf::
001B .blkb 16
002B .dbsym e sendBuf _sendBuf A[16:16]c
002B _receTimeOut::
002B .blkb 1
002C .dbsym e receTimeOut _receTimeOut c
002C _checkoutError::
002C .blkb 1
002D .dbsym e checkoutError _checkoutError c
002D _GetCntTemp::
002D .blkb 1
002E .dbsym e GetCntTemp _GetCntTemp c
002E _receCount::
002E .blkb 1
002F .dbsym e receCount _receCount c
002F _sendCount::
002F .blkb 1
0030 .dbsym e sendCount _sendCount c
0030 _sendPosi::
0030 .blkb 1
0031 .dbsym e sendPosi _sendPosi c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -