6987|10

43

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

BCD码和十进制的相互转换 [复制链接]

 
相信刚用DS1302的朋友都遇到过在 DS1302里面输入时间的时候是按照BCD码来写入的 那么有么有什么好办法能快速理解BCD码和十进制的转换呢?那就让我来告诉你。
首先 举个例子   BCD码表示的 0010 1001  表示十进制的  29
那么我们如何来完成转换?
1.  BCD(有一变量叫A)----->十进制(用B来表示)
     ( A >> 4 )*10+( A & 0x0F ) 就等于B了!  
可能有人问了 为什么呢? 那么请看下面
还是拿 0010 1001 来分析 0010 1001 >> 4就得到 0000 0010(低4为溢出)是十进制的2
0010 1001 & 0000 1111 (0x0f是16进制  转换为二进制就是 0000 1111)
            0010 1001
          &
            0000 1111
就得到      0000 1001  也就是9  所以现在 2*10+9 =29转换完成


写成函数模式
u8 BCD_to_DEC(u8 BCD)
{
   return ((BCD>>4*10)+BCD&0X0F);
}


2.十进制转换为BCD,相信已经有人想出来了  因为这就是个逆过程
29/10 = 2, 29 % 10=9;  2---> 0010   9-->1001
显然 0010 1001 就是BCD的29(十进制)
所以 2<<4+9就行了
写成函数
u8 DEC_to_BCD(u8 DEC)
{
   return ((DEC/10)<<4|DEC%10);
}
          完工




此帖出自51单片机论坛

最新回复

写的不错   详情 回复 发表于 2021-10-13 16:49
点赞 关注(1)
 

回复
举报

1万

帖子

25

TA的资源

裸片初长成(高级)

沙发
 
用C实现还是比较轻松的
此帖出自51单片机论坛
 
 
 

回复

1149

帖子

3

TA的资源

五彩晶圆(初级)

板凳
 
乘法,除法啊~珍惜资源!!!
数据可以取出后把每一位存在一个数组里面~按顺序读写多好~
此帖出自51单片机论坛

点评

用数组 不是更浪费资源 用乘法和除法 的确没有位操作好 但是为此用数组 恐怕没人愿意吧  详情 回复 发表于 2014-3-5 20:23
 
个人签名construction complete!
 
 

回复

43

帖子

2

TA的资源

一粒金砂(中级)

4
 
zqjqq88 发表于 2014-3-5 20:16
乘法,除法啊~珍惜资源!!!
数据可以取出后把每一位存在一个数组里面~按顺序读写多好~

用数组 不是更浪费资源  用乘法和除法 的确没有位操作好  但是为此用数组 恐怕没人愿意吧
此帖出自51单片机论坛

点评

额~现在处理器RAM都不小的,但是如果没有硬件乘法器的话那效率~权衡下我觉得更多人愿意去使用数组吧~  详情 回复 发表于 2014-3-5 22:21
你们两个一个是时间资源,一个是空间资源,这个矛盾不可调和  详情 回复 发表于 2014-3-5 21:56
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

5
 
BCD码表示的 0010 1001  表示十进制的  29
是十六进制吧?
此帖出自51单片机论坛
 
 
 

回复

6423

帖子

16

TA的资源

版主

6
 
905377346 发表于 2014-3-5 20:23
用数组 不是更浪费资源  用乘法和除法 的确没有位操作好  但是为此用数组 恐怕没人愿意吧

你们两个一个是时间资源,一个是空间资源,这个矛盾不可调和
此帖出自51单片机论坛
 
个人签名training
 
 

回复

1149

帖子

3

TA的资源

五彩晶圆(初级)

7
 
905377346 发表于 2014-3-5 20:23
用数组 不是更浪费资源  用乘法和除法 的确没有位操作好  但是为此用数组 恐怕没人愿意吧

额~现在处理器RAM都不小的,但是如果没有硬件乘法器的话那效率~权衡下我觉得更多人愿意去使用数组吧~
此帖出自51单片机论坛
 
个人签名construction complete!
 
 

回复

4008

帖子

0

TA的资源

版主

8
 
她的目的是把BCD码转换成十六进制数,你即便是存到数组里也是要转换的,所以少不了要乘除法.

((DEC/10)<<4|DEC%10)
这里实际是两次除法,可以用B寄存器代替取余数的操作,只做一次除法就够了.考虑考虑...
此帖出自51单片机论坛
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

9
 
受教了
此帖出自51单片机论坛
 
 
 

回复

12

帖子

3

TA的资源

一粒金砂(中级)

10
 
很好,非常喜欢哈哈哈
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

16

TA的资源

版主

11
 

写的不错

此帖出自51单片机论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表