?? pid.asm
字號:
這個是溫控系統(tǒng)中的一段
后面的什么電爐電扇就別管了
PID: MOV R5,#00H ;[PID算法子程序]
MOV R4,2DH ;取Nx值
MOV R3,#00H
MOV R2,#28H ;取40度值
LCALL CPL1
LCALL DSUM ;求(Nx-28H)的值
MOV R0,#5AH ;賦乘法運(yùn)算暫存單元地址首址
MOV R5,#05H
MOV R4,#1CH ;賦參數(shù)(5.12)
LCALL MULT ;調(diào)無符號數(shù)乘法
MOV 31H,5BH
MOV 32H,5AH ;存放結(jié)果的有效值
MOV R5,31H
MOV R4,32H ;取雙字節(jié)的Ur(設(shè)定值)
MOV R3,2AH
MOV R2,#00H ;取雙字節(jié)的Ui(k)(實(shí)測值)
ACALL CPL1 ;取Ui(k)的補(bǔ)碼
ACALL DSUM ;計(jì)算E(k)
MOV 39H,R7
MOV 3AH,R6 ;存E(K)
MOV R5,35H
MOV R4,36H ;取KI參數(shù)
MOV R0,#4AH
ACALL MULT1 ;計(jì)算PI=KI*E(K)
MOV R5,39H
MOV R4,3AH ;取E(K)
MOV R3,3BH
MOV R2,3CH ;取E(K-1)
ACALL CPL1
ACALL DSUB ;求E(K)-E(K-1)
MOV R5,33H
MOV R4,34H ;取Kp參數(shù)
MOV R0,#46H
ACALL MULT1 ;求Kp*[E(K)-E(K-1)]
MOV R5,49H
MOV R4,48H
MOV R3,4DH
MOV R2,4CH
ACALL DSUM ;求Kp*[E(K)-E(K-1)]+KI*E(K)
MOV 4AH,R7
MOV 4BH,R6 ;保存上式之和
MOV R5,39H
MOV R4,3AH ;取E(K)
MOV R3,3DH
MOV R2,3EH ;取E(K-2)
ACALL DSUM ;計(jì)算E(K)+E(K-2)
MOV A,R7
MOV R5,A
MOV A,R6
MOV R4,A
MOV R3,3BH
MOV R2,3CH ;取E(k-1)
ACALL CPL1
ACALL DSUM ;求出E(K)+E(K-2)-2*E(K-1)
MOV A,R7
MOV R5,A
MOV A,R6
MOV R4,A
MOV R3,3BH
MOV R2,3CH
ACALL CPL1
ACALL DSUM
MOV R5,37H
MOV R4,38H ;取Kd參數(shù)
MOV R0,#46H
ACALL MULT1 ;求出Pd=Kd*[E(K)+E(K-2)-2*E(K-1)]
MOV R5,49H
MOV R4,48H ;取Pd
MOV R3,4AH
MOV R2,4BH ;取Kp*[E(K)-E(K-1)]+KI*E(K)
ACALL DSUM ;計(jì)算Pd+PI
MOV A,R7
MOV R3,A
MOV A,R6 ;取Pd+PI
MOV R2,A
MOV R5,2FH
MOV R4,30H ;取P(k-1)
ACALL DSUM ;求P(K)=Pd+Pp+P(K-1)
MOV 2FH,R7
MOV 30H,R6 ;存P(k)到P(k-1)
MOV 29H,2FH
MOV 3DH,3BH
MOV 3EH,3CH ;存E(K-1)到E(K-2)
MOV 3BH,39H
MOV 3CH,3AH ;存E(K)到E(k-1)
MOV A,31H ;取設(shè)定值
CJNE A,2AH,AA2 ;比較設(shè)定值與實(shí)測值
AA3: CLR 20H ;清電爐標(biāo)志
AA1: RET
AA2: JNC AA3
SETB 20H ;清風(fēng)扇標(biāo)志位
MOV R3,39H
MOV R2,3AH
LCALL CPL1
MOV A,R3
MOV R7,A
MOV A,R2
MOV R6,A
MOV R5,42H
MOV R4,43H ;取K(風(fēng)扇)參數(shù)
MOV R0,#5AH
ACALL MULI1 ; 計(jì)算P`=K*E(K),且結(jié)果防在51H,50H單元中
MOV 28H,5BH ;取8位有效值,放到28H單元中
AJMP AA1
這是pid中調(diào)用的幾個子程序!
;**********************************************************
DSUM: MOV A,R4 ;[雙字節(jié)加法子程序]:(R5R4)+(R3R2)-->(R7R6) ADD A,R2
MOV R6,A
MOV A,R5
ADDC A,R3
MOV R7,A
RET
;**********************************************************
CPL1: MOV A,R2 ;[雙字節(jié)求補(bǔ)子程序]:(R3R2)求補(bǔ)
CPL A
ADD A,#01H
MOV R2,A
MOV A,R3
CPL A
ADDC A,#00H
MOV R3,A
RET
;**********************************************************
MULT1: MOV A,R7 ;[雙字節(jié)有符號數(shù)乘法]:被乘數(shù)(R7R6),乘數(shù)(R5R4) RLC A
MOV 5CH,C ;被乘數(shù)符號C1-->5CH位
JNC POS1 ;為正數(shù)則轉(zhuǎn)
MOV A,R6 ;為負(fù)數(shù)則求補(bǔ)
CPL A
ADD A,#01H
MOV R6,A
MOV A,R7
CPL A
ADDC A,#00H
MOV R7,A
POS1: MOV A,R5 ;取乘數(shù)
RLC A ;乘數(shù)符號C2-->5DH位
MOV 5DH,C
JNC POS2 ;為整數(shù)則轉(zhuǎn)
MOV A,R4
CPL A
ADD A,#01H
MOV R4,A
MOV A,R5
CPL A
ADDC A,#00H
MOV R5,A
POS2: ACALL MULT ;調(diào)雙字節(jié)無符號數(shù)乘法子程序
MOV C,5CH
ANL C,5DH
JC TPL ;負(fù)負(fù)相乘則轉(zhuǎn)
MOV C,5CH
ORL C,5DH
JNC TPL ;正正相乘則轉(zhuǎn)
DEC R0
MOV A,@R0
CPL A
ADD A,#01H
MOV @R0,A
INC R0
MOV A,@R0
CPL A
ADDC A,#00H
MOV @R0,A
TPL: RET
;**********************************************************
MULT: MOV A,R6
MOV B,R4 ;取低位相乘
MUL AB
MOV @R0,A
MOV R3,B
MOV A,R4
MOV B,R7
MUL AB
ADD A,R3
MOV R3,A
MOV A,B
ADDC A,#00H
MOV R2,AMOV A,R6
MOV B,R5
MUL AB
ADD A,R3
INC R0
MOV @R0,A
CLR 5BH
MOV A,R2
ADDC A,B
MOV R2,A
JNC LAST
SETB 5BH ;置進(jìn)位標(biāo)志
LAST: MOV A,R7
MOV B,R5
MUL AB
ADD A,R2
INC R0
MOV @R0,A ;存積的第二字節(jié)
MOV A,B
ADDC A,#00H
MOV C,5BH
ADDC A,#00H
INC R0
MOV @R0,A
RET
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -