16位二进制转换为BCD码的C51汇编程序

16位二进制转换为BCD码的C51汇编程序

16位二进制转BCD码的程序算法及51汇编实现:

n=b15~b0

n=[b15~b8]*256+[b7~b0]

=[b15~b12]*4096+[b11~b0]

,高四位[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

上式中后面的位:[b11~b0]-4*x,如果,,,,于356,就直接转换成BCD码,如果

数值较大,就要把11~7位看成128的个数y,在百位中加上y,在十位加上3*y,并在

[b6~b0]中减去2*y

就有:

n=n=4*x(千位)+(x+y)(百位)+3*y(十位)+[b6~b0]-2*y

由此,就可以明确由高9位[b15~b7]变换出来十进制的各个位的数值,可能大于9,到最后整理一下即可。

剩下的低7位变成BCD 码已经很简单了。

这是别人的思路,容易理解,但用汇编也不太好写,期待有人能写出来,下面是我同,,,,的一个算法:

高八位减一,让第八位加上256,(存放压缩BCD码的三个字节百位加2,十位加5,各位加6)

ORG 0000H

AJMP MAIN

ORG 0003H

AJMP int0

ORG 0100H

MAIN:MOV SP,#60H

MOV R4,#30

MOV TMOD,#01H

MOV TH0,#00H

MOV TL0,#00H

MOV IE,#81H

SETB TR0

SETB IT0

LOOP:LCALL BCD

LCALL UBCD

LOOP1: LCALL XIANSHI

LCALL DELAY

DJNZ R4,LOOP1

AJMP LOOP

BCD:MOV A,#00H

MOV 38H,41H

MOV 37H,40H

MOV 34H,A

MOV 35H,A

MOV 36H,A

MOV A,37H

MOV B,#100

DIV AB

MOV 35H,A

MOV A,B

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV 36H,A

MOV R3,38H

CJNE R3,#0,JIA

AJMP RETURN

JIA: CLR C

MOV A,36H

ADDC A,#56H

DA A

MOV 36H,A

MOV A,35H

ADDC A,#02H

DA A

MOV 35H,A

MOV A,34H

ADDC A,#0

MOV 34H,A

DJNZ R3,JIA

RETURN:RET

UBCD: MOV A,34H

CJNE A,#00H,WUWEI

MOV R1,#35H

MOV R0,#36H

MOV A,#00H

XCHD A,@R0

MOV 30H,A

MOV A,@R0

SWAP A

MOV 31H,A

MOV A,#00H

XCHD A,@R1

MOV 32H,A

MOV A,@R1

c51 c语言 16位二进制转换为bcd码,16位二进制转换为BCD码的C51汇编程序.doc相关推荐

  1. 单片机(keil c51):BCD码转化为二进制(以4位BCD码举例,依此类推)

    BCD码转化为二进制 原理: 一个BCD码表示0~9,所以一个BCD码的取值范围为0000~1001. 在机器里所有的数都是按照二进制存入的,所以只需将BCD码转换为十进制即可. 4位BCD码可以表示 ...

  2. C语言笔记:进制转换与32位二进制IP地址转换十进制问题

    问题描述: 假设需要编写一个程序,实现32位二进制IP地址(32个字符长的1和0)转换为点分十进制格式并输出.IP地址的点分十进制格式通过将32位从低位到高位(右到左)一次分组八位,总共分4次,任何8 ...

  3. c语言左边自动补零,c语言左移4,余位补零 时不时乘以16?

    c语言左移4,余位补零 时不时乘以16?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言左移4,余位补零 时不时乘 ...

  4. 把ax中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写一段程序,要求数一下值为3(即11B)的的四分之一字节数,并将该数在终端上显示出来。

    把ax中存放的16位二进制数K看作是8个二进制的"四分之一字节".试编写一段程序,要求数一下值为3(即11B)的的四分之一字节数,并将该数在终端上显示出来. DATA SEGMEN ...

  5. c语言int16位数据范围,c语言中int取值范围为16位指的是什么16位

    1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中左边第一位是符号位,0代表+ .1代表-. ...

  6. c语言 ——int16,c语言中int取值范围为16位指的是什么16位

    匿名用户 1级 2013-10-20 回答 1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中 ...

  7. python中二进制转化为十进制_将二进制、八进制、十六进制转换为十进制

    学习视频 9节课征服「字符编码」-1-字符.字符集.字符编号与字符编码(基础课)-周华健的在线视频教程​edu.csdn.net 二进制.八进制和十六进制向十进制转换都非常容易,就是"按权相 ...

  8. [c语言]进值转换的详细代码实现(二进制,十进制,十六进制等)

    计算机进制以及进制转换 文章目录 计算机进制以及进制转换 计算机的多种进制: 代码实现(正文): 二进制转十进制: 十进制转二进制: 十六进制转十进制 十进制转十六进制 计算机的多种进制: 今天给大家 ...

  9. C语言每日一练 —— 第20天:位运算

    文章目录 一.前言 二.再谈二进制 1.二进制数值表示 2.二进制加法 3.二进制减法 三.位运算简介 1.位与的定义 2.位与运算符的简单应用 1)奇偶性判定 2)取末五位 3)消除末尾五位 4)2 ...

  10. 16位位图格式及对16位位图的一点个人总结

    原文地址::http://hi.baidu.com/rmgsxpxtzebcdpd/item/2fa5bf4e7f576c0be9350470 http://hi.baidu.com/wentao/b ...

最新文章

  1. msf 启动报[-] * WARNING: No database support: No database YAML file解决方法
  2. 网站建设套用模板后该如何做到出类拔萃?
  3. 系统开发小结【未完待续】
  4. async await实例
  5. PetShop之ASP.NET缓存--three
  6. solaris mysql_配置Solaris下自带的MYSQL
  7. vba ado返回集合_利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总
  8. 微信小程序框架探究和解析
  9. 因为某种原因阻止文本引擎初始化_网络营销外包——网络营销外包专员如何做好网站锚文本优化?...
  10. Java8 Stream()引发的“non-static method cannot be referenced from a static context”
  11. 解决:linux系统磁盘空间被占满,但是找不到大文件
  12. 表锁 行锁 页锁 是什么区别
  13. kali2022安装AWVS
  14. 练习2-12 输出华氏-摄氏温度转换表
  15. 算法题目打卡:Ques20201019
  16. C++:缺省参数是怎样设置的?
  17. JAVA系列:获取当天0点0分0秒(00:00:00),23点59分59秒(23:59:59)的方法
  18. 蓝牙音箱方案选用及设计注意
  19. unity传统文化交互以及摄像头移动和旋转
  20. linux安装trac+svn+apache+wike,搭建apache+svn+trac平台

热门文章

  1. 《为何佛不显身制止战争?》
  2. SpringCloud优点、缺点
  3. 第十六届—振兴杯计算机网络管理员决赛模拟题
  4. PS CJ34预算转借
  5. CDAS2016中国数据分析师行业峰会议程(完整版)!
  6. 论文 计算机教育教学能力,高校计算机教师应具备的能力和培养的方向
  7. 【历史上的今天】11 月 28 日:中国顶级域名 CN 被注册;上世纪最大的论坛诞生;首个 Fortran 程序开发者逝世
  8. 宋宝华: 纪念金庸先生——程序员的武侠世界
  9. Format函数详解
  10. 上海是怎么错失这些年的互联网机遇的?——写的很好,转