单片机实用程序.docVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机实用程序.doc

单片机实用程序 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,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 ret (3) 标号: neg功能:多字节bcd码取补 入口条件:字节数在r7中,操作数在[r0]中。 出口信息:结果仍在[r0]中。 影响资源:psw、a、r2、r3 堆栈需求: 2字节 neg: mov a,r7 ;取(字节数减一)至r2中 dec a mov r2,a mov a,r0 ;保护指针 mov r3,a neg0: clr c mov a,#99h subb a,@r0 ;按字节十进制取补 mov @r0,a ;存回[r0]中 inc r0 ;调整数据指针 djnz r2,neg0 ;处理完(r2)字节 mov a,#9ah ;最低字节单独取补 subb a,@r0 mov @r0,a mov a,r3 ;恢复指针 mov r0,a ret (4) 标号: brln功能:多字节bcd码左移十进制一位(乘十) 入口条件:字节数在r7中,操作数在[r0]中。 出口信息:结果仍在[r0]中,移出的十进制最高位在r3中。 影响资源:psw、a、r2、r3 堆栈需求: 2字节 brln: mov a,r7 ;取字节数至r2中 mov r2,a add a,r0 ;初始化数据指针 mov r0,a mov 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乘r7 mov b,r7 mul ab mov r4,b ;暂存部分积 mov r5,a mov a,r3 ;计算r3乘r6 mov b,r6 mul ab add a,r4 ;累加部分积 mov r4,a clr a addc a,b mov r3,a mov a,r2 ;计算r2乘r7 mov b,r7 mul ab add a,

文档评论(0)

000 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档