📄 pidtext.s
字号:
.module PIDTEXT.C
.area data(ram, con, rel)
_Kp::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e Kp _Kp c
_Ki::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e Ki _Ki c
_Kd::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e Kd _Kd c
_s_e_0::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e s_e_0 _s_e_0 c
_s_e_1::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e s_e_1 _s_e_1 c
_s_e_2::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e s_e_2 _s_e_2 c
_Set_Target_Value::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e Set_Target_Value _Set_Target_Value i
_PID_OutValue::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e PID_OutValue _PID_OutValue i
_PID_OutValue_1::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e PID_OutValue_1 _PID_OutValue_1 i
_e_0::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e e_0 _e_0 i
_e_1::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e e_1 _e_1 i
_e_2::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e e_2 _e_2 i
_Check_Value::
.blkb 2
.area idata
.word 7
.area data(ram, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbsym e Check_Value _Check_Value i
.area text(rom, con, rel)
.dbfile D:\软件\PIDLIB\PIDTEXT.C
.dbfunc e read_PID_E2P_Value _read_PID_E2P_Value fV
; set_Target_value_l -> y+6
; set_Target_value_h -> y+5
; Kd_1 -> y+4
; Ki_1 -> y+3
; Kp_1 -> y+2
.even
_read_PID_E2P_Value::
sbiw R28,7
.dbline -1
.dbline 33
; /*------------------------------------------------------------
; ;------------------------------------------------------------
; ; PID LIB
; ; V0.1c
; ; zhongwh
; ; Copyright 2003-2005
; ; Email: hfkj01@163.com
; ; mtel : 13708004895
; ; 2005-9-28 15:38:52
; ; ICC-AVR application builder
; ;-------------------------------------------------------------
; ;-------------------------------------------------------------
; ; Target : ALL AVR
; ; Crystal: 8Mhz
; ;-------------------------------------------------------------
; ;-------------------------------------------------------------*/
;
; #include <io8515v.h>
; #include <macros.h>
; #include <eeprom.h>
; #define uchar unsigned char
; #define uint unsigned int
; //
; #define Kp_E2P_Addr 0x40
; #define Ki_E2P_Addr 0x41
; #define Kd_E2P_Addr 0x42
; #define Set_E2P_TargetV_Addr_h 0x43
; #define Set_E2P_TargetV_Addr_l 0x44
; uchar Kp=0,Ki=0,Kd=0 ,s_e_0=0,s_e_1=0,s_e_2=0;//状态=1为负数
; uint Set_Target_Value=0,PID_OutValue=0,PID_OutValue_1=0,e_0=0,e_1=0,e_2=0,Check_Value=7;
; //v=v0+Kp[(e_0-e_1)+Ki*e_0+Kd(e_0-2*e_1+e_2)]
; void read_PID_E2P_Value(void)
; {
.dbline 35
; uchar set_Target_value_h,set_Target_value_l ,Kp_1,Ki_1,Kd_1;
; EEPROM_READ(Kp_E2P_Addr,Kp_1);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
mov R18,R28
mov R19,R29
subi R18,254 ; offset = 2
sbci R19,255
ldi R16,64
ldi R17,0
rcall _EEPROMReadBytes
.dbline 36
ldd R24,y+2
cpi R24,100
brlo L2
.dbline 36
.dbline 36
ldi R24,100
sts _Kp,R24
.dbline 36
rjmp L3
L2:
.dbline 36
; if (Kp_1>=100){Kp=100;}else{Kp=Kp_1;}
.dbline 36
ldd R2,y+2
sts _Kp,R2
.dbline 36
L3:
.dbline 37
; EEPROM_READ(Ki_E2P_Addr,Ki_1);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
mov R18,R28
mov R19,R29
subi R18,253 ; offset = 3
sbci R19,255
ldi R16,65
ldi R17,0
rcall _EEPROMReadBytes
.dbline 38
ldd R24,y+3
cpi R24,100
brlo L4
.dbline 38
.dbline 38
ldi R24,100
sts _Ki,R24
.dbline 38
rjmp L5
L4:
.dbline 38
; if (Ki_1>=100){Ki=100;}else{Ki=Ki_1;}
.dbline 38
ldd R2,y+3
sts _Ki,R2
.dbline 38
L5:
.dbline 39
; EEPROM_READ(Kd_E2P_Addr,Kd_1);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
mov R18,R28
mov R19,R29
subi R18,252 ; offset = 4
sbci R19,255
ldi R16,66
ldi R17,0
rcall _EEPROMReadBytes
.dbline 40
ldd R24,y+4
cpi R24,100
brlo L6
.dbline 40
.dbline 40
ldi R24,100
sts _Kd,R24
.dbline 40
rjmp L7
L6:
.dbline 40
; if (Kd_1>=100){Kd=100;}else{Kd=Kd_1;}
.dbline 40
ldd R2,y+4
sts _Kd,R2
.dbline 40
L7:
.dbline 41
; EEPROM_READ(Set_E2P_TargetV_Addr_h,set_Target_value_h);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
mov R18,R28
mov R19,R29
subi R18,251 ; offset = 5
sbci R19,255
ldi R16,67
ldi R17,0
rcall _EEPROMReadBytes
.dbline 42
; EEPROM_READ(Set_E2P_TargetV_Addr_l,set_Target_value_l);
ldi R24,1
ldi R25,0
std y+1,R25
std y+0,R24
mov R18,R28
mov R19,R29
subi R18,250 ; offset = 6
sbci R19,255
ldi R16,68
ldi R17,0
rcall _EEPROMReadBytes
.dbline 43
; Set_Target_Value=set_Target_value_h;
ldd R2,y+5
clr R3
sts _Set_Target_Value+1,R3
sts _Set_Target_Value,R2
.dbline 44
; Set_Target_Value=(Set_Target_Value<<8)+set_Target_value_l;
ldd R2,y+6
lds R4,_Set_Target_Value
lds R5,_Set_Target_Value+1
mov R3,R4
sts _Set_Target_Value+1,R3
sts _Set_Target_Value,R2
.dbline -2
.dbline 47
;
;
; }
L1:
adiw R28,7
.dbline 0 ; func end
ret
.dbsym l set_Target_value_l 6 c
.dbsym l set_Target_value_h 5 c
.dbsym l Kd_1 4 c
.dbsym l Ki_1 3 c
.dbsym l Kp_1 2 c
.dbend
.dbfunc e PID_Count _PID_Count fV
; 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,R13
; Ef -> R10,R11
; Ed -> R12,R13
; Eb -> R14,R15
; Ea -> R22,R23
; s_Ed -> y+9
; s_Ea -> y+8
; Ec -> R10,R11
.even
_PID_Count::
rcall push_gset5
sbiw R28,14
.dbline -1
.dbline 49
; void PID_Count(void)
; { uint Ea,Eb,Ec,Ed,Ee,Ef,Eg,Eh,Ei,Ej;
.dbline 50
; 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;
clr R0
std y+8,R0
.dbline 50
std y+10,R0
.dbline 50
std y+11,R0
.dbline 50
std y+9,R0
.dbline 50
std y+12,R0
.dbline 50
clr R8
.dbline 50
std y+13,R0
.dbline 50
clr R6
.dbline 50
clr R20
.dbline 52
; //e_0
; if (Set_Target_Value>=Check_Value)
lds R2,_Check_Value
lds R3,_Check_Value+1
lds R4,_Set_Target_Value
lds R5,_Set_Target_Value+1
cp R4,R2
cpc R5,R3
brlo L9
.dbline 53
; {
.dbline 54
; e_0=Set_Target_Value-Check_Value;
sub R4,R2
sbc R5,R3
sts _e_0+1,R5
sts _e_0,R4
.dbline 55
; s_e_0=0;
clr R2
sts _s_e_0,R2
.dbline 56
; }
rjmp L10
L9:
.dbline 58
; else
; {
.dbline 59
; e_0=Check_Value-Set_Target_Value;
lds R2,_Set_Target_Value
lds R3,_Set_Target_Value+1
lds R4,_Check_Value
lds R5,_Check_Value+1
sub R4,R2
sbc R5,R3
sts _e_0+1,R5
sts _e_0,R4
.dbline 60
; s_e_0=1;
ldi R24,1
sts _s_e_0,R24
.dbline 61
; }
L10:
.dbline 63
; //Ea=e_0-e_1
; if (e_0>=e_1)
lds R2,_e_1
lds R3,_e_1+1
lds R4,_e_0
lds R5,_e_0+1
cp R4,R2
cpc R5,R3
brsh X0
rjmp L11
X0:
.dbline 64
; {
.dbline 65
; if (s_e_0==0)
lds R2,_s_e_0
tst R2
brne L13
.dbline 66
; {
.dbline 67
; if (s_e_1==0)
lds R2,_s_e_1
tst R2
brne L15
.dbline 68
; {
.dbline 69
; Ea=e_0-e_1;
lds R2,_e_1
lds R3,_e_1+1
mov R22,R4
mov R23,R5
sub R22,R2
sbc R23,R3
.dbline 70
; }
rjmp L12
L15:
.dbline 72
; else
; {
.dbline 73
; Ea=e_0+e_1;
lds R2,_e_1
lds R3,_e_1+1
lds R22,_e_0
lds R23,_e_0+1
add R22,R2
adc R23,R3
.dbline 74
; }
.dbline 75
; }
rjmp L12
L13:
.dbline 77
; else
; {
.dbline 78
; if (s_e_1==0)
lds R2,_s_e_1
tst R2
brne L17
.dbline 79
; {
.dbline 80
; Ea=e_0+e_1;
lds R2,_e_1
lds R3,_e_1+1
lds R22,_e_0
lds R23,_e_0+1
add R22,R2
adc R23,R3
.dbline 81
; s_Ea=1;
clr R0
inc R0
std y+8,R0
.dbline 82
; }
rjmp L12
L17:
.dbline 84
; else
; {
.dbline 85
; Ea=e_0-e_1;
lds R2,_e_1
lds R3,_e_1+1
lds R22,_e_0
lds R23,_e_0+1
sub R22,R2
sbc R23,R3
.dbline 86
; s_Ea=1;
clr R0
inc R0
std y+8,R0
.dbline 87
; }
.dbline 88
; }
.dbline 89
; }
rjmp L12
L11:
.dbline 91
; else
; {
.dbline 92
; if (s_e_0==0)
lds R2,_s_e_0
tst R2
brne L19
.dbline 93
; {
.dbline 94
; if (s_e_1==0)
lds R2,_s_e_1
tst R2
brne L21
.dbline 95
; {
.dbline 96
; Ea=e_1-e_0;
lds R2,_e_0
lds R3,_e_0+1
lds R22,_e_1
lds R23,_e_1+1
sub R22,R2
sbc R23,R3
.dbline 97
; s_Ea=1;
clr R0
inc R0
std y+8,R0
.dbline 98
; }
rjmp L20
L21:
.dbline 100
; else
; {
.dbline 101
; Ea=e_1+e_0;
lds R2,_e_0
lds R3,_e_0+1
lds R22,_e_1
lds R23,_e_1+1
add R22,R2
adc R23,R3
.dbline 102
; s_Ea=0;
clr R0
std y+8,R0
.dbline 103
; }
.dbline 104
; }
rjmp L20
L19:
.dbline 106
; else
; {
.dbline 107
; if (s_e_1==0)
lds R2,_s_e_1
tst R2
brne L23
.dbline 108
; {
.dbline 109
; Ea=e_1+e_0;
lds R2,_e_0
lds R3,_e_0+1
lds R22,_e_1
lds R23,_e_1+1
add R22,R2
adc R23,R3
.dbline 110
; s_Ea=1;
clr R0
inc R0
std y+8,R0
.dbline 111
; }
rjmp L24
L23:
.dbline 113
; else
; {
.dbline 114
; Ea=e_1-e_0;
lds R2,_e_0
lds R3,_e_0+1
lds R22,_e_1
lds R23,_e_1+1
sub R22,R2
sbc R23,R3
.dbline 115
; s_Ea=0;
clr R0
std y+8,R0
.dbline 116
; }
L24:
.dbline 117
; }
L20:
.dbline 118
; }
L12:
.dbline 120
; //Eb=Ki*e_0
; if (s_e_0==0)
lds R2,_s_e_0
tst R2
brne L25
.dbline 121
; {
.dbline 122
; Eb=Ki*e_0;
lds R18,_e_0
lds R19,_e_0+1
lds R16,_Ki
clr R17
rcall mpy16s
mov R14,R16
mov R15,R17
.dbline 123
; }
rjmp L26
L25:
.dbline 125
; else
; {
.dbline 126
; Eb=Ki*e_0;
lds R18,_e_0
lds R19,_e_0+1
lds R16,_Ki
clr R17
rcall mpy16s
mov R14,R16
mov R15,R17
.dbline 127
; s_Eb=1;
clr R0
inc R0
std y+10,R0
.dbline 128
; }
L26:
.dbline 130
; //Ec=2*e_1
; if (s_e_1==0)
lds R2,_s_e_1
tst R2
brne L27
.dbline 131
; {
.dbline 132
; Ec=2*e_1;
lds R10,_e_1
lds R11,_e_1+1
lsl R10
rol R11
.dbline 133
; }
rjmp L28
L27:
.dbline 135
; else
; {
.dbline 136
; Ec=2*e_1;
lds R10,_e_1
lds R11,_e_1+1
lsl R10
rol R11
.dbline 137
; s_Ec=1;
clr R0
inc R0
std y+11,R0
.dbline 138
; }
L28:
.dbline 140
; //Ed=e_0-2*e_1(Ed=e_0-Ec)
; if (e_0>=Ec)
lds R2,_e_0
lds R3,_e_0+1
cp R2,R10
cpc R3,R11
brlo L29
.dbline 141
; {
.dbline 142
; if (s_e_0==0)
lds R2,_s_e_0
tst R2
brne L31
.dbline 143
; {
.dbline 144
; if (s_Ec==0)
ldd R0,y+11
tst R0
brne L33
.dbline 145
; {
.dbline 146
; Ed=e_0-Ec;
lds R12,_e_0
lds R13,_e_0+1
sub R12,R10
sbc R13,R11
.dbline 147
; }
rjmp L30
L33:
.dbline 149
; else
; {
.dbline 150
; Ed=e_0+Ec;
lds R12,_e_0
lds R13,_e_0+1
add R12,R10
adc R13,R11
.dbline 151
; }
.dbline 152
; }
rjmp L30
L31:
.dbline 154
; else
; {
.dbline 155
; if (s_Ec==0)
ldd R0,y+11
tst R0
brne L35
.dbline 156
; {
.dbline 157
; Ed=e_0+Ec;
lds R12,_e_0
lds R13,_e_0+1
add R12,R10
adc R13,R11
.dbline 158
; s_Ed=1;
clr R0
inc R0
std y+9,R0
.dbline 159
; }
rjmp L30
L35:
.dbline 161
; else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -