📄 pid.lst
字号:
118
119 0019 _PID_SAT_CHK:
120 0019 6a8b LACC *,16,AR3 ; get upper part in ACC_L
121 001a 7806 ADRK #6 ; now AR3 points to upper_limit.
122
123 001b 6580 SUB *,16
124
125 ; do un - upper limit, this should NOT be ve.
126 ; if so it would exceed limits and must be clamped.
127 ; if less than 0 or equal to zero, branch to skip clamping.
128
129 001c e3cc BCND _PID_PLUS_OK,LEQ
001d 0024'
130
131 001e _PID_PLUS_CLAMP:
132
133 001e 69aa LACL *+,AR2 ; get upper limit.
134 ; inc AR3 to point to lower limit.
135 ;
136 001f 90a0 SACL *+ ; store in un_H
137 0020 b900 LACK #0 ;
138 0021 9090 SACL *- ; AR2 points once again to un_H
139
140 0022 7980 B _PID_CLAMPING_DONE
0023 002d'
141
142 0024 _PID_PLUS_OK:
143
144 0024 _PID_NEG_CHK:
145 0024 8baa MAR *+,AR2 ; incoming ARP=AR3 pointing to upper_limit
146 ; inc AR3 to point to lower limit.
147 ; AR2 points to un_H
148
149 0025 6a8b LACC *,16,AR3 ; get un_H
150
151 0026 6580 SUB *,16
152
153 ; do un_h -lower limit, this should not be negative.
154 ; so if it went lower than the limit then must be clamped to lower limit.
155 ; if greater than or equal to zero skip clamp.
156
157
158 0027 e38c BCND _PID_NEG_OK,GEQ
0028 002d'
159
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00 Mon Aug 18 20:35:54 2003
Copyright (c) 1987-1999 Texas Instruments Incorporated
pid.asm PAGE 4
160 0029 _PID_NEG_CLAMP:
161
162 0029 698a LACL *,AR2 ; get lower limit.
163 002a 90a0 SACL *+ ; store lower limit to un_H
164 002b b900 LACK #0 ;
165 002c 909b SACL *-,AR3 ; store zero for un_L
166 ; ARP=AR3
167
168 ; AR2 still points to un_H
169
170 002d _PID_NEG_OK:
171 002d _PID_CLAMPING_DONE:
172
173 ; At this point the state is :
174 ; un_H:un_L clamped !!
175 ; ARP=AR3
176 ; AR2->un_H
177 ; AR3->lower limit
178
179 002d 7c03 SBRK #3 ; point AR3 to Kf.
180
181 002e 8b8a MAR *,AR2 ; ARP=AR2->un_H
182
183 002f 6aa0 LACC *+,16 ; get un_H in ACCH
184 0030 2080 ADD * ; get un_L in ACCL.
185
186 ; AR2 now points to un_L
187 0031 7809 ADRK #9 ; AR2 now points to rn
188
189 0032 738b LT *,AR3 ; get rn in TREG.
190 0033 549a MPY *-,AR2 ; multiply by Kf.
191 ; dec AR3 to point to Kx.
192
193
194 0034 be04 APAC ; get PID+FF.
195
196 0035 7803 ADRK #3 ; point AR2 to output.
197
198 0036 988b SACH *,AR3 ; store u_H in output.
199
200 0037 038a LAR AR3,*,AR2 ; get Kx in AR3
201 ; ARP=AR2.
202
203 0038 b900 LACK #0 ; get zero in acc.
204
205
206 0039 _PID_MULT_LOOP:
207 0039 618b ADD *,16,AR3 ; add the output to the acc
208 ; make current AR=AR3 for BANZ loop.
209
210 003a 7b9a BANZ _PID_MULT_LOOP,*-,AR2
003b 0039'
211
212 ; here ARP=AR2
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00 Mon Aug 18 20:35:54 2003
Copyright (c) 1987-1999 Texas Instruments Incorporated
pid.asm PAGE 5
213
214 003c 9880 SACH * ; store multiplied output in 'output'
215
216
217
218 003d _PID_DIAG_EXIT:
219
220 003d 6989 LACL *,AR1 ; Return 'output' in accumulator.
221 ; ARP=AR1 in prep for return
222 003e be42 CLRC OVM
223 003f bf00 SPM 0
224
225 ;===========================================================================
226 0040 7c02 SBRK 2
227 0041 0090 LAR AR0,*-
228 0042 7680 PSHD *
229 0043 ef00 RET
230
231
232
No Errors, No Warnings
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -