0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是BCD码

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-09-07 09:10 次阅读

在使用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
    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) ;}这个是算法,问一下,比如说BCD00010001,转成十进制,按这个算法要对BCD
    发表于 01-04 21:25

    二位BCD减法器

    二位BCD减法器电路,用纯数字电路实现。
    发表于 09-18 15:30

    什么是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

    16位二进制转BCD

    本帖最后由 efans_c575a5 于 2022-4-23 22:51 编辑 16位二进制转BCD,希望对大家有用。
    发表于 12-12 15:18

    如何改变计数值为压缩BCD

    @C51单片机题目如下问:如何改变计数值为压缩BCD,使发光二极管显示压缩BCD?(注:压缩型BCD
    发表于 12-08 07:03

    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

    单片机怎样区别BCD与16进制数?

    单片机怎样区别BCD与16进制数
    发表于 10-30 08:11