📄 modbus16.s
字号:
cpc R17,R5
brne L98
.dbline 345
; {
.dbline 347
; //forceMultipleCoils();
; }
L98:
.dbline 348
; }
L96:
.dbline 349
; receCount = 0;
clr R2
sts _receCount,R2
.dbline 350
; checkoutError = 0;
sts _checkoutError,R2
.dbline 351
; UCSRB |= BIT(7);
sbi 0xa,7
.dbline 352
; }
.dbline 353
; break;
xjmp L68
L100:
.dbline 356
;
; case 16://设置多个寄存器
; tempData = (receBuf[4]<<8) + receBuf[5];
lds R2,_receBuf+5
lds R3,_receBuf+4
mov R22,R2
mov R23,R3
.dbline 357
; tempData = tempData * 2; //数据个数
ldi R16,2
ldi R17,0
movw R18,R22
xcall empy16s
movw R22,R16
.dbline 358
; tempData += 9;
subi R22,247 ; offset = 9
sbci R23,255
.dbline 359
; if(receCount >= tempData)
lds R2,_receCount
clr R3
cp R2,R22
cpc R3,R23
brlo L68
.dbline 360
; {//应该关闭接收中断
.dbline 361
; UCSRB &= ~BIT(7);
cbi 0xa,7
.dbline 362
; if(receBuf[0]==localAddr && checkoutError==0)
lds R2,_localAddr
lds R3,_receBuf
cp R3,R2
brne L105
lds R2,_checkoutError
tst R2
brne L105
.dbline 363
; {
.dbline 364
; crcData = crc16(receBuf,tempData-2);
movw R18,R22
subi R18,2
sbci R19,0
ldi R16,<_receBuf
ldi R17,>_receBuf
xcall _crc16
movw R20,R16
.dbline 365
; if(crcData == (receBuf[tempData-2]<<8)+ receBuf[tempData-1])
ldi R24,<_receBuf
ldi R25,>_receBuf
movw R30,R22
sbiw R30,1
add R30,R24
adc R31,R25
ldd R2,z+0
movw R30,R22
sbiw R30,2
add R30,R24
adc R31,R25
ldd R3,z+0
mov R4,R2
mov R5,R3
cp R16,R4
cpc R17,R5
brne L107
.dbline 366
; {
.dbline 367
; presetMultipleRegisters();
xcall _presetMultipleRegisters
.dbline 368
; }
L107:
.dbline 369
; }
L105:
.dbline 370
; receCount = 0;
clr R2
sts _receCount,R2
.dbline 371
; checkoutError = 0;
sts _checkoutError,R2
.dbline 372
; UCSRB |= BIT(7);
sbi 0xa,7
.dbline 373
; }
.dbline 374
; break;
.dbline 377
;
; default:
; break;
L68:
.dbline 379
L65:
.dbline -2
.dbline 380
; }
; }
; }//void checkComm0(void)
L64:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r crcData 20 i
.dbsym r tempData 22 i
.dbend
.dbfunc e getCoilVal _getCoilVal fi
.area func_lit(rom, con, rel)
L131:
.word `L112
.word `L115
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.word `L112
.area text(rom, con, rel)
.dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\modbus16.c
; result -> R20,R21
; tempData -> R22,R23
; addr -> R10,R11
.even
_getCoilVal::
xcall push_gset3
movw R22,R18
movw R10,R16
.dbline -1
.dbline 384
;
; //取线圈状态 返回0表示成功
; uint16 getCoilVal(uint16 addr,uint16 *tempData)
; {
.dbline 385
; uint16 result = 0;
clr R20
clr R21
.dbline 387
;
; switch(addr & 0xff)
movw R24,R10
andi R25,0
movw R10,R24
ldi R24,16
ldi R25,0
cp R24,R10
cpc R25,R11
brlt L112
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
movw R30,R16
ldi R24,<L131
ldi R25,>L131
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X11:
.dbline 388
; {
.dbline 390
; case 0:
; break;
L115:
.dbline 392
; case 1:
; *tempData = testCoil;
lds R2,_testCoil
clr R3
movw R30,R22
std z+0,R2
std z+1,R3
.dbline 393
; break;
.dbline 395
; case 2:
; break;
.dbline 397
; case 3:
; break;
.dbline 399
; case 4:
; break;
.dbline 401
; case 5:
; break;
.dbline 403
; case 6:
; break;
.dbline 405
; case 7:
; break;
.dbline 407
; case 8:
; break;
.dbline 409
; case 9:
; break;
.dbline 411
; case 10:
; break;
.dbline 413
; case 11:
; break;
.dbline 415
; case 12:
; break;
.dbline 417
; case 13:
; break;
.dbline 419
; case 14:
; break;
.dbline 421
; case 15:
; break;
.dbline 423
; case 16:
; break;
.dbline 425
; default:
; break;
L112:
.dbline 428
; }
;
; return result;
mov R16,R20
mov R17,R21
.dbline -2
L110:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r result 20 i
.dbsym r tempData 22 pi
.dbsym r addr 10 i
.dbend
.dbfunc e setCoilVal _setCoilVal fi
.area func_lit(rom, con, rel)
L153:
.word `L134
.word `L137
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.word `L134
.area text(rom, con, rel)
.dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\modbus16.c
; result -> R20,R21
; tempData -> R22,R23
; addr -> R10,R11
.even
_setCoilVal::
xcall push_gset3
movw R22,R18
movw R10,R16
.dbline -1
.dbline 434
; }//uint16 getCoilVal(uint16 addr,uint16 *data)
;
;
; //设定线圈状态 返回0表示成功
; uint16 setCoilVal(uint16 addr,uint16 tempData)
; {
.dbline 435
; uint16 result = 0;
clr R20
clr R21
.dbline 437
;
; switch(addr & 0xff)
movw R24,R10
andi R25,0
movw R10,R24
ldi R24,16
ldi R25,0
cp R24,R10
cpc R25,R11
brlt L134
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
movw R30,R16
ldi R24,<L153
ldi R25,>L153
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X12:
.dbline 438
; {
.dbline 440
; case 0:
; break;
L137:
.dbline 442
; case 1:
; testCoil = tempData;
sts _testCoil,R22
.dbline 443
; break;
.dbline 445
; case 2:
; break;
.dbline 447
; case 3:
; break;
.dbline 449
; case 4:
; break;
.dbline 451
; case 5:
; break;
.dbline 453
; case 6:
; break;
.dbline 455
; case 7:
; break;
.dbline 457
; case 8:
; break;
.dbline 459
; case 9:
; break;
.dbline 461
; case 10:
; break;
.dbline 463
; case 11:
; break;
.dbline 465
; case 12:
; break;
.dbline 467
; case 13:
; break;
.dbline 469
; case 14:
; break;
.dbline 471
; case 15:
; break;
.dbline 473
; case 16:
; break;
.dbline 475
; default:
; break;
L134:
.dbline 479
; }
;
;
; return result;
mov R16,R20
mov R17,R21
.dbline -2
L132:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r result 20 i
.dbsym r tempData 22 i
.dbsym r addr 10 i
.dbend
.dbfunc e getRegisterVal _getRegisterVal fi
.area func_lit(rom, con, rel)
L175:
.word `L158
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.word `L156
.area text(rom, con, rel)
.dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\modbus16.c
; result -> R20,R21
; tempData -> R22,R23
; addr -> R10,R11
.even
_getRegisterVal::
xcall push_gset3
movw R22,R18
movw R10,R16
.dbline -1
.dbline 484
; }//uint16 setCoilVal(uint16 addr,uint16 data)
;
; //取寄存器值 返回0表示成功
; uint16 getRegisterVal(uint16 addr,uint16 *tempData)
; {
.dbline 485
; uint16 result = 0;
clr R20
clr R21
.dbline 487
;
; switch(addr & 0xff)
movw R24,R10
andi R25,0
movw R10,R24
ldi R24,16
ldi R25,0
cp R24,R10
cpc R25,R11
brlt L156
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
movw R30,R16
ldi R24,<L175
ldi R25,>L175
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X13:
.dbline 488
; {
L158:
.dbline 490
; case 0:
; *tempData = testRegister;
lds R2,_testRegister
lds R3,_testRegister+1
movw R30,R22
std z+0,R2
std z+1,R3
.dbline 491
; break;
.dbline 493
; case 1:
; break;
.dbline 495
; case 2:
; break;
.dbline 497
; case 3:
; break;
.dbline 499
; case 4:
; break;
.dbline 501
; case 5:
; break;
.dbline 503
; case 6:
; break;
.dbline 505
; case 7:
; break;
.dbline 507
; case 8:
; break;
.dbline 509
; case 9:
; break;
.dbline 511
; case 10:
; break;
.dbline 513
; case 11:
; break;
.dbline 515
; case 12:
; break;
.dbline 517
; case 13:
; break;
.dbline 519
; case 14:
; break;
.dbline 521
; case 15:
; break;
.dbline 523
; case 16:
; break;
.dbline 525
; default:
; break;
L156:
.dbline 528
; }
;
; return result;
mov R16,R20
mov R17,R21
.dbline -2
L154:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r result 20 i
.dbsym r tempData 22 pi
.dbsym r addr 10 i
.dbend
.dbfunc e setRegisterVal _setRegisterVal fi
.area func_lit(rom, con, rel)
L197:
.word `L180
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.word `L178
.area text(rom, con, rel)
.dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\modbus16.c
; result -> R20,R21
; tempData -> R22,R23
; addr -> R10,R11
.even
_setRegisterVal::
xcall push_gset3
movw R22,R18
movw R10,R16
.dbline -1
.dbline 533
; }//uint16 getRegisterVal(uint16 addr,uint16 &data)
;
; //设置寄存器值 返回0表示成功
; uint16 setRegisterVal(uint16 addr,uint16 tempData)
; {
.dbline 534
; uint16 result = 0;
clr R20
clr R21
.dbline 536
;
; switch(addr & 0xff)
movw R24,R10
andi R25,0
movw R10,R24
ldi R24,16
ldi R25,0
cp R24,R10
cpc R25,R11
brlt L178
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
movw R30,R16
ldi R24,<L197
ldi R25,>L197
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X14:
.dbline 537
; {
L180:
.dbline 539
; case 0:
; testRegister = tempData;
sts _testRegister+1,R23
sts _testRegister,R22
.dbline 540
; break;
.dbline 542
; case 1:
; break;
.dbline 544
; case 2:
; break;
.dbline 546
; case 3:
; break;
.dbline 548
; case 4:
; break;
.dbline 550
; case 5:
; break;
.dbline 552
; case 6:
; break;
.dbline 554
; case 7:
; break;
.dbline 556
; case 8:
; break;
.dbline 558
; case 9:
; break;
.dbline 560
; case 10:
; break;
.dbline 562
; case 11:
; break;
.dbline 564
; case 12:
; break;
.dbline 566
; case 13:
; break;
.dbline 568
; case 14:
; break;
.dbline 570
; case 15:
; break;
.dbline 572
; case 16:
; break;
.dbline 574
; default:
; break;
L178:
.dbline 577
; }
;
; return result;
mov R16,R20
mov R17,R21
.dbline -2
L176:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r result 20 i
.dbsym r tempData 22 i
.dbsym r addr 10 i
.dbend
.area bss(ram, con, rel)
.dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\modbus16.c
_testCoil::
.blkb 1
.dbsym e testCoil _testCoil c
_receTimeOut::
.blkb 1
.dbsym e receTimeOut _receTimeOut c
_checkoutError::
.blkb 1
.dbsym e checkoutError _checkoutError c
_receBuf::
.blkb 32
.dbsym e receBuf _receBuf A[32:32]c
_sendBuf::
.blkb 32
.dbsym e sendBuf _sendBuf A[32:32]c
_sendPosi::
.blkb 1
.dbsym e sendPosi _sendPosi c
_receCount::
.blkb 1
.dbsym e receCount _receCount c
_sendCount::
.blkb 1
.dbsym e sendCount _sendCount c
_testRegister::
.blkb 2
.dbsym e testRegister _testRegister i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -