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 ;赋乘法运算暂存单元地址首址
MOV R5,#05H
MOV R4,#1CH ;赋参数(5.12)
LCALL MULT ;调无符号数乘法
MOV 31H,5BH
MOV 32H,5AH ;存放结果的有效值
MOV R5,31H
MOV R4,32H ;取双字节的Ur(设定值)
MOV R3,2AH
MOV R2,#00H ;取双字节的Ui(k)(实测值)
ACALL CPL1 ;取Ui(k)的补码
ACALL DSUM ;计算E(k)
MOV 39H,R7
MOV 3AH,R6 ;存E(K)
MOV R5,35H
MOV R4,36H ;取KI参数
MOV R0,#4AH
ACALL MULT1 ;计算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参数
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 ;计算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参数
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 ;计算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 ;取设定值
CJNE A,2AH,AA2 ;比较设定值与实测值
AA3: CLR 20H ;清电炉标志
AA1: RET
AA2: JNC AA3
SETB 20H ;清风扇标志位
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(风扇)参数
MOV R0,#5AH
ACALL MULI1 ; 计算P`=K*E(K),且结果防在51H,50H单元中
MOV 28H,5BH ;取8位有效值,放到28H单元中
AJMP AA1