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
上一篇:串口通信基本接线方法
上一篇:单片机几个重要的概念