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

📄 modbus16.s

📁 modbus协议实现
💻 S
📖 第 1 页 / 共 3 页
字号:
	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 + -