您现在所在的是:

单片机论坛

回帖:9个,阅读:6936 [上一页] [1] [下一页]
905
halohalo
文章数:1
年度积分:50
历史总积分:905
注册时间:2005/6/5
发站内信
发表于:2005/6/5 23:38:00
#0楼
求哪位大虾帮我贴上来吧,谢谢。
917
louisignal
文章数:8
年度积分:50
历史总积分:917
注册时间:2006/10/18
发站内信
发表于:2006/10/18 15:04:00
#1楼
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
917
louisignal
文章数:8
年度积分:50
历史总积分:917
注册时间:2006/10/18
发站内信
发表于:2006/10/18 15:06:00
#2楼
这个是温控系统中的一段
后面的什么电炉电扇就别管了
917
louisignal
文章数:8
年度积分:50
历史总积分:917
注册时间:2006/10/18
发站内信
发表于:2006/10/18 15:08:00
#3楼
这是pid中调用的几个子程序!

;**********************************************************
DSUM:  MOV A,R4   ;[双字节加法子程序]:(R5R4)+(R3R2)-->(R7R6)        ADD A,R2
      MOV R6,A
      MOV A,R5
      ADDC A,R3
      MOV R7,A
      RET
;**********************************************************
CPL1:   MOV A,R2    ;[双字节求补子程序]:(R3R2)求补
      CPL A
      ADD A,#01H
      MOV R2,A    
      MOV A,R3
      CPL A
      ADDC A,#00H
      MOV R3,A
      RET
;**********************************************************
MULT1:  MOV A,R7    ;[双字节有符号数乘法]:被乘数(R7R6),乘数(R5R4)          RLC A
        MOV 5CH,C   ;被乘数符号C1-->5CH位
        JNC POS1    ;为正数则转
        MOV A,R6    ;为负数则求补
        CPL A
        ADD A,#01H
        MOV R6,A
        MOV A,R7
        CPL A
        ADDC A,#00H
        MOV R7,A
POS1: MOV A,R5      ;取乘数
      RLC A        ;乘数符号C2-->5DH位
      MOV 5DH,C
      JNC POS2     ;为整数则转
      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     ;调双字节无符号数乘法子程序
      MOV C,5CH
      ANL C,5DH
      JC TPL        ;负负相乘则转
      MOV C,5CH
      ORL C,5DH
      JNC TPL       ;正正相乘则转
      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    ;置进位标志
LAST: MOV A,R7
      MOV B,R5
      MUL AB
      ADD A,R2
      INC R0
      MOV @R0,A   ;存积的第二字节
      MOV A,B
      ADDC A,#00H
      MOV C,5BH
      ADDC A,#00H
      INC R0      
MOV @R0,A            
      RET
      END
917
louisignal
文章数:8
年度积分:50
历史总积分:917
注册时间:2006/10/18
发站内信
发表于:2006/10/18 15:19:00
#4楼
再给你算法的式子
那一串东西就是按这个编的
匿名用户
文章数:N/A
年度积分:0
历史总积分:0
注册时间:2006/10/18
发站内信
发表于:2006/10/18 15:34:00
#5楼
该用户被锁定,回复内容不予显示!
1064
工控秀才
文章数:80
年度积分:50
历史总积分:1064
注册时间:2006/6/16
发站内信
09工控人生征文
08年优秀博客奖
发表于:2006/10/22 12:20:00
#6楼
以下是引用louisignal在2006-10-18 15:19:00的发言:
再给你算法的式子
那一串东西就是按这个编的
对老兄顶礼膜拜中,不过式子还没有上来哟!!!
14PIN的单片MCU多核心时代已来临,  想在低容量的MCU系统跑多任务吗,欢迎登陆"http://gongkong.gkbk.com"我的博客 查看详情,谢谢!
909
mrd180
文章数:3
年度积分:50
历史总积分:909
注册时间:2006/10/24
发站内信
发表于:2006/10/24 11:10:00
#7楼
up
912
machangsheng
文章数:5
年度积分:50
历史总积分:912
注册时间:2007/4/3
发站内信
发表于:2007/4/8 20:05:00
#8楼
[灌水]
好贴当然顶!
谢谢共享表情
903
jiangyugf
文章数:1
年度积分:50
历史总积分:903
注册时间:2007/6/14
发站内信
发表于:2007/6/14 16:53:00
#9楼
请问,程序中Nx和40度值具体指什么?

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

124.8008