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

📄 pid.lst

📁 用ICC-AVR编译器编译适用与AVR系列单片机的PID库.
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    0017 E5CF      LDI	R28,0x5F
    0018 E0D2      LDI	R29,2
    0019 BFCD      OUT	0x3D,R28
    001A BFDE      OUT	0x3E,R29
    001B 51C0      SUBI	R28,0x10
    001C 40D0      SBCI	R29,0
    001D EA0A      LDI	R16,0xAA
    001E 8308      STD	Y+0,R16
    001F 2400      CLR	R0
    0020 E7E4      LDI	R30,0x74
    0021 E0F0      LDI	R31,0
    0022 E010      LDI	R17,0
    0023 37E4      CPI	R30,0x74
    0024 07F1      CPC	R31,R17
    0025 F011      BEQ	0x0028
    0026 9201      ST	R0,Z+
    0027 CFFB      RJMP	0x0023
    0028 8300      STD	Z+0,R16
    0029 E1EA      LDI	R30,0x1A
    002A E0F0      LDI	R31,0
    002B E6A0      LDI	R26,0x60
    002C E0B0      LDI	R27,0
    002D E010      LDI	R17,0
    002E 32EE      CPI	R30,0x2E
    002F 07F1      CPC	R31,R17
    0030 F021      BEQ	0x0035
    0031 95C8      LPM
    0032 9631      ADIW	R30,1
    0033 920D      ST	R0,X+
    0034 CFF9      RJMP	0x002E
    0035 D309      RCALL	_main
_exit:
    0036 CFFF      RJMP	_exit
_read_PID_E2P_Value:
  set_Target_value_l   --> Y+6
  set_Target_value_h   --> Y+5
  Kd_1                 --> Y+4
  Ki_1                 --> Y+3
  Kp_1                 --> Y+2
    0037 9727      SBIW	R28,7
FILE: D:\软件\PIDLIB\PIDTEXT.C
(0001) /*------------------------------------------------------------
(0002) ;------------------------------------------------------------
(0003) ;		     PID  LIB  
(0004) ;		     V0.1c
(0005) ; 	  	     zhongwh
(0006) ;		Copyright 2003-2005 
(0007) ;   	Email: hfkj01@163.com
(0008) ;        mtel : 13708004895
(0009) ;		2005-9-28 15:38:52
(0010) ;    ICC-AVR application builder
(0011) ;-------------------------------------------------------------
(0012) ;-------------------------------------------------------------
(0013) ;   	Target : ALL AVR 
(0014) ;		Crystal: 8Mhz					
(0015) ;-------------------------------------------------------------
(0016) ;-------------------------------------------------------------*/
(0017) 
(0018) #include <io8515v.h>
(0019) #include <macros.h>
(0020) #include <eeprom.h>
(0021) #define	 uchar unsigned char
(0022) #define	 uint  unsigned int
(0023) //
(0024) #define Kp_E2P_Addr		0x40
(0025) #define Ki_E2P_Addr 	0x41
(0026) #define Kd_E2P_Addr		0x42
(0027) #define Set_E2P_TargetV_Addr_h	0x43
(0028) #define Set_E2P_TargetV_Addr_l	0x44
(0029) uchar	Kp=0,Ki=0,Kd=0 ,s_e_0=0,s_e_1=0,s_e_2=0;//状态=1为负数
(0030) uint	Set_Target_Value=0,PID_OutValue=0,PID_OutValue_1=0,e_0=0,e_1=0,e_2=0,Check_Value=7;
(0031) //v=v0+Kp[(e_0-e_1)+Ki*e_0+Kd(e_0-2*e_1+e_2)]
(0032) void read_PID_E2P_Value(void)
(0033) {
(0034)  uchar set_Target_value_h,set_Target_value_l ,Kp_1,Ki_1,Kd_1;
(0035)  EEPROM_READ(Kp_E2P_Addr,Kp_1);
    0038 E081      LDI	R24,1
    0039 E090      LDI	R25,0
    003A 8399      STD	Y+1,R25
    003B 8388      STD	Y+0,R24
    003C 2F2C      MOV	R18,R28
    003D 2F3D      MOV	R19,R29
    003E 5F2E      SUBI	R18,0xFE
    003F 4F3F      SBCI	R19,0xFF
    0040 E400      LDI	R16,0x40
    0041 E010      LDI	R17,0
    0042 D343      RCALL	_EEPROMReadBytes
(0036)  if (Kp_1>=100){Kp=100;}else{Kp=Kp_1;}
    0043 818A      LDD	R24,Y+2
    0044 3684      CPI	R24,0x64
    0045 F020      BCS	0x004A
    0046 E684      LDI	R24,0x64
    0047 93800060  STS	0x60,R24
    0049 C003      RJMP	0x004D
    004A 802A      LDD	R2,Y+2
    004B 92200060  STS	0x60,R2
(0037)  EEPROM_READ(Ki_E2P_Addr,Ki_1);
    004D E081      LDI	R24,1
    004E E090      LDI	R25,0
    004F 8399      STD	Y+1,R25
    0050 8388      STD	Y+0,R24
    0051 2F2C      MOV	R18,R28
    0052 2F3D      MOV	R19,R29
    0053 5F2D      SUBI	R18,0xFD
    0054 4F3F      SBCI	R19,0xFF
    0055 E401      LDI	R16,0x41
    0056 E010      LDI	R17,0
    0057 D32E      RCALL	_EEPROMReadBytes
(0038)  if (Ki_1>=100){Ki=100;}else{Ki=Ki_1;}
    0058 818B      LDD	R24,Y+3
    0059 3684      CPI	R24,0x64
    005A F020      BCS	0x005F
    005B E684      LDI	R24,0x64
    005C 93800061  STS	0x61,R24
    005E C003      RJMP	0x0062
    005F 802B      LDD	R2,Y+3
    0060 92200061  STS	0x61,R2
(0039)  EEPROM_READ(Kd_E2P_Addr,Kd_1);
    0062 E081      LDI	R24,1
    0063 E090      LDI	R25,0
    0064 8399      STD	Y+1,R25
    0065 8388      STD	Y+0,R24
    0066 2F2C      MOV	R18,R28
    0067 2F3D      MOV	R19,R29
    0068 5F2C      SUBI	R18,0xFC
    0069 4F3F      SBCI	R19,0xFF
    006A E402      LDI	R16,0x42
    006B E010      LDI	R17,0
    006C D319      RCALL	_EEPROMReadBytes
(0040)  if (Kd_1>=100){Kd=100;}else{Kd=Kd_1;}
    006D 818C      LDD	R24,Y+4
    006E 3684      CPI	R24,0x64
    006F F020      BCS	0x0074
    0070 E684      LDI	R24,0x64
    0071 93800062  STS	0x62,R24
    0073 C003      RJMP	0x0077
    0074 802C      LDD	R2,Y+4
    0075 92200062  STS	0x62,R2
(0041)  EEPROM_READ(Set_E2P_TargetV_Addr_h,set_Target_value_h);
    0077 E081      LDI	R24,1
    0078 E090      LDI	R25,0
    0079 8399      STD	Y+1,R25
    007A 8388      STD	Y+0,R24
    007B 2F2C      MOV	R18,R28
    007C 2F3D      MOV	R19,R29
    007D 5F2B      SUBI	R18,0xFB
    007E 4F3F      SBCI	R19,0xFF
    007F E403      LDI	R16,0x43
    0080 E010      LDI	R17,0
    0081 D304      RCALL	_EEPROMReadBytes
(0042)  EEPROM_READ(Set_E2P_TargetV_Addr_l,set_Target_value_l);
    0082 E081      LDI	R24,1
    0083 E090      LDI	R25,0
    0084 8399      STD	Y+1,R25
    0085 8388      STD	Y+0,R24
    0086 2F2C      MOV	R18,R28
    0087 2F3D      MOV	R19,R29
    0088 5F2A      SUBI	R18,0xFA
    0089 4F3F      SBCI	R19,0xFF
    008A E404      LDI	R16,0x44
    008B E010      LDI	R17,0
    008C D2F9      RCALL	_EEPROMReadBytes
(0043)  Set_Target_Value=set_Target_value_h;
    008D 802D      LDD	R2,Y+5
    008E 2433      CLR	R3
    008F 92300067  STS	0x67,R3
    0091 92200066  STS	0x66,R2
(0044)  Set_Target_Value=(Set_Target_Value<<8)+set_Target_value_l;
    0093 802E      LDD	R2,Y+6
    0094 90400066  LDS	R4,0x66
    0096 90500067  LDS	R5,0x67
    0098 2C34      MOV	R3,R4
    0099 92300067  STS	0x67,R3
    009B 92200066  STS	0x66,R2
(0045)  
(0046)  
(0047) }	
    009D 9627      ADIW	R28,7
    009E 9508      RET
_PID_Count:
  Ej                   --> Y+6
  Eh                   --> Y+4
  Ee                   --> Y+2
  Ei                   --> Y+0
  s_Ei                 --> R20
  s_Eh                 --> R6
  s_Eg                 --> Y+13
  s_Ef                 --> R8
  s_Ee                 --> Y+12
  s_Ec                 --> Y+11
  s_Eb                 --> Y+10
  Eg                   --> R12
  Ef                   --> R10
  Ed                   --> R12
  Eb                   --> R14
  Ea                   --> R22
  s_Ed                 --> Y+9
  s_Ea                 --> Y+8
  Ec                   --> R10
    009F D2C8      RCALL	push_gset5
    00A0 972E      SBIW	R28,0xE
(0048) void PID_Count(void)
(0049) { uint Ea,Eb,Ec,Ed,Ee,Ef,Eg,Eh,Ei,Ej;
(0050)   uchar s_Ea=0,s_Eb=0,s_Ec=0,s_Ed=0,s_Ee=0,s_Ef=0,s_Eg=0,s_Eh=0,s_Ei=0;
    00A1 2400      CLR	R0
    00A2 8608      STD	Y+8,R0
    00A3 860A      STD	Y+10,R0
    00A4 860B      STD	Y+11,R0
    00A5 8609      STD	Y+9,R0
    00A6 860C      STD	Y+12,R0
    00A7 2488      CLR	R8
    00A8 860D      STD	Y+13,R0
    00A9 2466      CLR	R6
    00AA 2744      CLR	R20
(0051) //e_0
(0052)  if (Set_Target_Value>=Check_Value)
    00AB 90200072  LDS	R2,0x72
    00AD 90300073  LDS	R3,0x73
    00AF 90400066  LDS	R4,0x66
    00B1 90500067  LDS	R5,0x67
    00B3 1442      CP	R4,R2
    00B4 0453      CPC	R5,R3
    00B5 F050      BCS	0x00C0
(0053)  {
(0054)   e_0=Set_Target_Value-Check_Value;
    00B6 1842      SUB	R4,R2
    00B7 0853      SBC	R5,R3
    00B8 9250006D  STS	0x6D,R5
    00BA 9240006C  STS	0x6C,R4
(0055)   s_e_0=0;
    00BC 2422      CLR	R2
    00BD 92200063  STS	0x63,R2
(0056)  }
    00BF C011      RJMP	0x00D1
(0057)  else
(0058)  {
(0059)   e_0=Check_Value-Set_Target_Value;
    00C0 90200066  LDS	R2,0x66
    00C2 90300067  LDS	R3,0x67
    00C4 90400072  LDS	R4,0x72
    00C6 90500073  LDS	R5,0x73
    00C8 1842      SUB	R4,R2
    00C9 0853      SBC	R5,R3
    00CA 9250006D  STS	0x6D,R5
    00CC 9240006C  STS	0x6C,R4
(0060)   s_e_0=1;
    00CE E081      LDI	R24,1
    00CF 93800063  STS	0x63,R24
(0061)  }
(0062) //Ea=e_0-e_1
(0063) if (e_0>=e_1)
    00D1 9020006E  LDS	R2,0x6E
    00D3 9030006F  LDS	R3,0x6F
    00D5 9040006C  LDS	R4,0x6C
    00D7 9050006D  LDS	R5,0x6D
    00D9 1442      CP	R4,R2
    00DA 0453      CPC	R5,R3
    00DB F408      BCC	0x00DD
    00DC C03C      RJMP	0x0119
(0064) {
(0065)    if (s_e_0==0)
    00DD 90200063  LDS	R2,0x63
    00DF 2022      TST	R2
    00E0 F4C1      BNE	0x00F9
(0066)    {
(0067)    	  if (s_e_1==0)
    00E1 90200064  LDS	R2,0x64
    00E3 2022      TST	R2
    00E4 F449      BNE	0x00EE
(0068)  	  {
(0069) 	  Ea=e_0-e_1;
    00E5 9020006E  LDS	R2,0x6E
    00E7 9030006F  LDS	R3,0x6F
    00E9 2D64      MOV	R22,R4
    00EA 2D75      MOV	R23,R5
    00EB 1962      SUB	R22,R2
    00EC 0973      SBC	R23,R3
(0070) 	  }
    00ED C06C      RJMP	0x015A
(0071) 	  else
(0072) 	  {
(0073) 	  Ea=e_0+e_1;
    00EE 9020006E  LDS	R2,0x6E
    00F0 9030006F  LDS	R3,0x6F
    00F2 9160006C  LDS	R22,0x6C
    00F4 9170006D  LDS	R23,0x6D
    00F6 0D62      ADD	R22,R2
    00F7 1D73      ADC	R23,R3
(0074) 	  }
(0075)    }
    00F8 C061      RJMP	0x015A
(0076)    else
(0077)    {
(0078)    	  if (s_e_1==0)
    00F9 90200064  LDS	R2,0x64
    00FB 2022      TST	R2
    00FC F471      BNE	0x010B
(0079)  	  {
(0080) 	   Ea=e_0+e_1;
    00FD 9020006E  LDS	R2,0x6E
    00FF 9030006F  LDS	R3,0x6F
    0101 9160006C  LDS	R22,0x6C
    0103 9170006D  LDS	R23,0x6D
    0105 0D62      ADD	R22,R2
    0106 1D73      ADC	R23,R3
(0081) 	   s_Ea=1;
    0107 2400      CLR	R0
    0108 9403      INC	R0
    0109 8608      STD	Y+8,R0
(0082) 	  }
    010A C04F      RJMP	0x015A
(0083) 	  else
(0084) 	  {
(0085) 	   Ea=e_0-e_1;
    010B 9020006E  LDS	R2,0x6E
    010D 9030006F  LDS	R3,0x6F
    010F 9160006C  LDS	R22,0x6C
    0111 9170006D  LDS	R23,0x6D
    0113 1962      SUB	R22,R2
    0114 0973      SBC	R23,R3
(0086) 	   s_Ea=1;
    0115 2400      CLR	R0
    0116 9403      INC	R0
    0117 8608      STD	Y+8,R0
(0087) 	  }
(0088)    }
(0089)  }
    0118 C041      RJMP	0x015A
(0090)  else
(0091)  {
(0092)     if (s_e_0==0)
    0119 90200063  LDS	R2,0x63
    011B 2022      TST	R2
    011C F4F9      BNE	0x013C
(0093)    {
(0094)    	  if (s_e_1==0)
    011D 90200064  LDS	R2,0x64
    011F 2022      TST	R2
    0120 F471      BNE	0x012F
(0095)  	  {
(0096) 	   Ea=e_1-e_0;
    0121 9020006C  LDS	R2,0x6C
    0123 9030006D  LDS	R3,0x6D
    0125 9160006E  LDS	R22,0x6E
    0127 9170006F  LDS	R23,0x6F
    0129 1962      SUB	R22,R2
    012A 0973      SBC	R23,R3
(0097) 	   s_Ea=1;
    012B 2400      CLR	R0
    012C 9403      INC	R0
    012D 8608      STD	Y+8,R0
(0098) 	  }
    012E C02B      RJMP	0x015A
(0099) 	  else
(0100) 	  {
(0101) 	   Ea=e_1+e_0;
    012F 9020006C  LDS	R2,0x6C
    0131 9030006D  LDS	R3,0x6D
    0133 9160006E  LDS	R22,0x6E
    0135 9170006F  LDS	R23,0x6F
    0137 0D62      ADD	R22,R2
    0138 1D73      ADC	R23,R3
(0102) 	   s_Ea=0;
    0139 2400      CLR	R0
    013A 8608      STD	Y+8,R0
(0103) 	  }
(0104)    }
    013B C01E      RJMP	0x015A
(0105)    else
(0106)    {
(0107)    	  if (s_e_1==0)
    013C 90200064  LDS	R2,0x64
    013E 2022      TST	R2

⌨️ 快捷键说明

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