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

📄 mc_pid_regulators.ls

📁 STM8S105 BLDC源代码
💻 LS
📖 第 1 页 / 共 2 页
字号:
   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 + -