精品PID控制算法程序Word格式.docx
- 文档编号:19113695
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:23
- 大小:20.79KB
精品PID控制算法程序Word格式.docx
《精品PID控制算法程序Word格式.docx》由会员分享,可在线阅读,更多相关《精品PID控制算法程序Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
将其转换成二进制浮点操作数MOVR0,#3CH
LCALLBTOF
MOVR0,#40H
MOVR0,#39H
MOVR0,#36H;
指向BCD码浮点操作数TiLCALLBTOF;
将其转换成二进制浮点操作数MOVR0,#33H;
指向BCD码浮点操作数TdLCALLBTOF;
将其转换成二进制浮点操作数MOVR0,#30H;
指向BCD码浮点操作数TLCALLBTOF;
将其转换成二进制浮点操作数
MOVR1,#BUFF1;
保存30H中的值即T值LCALLFMOVR0
MOVR1,#36H;
计算A值(1+T/Ti+Td/T).KpLCALLFDIV
MOVR1,#3CH;
常数1
LCALLFADD
MOVR0,#33H;
保存33H中的值MOVR1,#BUFF
LCALLFMOVR0
MOVR1,#BUFF1
LCALLFDIV
MOVR1,#30H;
30H里存的是T/Ti+1LCALLFADD
MOVR1,#39H
LCALLFMUL
MOVR1,#BLOCK1;
将结果保存在BLOCK1中
MOVR1,#BUFF1;
30H恢复原值MOVR0,#30H
LCALLFMOV
MOVR1,#BUFF;
33H恢复原值MOVR0,#33H
MOVR0,#40H;
计算B的值Kp.(1+2.Td/T)MOVR1,#33H
MOVR1,#30H
MOVR1,#3CH
MOVR1,#BLOCK2;
保存B值到BLOCK2中LCALLFMOVR0
MOVR0,#39H;
计算C的值Kp.Td/TMOVR1,#33H
MOVR1,#BLOCK3;
保存C值到BLOCK3中LCALLFMOVR0
MOVR0,#EK1;
将EK1,EK2设初值0
LCALLFCLR
MOVR0,#EK2
MOVREC,#03H;
设置采样次数LOOP:
MOVCK,#7eH;
采样数据暂时给了一个定值
MOVCK+1,#21H;
0.002112MOVCK+2,#12H
MOVR0,#CK
保存R(k)中的值MOVR1,#BUFF
MOVR1,#CK
LCALLFSUB;
计算R(k)-C(k)的值送给E(k)
MOVR1,#EK
恢复RK的值释放BUFFMOVR0,#RK
MOVR0,#BLOCK2;
将B.e(k-1)的值暂存在BUFF1中
保存BLCALLFMOVR0
MOVR1,#EK1
恢复B释放BUFFLCALLFMOV
MOVR0,#BLOCK3;
将C.e(K-2)的值暂存在BUFF2中
保存C
MOVR1,#EK2
MOVR1,#BUFF2
恢复C释放BUFFLCALLFMOV
MOVR0,#BLOCK1;
A.E(k)MOVR1,#BUFF
计算Uk值A.E(k)-B.E(k-1)+C.E(k-2)
LCALLFSUB
MOVR1,#UK;
保存结果到UK中LCALLFMOVR0
恢复A释放BUFFLCALLFMOV
MOVR0,#UK;
UK转换成BCD码浮点数输出LCALLFTOB
MOVR1,#EK1;
将E(k-1)-->
E(k-2),E(k)-->
E(k-1)MOVR0,#EK2
MOVR0,#EK1
LCALLDELAY;
等待采样时刻
DJNZREC,NEXT1
SJMP$
NEXT1:
LJMPLOOP
DELAY:
MOVR7,#02H
DELAY1:
MOVR6,#0FFH
DELAY2:
DJNZR6,DELAY2
DJNZR7,DELAY1
RET
(,)标号:
FSDT功能:
浮点数格式化
入口条件:
待格式化浮点操作数在[R0]中。
出口信息:
已格式化浮点操作数仍在[R0]中。
;
影响资源:
PSW、A、R2、R3、R4、位1FH堆栈需求:
字节
FSDT:
LCALLMVR0;
将待格式化操作数传送到第一工作区中
LCALLRLN;
通过左规完成格式化
LJMPMOV0;
将已格式化浮点操作数传回到[R0]中
FADD功能:
浮点数加法
被加数在[R0]中,加数在[R1]中。
OV=0时,和仍在[R0]中,OV=1时,溢出。
PSW、A、B、R2,R7、位1EH、1FH堆栈需求:
FADD:
CLRF0;
设立加法标志
SJMPAS;
计算代数和
FSUB功能:
浮点数减法
被减数在[R0]中,减数在[R1]中。
OV=0时,差仍在[R0]中,OV=1时,溢出。
字节
FSUB:
SETBF0;
设立减法标志
AS:
LCALLMVR1;
计算代数和。
先将[R1]传送到第二工作区
MOVC,F0;
用加减标志来校正第二操作数的有效符号
CLRA;
********,,,应加的一条语句RRCA
XRLA,@R1
MOVC,ACC.7
ASN:
MOV1EH,C;
将第二操作数的有效符号存入位1EH中
XRLA,@R0;
与第一操作数的符号比较RLCA
MOVF0,C;
保存比较结果
LCALLMVR0;
将[R0]传送到第一工作区中LCALLAS1;
在工作寄存器中完成代数运算MOV0:
INCR0;
将结果传回到[R0]中的子程序入口INCR0
MOVA,R4;
传回尾数的低字节MOV@R0,A
DECR0
MOVA,R3;
传回尾数的高字节MOV@R0,A
MOVA,R2;
取结果的阶码
MOVC,1FH;
取结果的数符
MOVACC.7,C;
拼入阶码中
MOV@R0,A
CLRACC.7;
不考虑数符
CLROV;
清除溢出标志
CJNEA,#3FH,MV01;
阶码是否上溢,********应为#40H
SETBOV;
设立溢出标志
MV01:
MOVA,@R0;
取出带数符的阶码RET
MVR0:
将[R0]传送到第一工作区中的子程序
MOVC,ACC.7;
将数符保存在位1FH中MOV1FH,C
MOVC,ACC.6;
将阶码扩充为8bit补码MOVACC.7,C
MOVR2,A;
存放在R2中
INCR0
MOVA,@R0;
将尾数高字节存放在R3中MOVR3,A;
将尾数低字节存放在R4中MOVR4,A
DECR0;
恢复数据指针
MVR1:
MOVA,@R1;
将[R1]传送到第二工作区中的子程序
将数符保存在位1EH中MOV1EH,C
MOVR5,A;
存放在R5中
INCR1
MOVA,@R1;
将尾数高字节存放在R6中MOVR6,A
将尾数低字节存放在R7中MOVR7,A
DECR1;
DECR1
AS1:
MOVA,R6;
读取第二操作数尾数高字节ORLA,R7
JZAS2;
第二操作数为零,不必运算MOVA,R3;
读取第一操作数尾数高字节ORLA,R4
JNZEQ
MOVA,R6;
第一操作数为零,结果以第二操作数为准
MOVR3,A
MOVA,R7
MOVR4,A
MOVA,R5
MOVR2,A
MOVC,1EH
MOV1FH,C
AS2:
RET
EQ:
MOVA,R2;
对阶,比较两个操作数的阶码XRLA,R5
JZAS4;
阶码相同,对阶结束JBACC.7,EQ3;
阶符互异MOVA,R2;
阶符相同,比较大小CLRC
SUBBA,R5
JCEQ4
EQ2:
CLRC;
第二操作数右规一次MOVA,R6;
尾数缩小一半RRCA
MOVR6,A
RRCA
MOVR7,A
INCR5;
阶码加一
ORLA,R6;
尾数为零否,JNZEQ;
尾数不为零,继续对阶
尾数为零,提前结束对阶MOVR5,A
SJMPAS4
EQ3:
判断第一操作数阶符JNBACC.7,EQ2;
如为正,右规第二操作数EQ4:
CLRC
LCALLRR1;
第一操作数右规一次ORLA,R3;
不为零,继续对阶
MOVA,R5;
尾数为零,提前结束对阶MOVR2,A
AS4:
JBF0,AS5;
尾数加减判断MOVA,R4;
尾数相加ADDA,R7
MOVA,R3
ADDCA,R6
JNCAS2
LJMPRR1;
有进位,右规一次
AS5:
比较绝对值大小MOVA,R4
SUBBA,R7
MOVB,A
SUBBA,R6
JCAS6
MOVR4,B;
第一尾数减第二尾数MOVR3,A
LJMPRLN;
结果规格化AS6:
CPL1FH;
结果的符号与第一操作数相反
CLRC;
结果的绝对值为第二尾数减第一尾数
SUBBA,R4
MOVA,R6
SUBBA,R3
RLN:
MOVA,R3;
浮点数规格化ORLA,R4;
尾数为零否,JNZRLN1
MOVR2,#0C0H;
阶码取最小值RET
RLN1:
MOVA,R3
JBACC.7,RLN2;
尾数最高位为一否,CLRC;
不为一,左规一次LCALLRL1
SJMPRLN;
继续判断RLN2:
CLROV;
规格化结束RET
RL1:
MOVA,R4;
第一操作数左规一次RLCA;
尾数扩大一倍MOVR4,A
RLCA
DECR2;
阶码减一
CJNER2,#0BFH,RL1E;
阶码下溢否,;
CLRA
MOVR3,A;
阶码下溢,操作数以零计
MOVR2,#0C0H;
RL1E:
CLROV
RR1:
第一操作数右规一次RRCA;
尾数缩小一半
MOVA,R4
INCR2;
清溢出标志
CJNER2,#40H,RR1E;
阶码上溢否,MOVR2,#3FH;
阶码溢出
SETBOV
RR1E:
(4)标号:
FMUL功能:
浮点数乘法
被乘数在[R0]中,乘数在[R1]中。
OV=0时,积仍在[R0]中,OV=1时,溢出。
6字节
FMUL:
将[R0]传送到第一工作区中
MOVA,@R0
XRLA,@R1;
比较两个操作数的符号
MOV1FH,C;
保存积的符号LCALLMUL0;
计算积的绝对值LJMPMOV0;
将结果传回到[R0]中MUL0:
将[R1]传送到第二工作区中
MUL1:
第一尾数为零否,ORLA,R4
JZMUL6
第二尾数为零否,ORLA,R7
JZMUL5
MOVA,R7;
计算R3R4×
R6R7,?
R3R4MOVB,R4
MULAB
MOVA,B
XCHA,R7
MOVB,R3
ADDA,R7
CLRA
ADDCA,B
XCHA,R4
MOVB,R6MULABADDA,R7MOVR7,AMOVA,BADDCA,R4MOVR4,ACLRARLCAXCHA,R3MOVB,R6MULABADDA,R4MOVR4,AMOVA,BADDCA,R3MOVR3,AJBACC.7,MUL2;
积为规格化数否,R7四舍五入
左规一次
RLCAMOVR7,ALCALLRL1MUL2:
MOVA,R7JNBACC.7,MUL3INCR4MOVA,R4
JNZMUL3
INCR3
MOVR3,#80H
INCR2
MUL3:
求积的阶码ADDA,R5
MD:
MOVR2,A;
阶码溢出判断
JBACC.7,MUL4
JNBACC.6,MUL6
MOVR2,#3FH;
阶码上溢,设立标志SETBOV
MUL4:
JBACC.6,MUL6MUL5:
CLRA;
结果清零(因子为零或阶码下溢)
MOVR2,#41H
MUL6:
(5)标号:
FDIV功能:
浮点数除法
被除数在[R0]中,除数在[R1]中。
OV=0时,商仍在[R0]中,OV=1时,溢出。
FDIV:
INCR0
ORLA,@R0
JNZDIV1
MOV@R0,#41H;
被除数为零,不必运算CLROV
DIV1:
INCR1
MOVA,@R1
ORLA,@R1
JNZDIV2
除数为零,溢出RET
DIV2:
比较两个操作数的符号RLCA
保存结果的符号LCALLMVR1;
将[R1]传送到第二工作区中LCALLDIV3;
调用工作区浮点除法LJMPMOV0;
回传结果
DIV3:
比较尾数的大小MOVA,R4
JCDIV4
被除数右规一次SJMPDIV3
DIV4:
借用R0R1R2作工作寄存器XCHA,R0;
清零并保护之PUSHACC
XCHA,R1
PUSHACC
MOVA,R2
MOVB,#10H;
除法运算,R3R4,R6R7,?
R0R1
DIV5:
MOVA,R1
RLCAMOVR1,AMOVA,R0RLCAMOVR0,AMOVA,R4RLCAMOVR4,AXCHA,R3RLCAXCHA,R3MOVF0,CCLRC
SUBBA,R7MOVR2,AMOVA,R3SUBBA,R6ANLC,/F0JCDIV6MOVR3,AMOVA,R2MOVR4,AINCR1DIV6:
DJNZB,DIV5
四舍五入
CLRC
ADDCA,R1;
将结果存回R3R4MOVR4,A
ADDCA,R0
POPACC;
恢复R0R1R2MOVR2,A
POPACC
MOVR1,A
MOVR0,A
计算商的阶码CLRC
LCALLMD;
阶码检验LJMPRLN;
规格化
(6)标号:
FCLR功能:
浮点数清零
操作数在[R0]中。
操作数被清零。
A堆栈需求:
字节
FCLR:
MOV@R0,#41H
(7)标号:
FZER功能:
浮点数判零
若累加器A为零,则操作数[R0]为零,否则不为零。
FZER:
JNZZERO
ZERO:
(8)标号:
FMOV功能:
浮点数传送
源操作数在[R1]中,目标地址为[R0]。
[R0]=[R1],[R1]不变。
FMOV:
(8.1)标号:
FMOVR0功能:
源操作数在[R0]中,目标地址为[R1]。
[R1]=[R0],[R0]不变。
FMOVR0:
MOV@R1,A
(24)标号:
DTOF功能:
双字节十六进制定点数转换成格式化浮点数
双字节定点数的绝对值在[R0]中,数符在位1FH中,整数部分的位数在A中。
转换成格式化浮点数在[R0]中(三字节)。
DTOF:
按整数的位数初始化阶码MOVA,@R0;
将定点数作尾数
进行规格化
传送结果到[R0]中
(25)标号:
FTOD功能:
格式化浮点数转换成双字节定点数
格式化浮点操作数在[R0]中。
OV=1时溢出,OV=0时转换成功:
定点数的绝对值在[R0]中(双字节),数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 PID 控制 算法 程序