没有合适的资源?快使用搜索试试~ 我知道了~
首页MCS-51单片机高效子程序库详解:优化算法与实用应用
《MCS-51单片机实用子程序库(96年版)》是一份专为MCS-51单片机设计的实用工具,由作者周航慈在1988年编撰,包括定点子程序库和浮点子程序库。该库在设计时注重了相容性、透明性、容错性以及算法优化,特别是其中的开平方算法采用了一种快速逼近算法,能够达到牛顿迭代法的精度,且执行速度比双字节定点除法快约二十倍,这在当时的单片机领域是一个重要的技术创新。 该子程序库在八年的实际应用中不断得到用户反馈,作者根据这些反馈进行更新和修正,形成了现在的最新版本。子程序库针对《单片机应用程序设计技术》一书附录中的子程序库进行了重大改进,主要体现在以下几个方面: 1. 调整了与IBMPC主流开发系统的汇编语言兼容性,使得读者无需修改即可直接使用原子程序库。 2. 浮点运算子程序库经过了测试和优化,提升了十进制和二进制浮点数转换的精确度和可靠性。 3. 新增了多个浮点子程序,如传送、比较、清零和判零等,简化了数据处理程序的编写过程。 在使用子程序库时,需要注意以下关键信息: - 应用程序需与子程序库链接后统一编译,这虽然简单方便但可能导致程序过长; - 或者只链接所需部分子程序,但需确保包含所有必要的低级子程序,以保持程序的完整性。 此外,书中详细列出了子程序的标号、入口条件、出口信息、资源影响和堆栈需求,并提供了注释以帮助读者理解。对于MCS-51定点运算子程序库,文件名为DQ51.ASM,作者规定了多字节定点操作数的表示方式、运算精度和数据工作区的使用规则。 这份子程序库是MCS-51单片机开发者的重要参考资料,不仅包含了高效实用的算法,还考虑到了与主流开发环境的兼容性,极大地简化了单片机应用程序的编写和调试工作。
资源详情
资源推荐
SH4: MOV A,R2
ORL A,R3
ORL A,R4
ORL A,R5
JNZ SH40
RET ;被开方数为零,不必运算
SH40: MOV R7,#0 ;左规次数初始化
MOV A,R2
SH41: ANL A,#0C0H ;被开方数高字节小于40H否?
JNZ SQRH ;不小于40H,左规格化完成
MOV R6,#2 ;每左规一次,被开方数左移两位
SH42: CLR C ;被开方数左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
DJNZ R6,SH42 ;被开方数左移完两位
INC R7 ;左规次数加一
SJMP SH41 ;继续左规
SQRH: MOV A,R2 ;规格化后高字节按折线法分为三个区间
ADD A,#57H
JC SQR2
ADD A,#45H
JC SQR1
ADD A,#24H
MOV B,#0E3H ;第一区间的斜率
MOV R4,#80H ;第一区间的平方根基数
SJMP SQR3
SQR1: MOV B,#0B2H ;第二区间的斜率
MOV R4,#0A0H;第二区间的平方根基数
SJMP SQR3
SQR2: MOV B,#8DH ;第三区间的斜率
MOV R4,#0D0H;第三区间的平方根基数
SQR3: MUL AB ;与区间基点的偏移量乘区间斜率
MOV A,B
ADD A,R4 ;累加到平方根的基数上
MOV R4,A
MOV B,A
MUL AB ;求当前平方根的幂
XCH A,R3 ;求偏移量(存放在 R2R3中)
CLR C
SUBB A,R3
MOV R3,A
MOV A,R2
SUBB A,B
MOV R2,A
SQR4: SETB C ;用减奇数法校正一个字节的平方根
MOV A,R4 ;当前平方根的两倍加一存入 R5R6中
RLC A
MOV R6,A
CLR A
RLC A
MOV R5,A
MOV A,R3 ;偏移量小于该奇数否?
SUBB A,R6
MOV B,A
MOV A,R2
SUBB A,R5
JC SQR5 ;小于,校正结束,已达到一个字节的精度
INC R4 ;不小于,平方根加一
MOV R2,A ;保存新的偏移量
MOV R3,B
SJMP SQR4 ;继续校正
SQR5: MOV A,R4 ;将一个字节精度的根存入 R2
XCH A,R2
RRC A
MOV F0,C ;保存最终偏移量的最高位
MOV A,R3
MOV R5,A ;将最终偏移量的低八位存入 R5 中
MOV R4,#8 ;通过( R5R6/R2)求根的低字节
SQR6: CLR C
MOV A,R3
RLC A
MOV R3,A
CLR C
MOV A,R5
SUBB A,R2
JB F0,SQR7
JC SQR8
SQR7: MOV R5,A
INC R3
SQR8: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV F0,C
DJNZ R4,SQR6 ;根的第二字节计算完,在 R3中
MOV A,R7 ;取原被开方数的左规次数
JZ SQRE ;未左规,开方结束
SQR9: CLR C ;按左规次数右移平方根,得到实际根
MOV A,R2
RRC A
MOV R2,A
MOV A,R3
RRC A
MOV R3,A
DJNZ R7,SQR9
SQRE: RET
(14) 标号: HASC 功能:单字节十六进制数转换成双字节 ASCII 码
入口条件:待转换的单字节十六进制数在累加器 A 中。
出口信息:高四位的 ASCII 码在 A 中,低四位的 ASCII 码在 B 中。
影响资源: PSW、 A、B 堆栈需求: 4字节
HASC: MOV B,A ;暂存待转换的单字节十六进制数
LCALL HAS1 ;转换低四位
XCH A,B ;存放低四位的 ASCII 码
SWAP A ;准备转换高四位
HAS1: ANL A,#0FH ;将累加器的低四位转换成 ASCII 码
ADD A,#90H
DA A
ADDC A,#40H
DA A
RET
(15) 标号: ASCH 功能: ASCII 码转换成十六进制数
入口条件:待转换的 ASCII 码( 30H~39H或 41H~46H)在 A中。
出口信息:转换后的十六进制数( 00H~0FH)仍在累加器 A 中。
影响资源: PSW、 A 堆栈需求: 2字节
ASCH: CLR C
SUBB A,#30H
剩余61页未读,继续阅读
你不是清风
- 粉丝: 3
- 资源: 41
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功