- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机实用程序
单片机实用程序 tamsex 发表于 2006-4-10 19:43:00
MCS-51单片机实用子程序(1)(一)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,aadd a,r0 ;初始化数据指针mov r0,amov a,r2add a,r1mov r1,aclr cbcd1: dec r0 ;调整数据指针dec r1mov a,@r0addc 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 ;恢复借位标志retneg1: mov a,r0 ;[r1]十进制取补子程序入口xch a,r1 ;交换指针xch a,r0lcall neg ;通过[r0]实现[r1]取补mov a,r0xch a,r1 ;换回指针xch a,r0ret
(3) 标号: neg功能:多字节bcd码取补
入口条件:字节数在r7中,操作数在[r0]中。出口信息:结果仍在[r0]中。影响资源:psw、a、r2、r3 堆栈需求: 2字节
neg: mov a,r7 ;取(字节数减一)至r2中dec amov r2,amov a,r0 ;保护指针mov r3,aneg0: clr cmov a,#99hsubb a,@r0 ;按字节十进制取补mov @r0,a ;存回[r0]中inc r0 ;调整数据指针djnz r2,neg0 ;处理完(r2)字节mov a,#9ah ;最低字节单独取补subb a,@r0mov @r0,amov a,r3 ;恢复指针mov r0,aret
(4) 标号: brln功能:多字节bcd码左移十进制一位(乘十)
入口条件:字节数在r7中,操作数在[r0]中。出口信息:结果仍在[r0]中,移出的十进制最高位在r3中。影响资源:psw、a、r2、r3 堆栈需求: 2字节
brln: mov a,r7 ;取字节数至r2中mov r2,aadd a,r0 ;初始化数据指针mov r0,amov r3,#0 ;工作单元初始化brl1: dec r0 ;调整数据指针mov a,@r0 ;取一字节swap a ;交换十进制高低位mov @r0,a ;存回mov a,r3 ;取低字节移出的十进制高位xchd a,@r0 ;换出本字节的十进制高位mov r3,a ;保存本字节的十进制高位djnz r2,brl1 ;处理完所有字节ret
(5) 标号: muld功能:双字节二进制无符号数乘法
入口条件:被乘数在r2、r3中,乘数在r6、r7中。出口信息:乘积在r2、r3、r4、r5中。影响资源:psw、a、b、r2~r7 堆栈需求: 2字节
muld: mov a,r3 ;计算r3乘r7mov b,r7mul abmov r4,b ;暂存部分积mov r5,amov a,r3 ;计算r3乘r6mov b,r6mul abadd a,r4 ;累加部分积mov r4,aclr aaddc a,bmov r3,amov a,r2 ;计算r2乘r7mov b,r7mul abadd a
文档评论(0)