c51 c语言 16位二进制转换为bcd码,16位二进制转换为BCD码的C51汇编程序.doc
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相关推荐
- 单片机(keil c51):BCD码转化为二进制(以4位BCD码举例,依此类推)
BCD码转化为二进制 原理: 一个BCD码表示0~9,所以一个BCD码的取值范围为0000~1001. 在机器里所有的数都是按照二进制存入的,所以只需将BCD码转换为十进制即可. 4位BCD码可以表示 ...
- C语言笔记:进制转换与32位二进制IP地址转换十进制问题
问题描述: 假设需要编写一个程序,实现32位二进制IP地址(32个字符长的1和0)转换为点分十进制格式并输出.IP地址的点分十进制格式通过将32位从低位到高位(右到左)一次分组八位,总共分4次,任何8 ...
- c语言左边自动补零,c语言左移4,余位补零 时不时乘以16?
c语言左移4,余位补零 时不时乘以16?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言左移4,余位补零 时不时乘 ...
- 把ax中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写一段程序,要求数一下值为3(即11B)的的四分之一字节数,并将该数在终端上显示出来。
把ax中存放的16位二进制数K看作是8个二进制的"四分之一字节".试编写一段程序,要求数一下值为3(即11B)的的四分之一字节数,并将该数在终端上显示出来. DATA SEGMEN ...
- c语言int16位数据范围,c语言中int取值范围为16位指的是什么16位
1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中左边第一位是符号位,0代表+ .1代表-. ...
- c语言 ——int16,c语言中int取值范围为16位指的是什么16位
匿名用户 1级 2013-10-20 回答 1.c语言中int取值范围为16位指的是什么16位 计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中 ...
- python中二进制转化为十进制_将二进制、八进制、十六进制转换为十进制
学习视频 9节课征服「字符编码」-1-字符.字符集.字符编号与字符编码(基础课)-周华健的在线视频教程edu.csdn.net 二进制.八进制和十六进制向十进制转换都非常容易,就是"按权相 ...
- [c语言]进值转换的详细代码实现(二进制,十进制,十六进制等)
计算机进制以及进制转换 文章目录 计算机进制以及进制转换 计算机的多种进制: 代码实现(正文): 二进制转十进制: 十进制转二进制: 十六进制转十进制 十进制转十六进制 计算机的多种进制: 今天给大家 ...
- C语言每日一练 —— 第20天:位运算
文章目录 一.前言 二.再谈二进制 1.二进制数值表示 2.二进制加法 3.二进制减法 三.位运算简介 1.位与的定义 2.位与运算符的简单应用 1)奇偶性判定 2)取末五位 3)消除末尾五位 4)2 ...
- 16位位图格式及对16位位图的一点个人总结
原文地址::http://hi.baidu.com/rmgsxpxtzebcdpd/item/2fa5bf4e7f576c0be9350470 http://hi.baidu.com/wentao/b ...
最新文章
- msf 启动报[-] * WARNING: No database support: No database YAML file解决方法
- 网站建设套用模板后该如何做到出类拔萃?
- 系统开发小结【未完待续】
- async await实例
- PetShop之ASP.NET缓存--three
- solaris mysql_配置Solaris下自带的MYSQL
- vba ado返回集合_利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总
- 微信小程序框架探究和解析
- 因为某种原因阻止文本引擎初始化_网络营销外包——网络营销外包专员如何做好网站锚文本优化?...
- Java8 Stream()引发的“non-static method cannot be referenced from a static context”
- 解决:linux系统磁盘空间被占满,但是找不到大文件
- 表锁 行锁 页锁 是什么区别
- kali2022安装AWVS
- 练习2-12 输出华氏-摄氏温度转换表
- 算法题目打卡:Ques20201019
- C++:缺省参数是怎样设置的?
- JAVA系列:获取当天0点0分0秒(00:00:00),23点59分59秒(23:59:59)的方法
- 蓝牙音箱方案选用及设计注意
- unity传统文化交互以及摄像头移动和旋转
- linux安装trac+svn+apache+wike,搭建apache+svn+trac平台