在使用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文章
1730浏览量
131424 -
RTC
+关注
关注
2文章
535浏览量
66415 -
BCD码
+关注
关注
1文章
52浏览量
18288
原文标题:啥是 BDC 码?
文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
BCD码输出静态显示电路图
BCD码输出静态显示电路图如下图所示。CD4511是BCD码七段共阴译码/驱动IC; 4511是4线-7段锁存/译码/驱动电路,能将BCD
发表于 07-31 11:33
•8060次阅读
什么是BCD码、8421码、余三码、格雷码
用四位二进制代码来表示一位十进制数,称为二--十进制编码,简称BCD(Binary Coded Decimal)码。根据代码的每一位是否有权值BCD码可分为有权
发表于 11-03 17:36
关于BCD码转换的问题
if((TIME[SetPlace]&0x0f)>9)//换成BCD码。{TIME[SetPlace]=TIME[SetPlace]+6;}BCD代码。Binary-Coded
发表于 03-08 11:59
DS1302的BCD码相关资料推荐
储存在DS1302中的数据是BCD码以4位二进制数来表示一位十进制数如0010 0011 的BCD码就是230100 1010由于第二位为10,就不合法表示为16进制就更明显了如0x1
发表于 01-19 06:51
什么是BCD码
文章目录什么是BCD 码?什么是BCD 码?在日常生产生活中用的最多的数字是十进制数字,而单片机系统的所有数据本质上都是二进制的,所以聪明的前辈们就给我们创造了
发表于 01-20 08:08
bcd码加法器
BCD码(Binary-Coded Decimal)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。
发表于 11-23 18:07
•1.2w次阅读
bcd码是什么_bcd码的编码方式是什么
BCD码亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD
发表于 11-24 08:48
•4.2w次阅读
余3码至8421BCD码的转换_8421BCD码转换成余3码
二进制编码的十进制数,简称BCD码。这种方法是用4位二进制码的组合代表十进制数的0,1,2,3,4,5,6 ,7,8,9 十个数符。由8421码加3后形成的余3
评论