在使用RTC外設時,我們常常會接觸 BCD碼的概念,同時魚鷹在介紹 USB協(xié)議版本時也說了 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; // 十進制寫入寄存器不管你使用哪種方式,最終寫入的二進制都是一樣的,沒有任何區(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); // 設置為 45 秒 // 讀取秒寄存器中的 BCD 碼,并轉(zhuǎn)化為十進制值,方便處理second = BCD_TO_DECIMAL(REG_SEC);通過以上兩個宏,我們就可以在0 ~ 99 范圍內(nèi)隨意轉(zhuǎn)化,當需要更大范圍時,理解原理,修改起來也不就是那么麻煩了。
審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
時鐘
+關注
關注
11文章
1901瀏覽量
133201 -
RTC
+關注
關注
2文章
622瀏覽量
68847 -
BCD碼
+關注
關注
1文章
52瀏覽量
18712
原文標題:啥是 BDC 碼?
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
熱點推薦
BCD碼輸出靜態(tài)顯示電路圖
BCD碼輸出靜態(tài)顯示電路圖如下圖所示。CD4511是BCD碼七段共陰譯碼/驅(qū)動IC; 4511是4線-7段鎖存/譯碼/驅(qū)動電路,能將BCD
發(fā)表于 07-31 11:33
?8444次閱讀

什么是BCD碼、8421碼、余三碼、格雷碼
用四位二進制代碼來表示一位十進制數(shù),稱為二--十進制編碼,簡稱BCD(Binary Coded Decimal)碼。根據(jù)代碼的每一位是否有權(quán)值BCD碼可分為有權(quán)
發(fā)表于 11-03 17:36
關于BCD碼轉(zhuǎn)換的問題
if((TIME[SetPlace]&0x0f)>9)//換成BCD碼。{TIME[SetPlace]=TIME[SetPlace]+6;}BCD代碼。Binary-Coded
發(fā)表于 03-08 11:59
如何改變計數(shù)值為壓縮BCD碼
@C51單片機題目如下問:如何改變計數(shù)值為壓縮BCD碼,使發(fā)光二極管顯示壓縮BCD碼?(注:壓縮型BCD
發(fā)表于 12-08 07:03
DS1302的BCD碼相關資料推薦
儲存在DS1302中的數(shù)據(jù)是BCD碼以4位二進制數(shù)來表示一位十進制數(shù)如0010 0011 的BCD碼就是230100 1010由于第二位為10,就不合法表示為16進制就更明顯了如0x1
發(fā)表于 01-19 06:51
什么是BCD碼
文章目錄什么是BCD 碼?什么是BCD 碼?在日常生產(chǎn)生活中用的最多的數(shù)字是十進制數(shù)字,而單片機系統(tǒng)的所有數(shù)據(jù)本質(zhì)上都是二進制的,所以聰明的前輩們就給我們創(chuàng)造了
發(fā)表于 01-20 08:08
bcd碼加法器
BCD碼(Binary-Coded Decimal?)亦稱二進碼十進數(shù)或二-十進制代碼。用4位二進制數(shù)來表示1位十進制數(shù)中的0~9這10個數(shù)碼。是一種二進制的數(shù)字編碼形式,用二進制編碼的十進制代碼。
發(fā)表于 11-23 18:07
?1.2w次閱讀

bcd碼是什么_bcd碼的編碼方式是什么
BCD碼亦稱二進碼十進數(shù)或二-十進制代碼。用4位二進制數(shù)來表示1位十進制數(shù)中的0~9這10個數(shù)碼。是一種二進制的數(shù)字編碼形式,用二進制編碼的十進制代碼。BCD
發(fā)表于 11-24 08:48
?4.3w次閱讀

余3碼至8421BCD碼的轉(zhuǎn)換_8421BCD碼轉(zhuǎn)換成余3碼
二進制編碼的十進制數(shù),簡稱BCD碼。這種方法是用4位二進制碼的組合代表十進制數(shù)的0,1,2,3,4,5,6 ,7,8,9 十個數(shù)符。由8421碼加3后形成的余3

8421bcd碼運算規(guī)則
BCD碼的運算規(guī)則:BCD碼是十進制數(shù),而運算器對數(shù)據(jù)做加減運算時,都是按二進制運算規(guī)則進行處理的。這樣,當將 BCD

使用流水燈顯示壓縮BCD碼
@C51單片機題目如下問:如何改變計數(shù)值為壓縮BCD碼,使發(fā)光二極管顯示壓縮BCD碼?(注:壓縮型BCD
發(fā)表于 11-25 17:36
?11次下載

評論