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

📄 jk0061119.lst

📁 Modbus RTU 的C语言程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0180) 	   }
(0181) 	return(Ptr_send[2]+3);
    042F 01F3      MOVW	R30,R6
    0430 8102      LDD	R16,Z+2
    0431 5F0D      SUBI	R16,0xFD
    0432 940E1BE4  CALL	pop_gset5
    0434 9508      RET
_Modbus_Function_3:
  b                    --> R20
  a                    --> R22
  i                    --> R10
  Ptr_send             --> R18
  Ptr_receive          --> R16
    0435 940E1C02  CALL	push_gset3
(0182)  }
(0183) /////////////////////////////////////////////////////////////
(0184) char  Modbus_Function_3(char *Ptr_receive,char *Ptr_send)
(0185) {
(0186)    char  i,a,b;
(0187)   Ptr_send[1]=0x03;
    0437 E083      LDI	R24,3
    0438 01F9      MOVW	R30,R18
    0439 8381      STD	Z+1,R24
(0188)   if((Ptr_receive[2]==0)&&(Ptr_receive[3]<=30)) 
    043A 01F8      MOVW	R30,R16
    043B 8022      LDD	R2,Z+2
    043C 2022      TST	R2
    043D F009      BEQ	0x043F
    043E C031      RJMP	0x0470
    043F E18E      LDI	R24,0x1E
    0440 01F8      MOVW	R30,R16
    0441 8023      LDD	R2,Z+3
    0442 1582      CP	R24,R2
    0443 F408      BCC	0x0445
    0444 C02B      RJMP	0x0470
(0189) 	 {
(0190) 	   if(Ptr_receive[3]+Ptr_receive[5]<=30)    
    0445 01F8      MOVW	R30,R16
    0446 8025      LDD	R2,Z+5
    0447 01F8      MOVW	R30,R16
    0448 8033      LDD	R3,Z+3
    0449 0C32      ADD	R3,R2
    044A 1583      CP	R24,R3
    044B F408      BCC	0x044D
    044C C02F      RJMP	0x047C
(0191) 	      {
(0192) 			Ptr_send[2]=2*Ptr_receive[5];
    044D 01F8      MOVW	R30,R16
    044E 8025      LDD	R2,Z+5
    044F E082      LDI	R24,2
    0450 9D82      MUL	R24,R2
    0451 01F9      MOVW	R30,R18
    0452 8202      STD	Z+2,R0
(0193) 			a=Ptr_receive[3];
    0453 01F8      MOVW	R30,R16
    0454 8163      LDD	R22,Z+3
(0194) 			b=Ptr_receive[5]*2;
    0455 01F8      MOVW	R30,R16
    0456 8025      LDD	R2,Z+5
    0457 9D82      MUL	R24,R2
    0458 2D40      MOV	R20,R0
(0195) 			for(i=0;i<b;i++)
    0459 24AA      CLR	R10
    045A C012      RJMP	0x046D
(0196) 			  {
(0197) 	            Ptr_send[3+i]=JK_Value[2*a+i];
    045B E082      LDI	R24,2
    045C 9F86      MUL	R24,R22
    045D 01F0      MOVW	R30,R0
    045E 2C2A      MOV	R2,R10
    045F 2433      CLR	R3
    0460 0DE2      ADD	R30,R2
    0461 1DF3      ADC	R31,R3
    0462 E988      LDI	R24,0x98
    0463 E092      LDI	R25,2
    0464 0FE8      ADD	R30,R24
    0465 1FF9      ADC	R31,R25
    0466 8020      LDD	R2,Z+0
    0467 2DEA      MOV	R30,R10
    0468 27FF      CLR	R31
    0469 0FE2      ADD	R30,R18
    046A 1FF3      ADC	R31,R19
    046B 8223      STD	Z+3,R2
    046C 94A3      INC	R10
    046D 16A4      CP	R10,R20
    046E F360      BCS	0x045B
(0198) 			   }
(0199) 		   }
(0200) 		
(0201) 	   }
    046F C00C      RJMP	0x047C
(0202) 	else
(0203) 	  {
(0204) 	         ////show   error!
(0205) 		     Ptr_send[1]=0xFF;
    0470 EF8F      LDI	R24,0xFF
    0471 01F9      MOVW	R30,R18
    0472 8381      STD	Z+1,R24
(0206) 		     Ptr_send[2]=2;
    0473 E082      LDI	R24,2
    0474 01F9      MOVW	R30,R18
    0475 8382      STD	Z+2,R24
(0207) 			 Ptr_send[3]=0x00;
    0476 2422      CLR	R2
    0477 01F9      MOVW	R30,R18
    0478 8223      STD	Z+3,R2
(0208) 			 Ptr_send[4]=0x04;
    0479 E084      LDI	R24,4
    047A 01F9      MOVW	R30,R18
    047B 8384      STD	Z+4,R24
(0209) 	   }
(0210)   return(Ptr_send[2]+3);
    047C 01F9      MOVW	R30,R18
    047D 8102      LDD	R16,Z+2
    047E 5F0D      SUBI	R16,0xFD
    047F 940E1BDE  CALL	pop_gset3
    0481 9508      RET
_Modbus_Function_5:
  c                    --> R20
  Ptr_send             --> R18
  Ptr_receive          --> R16
    0482 940E1BE7  CALL	push_gset1
(0211) }
(0212) ////////////////////////////////////////////////////////////
(0213) char  Modbus_Function_5(char *Ptr_receive,char *Ptr_send)
(0214) {
(0215)      char  c;
(0216)     Ptr_send[1]=0x05;
    0484 E085      LDI	R24,5
    0485 01F9      MOVW	R30,R18
    0486 8381      STD	Z+1,R24
(0217) 	Ptr_send[2]=Ptr_receive[2];
    0487 01F8      MOVW	R30,R16
    0488 8022      LDD	R2,Z+2
    0489 01F9      MOVW	R30,R18
    048A 8222      STD	Z+2,R2
(0218) 	Ptr_send[3]=Ptr_receive[3];
    048B 01F8      MOVW	R30,R16
    048C 8023      LDD	R2,Z+3
    048D 01F9      MOVW	R30,R18
    048E 8223      STD	Z+3,R2
(0219) 	Ptr_send[4]=Ptr_receive[4];
    048F 01F8      MOVW	R30,R16
    0490 8024      LDD	R2,Z+4
    0491 01F9      MOVW	R30,R18
    0492 8224      STD	Z+4,R2
(0220) 	Ptr_send[5]=Ptr_receive[5];
    0493 01F8      MOVW	R30,R16
    0494 8025      LDD	R2,Z+5
    0495 01F9      MOVW	R30,R18
    0496 8225      STD	Z+5,R2
(0221) 	c=6;
    0497 E046      LDI	R20,6
(0222) 	if((Ptr_receive[2]==0)&&(Ptr_receive[3]==0))
    0498 01F8      MOVW	R30,R16
    0499 8022      LDD	R2,Z+2
    049A 2022      TST	R2
    049B F009      BEQ	0x049D
    049C C035      RJMP	0x04D2
    049D 01F8      MOVW	R30,R16
    049E 8023      LDD	R2,Z+3
    049F 2022      TST	R2
    04A0 F009      BEQ	0x04A2
    04A1 C030      RJMP	0x04D2
(0223) 	   {
(0224) 	       if((Ptr_receive[4]==0xFF)&&(Ptr_receive[5]==0x00))
    04A2 01F8      MOVW	R30,R16
    04A3 8184      LDD	R24,Z+4
    04A4 3F8F      CPI	R24,0xFF
    04A5 F469      BNE	0x04B3
    04A6 01F8      MOVW	R30,R16
    04A7 8025      LDD	R2,Z+5
    04A8 2022      TST	R2
    04A9 F449      BNE	0x04B3
(0225) 		      {
(0226) 			      Flag_JC_FC=1;
    04AA E081      LDI	R24,1
    04AB 93800126  STS	0x126,R24
(0227) 	              JK_IO[0]|=0x01;
    04AD 91800122  LDS	R24,0x122
    04AF 6081      ORI	R24,1
    04B0 93800122  STS	0x122,R24
(0228) 			   }
    04B2 C02C      RJMP	0x04DF
(0229) 		    else if((Ptr_receive[4]==0x00)&&(Ptr_receive[5]==0x00))
    04B3 01F8      MOVW	R30,R16
    04B4 8024      LDD	R2,Z+4
    04B5 2022      TST	R2
    04B6 F469      BNE	0x04C4
    04B7 01F8      MOVW	R30,R16
    04B8 8025      LDD	R2,Z+5
    04B9 2022      TST	R2
    04BA F449      BNE	0x04C4
(0230) 			   {
(0231) 			      Flag_JC_FC=0;
    04BB 2422      CLR	R2
    04BC 92200126  STS	0x126,R2
(0232) 	              JK_IO[0]&=0xFE;
    04BE 91800122  LDS	R24,0x122
    04C0 7F8E      ANDI	R24,0xFE
    04C1 93800122  STS	0x122,R24
(0233) 			    }
    04C3 C01B      RJMP	0x04DF
(0234) 			else
(0235) 			   {
(0236) 			       ////show   error!
(0237) 		         Ptr_send[1]=0xFF;
    04C4 EF8F      LDI	R24,0xFF
    04C5 01F9      MOVW	R30,R18
    04C6 8381      STD	Z+1,R24
(0238) 		         Ptr_send[2]=2;
    04C7 E082      LDI	R24,2
    04C8 01F9      MOVW	R30,R18
    04C9 8382      STD	Z+2,R24
(0239) 			     Ptr_send[3]=0x00;
    04CA 2422      CLR	R2
    04CB 01F9      MOVW	R30,R18
    04CC 8223      STD	Z+3,R2
(0240) 			     Ptr_send[4]=0x05;
    04CD E085      LDI	R24,5
    04CE 01F9      MOVW	R30,R18
    04CF 8384      STD	Z+4,R24
(0241) 				 c=5;
    04D0 E045      LDI	R20,5
(0242) 			    }
(0243) 	    }
    04D1 C00D      RJMP	0x04DF
(0244) 	else
(0245) 	   {
(0246) 	       ////show   error!
(0247) 		         Ptr_send[1]=0xFF;
    04D2 EF8F      LDI	R24,0xFF
    04D3 01F9      MOVW	R30,R18
    04D4 8381      STD	Z+1,R24
(0248) 		         Ptr_send[2]=2;
    04D5 E082      LDI	R24,2
    04D6 01F9      MOVW	R30,R18
    04D7 8382      STD	Z+2,R24
(0249) 			     Ptr_send[3]=0x00;
    04D8 2422      CLR	R2
    04D9 01F9      MOVW	R30,R18
    04DA 8223      STD	Z+3,R2
(0250) 			     Ptr_send[4]=0x06;
    04DB E086      LDI	R24,6
    04DC 01F9      MOVW	R30,R18
    04DD 8384      STD	Z+4,R24
(0251) 				 c=5;
    04DE E045      LDI	R20,5
(0252) 	    }
(0253)      return(c);
    04DF 2F04      MOV	R16,R20
    04E0 940E1BEA  CALL	pop_gset1
    04E2 9508      RET
_Modbus_Function_16:
  Var_temp             --> R14
  c                    --> R20
  i                    --> R12
  Ptr_send             --> R22
  Ptr_receive          --> R10
    04E3 940E1C0A  CALL	push_gset5
    04E5 01B9      MOVW	R22,R18
    04E6 0158      MOVW	R10,R16
(0254)  }
(0255) char  Modbus_Function_16(char *Ptr_receive,char *Ptr_send)
(0256) {
(0257)     char  i,c;
(0258) 	unsigned int  Var_temp;
(0259) 	Ptr_send[1]=0x10;
    04E7 E180      LDI	R24,0x10
    04E8 01FB      MOVW	R30,R22
    04E9 8381      STD	Z+1,R24
(0260)     Ptr_send[2]=Ptr_receive[2];
    04EA 01F5      MOVW	R30,R10
    04EB 8022      LDD	R2,Z+2
    04EC 01FB      MOVW	R30,R22
    04ED 8222      STD	Z+2,R2
(0261)     Ptr_send[3]=Ptr_receive[3];
    04EE 01F5      MOVW	R30,R10
    04EF 8023      LDD	R2,Z+3
    04F0 01FB      MOVW	R30,R22
    04F1 8223      STD	Z+3,R2
(0262) 	i=Ptr_receive[3];
    04F2 01F5      MOVW	R30,R10
    04F3 80C3      LDD	R12,Z+3
(0263) 	///////////////////////////////////////////////////////
(0264)     Ptr_send[4]=Ptr_receive[4];
    04F4 01F5      MOVW	R30,R10
    04F5 8024      LDD	R2,Z+4
    04F6 01FB      MOVW	R30,R22
    04F7 8224      STD	Z+4,R2
(0265)     Ptr_send[5]=Ptr_receive[5];
    04F8 01F5      MOVW	R30,R10
    04F9 8025      LDD	R2,Z+5
    04FA 01FB      MOVW	R30,R22
    04FB 8225      STD	Z+5,R2
(0266) 	c=6;
    04FC E046      LDI	R20,6
(0267) 	if(Ptr_receive[2]==0)
    04FD 01F5      MOVW	R30,R10
    04FE 8022      LDD	R2,Z+2
    04FF 2022      TST	R2
    0500 F009      BEQ	0x0502
    0501 C080      RJMP	0x0582
(0268) 	  {
(0269) 		   if((i>5)&&(i<28))
    0502 E085      LDI	R24,5
    0503 158C      CP	R24,R12
    0504 F008      BCS	0x0506
    0505 C052      RJMP	0x0558
    0506 2D8C      MOV	R24,R12
    0507 318C      CPI	R24,0x1C
    0508 F008      BCS	0x050A
    0509 C04E      RJMP	0x0558
(0270) 		     {
(0271) 			     JK_Value[2*i]=Ptr_receive[7];
    050A E082      LDI	R24,2
    050B 9D8C      MUL	R24,R12
    050C 01F0      MOVW	R30,R0
    050D E988      LDI	R24,0x98
    050E E092      LDI	R25,2
    050F 0FE8      ADD	R30,R24
    0510 1FF9      ADC	R31,R25
    0511 01D5      MOVW	R26,R10
    0512 9617      ADIW	R26,7
    0513 902C      LD	R2,0(X)
    0514 8220      STD	Z+0,R2
(0272) 	             JK_Value[2*i+1]=Ptr_receive[8];
    0515 E082      LDI	R24,2
    0516 9D8C      MUL	R24,R12
    0517 01F0      MOVW	R30,R0
    0518 E989      LDI	R24,0x99
    0519 E092      LDI	R25,2
    051A 0FE8      ADD	R30,R24
    051B 1FF9      ADC	R31,R25
    051C 01D5      MOVW	R26,R10
    051D 9618      ADIW	R26,0x8
    051E 902C      LD	R2,0(X)
    051F 8220      STD	Z+0,R2
(0273) 			     Var_temp=(int)Ptr_receive[7]<<8;
    0520 01F5      MOVW	R30,R10
    0521 80E7      LDD	R14,Z+7
    0522 24FF      CLR	R15
    0523 2CFE      MOV	R15,R14
    0524 24EE      CLR	R14
(0274) 				  Var_temp|=(int)Ptr_receive[8];
    0525 01F5      MOVW	R30,R10
    0526 8420      LDD	R2,Z+8
    0527 2433      CLR	R3
    0528 28E2      OR	R14,R2
    0529 28F3      OR	R15,R3
(0275) 				  if(ram_array[i-6]!=Var_temp)
    052A E082      LDI	R24,2
    052B 9D8C      MUL	R24,R12
    052C 01F0      MOVW	R30,R0
    052D E988      LDI	R24,0x98
    052E E091      LDI	R25,1
    052F 0FE8      ADD	R30,R24
    0530 1FF9      ADC	R31,R25
    0531 8020      LDD	R2,Z+0
    0532 8031      LDD	R3,Z+1
    0533 142E      CP	R2,R14
    0534 043F      CPC	R3,R15
    0535 F409      BNE	0x0537
    0536 C058      RJMP	0x058F
(0276) 				    {
(0277) 			          EEPROMwrite((int)&EEprom_array[2*i-12],Ptr_receive[7]);
    0537 01F5      MOVW	R30,R10
    0538 8127      LDD	R18,Z+7
    0539 E082      LDI	R24,2
    053A 9D8C      MUL	R24,R12
    053B 0180      MOVW	R16,R0
    053C EF8A      LDI	R24,0xFA
    053D EF9F      LDI	R25,0xFF
    053E 0F08      ADD	R16,R24
    053F 1F19      ADC	R17,R25
    0540 940E1C6A  CALL	_EEPROMwrite
(0278) 				      EEPROMwrite((int)&EEprom_array[2*i-11],Ptr_receive[8]);
    0542 01F5      MOVW	R30,R10
    0543 8520      LDD	R18,Z+8
    0544 E082      LDI	R24,2
    0545 9D8C      MUL	R24,R12
    0546 0180      MOVW	R16,R0
    0547 EF8B      LDI	R24,0xFB
    0548 EF9F      LDI	R25,0xFF
    0549 0F08      ADD	R16,R24
    054A 1F19      ADC	R17,R25
    054B 940E1C6A  CALL	_EEPROMwrite
(0279) 				      WDR();
   

⌨️ 快捷键说明

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