位置:51电子网 » 技术资料 » 测试测量

MCS-51单片机实用子程序库

发布时间:2008/5/27 0:00:00 访问次数:423

        

    

     目前已有若干版本的子程序库公开发表,它们各有特色。本程序库中的开平方算法为快速逼近算法,它能达到牛顿迭代法同样的精度,而速度加快二十倍左右,超过双字节定点除法的速度。

     本子程序库对《单片机应用程序设计技术》一书附录中的子程序库作了重大修订:(1)按当前流行的以 ibm pc 为主机的开发系统对汇编语言的规定,读者不必再进行修改,便可直接使用。

     (2)对浮点运算子程序库进行了进一步的测试和优化,对十进制浮点数和二进制浮点数的相互转换子程序进行了彻底改写,提高了运算精度和可靠性。

     (3)新增添了若干个浮点子程序(传送、比较、清零、判零等),使编写数据处理程序的工作变得更简单直观。 在使用说明中开列了最主要的几项:标号、入口条件、出口信息、影响资源、堆栈需求,各项目的意义请参阅《单片机应用程序设计技术》第六章 6.3.7 节的内容。程序清单中开列了四个栏目:标号、指令、操作数、注释。为方便读者理解,注释尽力详细。子程序库的使用方法如下:1.将子程序库全部内容链接在应用程序之后,统一编译即可。优点是简单方便,缺点是程序太长,大量无关子程序也包含在其中。

     2.仅将子程序库中的有关部分内容链接在应用程序之后,统一编译即可。有些子程序需要调用一些低级子程序,这些低级子程序也应该包含在内。优点是程序紧凑,缺点是需要对子程序库进行仔细删节。(一) mcs-51定点运算子程序库及其使用说明 定点运算子程序库文件名为dq51.asm,为便于使用,先将有关约定说明如下:

     1.多字节定点操作数:用[r0]或[r1]来表示存放在由r0或r1指示的连续单元中的数

     据。地址小的单元存放数据的高字节。例如:[r0]=123456h,若(r0)=30h,则(30h)=12h,

     (31h)=34h,(32h)=56h。

     2.运算精度:单次定点运算精度为结果最低位的当量值。

     3.工作区:数据工作区固定在psw、a、b、r2~r7,用户只要不在工作区中存放无关的或非消耗性的信息,程序就具有较好的透明性。

     (1) 标号: bcda 功能:多字节bcd码加法

     入口条件:字节数在r7中,被加数在[r0]中,加数在[r1]中。

     出口信息:和在[r0]中,最高位进位在cy中。

     影响资源:psw、a、r2 堆栈需求: 2字节

     bcda: mov a,r7 ;取字节数至r2中

     mov r2,a

     add a,r0 ;初始化数据指针

     mov r0,a

     mov a,r2

     add a,r1

     mov r1,a

     clr c

     bcd1: dec r0 ;调整数据指针

     dec r1

     mov a,@r0

     addc a,@r1 ;按字节相加

     da a ;十进制调整

     mov @r0,a ;和存回[r0]中

     djnz r2,bcd1 ;处理完所有字节

     ret(2) 标号: bcdb 功能:多字节bcd码减法

     入口条件:字节数在r7中,被减数在[r0]中,减数在[r1]中。

     出口信息:差在[r0]中,最高位借位在cy中。

     影响资源:psw、a、r2、r3 堆栈需求: 6字节

     bcdb: lcall neg1 ;减数[r1]十进制取补

     lcall bcda ;按多字节bcd码加法处理

     cpl c ;将补码加法的进位标志转换成借位标志

     mov f0,c ;保护借位标志

     lcall neg1 ;恢复减数[r1]的原始值

     mov c,f0 ;恢复借位标志

     ret

     neg1: mov a,r0 ;[r1]十进制取补子程序入口

     xch a,r1 ;交换指针

     xch a,r0

     lcall neg ;通过[r0]实现[r1]取补

     mov a,r0

     xch a,r1 ;换回指针

     xch a,r0

 &n

        

    

     目前已有若干版本的子程序库公开发表,它们各有特色。本程序库中的开平方算法为快速逼近算法,它能达到牛顿迭代法同样的精度,而速度加快二十倍左右,超过双字节定点除法的速度。

     本子程序库对《单片机应用程序设计技术》一书附录中的子程序库作了重大修订:(1)按当前流行的以 ibm pc 为主机的开发系统对汇编语言的规定,读者不必再进行修改,便可直接使用。

     (2)对浮点运算子程序库进行了进一步的测试和优化,对十进制浮点数和二进制浮点数的相互转换子程序进行了彻底改写,提高了运算精度和可靠性。

     (3)新增添了若干个浮点子程序(传送、比较、清零、判零等),使编写数据处理程序的工作变得更简单直观。 在使用说明中开列了最主要的几项:标号、入口条件、出口信息、影响资源、堆栈需求,各项目的意义请参阅《单片机应用程序设计技术》第六章 6.3.7 节的内容。程序清单中开列了四个栏目:标号、指令、操作数、注释。为方便读者理解,注释尽力详细。子程序库的使用方法如下:1.将子程序库全部内容链接在应用程序之后,统一编译即可。优点是简单方便,缺点是程序太长,大量无关子程序也包含在其中。

     2.仅将子程序库中的有关部分内容链接在应用程序之后,统一编译即可。有些子程序需要调用一些低级子程序,这些低级子程序也应该包含在内。优点是程序紧凑,缺点是需要对子程序库进行仔细删节。(一) mcs-51定点运算子程序库及其使用说明 定点运算子程序库文件名为dq51.asm,为便于使用,先将有关约定说明如下:

     1.多字节定点操作数:用[r0]或[r1]来表示存放在由r0或r1指示的连续单元中的数

     据。地址小的单元存放数据的高字节。例如:[r0]=123456h,若(r0)=30h,则(30h)=12h,

     (31h)=34h,(32h)=56h。

     2.运算精度:单次定点运算精度为结果最低位的当量值。

     3.工作区:数据工作区固定在psw、a、b、r2~r7,用户只要不在工作区中存放无关的或非消耗性的信息,程序就具有较好的透明性。

     (1) 标号: bcda 功能:多字节bcd码加法

     入口条件:字节数在r7中,被加数在[r0]中,加数在[r1]中。

     出口信息:和在[r0]中,最高位进位在cy中。

     影响资源:psw、a、r2 堆栈需求: 2字节

     bcda: mov a,r7 ;取字节数至r2中

     mov r2,a

     add a,r0 ;初始化数据指针

     mov r0,a

     mov a,r2

     add a,r1

     mov r1,a

     clr c

     bcd1: dec r0 ;调整数据指针

     dec r1

     mov a,@r0

     addc a,@r1 ;按字节相加

     da a ;十进制调整

     mov @r0,a ;和存回[r0]中

     djnz r2,bcd1 ;处理完所有字节

     ret(2) 标号: bcdb 功能:多字节bcd码减法

     入口条件:字节数在r7中,被减数在[r0]中,减数在[r1]中。

     出口信息:差在[r0]中,最高位借位在cy中。

     影响资源:psw、a、r2、r3 堆栈需求: 6字节

     bcdb: lcall neg1 ;减数[r1]十进制取补

     lcall bcda ;按多字节bcd码加法处理

     cpl c ;将补码加法的进位标志转换成借位标志

     mov f0,c ;保护借位标志

     lcall neg1 ;恢复减数[r1]的原始值

     mov c,f0 ;恢复借位标志

     ret

     neg1: mov a,r0 ;[r1]十进制取补子程序入口

     xch a,r1 ;交换指针

     xch a,r0

     lcall neg ;通过[r0]实现[r1]取补

     mov a,r0

     xch a,r1 ;换回指针

     xch a,r0

 &n

相关IC型号

热门点击

 

推荐技术资料

音频变压器DIY
    笔者在本刊今年第六期上着重介绍了“四夹三”音频变压器的... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!