📄 mc_pid_regulators.ls
字号:
1 ; C Compiler for STM8 (COSMIC Software)
2 ; Parser V4.9.10 - 10 Feb 2011
3 ; Generator (Limited) V4.3.6 - 15 Feb 2011
4 ; Optimizer V4.3.5 - 15 Feb 2011
269 ; 33 s16 PI_Regulator(s16 hReference, s16 hPresentFeedback, PPID_Struct_t PID_Struct)
269 ; 34 {
271 switch .text
272 0000 _PI_Regulator:
274 0000 89 pushw x
275 0001 5218 subw sp,#24
276 00000018 OFST: set 24
279 ; 39 wError= (s32)(hReference - hPresentFeedback);
281 0003 72f01d subw x,(OFST+5,sp)
282 0006 cd0000 call c_itolx
284 0009 96 ldw x,sp
285 000a 1c0011 addw x,#OFST-7
286 000d cd0000 call c_rtol
288 ; 42 wProportional_Term = PID_Struct->pPID_Var->hKp_Gain * wError;
290 0010 1e1f ldw x,(OFST+7,sp)
291 0012 fe ldw x,(x)
292 0013 fe ldw x,(x)
293 0014 cd0000 call c_itolx
295 0017 96 ldw x,sp
296 0018 1c0011 addw x,#OFST-7
297 001b cd0000 call c_lmul
299 001e 96 ldw x,sp
300 001f 1c000d addw x,#OFST-11
301 0022 cd0000 call c_rtol
303 ; 45 if (PID_Struct->pPID_Var->hKi_Gain == 0)
305 0025 1e1f ldw x,(OFST+7,sp)
306 0027 fe ldw x,(x)
307 0028 e603 ld a,(3,x)
308 002a ea02 or a,(2,x)
309 002c 260c jrne L151
310 ; 47 PID_Struct->pPID_Var->wIntegral = 0;
312 002e 1e1f ldw x,(OFST+7,sp)
313 0030 fe ldw x,(x)
314 0031 e708 ld (8,x),a
315 0033 e709 ld (9,x),a
316 0035 e707 ld (7,x),a
318 0037 cc0111 jp LC002
319 003a L151:
320 ; 51 wIntegral_Term = PID_Struct->pPID_Var->hKi_Gain * wError;
322 003a 1e1f ldw x,(OFST+7,sp)
323 003c fe ldw x,(x)
324 003d ee02 ldw x,(2,x)
325 003f cd0000 call c_itolx
327 0042 96 ldw x,sp
328 0043 1c0011 addw x,#OFST-7
329 0046 cd0000 call c_lmul
331 0049 96 ldw x,sp
332 004a 1c0011 addw x,#OFST-7
333 004d cd0000 call c_rtol
335 ; 52 wIntegral_sum_temp = PID_Struct->pPID_Var->wIntegral + wIntegral_Term;
337 0050 1e1f ldw x,(OFST+7,sp)
338 0052 fe ldw x,(x)
339 0053 1c0006 addw x,#6
340 0056 cd0000 call c_ltor
342 0059 96 ldw x,sp
343 005a 1c0011 addw x,#OFST-7
344 005d cd0000 call c_ladd
346 0060 96 ldw x,sp
347 0061 1c0015 addw x,#OFST-3
348 0064 cd0000 call c_rtol
350 ; 54 if (wIntegral_sum_temp > 0)
352 0067 96 ldw x,sp
353 0068 1c0015 addw x,#OFST-3
354 006b cd0000 call c_lzmp
356 006e 2d13 jrsle L551
357 ; 56 if (PID_Struct->pPID_Var->wIntegral < 0)
359 0070 1e1f ldw x,(OFST+7,sp)
360 0072 fe ldw x,(x)
361 0073 e606 ld a,(6,x)
362 0075 2a2a jrpl L361
363 ; 58 if (wIntegral_Term < 0)
365 0077 7b11 ld a,(OFST-7,sp)
366 0079 2a26 jrpl L361
367 ; 60 wIntegral_sum_temp = S32_MIN;
369 007b 5f clrw x
370 007c 1f17 ldw (OFST-1,sp),x
371 007e ae8000 ldw x,#-32768
372 0081 201c jp LC001
373 0083 L551:
374 ; 66 if (PID_Struct->pPID_Var->wIntegral > 0)
376 0083 1e1f ldw x,(OFST+7,sp)
377 0085 fe ldw x,(x)
378 0086 1c0006 addw x,#6
379 0089 cd0000 call c_lzmp
381 008c 2d13 jrsle L361
382 ; 68 if (wIntegral_Term > 0)
384 008e 96 ldw x,sp
385 008f 1c0011 addw x,#OFST-7
386 0092 cd0000 call c_lzmp
388 0095 2d0a jrsle L361
389 ; 70 wIntegral_sum_temp = S32_MAX;
391 0097 aeffff ldw x,#65535
392 009a 1f17 ldw (OFST-1,sp),x
393 009c ae7fff ldw x,#32767
394 009f LC001:
395 009f 1f15 ldw (OFST-3,sp),x
396 00a1 L361:
397 ; 75 if (wIntegral_sum_temp > PID_Struct->pPID_Const->wUpper_Limit_Integral)
399 00a1 1e1f ldw x,(OFST+7,sp)
400 00a3 ee02 ldw x,(2,x)
401 00a5 1c0010 addw x,#16
402 00a8 cd0000 call c_ltor
404 00ab 96 ldw x,sp
405 00ac 1c0015 addw x,#OFST-3
406 00af cd0000 call c_lcmp
408 00b2 2e1e jrsge L171
409 ; 77 PID_Struct->pPID_Var->wIntegral = PID_Struct->pPID_Const->wUpper_Limit_Integral;
411 00b4 1e1f ldw x,(OFST+7,sp)
412 00b6 161f ldw y,(OFST+7,sp)
413 00b8 ee02 ldw x,(2,x)
414 00ba 90fe ldw y,(y)
415 00bc e613 ld a,(19,x)
416 00be 90e709 ld (9,y),a
417 00c1 e612 ld a,(18,x)
418 00c3 90e708 ld (8,y),a
419 00c6 e611 ld a,(17,x)
420 00c8 90e707 ld (7,y),a
421 00cb e610 ld a,(16,x)
422 00cd LC003:
423 00cd 90e706 ld (6,y),a
425 00d0 2041 jra L351
426 00d2 L171:
427 ; 79 else if (wIntegral_sum_temp < PID_Struct->pPID_Const->wLower_Limit_Integral)
429 00d2 1e1f ldw x,(OFST+7,sp)
430 00d4 ee02 ldw x,(2,x)
431 00d6 1c000c addw x,#12
432 00d9 cd0000 call c_ltor
434 00dc 96 ldw x,sp
435 00dd 1c0015 addw x,#OFST-3
436 00e0 cd0000 call c_lcmp
438 00e3 2d1b jrsle L571
439 ; 81 PID_Struct->pPID_Var->wIntegral = PID_Struct->pPID_Const->wLower_Limit_Integral;
441 00e5 1e1f ldw x,(OFST+7,sp)
442 00e7 161f ldw y,(OFST+7,sp)
443 00e9 ee02 ldw x,(2,x)
444 00eb 90fe ldw y,(y)
445 00ed e60f ld a,(15,x)
446 00ef 90e709 ld (9,y),a
447 00f2 e60e ld a,(14,x)
448 00f4 90e708 ld (8,y),a
449 00f7 e60d ld a,(13,x)
450 00f9 90e707 ld (7,y),a
451 00fc e60c ld a,(12,x)
453 00fe 20cd jp LC003
454 0100 L571:
455 ; 85 PID_Struct->pPID_Var->wIntegral = wIntegral_sum_temp;
457 0100 1e1f ldw x,(OFST+7,sp)
458 0102 fe ldw x,(x)
459 0103 7b18 ld a,(OFST+0,sp)
460 0105 e709 ld (9,x),a
461 0107 7b17 ld a,(OFST-1,sp)
462 0109 e708 ld (8,x),a
463 010b 7b16 ld a,(OFST-2,sp)
464 010d e707 ld (7,x),a
465 010f 7b15 ld a,(OFST-3,sp)
466 0111 LC002:
467 0111 e706 ld (6,x),a
468 0113 L351:
469 ; 89 houtput_32 = (wProportional_Term/PID_Struct->pPID_Const->hKp_Divisor+
469 ; 90 PID_Struct->pPID_Var->wIntegral/PID_Struct->pPID_Const->hKi_Divisor);
471 0113 1e1f ldw x,(OFST+7,sp)
472 0115 ee02 ldw x,(2,x)
473 0117 ee04 ldw x,(4,x)
474 0119 cd0000 call c_uitolx
476 011c 96 ldw x,sp
477 011d 1c0009 addw x,#OFST-15
478 0120 cd0000 call c_rtol
480 0123 1e1f ldw x,(OFST+7,sp)
481 0125 fe ldw x,(x)
482 0126 1c0006 addw x,#6
483 0129 cd0000 call c_ltor
485 012c 96 ldw x,sp
486 012d 1c0009 addw x,#OFST-15
487 0130 cd0000 call c_ldiv
489 0133 96 ldw x,sp
490 0134 1c0005 addw x,#OFST-19
491 0137 cd0000 call c_rtol
493 013a 1e1f ldw x,(OFST+7,sp)
494 013c ee02 ldw x,(2,x)
495 013e ee02 ldw x,(2,x)
496 0140 cd0000 call c_uitolx
498 0143 96 ldw x,sp
499 0144 5c incw x
500 0145 cd0000 call c_rtol
502 0148 96 ldw x,sp
503 0149 1c000d addw x,#OFST-11
504 014c cd0000 call c_ltor
506 014f 96 ldw x,sp
507 0150 5c incw x
508 0151 cd0000 call c_ldiv
510 0154 96 ldw x,sp
511 0155 1c0005 addw x,#OFST-19
512 0158 cd0000 call c_ladd
514 015b 96 ldw x,sp
515 015c 1c0015 addw x,#OFST-3
516 015f cd0000 call c_rtol
518 ; 92 if (houtput_32 > PID_Struct->pPID_Const->hUpper_Limit_Output)
520 0162 1e1f ldw x,(OFST+7,sp)
521 0164 ee02 ldw x,(2,x)
522 0166 ee0a ldw x,(10,x)
523 0168 cd0000 call c_itolx
525 016b 96 ldw x,sp
526 016c 1c0015 addw x,#OFST-3
527 016f cd0000 call c_lcmp
529 0172 2e08 jrsge L102
530 ; 94 houtput_32 = PID_Struct->pPID_Const->hUpper_Limit_Output;
532 0174 1e1f ldw x,(OFST+7,sp)
533 0176 ee02 ldw x,(2,x)
534 0178 ee0a ldw x,(10,x)
538 017a 2018 jp LC004
539 017c L102:
540 ; 96 else if (houtput_32 < PID_Struct->pPID_Const->hLower_Limit_Output)
542 017c 1e1f ldw x,(OFST+7,sp)
543 017e ee02 ldw x,(2,x)
544 0180 ee08 ldw x,(8,x)
545 0182 cd0000 call c_itolx
547 0185 96 ldw x,sp
548 0186 1c0015 addw x,#OFST-3
549 0189 cd0000 call c_lcmp
551 018c 2d10 jrsle L302
552 ; 98 houtput_32 = PID_Struct->pPID_Const->hLower_Limit_Output;
554 018e 1e1f ldw x,(OFST+7,sp)
555 0190 ee02 ldw x,(2,x)
556 0192 ee08 ldw x,(8,x)
558 0194 LC004:
559 0194 cd0000 call c_itolx
560 0197 96 ldw x,sp
561 0198 1c0015 addw x,#OFST-3
562 019b cd0000 call c_rtol
564 019e L302:
565 ; 100 return((s16)(houtput_32));
567 019e 1e17 ldw x,(OFST-1,sp)
570 01a0 5b1a addw sp,#26
571 01a2 81 ret
689 ; 103 s16 PID_Regulator(s16 hReference, s16 hPresentFeedback, PPID_Struct_t PID_Struct)
689 ; 104 {
690 switch .text
691 01a3 _PID_Regulator:
693 01a3 89 pushw x
694 01a4 5224 subw sp,#36
695 00000024 OFST: set 36
698 ; 110 wError= (s32)(hReference - hPresentFeedback);
700 01a6 72f029 subw x,(OFST+5,sp)
701 01a9 cd0000 call c_itolx
703 01ac 96 ldw x,sp
704 01ad 1c0019 addw x,#OFST-11
705 01b0 cd0000 call c_rtol
707 ; 113 wProportional_Term = PID_Struct->pPID_Var->hKp_Gain * wError;
709 01b3 1e2b ldw x,(OFST+7,sp)
710 01b5 fe ldw x,(x)
711 01b6 fe ldw x,(x)
712 01b7 cd0000 call c_itolx
714 01ba 96 ldw x,sp
715 01bb 1c0019 addw x,#OFST-11
716 01be cd0000 call c_lmul
718 01c1 96 ldw x,sp
719 01c2 1c0015 addw x,#OFST-15
720 01c5 cd0000 call c_rtol
722 ; 116 if (PID_Struct->pPID_Var->hKi_Gain == 0)
724 01c8 1e2b ldw x,(OFST+7,sp)
725 01ca fe ldw x,(x)
726 01cb e603 ld a,(3,x)
727 01cd ea02 or a,(2,x)
728 01cf 260c jrne L372
729 ; 118 PID_Struct->pPID_Var->wIntegral = 0;
731 01d1 1e2b ldw x,(OFST+7,sp)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -