在使用RTC外设时,我们常常会接触 BCD码的概念,同时鱼鹰在介绍 USB协议版本时也说了 BCD码,那么什么是 BCD码? BCD 码分为多种,今天鱼鹰介绍最常用的 8421 BCD码。
进制 | 高四位 | 低四位 |
BCD码 | 4 | 5 |
十六进制 | 4 | 5 |
十进制 | 6 | 9 |
假如我们需要设置 RTC时钟的秒值为 45 秒,因为一般芯片会使用 BCD码进行存储,所以我们需要存储到芯片寄存器的值就是 0x45,注意这是十六进制表示,如果你写入寄存器时用十进制表示,那么就是 69。 代码表示如下:
//假设 REG_SEC 为秒寄存器 REG_SEC = 0x45; // 十六进制写入寄存器 REG_SEC = 69; // 十进制写入寄存器不管你使用哪种方式,最终写入的二进制都是一样的,没有任何区别。不过因为是 BCD码格式,当写入的值为立即数时,建议使用十六进制,这样看起来更直观一些。 从这个例子中我们其实也可以看出一点规律,那就是所谓的 BCD 码就是把十六进制的写法直接认为是十进制的值。 实际上也确实如此。 BCD 码中,使用4个位(二进制位)来表示一个十进制的值,范围 0~9。 也就是说,本来十六进制 4 个位可以表示0~15,但因为十进制的范围是 0~9,所以这四个位的范围也因此被限制住了。 同时在一个字节中,高四位代表十进制的十位,低四位代表十进制的个位。 了解这一点,你就知道该如何把十进制转化成BCD码的形式进行存储,又该如何将 BCD码转化为十进制了。 还是以存储秒寄存器(BCD码存储)为例:
// BCD 码 转 十进制#define BCD_TO_DECIMAL(x) ((((x) & 0xf0) >> 4) * 10 + ((x) & 0x0f)) // 十进制 转 BCD 码#define DECIMAL_TO_BCD(x) ((((x) / 10) << 4) + ((x) % 10)) // 以十进制形式写入秒寄存器,最终将以 BCD 码存储REG_SEC = DECIMAL_TO_BCD(45); // 设置为 45 秒 // 读取秒寄存器中的 BCD 码,并转化为十进制值,方便处理second = BCD_TO_DECIMAL(REG_SEC);通过以上两个宏,我们就可以在0 ~ 99 范围内随意转化,当需要更大范围时,理解原理,修改起来也不就是那么麻烦了。
审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
时钟
+关注
关注
10文章
1479浏览量
130295 -
RTC
+关注
关注
2文章
482浏览量
65430 -
BCD码
+关注
关注
1文章
52浏览量
18123
原文标题:啥是 BDC 码?
文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
十六进制数据到BCD码转换
十六进制数据到BCD码转换HEX(十六进制)转换为BCD(二进制编码的十进制)。人们大多习惯于十进制的读、写与计算,但是计算机、单片机和各种存储设备等都是以二进制来完成的,所以在某些时候就需要对这样
发表于 09-21 09:25
什么是BCD码、8421码、余三码、格雷码
用四位二进制代码来表示一位十进制数,称为二--十进制编码,简称BCD(Binary Coded Decimal)码。根据代码的每一位是否有权值BCD码可分为有权
发表于 11-03 17:36
关于DS1302的BCD码转换
问一下DS1302写的时候要把十进制数转为BCD码,读的时候要不要转回来呢?下面是俺写的一个DS1302设置时间的函数,大伙看看这样写对不对
发表于 11-28 23:12
关于BCD码转换的问题
if((TIME[SetPlace]&0x0f)>9)//换成BCD码。{TIME[SetPlace]=TIME[SetPlace]+6;}BCD代码。Binary-Coded
发表于 03-08 11:59
关于BCD码与十进制数的转换
uint8 BCDtoDec( uint8 temp ){return ( ( temp/16 )*10+temp%16) ;}这个是算法,问一下,比如说BCD码00010001,转成十进制,按这个算法要对BCD
发表于 01-04 21:25
什么是BCD码 常用的BCD码转换方法
用一种二进制编码的十进制数——BCD 码, 它是十进制数, 遵守 逢十进一的规则, 但它的十个不同的数字符号不是通常的 0、 1、 2⋯9, 而是采用 4 位二进制 编码来表示, 即分别用 0000
发表于 12-10 14:30
什么是BCD码 常用的BCD码转换方法
用一种二进制编码的十进制数——BCD 码, 它是十进制数, 遵守 逢十进一的规则, 但它的十个不同的数字符号不是通常的 0、 1、 2⋯9, 而是采用 4 位二进制 编码来表示, 即分别用 0000
发表于 12-10 14:30
DS1302的BCD码相关资料推荐
储存在DS1302中的数据是BCD码以4位二进制数来表示一位十进制数如0010 0011 的BCD码就是230100 1010由于第二位为10,就不合法表示为16进制就更明显了如0x1
发表于 01-19 06:51
什么是BCD码
文章目录什么是BCD 码?什么是BCD 码?在日常生产生活中用的最多的数字是十进制数字,而单片机系统的所有数据本质上都是二进制的,所以聪明的前辈们就给我们创造了
发表于 01-20 08:08
在FPGA中实现一种二进制转BCD码的电路设计
字逻辑设计课程中,我们已经学过了BCD码的相关知识,它用4位二进制数来表示1位十进制数中的09,是二进制编码的十进制代码,常见的BCD码有8421B
发表于 07-12 16:41
请问bcd码和二进制有什么关系?
这个bcd码和二进制有什么关系?
bcd 表示0011001是19(十进制)
二进制表示0011001是25(十进制)
这个怎么确定是哪个???
发表于 10-07 06:02
评论