MCS-51单片机实用子程序库2929.docx
《MCS-51单片机实用子程序库2929.docx》由会员分享,可在线阅读,更多相关《MCS-51单片机实用子程序库2929.docx(93页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机实用子程序库(年版) 周周 航 慈 目目前已有若若干版本的的子程序库库公开发表表,它们各各有特色。笔笔者在19988年也也编制了两两个子程序库(定定点子程序序库和浮点点子程序库库),并在在相容性、透透明性、容容错性和算算法优化方方面作了一些些工作。本本程序库中中的开平方方算法为笔笔者研究的的快速逼近近算法,它它能达到牛牛顿迭代法同样的的精度,而而速度加快快二十倍左左右,超过过双字节定定点除法的的速度。经经过八年来来全国广大用户的的实际使用用,反馈了了不少信息息,陆续扩扩充了一些些新的子程程序,纠正正了一些隐隐含错误,成为现现在这个最最新版本。 本本子程序库库对单片片机应用程程序设计技技术
2、一书书附录中的的子程序库库作了重大大修订: ()按当前前流行的以以 IBMM PC 为主机的的开发系统统对汇编语语言的规定定,将原子子程序库的标号和位位地址进行行了调整,读读者不必再再进行修改改,便可直直接使用。 ()对浮点点运算子程程序库进行行了进一步步的测试和和优化,对对十进制浮浮点数和二二进制浮点数的相互互转换子程程序进行了了彻底改写写,提高了了运算精度度和可靠性性。 ()新增添添了若干个个浮点子程程序(传送送、比较、清清零、判零零等),使使编写数据据处理程序的工作作变得更简简单直观。 在在使用说明明中开列了了最主要的的几项:标标号、入口口条件、出出口信息、影影响资源、堆堆栈需求,各项项
3、目的意义义请参阅单单片机应用用程序设计计技术第第六章 66.3.77 节的内内容。程序序清单中开列列了四个栏栏目:标号号、指令、操操作数、注注释。为方方便读者理理解,注释释尽力详细细。 子子程序库的的使用方法法如下: 将子程程序库全部部内容链接接在应用程程序之后,统统一编译即即可。优点点是简单方方便,缺点是程序太太长,大量量无关子程程序也包含含在其中。 仅将子子程序库中中的有关部部分内容链链接在应用用程序之后后,统一编编译即可。有有些子程序需要调用用一些低级级子程序,这这些低级子子程序也应应该包含在在内。优点点是程序紧紧凑,缺点点是需要对子程程序库进行行仔细删节节。 (一) 定定点运算子子程序
4、库及及其使用说说明 定定点运算子子程序库文文件名为DDQ51.ASM,为为便于使用用,先将有有关约定说说明如下: 多字节节定点操作作数:用R0或或R1来表示存存放在由RR0或R11指示的连连续单元中中的数据。地址小小的单元存存放数据的的高字节。例例如:RR0=11234556H,若若(R0)=30HH,则(330H)=12H,(31H)=34HH,(322H)=556H。 运算精精度:单次次定点运算算精度为结结果最低位位的当量值值。 工作区区:数据工工作区固定定在PSWW、A、BB、R2R7,用用户只要不不在工作区区中存放无无关的或非消消耗性的信信息,程序序就具有较较好的透明明性。 () 标标
5、号: 功能:多多字节码加法法入口条件:字节数在在R7中,被被加数在R0中中,加数在在R1中。出口信息:和在RR0中,最最高位进位位在CY中中。影响资源:PSW、AA、R2 堆堆栈需求: 字字节BCDA:MOVA,R77;取字节节数至R22中MOVR2,AAADDA,R00;初始化化数据指针针MOVR0,AAMOVA,R22ADDA,R11MOVR1,AACLRCBCD1:DECR0;调整数数据指针DECR1MOVA,RR0ADDCCA,RR1;按字节节相加DAAA;十进制制调整MOVR0,A;和存回回R0中DJNZZR2,BBCD1;处理完完所有字节节RET () 标标号: 功能:多多字节码减
6、法法入口条件:字节数在在R7中,被被减数在R0中中,减数在在R1中。出口信息:差在RR0中,最最高位借位位在CY中中。影响资源:PSW、AA、R2、RR3 堆栈需需求: 字节BCDB:LCALLLNEG11;减数R1十十进制取补补LCALLLBCDAA;按多字字节码加法处处理CPLC;将补码码加法的进进位标志转转换成借位位标志MOVF0,CC;保护借借位标志LCALLLNEG11;恢复减减数R11的原始始值MOVC,F00 ;恢复借借位标志RETNEG1:MOVA,R00;R11十进制制取补子程程序入口XCHA,R11;交换指指针XCHA,R00LCALLLNEG;通过R0实实现R11取补MO
7、VA,R00XCHA,R11;换回指指针XCHA,R00RET () 标标号: 功功能:多字字节码取补入口条件:字节数在在R7中,操操作数在R0中中。出口信息:结果仍在在R0中。影响资源:PSW、AA、R2、RR3 堆栈需需求: 字节NEG:MOVA,R77;取(字字节数减一一)至R22中DECAMOVR2,AMOVA,R00;保护指指针MOVR3,AANEG0:CLRCMOVA,#999HSUBBBA,RR0;按字节节十进制取取补MOVR0,A;存回R0中中INCR0;调整数数据指针DJNZZR2,NNEG0;处理完完(R2)字字节MOVA,#99AH;最低字字节单独取取补SUBBBA,RR
8、0MOVR0,AMOVA,R33;恢复指指针MOVR0,AARET () 标标号: 功能:多多字节码左移移十进制一一位(乘十十)入口条件:字节数在在R7中,操操作数在R0中中。出口信息:结果仍在在R0中,移出出的十进制制最高位在在R3中。影响资源:PSW、AA、R2、RR3 堆栈需需求: 字节BRLN:MOVA,R77;取字节节数至R22中 MMOVR2,AAADDA,R00;初始化化数据指针针MOVR0,AAMOVR3,#0;工作单单元初始化化BRL1:DECR0;调整数数据指针MOVA,RR0;取一字字节SWAPPA;交换十十进制高低低位MOVR0,A;存回MOVA,R33;取低字字节移出
9、的的十进制高高位XCHDDA,RR0;换出本本字节的十十进制高位位MOVR3,AA;保存本本字节的十十进制高位位DJNZZR2,BBRL1;处理完完所有字节节RET () 标标号: 功功能:双字字节二进制制无符号数数乘法入口条件:被乘数在在R2、RR3中,乘乘数在R66、R7中中。出口信息:乘积在RR2、R33、R4、RR5中。影响资源:PSW、AA、B、RR2R77 堆栈需求求: 字节MULD:MOVA,R33;计算RR3乘R77MOVB,R77MULABMOVR4,BB;暂存部部分积MOVR5,AAMOVA,R33;计算RR3乘R66MOVB,R66MULABADDA,R44;累加部部分积
10、MOVR4,AACLRAADDCCA,BMOVR3,AAMOVA,R22;计算RR2乘R77MOVB,R77MULABADDA,R44;累加部部分积MOVR4,AAMOVA,R33ADDCCA,BMOVR3,AACLRARLCAXCHA,R22;计算RR2乘R66MOVB,R66MULABADDA,R33;累加部部分积MOVR3,AAMOVA,R22ADDCCA,BMOVR2,AARET () 标标号: 功功能:双字字节二进制制无符号数数平方入口条件:待平方数数在R2、RR3中。出口信息:结果在RR2、R33、R4、RR5中。影响资源:PSW、AA、B、RR2R55 堆栈需求求: 字节MUL2
11、:MOVA,R33;计算RR3平方MOVB,AMULABMOVR4,BB;暂存部部分积MOVR5,AAMOVA,R22;计算RR2平方MOVB,AMULABXCHA,R33;暂存部部分积,并并换出R22和R3XCHA,BXCHA,R22MULAB;计算22R2R3CLRCRLCAXCHA,BRLCAJNCMU200INCR2;累加溢溢出量MU20:XCHA,B;累加部部分积ADDA,R44MOVR4,AAMOVA,R33ADDCCA,BMOVR3,AACLRAADDCCA,R22MOVR2,AARET () 标标号: 功能:双双字节二进进制无符号号数除法入口条件:被除数在在R2、RR3、R44
12、、R5中中,除数在在R6、RR7中。出口信息:OV=00 时,双双字节商在在R2、RR3中,OOV=1 时溢出。影响资源:PSW、AA、B、RR1R77 堆栈需求求: 字节DIVD:CLRC;比较被被除数和除除数MOVA,R33SUBBBA,R77MOVA,R22SUBBBA,R66JCDDVD1SETBBOV;溢出RETDVD1:MOVB,#110H;计算双双字节商DVD2:CLRC;部分商商和余数同同时左移一一位MOVA,R55RLCAMOVR5,AAMOVA,R44RLCAMOVR4,AAMOVA,R33RLCAMOVR3,AAXCHA,R22RLCAXCHA,R22MOVF0,CC;保
13、存溢溢出位CLRCSUBBBA,R77;计算(RR2R3R6R77)MOVR1,AAMOVA,R22SUBBBA,R66ANLC,/FF0;结果判判断JCDDVD3MOVR2,AA;够减,存存放新的余余数MOVA,R11MOVR3,AAINCR5;商的低低位置一DVD3:DJNZZB,DVVD2;计算完完十六位商商(R4RR5)MOVA,R44;将商移移到R2RR3中MOVR2,AAMOVA,R55MOVR3,AACLROV;设立成成功标志RET () 标标号: 功功能:双字字节二进制制无符号数数除以单字字节二进制制数入口条件:被除数在在R4、RR5中,除除数在R77中。出口信息:OV=00
14、时,单单字节商在在R3中,OOV=1 时溢出。影响资源:PSW、AA、R3R7 堆栈栈需求: 字节节D457:CLRCMOVA,R44SUBBBA,R77JCDDV50SETBBOV;商溢出出RETDV50:MOVR6,#8;求平均均值(R44R5RR7R3)DV51:MOVA,R55RLCAMOVR5,AAMOVA,R44RLCAMOVR4,AAMOVF0,CCCLRCSUBBBA,R77ANLC,/FF0JCDDV52MOVR4,AADV52:CPLCMOVA,R33RLCAMOVR3,AADJNZZR6,DDV51MOVA,R44;四舍五五入ADDA,R44JCDDV53SUBBBA,R
15、77JCDDV54DV53:INCR3DV54:CLROVRET () 标标号: 功能:三三字节二进进制无符号号数除以单单字节二进进制数入口条件:被除数在在R3、RR4、R55中,除数数在R7中中。出口信息:OV=00 时,双双字节商在在R4、RR5中,OOV=1 时溢出。影响资源:PSW、AA、B、RR2R77 堆栈需求求: 字节DV31:CLRCMOVA,R33SUBBBA,R77JCDDV30SETBBOV;商溢出出RETDV30:MOVR2,#10H;求R33R4R55R7R4R55DM23:CLRCMOVA,R55RLCAMOVR5,AAMOVA,R44RLCAMOVR4,AAMOV
16、A,R33RLCAMOVR3,AAMOVF0,CCCLRCSUBBBA,R77ANLC,/FF0JCDDM24MOVR3,AAINCR5DM24:DJNZZR2,DDM23MOVA,R33;四舍五五入ADDA,R33JCDDM25SUBBBA,R77JCDDM26DM25:INCR5MOVA,R55JNZDM266INCR4DM26:CLROVRET ;商在RR4R5中中 () 标号: 功能:双双字节二进进制有符号号数乘法(补补码)入口条件:被乘数在在R2、RR3中,乘乘数在R66、R7中中。出口信息:乘积在RR2、R33、R4、RR5中。影响资源:PSW、AA、B、RR2R77 堆栈需求求:
17、 字节MULS:MOVR4,#0;清零RR4R5MOVR5,#0LCALLLMDS;计算结结果的符号号和两个操操作数的绝绝对值LCALLLMULDD;计算两两个绝对值值的乘积SJMPPMDSEE;用补码码表示结果果 () 标号: 功能:双字节二二进制有符符号数除法法(补码)入口条件:被除数在在R2、RR3、R44、R5中中,除数在在R6、RR7中。出口信息:OV=00时商在RR2、R33中,OVV=1时溢溢出。影响资源:PSW、AA、B、RR1R77 堆栈需求求: 字节DIVS:LCALLLMDS;计算结结果的符号号和两个操操作数的绝绝对值PUSHHPSW;保存结结果的符号号LCALLLDIV
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS 51 单片机 实用 程序库 2929
限制150内