ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:119.69KB ,
资源ID:1016951      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1016951.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(51单片机汇编程序范例.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

51单片机汇编程序范例.docx

1、51单片机汇编程序范例51单片机汇编程序范例(总14页)16位二进制数转换成BCD码的的快速算法51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。程序可见:中的HEX2BCD子程序。.说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。上述的HEX2BCD子程序,

2、虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的1/4!.近来,在网上发现了一个链接:,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人

3、员的手笔。比如说文中提到的:“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。.下面说说做而论道的编程思路。;-;已知16位二进制整数n以b15b0表示,取值范围为065535。;那么可以写成:; n = b15 b0;把16位数分解成高8位、低8位来写,也是常见的形式:; n = b15b8 * 256 + b7b0;那么,写成下列形式,也就可以理解了:; n = b15b12 * 4096 + b11b0;式中高4位b15b12取值范围为015,代表了4096的个数;;上式可

4、以变形为:; n = b15b12 * 4000 + b15b12 * (100 - 4) + b11b0;用x代表b15b12,有:; n = x * 4000 + x * (100 - 4) + b11b0;即:; n = 4*x (千位) + x (百位) + b11b0 - 4*x;写到这里,就可以看出一点BCD码变换的意思来了。;上式中后面的位:b11b0 - 4*x,如果小于256,那就太简单了,马上就可以去按照常规转换BCD了。;如果数值较大,就要把b11b7看成128的个数y;在百位中加上y、在十位加上3*y、并在b6b0中减去2*y。;那么就有:; n = 4*x (千位)

5、+ x (百位) + b11b0 - 4*x; n = 4*x (千位) + (x + y) (百位) + 3*y (十位) + b6b0 - 2*y;由此,就可以明确由高9位b15b7变换出来十进制的各个位的数值,可能大于9,到最后整理一下即可。;剩下的低7位b6b0,已经是单字节数据,变换成BCD码那就十分简单了。;-从最后的表达式中可以看出,高9位变换的计算方法极为简单,只是使用左移、加减等指令即可,基本上不涉及多字节的运算。编程的时候,要充分利用单字节、单周期的指令,使程序的长度和执行时间尽量缩短。做而论道的编程思路已经给出,程序代码还是过一段时间再公布,给大家留下一个发挥的时间。感兴

6、趣的网友可以留言,写出自己编写的程序。 51单片机把4位16进制数转成10进制数的方法2010-02-10 23:33, 2位16进制转10进制,用除以10求商跟余数的方法,即可。4位16进制数呢DIV指令只可以对2位16进制数进行除法运算啊,求高手解答。例如把TH1 TL1的数值转成十进制, 分别存入R4 R3 R2 R1 R0。我要的是汇编的方法,C语言还没学到。悬赏分:30 - 解决时间:2010-2-10 22:47 ;-最佳答案:两个字节的二进制数转换成BCD码,必须编写程序来解决。下面把这段转换程序,写成子程序的结构,便于网友移植。;程序经过仿真调试通过,如下所示:;-; MOV

7、R0, TH1 MOV R1, TL1 CALL HEX2BCD ;调用子程序把R0 R1中的数字,转换成压缩的BCD码,送到R2 R3 R4;-下面,把万千百十个位,分别存入R4 R3 R2 R1 R0 MOV A, R4 ;先分离R4中的压缩型BCD码,包含的是十位与个位的数 MOV B, #16 DIV AB ;除以16,目的是分离出高、低四位 MOV R1, A ;存放十位 MOV R0, B ;存放个位; MOV A, R2 ;万位数不超过6,即R2中的压缩型BCD码只有一个,直接放到万位R4中 MOV R4, A ;存放万位; MOV A, R3 ;分离R3中的压缩型BCD码,其包

8、含的是千位和百位数 MOV B, #16 ;半字节分离 DIV AB MOV R3, A MOV R2, B SJMP $ ;到此,完成了题目要求;-;两个字节的二进制数转换成BCD码的程序如下:;功能:16位二进制数变换成为 BCD 码;;入口:R0 R1 中是 16 位二进制数,其中R0中是高 8 位;;出口:R2 R3 R4 中是 BCD 码,其中R2中是万位,R3中是千、百位,R4中是十、个位。HEX2BCD: CLR A MOV R2, A ;先对要放入转换后的压缩型BCD码的寄存器通通清零 MOV R3, A MOV R4, A MOV R5, #16 ;共转换十六位数LOOP:

9、CLR C MOV A, R1 ;从待转换数的高端移出一位到Cy(从低8位R1开始转换) RLC A MOV R1, A MOV A, R0 RLC A MOV R0, A MOV A, R4 ;送到BCD码的低端 ADDC A, R4 ;带进位加。自身相加,相当于左移一位 DA A ;十进制调整,变成BCD码 MOV R4, A MOV A, R3 ADDC A, R3 DA A MOV R3, A MOV A, R2 ADDC A, R2 MOV R2, A DJNZ R5, LOOP ;共转换十六位数 RET将A中的二进制数转换为3位的BCD码,其中百位数存放.2010-01-11 09

10、:13请各位懂得帮写下这个程序片段。将A中的二进制数转换为3位的BCD码。其中百位数存放到31H中,十位和个位数压缩后,存放到30H中。悬赏分:80 - 解决时间:2009-10-19 09:59 最佳答案:;-看来这个题目是属于MCS-51单片机的。下面用51单片机的汇编语言来求解。 MOV B, #100 DIV AB MOV 31H, A ;存百位数 MOV A, #10 XCH A, B DIV AB SWAP A ;十位数换到高四位 ADD A, B ;加上个位数 MOV 30H, A ;保存 R0中的8位二进制数转换成3位BCD码 单片机编程2010-01-10 23:18单片机的

11、不难编程题!急!将R0中的8位二进制数转换成3位BCD码,结果存入外部RAM的1002H1000H(从高位到低位)单元中。例如:地址:R0 执行后:1002H 1001H 1000H 数据:81H 01 02 09 悬赏分:15 - 解决时间:2009-10-15 19:10 提问者: stefine_ - 一级最佳答案:;-呵呵,楼上的程序,使用了DEC DPTR,要知道,51单片机指令系统里面,是没有DEC DPTR指令的。按照下面的思路做,还可以再简练些。R0中的8位二进制数转换成3位BCD码: MOV DPTR, #1000H ;个位的地址 MOV A, R0 MOV B, #10 D

12、IV AB XCH A, B MOVX DPTR, A INC DPTR MOV A, #10 XCH A, B DIV AB XCH A, B MOVX DPTR, A INC DPTR XCH A, B MOVX DPTR, A RET 仅用了24字节 16位二进制转BCD码 -单片机2010-01-03 14:19要求:编写一段程序,把计数器中T0中计的数(TH0和TL0)转成8421BCD码。并且高8位给p1口,低8位给p0口,要是转成BCD码超过16位,则给高电平。我是做单片机课设的,这段程序实在编不明白了,向各位大侠请教了!无比感谢中!答对有额外加分啊! 悬赏分:200 - 解决时

13、间:2010-1-3 13:03 最佳答案:16bit 表示:65536,万位不超6程序如下: MOV R0, TL0 ; MOV R1, TH0 ;待转换的16bit数分别放入(由高到低)R1R0中; CLR A MOV R2, A ;先清零 MOV R3, A MOV R4, A MOV R5, #16 ;共转换16位数LOOP: CLR C ;c=0 MOV A, R0 ;从待转换低8bit数的高端移出一位到Cy(转换最先由低8位开始) RLC A ;R0中的最高位移入到A中 MOV R0, A MOV A, R1 ;(高8位二进制数) RLC A ;此时C中的由低8位所移入的数重新移入高8位的低端 MOV R1, A ;相当于16bit的高端移出了1bit到C中了 MOV A, R4 ;送到BCD码的低端 ADDC A, R4 ;带进位加。自身相加,相当于左移一位 DA A ;十进制调整,变成BCD码 MOV R4, A MOV A, R3 ADDC A, R3 DA A MOV R3, A MOV A, R

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1