⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modbus.lis

📁 使用Atmel88芯片实现RS485通讯,Modbus通讯协议.在IVR_AVR环境中编译,文件完整.
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -