双字节二进制转换为BCD
更新时间:2023-03-16 01:14:01 阅读量: 教育文库 文档下载
;-----------------------------------------------------------------------
;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成:
; n = [b15 ~ b0]
;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0]
;那么,写成下列形式,也就可以理解了:
; n = [b15~b12] * 4096 + [b11~b0]
;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为:
; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有:
; n = x * 4000 + {x * (100 - 4) + [b11~b0]} ;即:
; n = 4*x (千位) + x (百位) + [b11~b0] - 4*x
;写到这里,就可以看出一点BCD码变换的意思来了。
;
;上式中后面的位:[b11~b0] - 4*x,如果小于256,那就太简单了,马上就可以去按照常规转换BCD了。
;如果数值较大,就要把[b11~b7]看成128的个数y;在百位中加上y、在十位加上3*y、并在[b6~b0]中减去2*y。 ;那么就有:
; n = 4*x (千位) + x (百位) + [b11~b0] - 4*x
; n = 4*x (千位) + (x + y) (百位) + 3*y (十位) + [b6~b0] - 2*y
;由此,就可以明确由高9位[b15~b7]变换出来十进制的各个位的数值,可能大于9,到最后整理一下即可。
;剩下的低7位[b6~b0],已经是单字节数据,变换成BCD码那就十分简单了。
;-----------------------------------------------------------------------
从最后的表达式中可以看出,高9位变换的计算方法极为简单,只是使用左移、加减等指令即可,基本上不涉及多字节的运算。
编程的时候,要充分利用单字节、单周期的指令,使程序的长度和执行时间尽量缩短。 做而论道的编程思路已经给出,程序代码还是过一段时间再公布,给大家留下一个发挥的时间。
感兴趣的网友可以留言,写出自己编写的程序。
51单片机把4位16进制数转成10进制数的方法
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 R0, TH1 MOV R1, TL1
CALL HEX2BCD ;调用子程序把R0 R1中的数字,转换成BCD码,送到R2 R3 R4 ;-------下面,把万千百十个位,分别存入R4 R3 R2 R1 R0 MOV A, R4 MOV B, #16
DIV AB ;除以16,目的是分离出高、低四位 MOV R1, A ;存放十位 MOV R0, B ;存放个位 ;
MOV A, R2
MOV R4, A ;存放万位 ;
MOV A, R3 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 ;先清零
MOV R3, A MOV R4, A
MOV R5, #16 ;共转换十六位数
LOOP:
CLR C
MOV A, R1 ;从待转换数的高端移出一位到Cy 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
;共转换十六位数
正在阅读:
双字节二进制转换为BCD03-16
地铁接触网的常见故障及应对策略分析05-06
遇见作文,遇见作文600字,遇见作文800字_作文专题08-01
中考语文综合性学习复习资料05-06
JGJ59--2011新标准建筑施工安全检查评分表全套表模(广东省) - 图文10-06
中考综合性学习例题分析 - 图文11-15
给排水管网课程设计05-26
第十一章 第2节 对坐标的曲线积分06-08
数据结构期末考试(题集)07-06
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 二进制
- 字节
- 转换
- BCD
- 大学英语三级B真题2018年06月
- 电工电子技术(2)B答案
- 24时计时法经典练习题
- 涉外礼仪教案
- 2018-2024年中国触控屏市场深度调查与市场全景评估报告(目录) - 图文
- 数据库练习(参考答案)
- 基于PLC的电动机顺序起动停止控制设计汇总 -
- 关于企业预算管理和绩效考核的几点认识
- 2016年下半年四川省信息C类安全员模拟试题
- 2019-2020学年上学期七年级班主任工作计划
- 大学物理2(上) 清考试卷和答案
- Linux安装Nginx
- 甘肃省金昌市第一中学2011-2012学年高二下学期期末考试生物试题 -
- 化工热力学第3章 习题解答
- 第3部分习题1 - 消费者、生产者与市场效率
- 空间向量知识点归纳总结(经典)
- 中国石油集团公司六项较大生产安全风险管控措施落实情况检查表
- 辽师大版五年级上册信息技术教案
- 数据中心建设方案
- 小学班主任教育叙事