?? modbus16.lis
字號:
0264 .dbsym r addr 20 c
0264 .dbsym r crcData 20 i
0264 .dbsym r byteCount 10 c
0264 .dbsym r tempAddr 12 c
0264 .dbsym l tempData 0 i
0264 .dbsym r i 22 i
0264 .dbend
0264 .dbfunc e forceSingleCoil _forceSingleCoil fV
0264 ; tempData -> R22,R23
0264 ; tempAddr -> R20
0264 ; addr -> R22
0264 ; onOff -> R10
0264 ; i -> R20
.even
0264 _forceSingleCoil::
0264 0E940000 xcall push_gset3
0268 .dbline -1
0268 .dbline 207
0268 ;
0268 ;
0268 ; //強制單個線圈
0268 ; void forceSingleCoil(void)
0268 ; {
0268 .dbline 216
0268 ; uint8 addr;
0268 ; uint8 tempAddr;
0268 ; uint16 tempData;
0268 ; uint8 onOff;
0268 ; uint8 i;
0268 ;
0268 ; //addr = (receBuf[2]<<8) + receBuf[3];
0268 ; //tempAddr = addr & 0xfff;
0268 ; addr = receBuf[3];
0268 60910600 lds R22,_receBuf+3
026C .dbline 217
026C ; tempAddr = addr;
026C 462F mov R20,R22
026E .dbline 220
026E ;
026E ; //onOff = (receBuf[4]<<8) + receBuf[5];
026E ; onOff = receBuf[4];
026E A0900700 lds R10,_receBuf+4
0272 .dbline 223
0272 ;
0272 ; //if(onOff == 0xff00)
0272 ; if(onOff == 0xff)
0272 8A2D mov R24,R10
0274 8F3F cpi R24,255
0276 19F4 brne L39
0278 .dbline 224
0278 ; { //設為ON
0278 .dbline 225
0278 ; tempData = 1;
0278 61E0 ldi R22,1
027A 70E0 ldi R23,0
027C .dbline 226
027C ; }
027C 04C0 xjmp L40
027E L39:
027E .dbline 228
027E ; //else if(onOff == 0x0000)
027E ; else if(onOff == 0x00)
027E AA20 tst R10
0280 11F4 brne L41
0282 .dbline 229
0282 ; { //設為OFF
0282 .dbline 230
0282 ; tempData = 0;
0282 6627 clr R22
0284 7727 clr R23
0286 .dbline 231
0286 ; }
0286 L41:
0286 L40:
0286 .dbline 233
0286 ;
0286 ; setCoilVal(tempAddr,tempData);
0286 9B01 movw R18,R22
0288 042F mov R16,R20
028A 1127 clr R17
028C 7FD1 xcall _setCoilVal
028E .dbline 235
028E ;
028E ; for(i=0;i<receCount;i++)
028E 4427 clr R20
0290 0FC0 xjmp L46
0292 L43:
0292 .dbline 236
0292 .dbline 237
0292 80E0 ldi R24,<_receBuf
0294 90E0 ldi R25,>_receBuf
0296 E42F mov R30,R20
0298 FF27 clr R31
029A E80F add R30,R24
029C F91F adc R31,R25
029E 2080 ldd R2,z+0
02A0 80E0 ldi R24,<_sendBuf
02A2 90E0 ldi R25,>_sendBuf
02A4 E42F mov R30,R20
02A6 FF27 clr R31
02A8 E80F add R30,R24
02AA F91F adc R31,R25
02AC 2082 std z+0,R2
02AE .dbline 238
02AE L44:
02AE .dbline 235
02AE 4395 inc R20
02B0 L46:
02B0 .dbline 235
02B0 20904400 lds R2,_receCount
02B4 4215 cp R20,R2
02B6 68F3 brlo L43
02B8 .dbline 239
02B8 ; {
02B8 ; sendBuf[i] = receBuf[i];
02B8 ; }
02B8 ; sendCount = receCount;
02B8 20924500 sts _sendCount,R2
02BC .dbline 240
02BC ; beginSend();
02BC E5DE xcall _beginSend
02BE .dbline -2
02BE .dbline 241
02BE ; }//void forceSingleCoil(void)
02BE L36:
02BE 0E940000 xcall pop_gset3
02C2 .dbline 0 ; func end
02C2 0895 ret
02C4 .dbsym r tempData 22 i
02C4 .dbsym r tempAddr 20 c
02C4 .dbsym r addr 22 c
02C4 .dbsym r onOff 10 c
02C4 .dbsym r i 20 c
02C4 .dbend
02C4 .dbfunc e presetMultipleRegisters _presetMultipleRegisters fV
02C4 ; finsh -> <dead>
02C4 ; byteCount -> R22
02C4 ; crcData -> R22,R23
02C4 ; addr -> y+0
02C4 ; setCount -> R20
02C4 ; tempData -> R14,R15
02C4 ; tempAddr -> R10
02C4 ; i -> R12
.even
02C4 _presetMultipleRegisters::
02C4 0E940000 xcall push_gset5
02C8 2197 sbiw R28,1
02CA .dbline -1
02CA .dbline 246
02CA ;
02CA ;
02CA ; //設置多個寄存器
02CA ; void presetMultipleRegisters(void)
02CA ; {
02CA .dbline 258
02CA ; uint8 addr;
02CA ; uint8 tempAddr;
02CA ; uint8 byteCount;
02CA ; uint8 setCount;
02CA ; uint16 crcData;
02CA ; uint16 tempData;
02CA ; uint8 finsh; //為1時完成 為0時出錯
02CA ; uint8 i;
02CA ;
02CA ; //addr = (receBuf[2]<<8) + receBuf[3];
02CA ; //tempAddr = addr & 0xfff;
02CA ; addr = receBuf[3];
02CA 20900600 lds R2,_receBuf+3
02CE 2882 std y+0,R2
02D0 .dbline 259
02D0 ; tempAddr = addr;
02D0 A22C mov R10,R2
02D2 .dbline 262
02D2 ;
02D2 ; //setCount = (receBuf[4]<<8) + receBuf[5];
02D2 ; setCount = receBuf[5];
02D2 40910800 lds R20,_receBuf+5
02D6 .dbline 263
02D6 ; byteCount = receBuf[6];
02D6 60910900 lds R22,_receBuf+6
02DA .dbline 265
02DA ;
02DA ; for(i=0;i<setCount;i++,tempAddr++)
02DA CC24 clr R12
02DC 16C0 xjmp L54
02DE L51:
02DE .dbline 266
02DE .dbline 267
02DE 82E0 ldi R24,2
02E0 8C9D mul R24,R12
02E2 80E0 ldi R24,<_receBuf+8
02E4 90E0 ldi R25,>_receBuf+8
02E6 F001 movw R30,R0
02E8 E80F add R30,R24
02EA F91F adc R31,R25
02EC 2080 ldd R2,z+0
02EE 80E0 ldi R24,<_receBuf+7
02F0 90E0 ldi R25,>_receBuf+7
02F2 F001 movw R30,R0
02F4 E80F add R30,R24
02F6 F91F adc R31,R25
02F8 3080 ldd R3,z+0
02FA E22C mov R14,R2
02FC F32C mov R15,R3
02FE .dbline 269
02FE 9701 movw R18,R14
0300 0A2D mov R16,R10
0302 1127 clr R17
0304 8ED1 xcall _setRegisterVal
0306 .dbline 270
0306 L52:
0306 .dbline 265
0306 C394 inc R12
0308 A394 inc R10
030A L54:
030A .dbline 265
030A C416 cp R12,R20
030C 40F3 brlo L51
030E .dbline 272
030E ; {
030E ; tempData = (receBuf[i*2+7]<<8) + receBuf[i*2+8];
030E ;
030E ; setRegisterVal(tempAddr,tempData);
030E ; }
030E ;
030E ; sendBuf[0] = localAddr;
030E 20900000 lds R2,_localAddr
0312 20922300 sts _sendBuf,R2
0316 .dbline 273
0316 ; sendBuf[1] = 16;
0316 80E1 ldi R24,16
0318 80932400 sts _sendBuf+1,R24
031C .dbline 274
031C ; sendBuf[2] = addr >> 8;
031C 2880 ldd R2,y+0
031E 3324 clr R3
0320 232C mov R2,R3
0322 3324 clr R3
0324 27FC sbrc R2,7
0326 3094 com R3
0328 20922500 sts _sendBuf+2,R2
032C .dbline 275
032C ; sendBuf[3] = addr & 0xff;
032C 8881 ldd R24,y+0
032E 8F7F andi R24,255
0330 80932600 sts _sendBuf+3,R24
0334 .dbline 276
0334 ; sendBuf[4] = setCount >> 8;
0334 242E mov R2,R20
0336 3324 clr R3
0338 232C mov R2,R3
033A 3324 clr R3
033C 27FC sbrc R2,7
033E 3094 com R3
0340 20922700 sts _sendBuf+4,R2
0344 .dbline 277
0344 ; sendBuf[5] = setCount & 0xff;
0344 842F mov R24,R20
0346 8F7F andi R24,255
0348 80932800 sts _sendBuf+5,R24
034C .dbline 278
034C ; crcData = crc16(sendBuf,6);
034C 26E0 ldi R18,6
034E 30E0 ldi R19,0
0350 00E0 ldi R16,<_sendBuf
0352 10E0 ldi R17,>_sendBuf
0354 55DE xcall _crc16
0356 B801 movw R22,R16
0358 .dbline 279
0358 ; sendBuf[6] = crcData >> 8;
0358 1B01 movw R2,R22
035A 232C mov R2,R3
035C 3324 clr R3
035E 20922900 sts _sendBuf+6,R2
0362 .dbline 280
0362 ; sendBuf[7] = crcData & 0xff;
0362 CB01 movw R24,R22
0364 9070 andi R25,0
0366 80932A00 sts _sendBuf+7,R24
036A .dbline 281
036A ; sendCount = 8;
036A 88E0 ldi R24,8
036C 80934500 sts _sendCount,R24
0370 .dbline 282
0370 ; beginSend();
0370 8BDE xcall _beginSend
0372 .dbline -2
0372 .dbline 283
0372 ; }//void presetMultipleRegisters(void)
0372 L47:
0372 2196 adiw R28,1
0374 0E940000 xcall pop_gset5
0378 .dbline 0 ; func end
0378 0895 ret
037A .dbsym l finsh 1 c
037A .dbsym r byteCount 22 c
037A .dbsym r crcData 22 i
037A .dbsym l addr 0 c
037A .dbsym r setCount 20 c
037A .dbsym r tempData 14 i
037A .dbsym r tempAddr 10 c
037A .dbsym r i 12 c
037A .dbend
037A .dbfunc e checkComm0Modbus _checkComm0Modbus fV
037A ; crcData -> R20,R21
037A ; tempData -> R22,R23
.even
037A _checkComm0Modbus::
037A 0E940000 xcall push_gset2
037E .dbline -1
037E .dbline 289
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -