成人免费无码不卡毛片,亚洲AⅤ无码精品一区二区三区,国产尤物精品视频,久久精品日本亚洲,欧美成人一区三区无码乱码A片,中文字日产幕码一区二区色哟哟,亞洲日韓中文字幕網AV

  • 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

啥是 BCD 碼?

2021/02/28
314
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

在使用RTC外設(shè)時,我們常常會接觸 BCD碼的概念,同時魚鷹在介紹 USB 協(xié)議版本時也說了 BCD 碼,那么什么是 BCD 碼?

BCD 碼分為多種,今天魚鷹介紹最常用的 8421  BCD碼。

進制 高四位 低四位
BCD碼 4 5
十六進制 4 5
十進制 6 9

假如我們需要設(shè)置 RTC時鐘的秒值為 45 秒,因為一般芯片會使用 BCD碼進行存儲,所以我們需要存儲到芯片寄存器的值就是 0x45,注意這是十六進制表示,如果你寫入寄存器時用十進制表示,那么就是 69。代碼表示如下:

//假設(shè) REG_SEC 為秒寄存器 REG_SEC = 0x45;  // 十六進制寫入寄存器
REG_SEC = 69;  // 十進制寫入寄存器

不管你使用哪種方式,最終寫入的二進制都是一樣的,沒有任何區(qū)別。不過因為是 BCD碼格式,當寫入的值為立即數(shù)時,建議使用十六進制,這樣看起來更直觀一些。

從這個例子中我們其實也可以看出一點規(guī)律,那就是所謂的 BCD 碼就是把十六進制的寫法直接認為是十進制的值。實際上也確實如此。BCD 碼中,使用4個位(二進制位)來表示一個十進制的值,范圍 0~9。也就是說,本來十六進制 4 個位可以表示0~15,但因為十進制的范圍是 0~9,所以這四個位的范圍也因此被限制住了。同時在一個字節(jié)中,高四位代表十進制的十位,低四位代表十進制的個位。了解這一點,你就知道該如何把十進制轉(zhuǎn)化成BCD碼的形式進行存儲,又該如何將 BCD碼轉(zhuǎn)化為十進制了。

還是以存儲秒寄存器(BCD碼存儲)為例:

// BCD 碼 轉(zhuǎn) 十進制#define BCD_TO_DECIMAL(x)   ((((x) & 0xf0) >> 4) * 10 + ((x) & 0x0f))
// 十進制 轉(zhuǎn) BCD 碼#define DECIMAL_TO_BCD(x)   ((((x) / 10) << 4) + ((x) % 10))

// 以十進制形式寫入秒寄存器,最終將以 BCD 碼存儲REG_SEC = DECIMAL_TO_BCD(45); // 設(shè)置為 45 秒 
// 讀取秒寄存器中的 BCD 碼,并轉(zhuǎn)化為十進制值,方便處理second = BCD_TO_DECIMAL(REG_SEC);

通過以上兩個宏,我們就可以在0 ~ 99 范圍內(nèi)隨意轉(zhuǎn)化,當需要更大范圍時,理解原理,修改起來也不就是那么麻煩了。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄
普兰店市| 区。| 醴陵市| 清水河县| 陇南市| 桑日县| 湘阴县| 新宁县| 吴旗县| 通山县| 北宁市| 岳池县| 神木县| 江北区| 辽阳县| 久治县| 沧州市| 聂拉木县| 丹凤县| 涟水县| 麻阳| 苍山县| 沅江市| 余姚市| 温泉县| 泰和县| 连平县| 富锦市| 洞口县| 和政县| 康定县| 马公市| 诸暨市| 房产| 济南市| 新密市| 鄱阳县| 珲春市| 无棣县| 昌平区| 卢龙县|