📄 pid.lst
字号:
__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 + -