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

📄 modbusm16.lst

📁 modbus协议实现
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0548 2022      TST	R2
    0549 F4C9      BNE	0x0563
(0363) 						{
(0364) 							crcData = crc16(receBuf,tempData-2);
    054A 019B      MOVW	R18,R22
    054B 5022      SUBI	R18,2
    054C 4030      SBCI	R19,0
    054D E701      LDI	R16,0x71
    054E E010      LDI	R17,0
    054F DD7D      RCALL	_crc16
    0550 01A8      MOVW	R20,R16
(0365) 							if(crcData == (receBuf[tempData-2]<<8)+ receBuf[tempData-1])
    0551 E781      LDI	R24,0x71
    0552 E090      LDI	R25,0
    0553 01FB      MOVW	R30,R22
    0554 9731      SBIW	R30,1
    0555 0FE8      ADD	R30,R24
    0556 1FF9      ADC	R31,R25
    0557 8020      LDD	R2,0+Z
    0558 01FB      MOVW	R30,R22
    0559 9732      SBIW	R30,2
    055A 0FE8      ADD	R30,R24
    055B 1FF9      ADC	R31,R25
    055C 8030      LDD	R3,0+Z
    055D 2C42      MOV	R4,R2
    055E 2C53      MOV	R5,R3
    055F 1504      CP	R16,R4
    0560 0515      CPC	R17,R5
    0561 F409      BNE	0x0563
(0366) 							{
(0367) 								presetMultipleRegisters();			
    0562 DECC      RCALL	_presetMultipleRegisters
(0368) 							}
(0369) 						}	
(0370) 						receCount = 0;
    0563 2422      CLR	R2
    0564 922000B2  STS	_receCount,R2
(0371) 						checkoutError = 0;
    0566 92200070  STS	_checkoutError,R2
(0372) 						UCSRB |= BIT(7);
    0568 9A57      SBI	P0A,7
(0373) 					}
(0374) 					break;
(0375) 								
(0376) 			default:
(0377) 					break;			
(0378) 		}
(0379) 	}
(0380) }//void checkComm0(void)
    0569 940E0627  CALL	pop_gset2
    056B 9508      RET
_getCoilVal:
  result               --> R20
  tempData             --> R22
  addr                 --> R10
    056C 940E064E  CALL	push_gset3
    056E 01B9      MOVW	R22,R18
    056F 0158      MOVW	R10,R16
(0381) 
(0382) //取线圈状态 返回0表示成功
(0383) uint16 getCoilVal(uint16 addr,uint16 *tempData)
(0384) {
(0385) 	uint16 result = 0;
    0570 2744      CLR	R20
    0571 2755      CLR	R21
(0386) 	
(0387) 	switch(addr & 0xff)
    0572 01C5      MOVW	R24,R10
    0573 7090      ANDI	R25,0
    0574 015C      MOVW	R10,R24
    0575 E180      LDI	R24,0x10
    0576 E090      LDI	R25,0
    0577 158A      CP	R24,R10
    0578 059B      CPC	R25,R11
    0579 F0A4      BLT	0x058E
    057A E002      LDI	R16,2
    057B E010      LDI	R17,0
    057C 0195      MOVW	R18,R10
    057D 940E0617  CALL	empy16s
    057F 01F8      MOVW	R30,R16
    0580 E584      LDI	R24,0x54
    0581 E090      LDI	R25,0
    0582 0FE8      ADD	R30,R24
    0583 1FF9      ADC	R31,R25
    0584 9005      LPM	R0,Z+
    0585 9014      LPM	R1,0(Z)
    0586 01F0      MOVW	R30,R0
    0587 9409      IJMP
(0388) 	{
(0389) 		case 0:
(0390) 				break;
(0391) 		case 1:	
(0392) 				*tempData = testCoil;
    0588 9020006E  LDS	R2,_testCoil
    058A 2433      CLR	R3
    058B 01FB      MOVW	R30,R22
    058C 8220      STD	R2,0+Z
    058D 8231      STD	R3,1+Z
(0393) 				break;
(0394) 		case 2:		
(0395) 				break;		
(0396) 		case 3:
(0397) 				break;		
(0398) 		case 4:
(0399) 				break;		
(0400) 		case 5:
(0401) 				break;
(0402) 		case 6:
(0403) 				break;			
(0404) 		case 7:
(0405) 				break;		
(0406) 		case 8:
(0407) 				break;		
(0408) 		case 9:
(0409) 				break;		
(0410) 		case 10:
(0411) 				break;
(0412) 		case 11:
(0413) 				break;
(0414) 		case 12:
(0415) 				break;
(0416) 		case 13:
(0417) 				break;
(0418) 		case 14:
(0419) 				break;
(0420) 		case 15:
(0421) 				break;
(0422) 		case 16:
(0423) 				break;														
(0424) 		default:
(0425) 				break;		
(0426) 	}	
(0427) 	
(0428) 	return result;
    058E 2F04      MOV	R16,R20
    058F 2F15      MOV	R17,R21
    0590 940E062A  CALL	pop_gset3
    0592 9508      RET
_setCoilVal:
  result               --> R20
  tempData             --> R22
  addr                 --> R10
    0593 940E064E  CALL	push_gset3
    0595 01B9      MOVW	R22,R18
    0596 0158      MOVW	R10,R16
(0429) }//uint16 getCoilVal(uint16 addr,uint16 *data)
(0430) 
(0431) 
(0432) //设定线圈状态 返回0表示成功
(0433) uint16 setCoilVal(uint16 addr,uint16 tempData)
(0434) {
(0435) 	uint16 result = 0;
    0597 2744      CLR	R20
    0598 2755      CLR	R21
(0436) 		
(0437) 	switch(addr & 0xff)
    0599 01C5      MOVW	R24,R10
    059A 7090      ANDI	R25,0
    059B 015C      MOVW	R10,R24
    059C E180      LDI	R24,0x10
    059D E090      LDI	R25,0
    059E 158A      CP	R24,R10
    059F 059B      CPC	R25,R11
    05A0 F084      BLT	0x05B1
    05A1 E002      LDI	R16,2
    05A2 E010      LDI	R17,0
    05A3 0195      MOVW	R18,R10
    05A4 940E0617  CALL	empy16s
    05A6 01F8      MOVW	R30,R16
    05A7 E786      LDI	R24,0x76
    05A8 E090      LDI	R25,0
    05A9 0FE8      ADD	R30,R24
    05AA 1FF9      ADC	R31,R25
    05AB 9005      LPM	R0,Z+
    05AC 9014      LPM	R1,0(Z)
    05AD 01F0      MOVW	R30,R0
    05AE 9409      IJMP
(0438) 	{
(0439) 		case 0:
(0440) 				break;
(0441) 		case 1:	
(0442) 				testCoil = tempData;
    05AF 9360006E  STS	_testCoil,R22
(0443) 				break;
(0444) 		case 2:		
(0445) 				break;		
(0446) 		case 3:
(0447) 				break;		
(0448) 		case 4:
(0449) 				break;		
(0450) 		case 5:
(0451) 				break;
(0452) 		case 6:
(0453) 				break;			
(0454) 		case 7:
(0455) 				break;		
(0456) 		case 8:
(0457) 				break;		
(0458) 		case 9:
(0459) 				break;		
(0460) 		case 10:
(0461) 				break;
(0462) 		case 11:
(0463) 				break;
(0464) 		case 12:
(0465) 				break;
(0466) 		case 13:
(0467) 				break;
(0468) 		case 14:
(0469) 				break;
(0470) 		case 15:
(0471) 				break;
(0472) 		case 16:
(0473) 				break;														
(0474) 		default:
(0475) 				break;		
(0476) 	}	
(0477) 
(0478) 
(0479) 	return result;
    05B1 2F04      MOV	R16,R20
    05B2 2F15      MOV	R17,R21
    05B3 940E062A  CALL	pop_gset3
    05B5 9508      RET
_getRegisterVal:
  result               --> R20
  tempData             --> R22
  addr                 --> R10
    05B6 940E064E  CALL	push_gset3
    05B8 01B9      MOVW	R22,R18
    05B9 0158      MOVW	R10,R16
(0480) }//uint16 setCoilVal(uint16 addr,uint16 data)
(0481) 
(0482) //取寄存器值 返回0表示成功
(0483) uint16 getRegisterVal(uint16 addr,uint16 *tempData)
(0484) {
(0485) 	uint16 result = 0;
    05BA 2744      CLR	R20
    05BB 2755      CLR	R21
(0486) 	
(0487) 	switch(addr & 0xff)
    05BC 01C5      MOVW	R24,R10
    05BD 7090      ANDI	R25,0
    05BE 015C      MOVW	R10,R24
    05BF E180      LDI	R24,0x10
    05C0 E090      LDI	R25,0
    05C1 158A      CP	R24,R10
    05C2 059B      CPC	R25,R11
    05C3 F0AC      BLT	0x05D9
    05C4 E002      LDI	R16,2
    05C5 E010      LDI	R17,0
    05C6 0195      MOVW	R18,R10
    05C7 940E0617  CALL	empy16s
    05C9 01F8      MOVW	R30,R16
    05CA E988      LDI	R24,0x98
    05CB E090      LDI	R25,0
    05CC 0FE8      ADD	R30,R24
    05CD 1FF9      ADC	R31,R25
    05CE 9005      LPM	R0,Z+
    05CF 9014      LPM	R1,0(Z)
    05D0 01F0      MOVW	R30,R0
    05D1 9409      IJMP
(0488) 	{
(0489) 		case 0:
(0490) 				*tempData = testRegister;
    05D2 902000B4  LDS	R2,_testRegister
    05D4 903000B5  LDS	R3,_testRegister+1
    05D6 01FB      MOVW	R30,R22
    05D7 8220      STD	R2,0+Z
    05D8 8231      STD	R3,1+Z
(0491) 				break;
(0492) 		case 1:	
(0493) 				break;
(0494) 		case 2:		
(0495) 				break;		
(0496) 		case 3:
(0497) 				break;		
(0498) 		case 4:
(0499) 				break;		
(0500) 		case 5:
(0501) 				break;
(0502) 		case 6:
(0503) 				break;			
(0504) 		case 7:
(0505) 				break;		
(0506) 		case 8:
(0507) 				break;		
(0508) 		case 9:
(0509) 				break;		
(0510) 		case 10:
(0511) 				break;
(0512) 		case 11:
(0513) 				break;
(0514) 		case 12:
(0515) 				break;
(0516) 		case 13:
(0517) 				break;
(0518) 		case 14:
(0519) 				break;
(0520) 		case 15:
(0521) 				break;
(0522) 		case 16:
(0523) 				break;														
(0524) 		default:
(0525) 				break;		
(0526) 	}
(0527) 	
(0528) 	return result;
    05D9 2F04      MOV	R16,R20
    05DA 2F15      MOV	R17,R21
    05DB 940E062A  CALL	pop_gset3
    05DD 9508      RET
_setRegisterVal:
  result               --> R20
  tempData             --> R22
  addr                 --> R10
    05DE 940E064E  CALL	push_gset3
    05E0 01B9      MOVW	R22,R18
    05E1 0158      MOVW	R10,R16
(0529) }//uint16 getRegisterVal(uint16 addr,uint16 &data)
(0530) 
(0531) //设置寄存器值 返回0表示成功 
(0532) uint16 setRegisterVal(uint16 addr,uint16 tempData)
(0533) {
(0534) 	uint16 result = 0;
    05E2 2744      CLR	R20
    05E3 2755      CLR	R21
(0535) 	
(0536) 	switch(addr & 0xff)
    05E4 01C5      MOVW	R24,R10
    05E5 7090      ANDI	R25,0
    05E6 015C      MOVW	R10,R24
    05E7 E180      LDI	R24,0x10
    05E8 E090      LDI	R25,0
    05E9 158A      CP	R24,R10
    05EA 059B      CPC	R25,R11
    05EB F094      BLT	0x05FE
    05EC E002      LDI	R16,2
    05ED E010      LDI	R17,0
    05EE 0195      MOVW	R18,R10
    05EF 940E0617  CALL	empy16s
    05F1 01F8      MOVW	R30,R16
    05F2 EB8A      LDI	R24,0xBA
    05F3 E090      LDI	R25,0
    05F4 0FE8      ADD	R30,R24
    05F5 1FF9      ADC	R31,R25
    05F6 9005      LPM	R0,Z+
    05F7 9014      LPM	R1,0(Z)
    05F8 01F0      MOVW	R30,R0
    05F9 9409      IJMP
(0537) 	{
(0538) 		case 0:
(0539) 				testRegister = tempData;
    05FA 937000B5  STS	_testRegister+1,R23
    05FC 936000B4  STS	_testRegister,R22
(0540) 				break;
(0541) 		case 1:	
(0542) 				break;
(0543) 		case 2:		
(0544) 				break;		
(0545) 		case 3:
(0546) 				break;		
(0547) 		case 4:
(0548) 				break;		
(0549) 		case 5:
(0550) 				break;
(0551) 		case 6:
(0552) 				break;			
(0553) 		case 7:
(0554) 				break;		
(0555) 		case 8:
(0556) 				break;		
(0557) 		case 9:
(0558) 				break;		
(0559) 		case 10:
(0560) 				break;
(0561) 		case 11:
(0562) 				break;
(0563) 		case 12:
(0564) 				break;
(0565) 		case 13:
(0566) 				break;
(0567) 		case 14:
(0568) 				break;
(0569) 		case 15:
(0570) 				break;
(0571) 		case 16:
(0572) 				break;														
(0573) 		default:
(0574) 				break;		
(0575) 	}
(0576) 	
(0577) 	return result;
FILE: <library>
    05FE 2F04      MOV	R16,R20
    05FF 2F15      MOV	R17,R21
    0600 940E062A  CALL	pop_gset3
    0602 9508      RET
mod8u:
    0603 9468      BSET	6
    0604 C001      RJMP	xdiv8u
div8u:
    0605 94E8      BCLR	6
xdiv8u:
    0606 932A      ST	R18,-Y
    0607 92FA      ST	R15,-Y
    0608 24FF      CLR	R15
    0609 E028      LDI	R18,0x8
    060A 0F00      LSL	R16
    060B 1CFF      ROL	R15
    060C 16F1      CP	R15,R17
    060D F010      BCS	0x0610
    060E 1AF1      SUB	R15,R17
    060F 9503      INC	R16
    0610 952A      DEC	R18
    0611 F7C1      BNE	0x060A
    0612 F40E      BRTC	0x0614
    0613 2D0F      MOV	R16,R15
    0614 90F9      LD	R15,Y+
    0615 9129      LD	R18,Y+
    0616 9508      RET
empy16s:
    0617 920A      ST	R0,-Y
    0618 921A      ST	R1,-Y
    0619 938A      ST	R24,-Y
    061A 939A      ST	R25,-Y
    061B 9F02      MUL	R16,R18
    061C 01C0      MOVW	R24,R0
    061D 9F12      MUL	R17,R18
    061E 0D90      ADD	R25,R0
    061F 9F03      MUL	R16,R19
    0620 0D90      ADD	R25,R0
    0621 018C      MOVW	R16,R24
    0622 9199      LD	R25,Y+
    0623 9189      LD	R24,Y+
    0624 9019      LD	R1,Y+
    0625 9009      LD	R0,Y+
    0626 9508      RET
pop_gset2:
    0627 E0E2      LDI	R30,2
    0628 940C0637  JMP	pop
pop_gset3:
    062A E0E4      LDI	R30,4
    062B 940C0637  JMP	pop
pop_gset4:
    062D E0E8      LDI	R30,0x8
    062E 940C0637  JMP	pop
pop_gset5:
    0630 27EE      CLR	R30
    0631 940C0637  JMP	pop
push_gset1:
    0633 935A      ST	R21,-Y
    0634 934A      ST	R20,-Y
    0635 9508      RET
pop_gset1:
    0636 E0E1      LDI	R30,1
pop:
    0637 9149      LD	R20,Y+
    0638 9159      LD	R21,Y+
    0639 FDE0      SBRC	R30,0
    063A 9508      RET
    063B 9169      LD	R22,Y+
    063C 9179      LD	R23,Y+
    063D FDE1      SBRC	R30,1
    063E 9508      RET
    063F 90A9      LD	R10,Y+
    0640 90B9      LD	R11,Y+
    0641 FDE2      SBRC	R30,2
    0642 9508      RET
    0643 90C9      LD	R12,Y+
    0644 90D9      LD	R13,Y+
    0645 FDE3      SBRC	R30,3
    0646 9508      RET
    0647 90E9      LD	R14,Y+
    0648 90F9      LD	R15,Y+
    0649 9508      RET
push_gset2:
    064A 937A      ST	R23,-Y
    064B 936A      ST	R22,-Y
    064C 940C0633  JMP	push_gset1
push_gset3:
    064E 92BA      ST	R11,-Y
    064F 92AA      ST	R10,-Y
    0650 940C064A  JMP	push_gset2
push_gset4:
    0652 92DA      ST	R13,-Y
    0653 92CA      ST	R12,-Y
    0654 940C064E  JMP	push_gset3
push_gset5:
    0656 92FA      ST	R15,-Y
    0657 92EA      ST	R14,-Y
    0658 940C0652  JMP	push_gset4
lsl16:
    065A 2322      TST	R18
    065B F021      BEQ	0x0660
    065C 0F00      LSL	R16
    065D 1F11      ROL	R17
    065E 952A      DEC	R18
    065F CFFA      RJMP	lsl16
    0660 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -