积分分离PID控制算法程序.docx

上传人:夺命阿水 文档编号:415686 上传时间:2023-06-02 格式:DOCX 页数:25 大小:39.81KB
返回 下载 相关 举报
积分分离PID控制算法程序.docx_第1页
第1页 / 共25页
积分分离PID控制算法程序.docx_第2页
第2页 / 共25页
积分分离PID控制算法程序.docx_第3页
第3页 / 共25页
积分分离PID控制算法程序.docx_第4页
第4页 / 共25页
积分分离PID控制算法程序.docx_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《积分分离PID控制算法程序.docx》由会员分享,可在线阅读,更多相关《积分分离PID控制算法程序.docx(25页珍藏版)》请在课桌文档上搜索。

1、积分分离PlD控制算法程序2022-01-0515:23;*P10,积分分离PID控制算法程序*;T、TD、TIKP挨次从30H,33H,36H,39H开始。;A,B,C,A,的值挨次存在BLOCKl,BL0CK2,BL0CK3BL0CK4的地址里;这里B与C值相同;这里R(k)给的是定值ORG0000HEEQU20H;一阈值GKEQU23H;G(k)GKlEQU26H;G(k-l)FKEQU29H;F(k)FKlEQU2CH;F(k-l)BLOCKlEQU50H;ABL0CK2EQU53H;BBL0CK3EQU56H;CBL0CK4EQU5AH;AUKEQU5DH;存放结果BUFFEQU43

2、H;暂存区BUFFlEQU46HBUFF2EQU49HBUFFROEQU4CHRECEQU63H;采样次数RKEQU66H;R(k)CKEQU69H;采样数据始址EKEQU6CH;存放偏差值E(k)的始址EKlEQU70H;存放E(kT)的始址TEST:MOVRK,#01H;常数Rk1.25的BCD码浮点数MOVRK+1,#12HMOVRK+2,#50H;MOVE,#7EH;设定一阈值0.001的BCD码浮点数;MOVE+l,ttlOH;MOVE+2,#00HMOVE,#00H;阈值为0.3MOVE+l,#30HMOVE+2,#00HMOV3CH,#0111;常数1的BCD码浮点数MOV3DH

3、,#10HMOV3EH,#00HMOV40H,#01H;常数2的BCD码浮点数MOV41H,#20HMOV42H,#00HMOV30H,#01H;T2.34的BCD码浮点数MOV31H,#23HMOV32H,#40HMOV33H,#01H;Td3.54的BCD码浮点数MOV34H,#35HMOV35H,#40HMOV36H,#01H;Ti1.12的BCD码浮点数MOV37H,#11HMOV38H,#20HMOV39H,#01H;Kp1.25的BCD码浮点数MOV3AH,#12HMOV3BH,#50HMOVRO,#E;将其转换成二进制浮点操作数LCALLBTOFMOVRO,#RKLCALLBTO

4、FMOVRO,#3CHLCALLBTOFMOVRO,#40HLCALLBTOFMOVRO,#39HLCALLBTOFMOVRO,#36HLCALLBTOF;将其转换成二进制浮点操作数MOVR0,tt33H;指向BCD码浮点操作数TdLCALLBTOF;将其转换成二进制浮点操作数MOVRO,#30H;指向BCD码浮点操作数TLCALLBTOF;将其转换成二进制浮点操作数MOVRl,#BUFFRO;保存30H中的值即T值LCALLFMOVROMOVRl,#36H;计算A值(1+T/Ti+Td/T).KpLCALLFDIVMOVRl,#3CH;常数1LCALLFADDMOVR0,#33H;保存33H

5、中的值MOVRl,#BUFFLCALLFMOVROMOVRl,#BUFFROLCALLFDIVMOVRl,#30H;30H里存的是T/Ti+1LCALLFADDMOVR1,#39HLCALLFMULMOVRl,#BLOCK1;将结果保存在BI,OCK1中LCALLFMOVROMOVRl,#BUFFRO;30H恢复原值MOVR0,#30HLCALLFMOVMOVRl,#BuFF;33H恢复原值MOVR0,#33HLCALLFMOVMOVR0,#40H;计算B的值Kp.(1+2.Td/T)MOVR1,#33HLCALLFMULMOVRl,#30HLCALLFDIVMOVRl,tt3CHLCALLF

6、ADDMOVR1,#39HLCALLFMULMOVRI,#BLoCK2;保存B值到BLOCK2中LCALLFMOVROMOVRO,#39H;计算C的值Kp.Td/TMOVR1,#33HLCALLFMULMOVRl,#30HLCALLFDIVMOVRl,#BLoCK3;保存C值到BL0CK3中LCALLFMOVROMOVR0,#33H;计算A,保存33H中的值MOVRl,#BUFFROLCALLFMOVROMOVRl,#30HLCALLFDIVMOVR1,#3CHLCALLFADDMOVRl,#39HLCALLFMULMOVRI,#BLoCK4;保存A值到BL0CK4中LCALLFMOVROMO

7、VRl,#BUFFRO;恢复33H中的值LCALLFMOVMOVR0,#EKl;将EKI,FKl,GKl设初值0LCALLFCLRMOVR0,卵KlLCALLFCLRMOVR0,#GKlLCLLFCLRMOVREC,#04H;设置采样次数LOOP:MOVCK,#O1H;采样数据暂时给了一个定值MOVCK+1,1OHMOVCK+2,#00HMOVRO,#CKLCALLBTOFMOVRO,#RK;保存R(k)中的值MOVRl,SBUFFROLCALLFMOVROMOVRI,#CKLCALLFSUB;计算R(k)-C(k)的值送给E(k)MOVR1,#EKLCALLFMOVROMOVRI,#BUFF

8、ROLCALLFMOV;恢复R(K)的值,释放、BUFFROMOVR0,#BUFFRO;EK存到BUFFROMOVRI,#EKLCALLFMOVLCALLFABS;求EK的绝对值MOVRI,#E;判断EK的绝对值与E的大小LCALLFCMPJCPID;EKG(k-l)MOVRI,#GKLCALLFMOVMOVRO,#FKl;F(k)F(K-1)MOVRI,#FKLCALLFMOVMOVRO,#EKl;E(K)E(K-1)MOVRl,#EKLCALLFMOVMOVRO,#UK;UK转换成BCD码浮点数输出LCALLFTOBLCALLDELAY;等待采样时刻DJNZREC,NEXTlSJMP$NE

9、XTl:LJMPLOOPDELAY:MOVR7,#02HDELAYl:MOVR6,#OFFHDELY2:DJNZR6,DELY2DJNZR7,DELAYlRET;(1)标号:FSDT功能:浮点数格式化;入口条件:待格式化浮点操作数在R0中。;出口信息:己格式化浮点操作数仍在R0中。;影响资源:PSW、A、R2、R3、R4、位IFH堆栈需求:6字节FSDT:LCALLMVRO;将待格式化操作数传送到第一工作区中LCALLRLN;通过左规完成格式化LJMPMOVO;将已格式化浮点操作数传回到R0中;(2)标号:FADD功能:浮点数加法;入口条件:被加数在R0中,加数在R1中。;出口信息、:OV=O

10、时,和仍在R0中,OV=I时,溢出。;影响资源:PSW、A、B、R2R7、位1EH、IFH堆栈需求:6字节FADD:CLRFO;设立加法标志SJMPAS;计算代数和(3)标号:FSUB功能:浮点数减法;入口条件:被减数在R0中,减数在R1中。;出口信息:OV=O时,差仍在R0中,OV=I时,溢出。;影响资源:PSW、A、B、R2R7、位1EH、IFH堆栈需求:6字节FSUB:SETBFO;设立减法标志AS:LCALLMVR1;计算代数和。先将R1传送到第二工作区MOVC,FO;用加减标志来校正第二操作数的有效符号CLRA;*?应加的一条语句RRCAXRLA,RlMOVC,ACC.7ASN:MO

11、V1EH,C;将第二操作数的有效符号存入位IEH中XRLA,R0;与第一操作数的符号比较RLCAMOVF0,C;保存比较结果LCALLMVRO;将以0传送到第一工作区中LCALLASl;在工作寄存器中完成代数运算MOVO:INCRO;将结果传回到R0中的子程序入口INCROMOVA,R4;传回尾数的低字节MOVR0,ADECROMOVA,R3;传回尾数的高字节MOVR0,ADECROMOVA,R2;取结果的阶码MOVC,IFH;取结果的数符MOVACC.7,C;拼入阶码中MOVR0,ACLRACC.7;不考虑数符CLROV;清除溢出标志CJNEA,#3FH,MVOl;阶码是否上溢?*应为#40

12、HSETBOV;设立溢出标志MVOl:MOVA,Ro;取出带数符的阶码RETMVRO:MOVA,R0;将出0传送到第一工作区中的子程序MOVC,ACC.7;将数符保存在位IFH中MOV1FH,CMOVC,ACC.6;将阶码扩充为8bit补码MOVACC.7,CMOVR2,A;存放在R2中INCROMOVA,R0;将尾数高字节存放在R3中MOVR3,A;INCROMOV,R0;将尾数低字节存放在R4中MOVR4,ADECRO;恢复数据指针DECRORETMVRl:MOVA,R1;将RI传送到第二工作区中的子程序MOVC,ACC.7;将数符保存在位IEH中MOV1EH,CMOVC,ACC.6;将阶

13、码扩充为8bit补码MOVACC.7,CMOVR5,A;存放在R5中INCRlMOVA,R1;将尾数高字节存放在R6中MOVR6,AINCRlMOVA,R1;将尾数低字节存放在R7中MOVR7,DECRl;恢复数据指针DECRlRETASI:MOVA,R6;读取第二操作数尾数高字节ORL,R7JZAS2;第二操作数为零,不必运算MOVA,R3;读取第一操作数尾数高字节ORLA,R4JNZEQMOVA,R6;第一操作数为零,结果以第二操作数为准MOVR3,MOVA,R7MOVR4,AMOVA,R5MOVR2,AMOVC,IEHMOV1FH,CAS2:RETEQ:MOVA,R2;对阶,比较两个操作

14、数的阶码XRLA,R5JZAS4邛介码相同,对阶结束JBACC.7,EQ3;阶符互异MOVA,R2;阶符相同,比较大小CLRCSUBBA,R5JCEQ4EQ2:CLRC;第二操作数右规一次MOVA,R6;尾数缩小一半RRCAMOVR6,AMOVA,R7RRCAMOVR7,AINCR5;阶码加一ORLA,R6;尾数为零否?JNZEQ;尾数不为零,继续对阶MOVA,R2;尾数为零,提前结束对阶MOVR5,ASJMPAS4EQ3:MOVA,R2;判断第一操作数阶符JNBAeC.7,EQ2;如为正,右规第二操作数EQ4:CLRCLCALLRRl;第一操作数右规一次ORLA,R3;尾数为零否?JNZEQ

15、;不为零,继续对阶MOVA,R5;尾数为零,提前结束对阶MOVR2,AAS4:JBF0,AS5;尾数加减判断MOVA,R4;尾数相加ADDA,R7MOVR4,AMOVA,R3ADDCA,R6MOVR3,AJNCAS2LJMPRRl;有进位,右规一次AS5:CLRC;比较绝对值大小MOVA,R4SUBBA,R7MOVB,AMOVA,R3SUBBA,R6JCAS6MOVR4,B;第一尾数减第二尾数MOVR3,ALJMPRLN;结果规格化AS6:CPLIFH;结果的符号与第一操作数相反CLRC;结果的绝对值为第二尾数减第一尾数MOVA,R7SUBBA,R4MOVR4,AMOVA,R6SUBB,R3M

16、OVR3,ARLN:MOVA,R3;浮点数规格化ORLA,R4;尾数为零否?JNZRLNlMOVR2,#OCIH;阶码取最小值*?应为#CoHRETRLNl:MOVA,R3JBACC.7,RLN2;尾数最高位为一否?CLRC;不为一,左规一次LCALLRLlSJMPRLN;继续判断RLN2:CLROV;规格化结束RETRLl:MOVA,R4;第一操作数左规一次RLCA;尾数扩大一倍MOVR4,MOVA,R3RLCAMOVR3,ADECR2;阶码减一CJNER2,#0COH,RLlE;阶码下溢否?*应改为CJNER2,#OBFH,RL1E;CLRAMOVR3,A;阶码下溢,操作数以零计MOVR4

17、,AMOVR2,#OClH;*应改为MOVR2,#0CoHRLlE:CLROVRETRRl:MOV,R3;第一操作数右规一次RRCA;尾数缩小一半MOVR3,AMOVA,R4RRCAMOVR4,INCR2;阶码加一CLROV;清溢出标志CJNER2,#40H,RRlE;阶码上溢否?MOVR2,#3FH;阶码溢出SETBOVRRlE:RET;(4)标号:FMUL功能:浮点数乘法;入口条件:被乘数在R0中,乘数在R1中。;出口信息:OV=O时,积仍在R0中,OV=I时,溢出。;影响资源:PSWsA、B、R2R7、位1EH、IFH堆栈需求:6字节FMUL:LCALLMVRO;将施0传送到第一工作区中

18、MOVA,R0XRLA,R1;比较两个操作数的符号RLCAMOV1FH,C;保存积的符号LCALLMULO;计算积的绝对值LJMPMOVO;将结果传回到R0中MULO:LCALLMVR1;将R1传送到第二工作区中MULl:MOVA,R3;第一尾数为零否?ORL,R4JZMUL6MOVA,R6;第二尾数为零否?ORLA,R7JZMUL5MOVA,R7;计算R3R4R6R7*R3R4MOVB,R4MULABMOVA,BXCHA,R7MOVB,R3MULABADDA,R7MOVR7,ACLRAADDCA,BXCHA,R4MOVB,R6MULABADDA,R7MOVR7,AMOVA,BADDCA,R4

19、MOVR4,ACLRARLCAXCHA,R3MOVB,R6MULABADDA,R4MOVR4,AMOVA,BADDCA,R3MOVR3,AJBACC.7,MUL2;积为规格化数否?R7四舍五入MOVA,R7;左规一次RLCAMOVR7,ALCALLRLlMUL2:MOVA,R7JNBACC.7,MUL3INCR4MOVA,R4JNZMUL3INCR3MOVA,R3JNZMUL3MOVR3,#80HINCR2MUL3:MOVA,R2;求积的阶码ADDA,R5MD:MOVR2,A;阶码溢出判断JBACC.7,MUL4JNBACC.6,MUL6MOVR2,#3FH;阶码上溢,设立标志SETBOVRE

20、TMUL4:JBACC.6,MUL6MUL5:CLRA;结果清零(因子为零或者阶码下溢)MOVR3,AMOVR4,AMOVR2,#41HMUL6:CLROVRET;(5)标号:FDIV功能:浮点数除法;入口条件:被除数在R0中,除数在R1中。;出口信息:OV=O时,商仍在R0中,OV=I时,溢出。;影响资源:PSW.A、B、R2R7、位1EH、IFH堆栈需求:5字节FDIV:INCROMOVA,R0INCROORLA,R0DECRODECROJNZDIVlMOVR0,MlH;被除数为零,不必运算CLROVRETDIVl:INCRlMOVA,R1INCRlORLA,R1DECRlDECRlJNZ

21、DIV2SETBOV;除数为零,溢出RETDIV2:LCALLMVRO;将RO传送到第一工作区中MOVA,R0XRLA,R1;比较两个操作数的符号RLCAMOV1FH,C;保存结果的符号LCALLMVR1;将R1传送到第二工作区中LCALLDIV3;调用工作区浮点除法LJMPMOVO;回传结果DIV3:CLRC;比较尾数的大小MOVA,R4SUBBA,R7MOVA,R3SUBBA,R6JCDIV4LCALLRRl;被除数右规一次SJMPDIV3DIV4:CLRA;借用ROR1R2作工作寄存器XCHA,RO;清零并保护之PUSHACCCLRAXCHA,RlPUSHACCMOVA,R2PUSHAC

22、CMOVB,#10H;除法运算,R3R4/R6R7RORlDIV5:CLRCMOVA,RlRLCAMOVRl,AMOVA,RORLCAMOVRO,AMOVA,R4RLCAMOVR4,AXCHA,R3RLCAXCHA,R3MOVF0,CCLRCSUBBA,R7MOVR2,AMOVA,R3SUBB,R6ANLC,F0JCDIV6MOVR3,AMOVA,R2MOVR4,AINCRlDIV6:DJNZB,DIV5MOV,R6;四舍五入CLRCRRCASUBBA,R3CLRAADDCA,Rl;将结果存回R3R4MOVR4,ACLRADDCA,ROMOVR3,APOPACC;恢复ROR1R2MOVR2,A

23、POPACCMOVRl,APOPACCMOVRO,AMOVA,R2;计算商的阶码CLRCSUBBA,R5LCALLMD;阶码检验LJMPRLN;规格化;(6)标号:FCLR功能:浮点数清零;入口条件:操作数在R0中。;出口信息:操作数被清零。;影响资源:A堆栈需求:2字节FCLR:INCROINCROCLRAMOVR0,ADECROMOVR0,ADECROMOVR0,#4IHRET;(7)标号:FZER功能:浮点数判零;入口条件:操作数在R0中。;出口信息:若累加器A为零,则操作数R0为零,否则不为零。;影响资源:A堆栈需求:2字节FZER:INCROINCROMOV,R0DECROORLA,

24、R0DECROJNZZEROMOVR0,#41HZERO:RET;(8)标号:FMOV功能:浮点数传送;入口条件:源操作数在R1中,目标地址为R0。;出口信息:R出口Rl,R1不变。;影响资源:A堆栈需求:2字节FMOV:INCROINCROINCRlINCRlMOVA,R1MOVR0,ADECRODECRlMOVA,R1MOVR0,ADECRODECRlMOVA,R1MOVR0,ARET;(8.1)标号:FMOVRO功能:浮点数传送;入口条件:源操作数在R0中,目标地址为R1。;出口信息:R1=RO,R0不变。;影响资源:A堆栈需求:2字节FMOVRO:INCRlINCRlINCROINCR

25、OMOVA,R0MOVR1,ADECRlDECROMOVA,R0MOVR1,ADECRlDECROMOVA,R0MOVR1,ARET;(24)标号:DTOF功能:双字节十六进制定点数转换成格式化浮点数;入口条件:双字节定点数的绝对值在R0中,数符在位IFH中,整数部份的位数在A中。;出口信息:转换成格式化浮点数在R0中(三字节)。;影响资源:PSW.A、R2、R3、R4、位IFH堆栈需求:6字节DTOF:MOVR2,;按整数的位数初始化阶码MOVA,R0;将定点数作尾数MOVR3,AINCROMOVA,R0MOVR4,ADECROLCALLRLN;进行规格化LJMPMOVO;传送结果到R0中;

26、(25)标号:FTOD功能:格式化浮点数转换成双字节定点数;入口条件:格式化浮点操作数在R0中。;出口信息:OV=I时溢出,OV=O时转换成功:定点数的绝对值在R0中(双字节),数符;在位IFH中,FO=I时为整数,CY=I时为一字节整数一字节小数,否则为纯小数。;影响资源:PSW.A、B、R2、R3、R4、位IFH堆栈需求:6字节FTOD:LCALLMVRO;将出0传送到第一工作区MOVA,R2JZFTD4;阶码为零,纯小数JBACC.7,FTD4;阶码为负,纯小数SETBCSUBBA,#IoHJCFTDlSETBOV;阶码大于16,溢出RETFTDl:SETBCMOVA,R2SUBBA,#

27、8;阶码大于8否?JCFTD3FTD2:MOVB,#10H;阶码大于8,按双字节整数转换LCLLFTD8SETBFO;设立双字节整数标志CLRCCLROVRETFTD3:MOVB,#8;按一字节整数一字节小数转换LCALLFTD8SETBC;设立一字节整数一字节小数标志CLRFOCLROVRETFTD4:MOVB,#0;按纯小数转换LCALLFTD8CLROV;设立纯小数标志CLRFOCLRCRETFTD8:MOVA,R2;按规定的整数位数进行右规*阶码是扩展后的值CJNEA,B,FTD9MOV,R3;将双字节结果传送到R0中MOVR0,AINCROMOVA,R4MOVR0,ADECRORET

28、FTD9:CLRCLCALLRRl;右规一次SJMPFTD8(26)标号:BTOF功能:浮点BCD码转换成格式化浮点数入口条件:浮点BCD码操作数在R0中。出口信息:转换成的格式化浮点数仍在R0中。影响资源:PSW、A、B、R2、R7、位IDirlFH堆栈需求:6字节BTOF:INCRO;判断是否为零。INCROMOVA,R0MOVR7,ADECROMOVA,ROMOVR6,ADECROORLA,R7JNZBTFOMOVR0,#41H;为零,转换结束。RETBTFO:MOVA,R0MOVC,ACC.7MOV1DH,C;保存数符。CLRIFH;以绝对值进行转换。MOVC,ACC.6;扩充阶码为八

29、位。MOVACC.7,CMOVR0,AJNCBTFlADDA,#19;是否小于1E-19?JCBTF2MOVR0,#41H;小于IE19时以0计。INCROMOVR0,#0INCROMOVR0,#0DECRODECRORETBTFl:SUBBA,#19JCBTF2MOVA,#3FH;大于1E19时封顶。MOVC,IDHMOVACC.7,CMOVR0,AINCROMOVR0,#0FFHINCROMOVR0,#0FFHDECRODECRORETBTF2:CLRA;准备将BCD码尾数转换成十六进制浮点数。MOVR4,AMOVR3,AMOVR2,#10H;至少两个字节。BTF3:MOVA,R7ADDA

30、,R7DAAMOVR7,AMOVA,R6ADDCA,R6DAAMOVR6,AMOVA,R4RLCAMOVR4,AMOVA,R3RLCAMOVR3,ADECR2JNBACC.7,BTF3;直到尾数规格化。MOVA,R6;四舍五入。ADD,#OBOH;*加#80H,也可以CLRAADDCA,R4MOVR4,ACLRAADDCA,R3MOVR3,AJNCBTF4MOVR3,#80H;*有进位右规一次INCR2BTF4:MOVDPTR,#BTFL;准备查表得到十进制阶码对应的浮点数。MOVA,R0ADDA,#19;计算表格偏移量。MOVB,#3MULABADDA,DPLMOVDPL,AJNCBTF5I

31、NCDPHBTF5:CLRA;查表。MOVCA,A+DPTRMOVC,ACC.6MOVACC.7,CMOVR5,AMOVA,#1MOVCA,A+DPTRMOVR6,MOVA,#2MOVCA,A+DPTRMOVR7,ALCALLMUL1;将阶码对应的浮点数和尾数对应的浮点数相乘。MOVC,IDH;取出数符。MOV1FH,CLJMPMOVO;传送转换结果。;(27)标号:FTOB功能:格式化浮点数转换成浮点BCD码;入口条件:格式化浮点操作数在R0中。;出口信息:转换成的浮点BCD码仍在R0中。;影响资源:PSW、A、B、R2R7、位1DH1FH堆栈需求:6字节FTOB:INCROMOVA,R0I

32、NCROORLA,R0DECRODECROJNZFTBOMOVR0,#4IHRETFTBO:MOVA,R0MOVC,ACC.7MOV1DH,CCLRACC.7MOVRO,ALCALLMVROMOVDPTR,邨FLO;绝对值大于或者等于1时的查表起点。MOVB,#0;十的0次幕。MOVA,R2JNBACC.7,FTBlMOVDPTR,#BTFL;绝对值小于IE6时的查表起点。MOVB,#0EDH;十的一19次幕。ADDA,#16JNCFTBlMOvDPTR,#BFLN;绝对值大于或者等于IE6时的查表起点。MOVB,#OFAH;十的一6次暴。FTBl:CLRA;查表,找到一个比待转换浮点数大的整

33、数幕。MOVCA,ADPTRMOVC,ACC.6MOVACC.7,CMOVR5,AMOVA,#1MOVCA,A+DPTRMOVR6,AMOVA,#2MOVCA,A+DPTRMOVR7,AMOVA,R5;和待转换浮点数比较。CLRCSUBBA,R2JBACC.7,FTB2;差为负数。JNZFTB3MOV,R6CLRCSUBBA,R3JCFTB2JNZFTB3MOVA,R7CLRCSUBBA,R4JCFTB2JNZFTB3MOVR5,B;正好是表格中的数。INCR5;幕加一。MOVR6,#10H;尾数为01000。MOVR7,#0SJMPFTB;传送转换结果。FTB2:INCDPTR;准备表格下一

34、项。INCDPTRINCDPTRINCB;塞加一。SJMPFTBl;FTB3:PUSHB;保存事值。LCALLDIV3;相除,得到一个二进制浮点数的纯小数。FTB4:MOVA,R2;取阶码。JZFTB5;为零吗?CLRC;LCALLRRl;右规。SJMPFTB4FTB5:POPACC;取出幕值。MOVR5,A;作为十进制浮点数的阶码。LCALLHB2;转换尾数的十分位和百分位。MOVR6,ALCALLHB2;转换尾数的千分位和万分位。MOVR7,AMOVA,R3;四舍五入。RLCACLRAADDCA,R7DAAMOVR7,ACLRAADDCA,R6DAAMOVR6,AJNCFTB6MOVR6,

35、#10HINCR5FTB6:INCRO;存放转换结果。INCROMOVA,R7MOVR0,ADECROMOVA,R6MOVR0,ADECROMOVA,R5MOVC,IDH;取出数符。MOVACC.7,CMOVR0,ARETHB2:MOVA,R4;尾数扩大100倍。MOVB,#100MULABMOVR4,AMOVA,BXCHA,R3MOVB,#100MULABADDA,R3MOVR3,AJNCHB21INCBHB21:MOVA,B;将整数部份转换成BCD码。MOVB,#10DIVABSWAPAORLA,BRETBTFL:DB41H,OECH,IEH;LOOOOE-19DB45H,93H,93H;

36、LOOOOE-18DB48H,0B8H,78H;LOOOOE-17DB4BH,0E6H,96H;LOOOOE-16DB4FH,90H,IDH;LOOOOE-15DB52H,0B4H,25H;1.OOOOE-MDB55H,OElH,2EH;1.0000E-13DB59H,8CH,OBDH;1.0000E-12DB5CH,OAFH,OECH;1.OOOOE-IlDB5FH,ODBH,0E7H;1.OOOOE-IODB63H,89H,70H;1.0000E-9DB66H,OABH,OCCH;1.0000E-8DB69H,0D6H,OCOHjl.0000E-7BFLN:DB6DH,86H,38H;1.

37、0000E-6DB70H,07H,0C6H;1.0000E-5DB73H,ODlH,0B7H;LooooE-4DB77H,83H,12H;1.0000E-3DB7AH,0A3H,0D7H;LoOooE-2DB7DH,OCCH,OCDH;1.OOOOE-IBFLO:DBl,80H,OOH;1.0000DB4,OAOH,OOH;;1.OOOOElDB7,0C8H,OOH;1.0000E2DBOAH,OFAH,OOH;1.0000E3DB0EH,9CH,40H;1.0000E4DB11H,0C3H,50HJ.0000E5DB14H,0F4H,24HJ.0000E6DB18H,98H,97H;1.00

38、00E7DB1BH,OBEH,OBCH;1.0000E8DB1EH,OEEH,6BH;1.0000E9DB22H,95H,03H;1.0000E10DB25H,OBH,44H;1.OOOOE11DB28H,0E8H,0D5H;1.0000E12DB2CH,91H,85H;1.0000E13DB2FH,0B5H,0E6H;1.OOOOEHDB32H,0E3H,60H;1.0000E15DB36H,8EH,ICH;1.0000E16DB39H,31H,0A3H;1.0000E17DB3CH,ODEH,OBH;1.0000E18DB40H,8AH,0C7H;1.0000E19;绝对值子程序FABS:

39、MOVA,R0;读取操作数的阶码CLRACC.7;清除数符MOVR0,A;回传阶码RET;(11)标号:FCMP功能:浮点数代数值比较(不影响待比较操作数);入口条件:待比较操作数分别在R0和R1中。;出口信息:若CY=I,则RORl0;影响资源:A、PSW堆栈需求:2字节FCMP:MOVA,Ro;数符比较XRLA,RlJNBACC.7,CMP2MOVA,R0;两数异号,以R0数符为准RLCAMOVA,#0FFHRETCMP2:MOVA,R1;两数同号,准备比较阶码MOVC,ACC.6MOVACC.7,CMOVB,AMOVA,R0MOVC,ACC.7MOVFo,C;保存R0的数符MOVC,ACC.6MOVACC.7,CCLRC;比较阶码SUBBA,BJZCMP6RLCA;取阶码之差的符号JNBF0,CMP5CPLC;R0为负时,结果取反CMP5:MOVA,#OFFH;两数不相等RETCMP6:INCRO;阶码相同时,准备比较尾数INCROINCRlINCRl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号