二進位 轉換成十進位 BCD碼(加3移位法)

二進位 轉換成十進位 BCD碼(加3移位法)

EMC單片機 2010-07-26 15:52:25 閱讀118 評論0 字型大小:大中小訂閱

"二進位數調整BCD碼的方法是將二進位碼左移8次,每次移位後都檢查低四位LSD+3是否大於7,如是則加3,否則不加,高4位MSD作同樣處理"

一、為什麼左移8次

原寄存器是存二進位數的,新寄存器是存十進位數的,當然要左移8次,把數據全部移進去。

但這裡要注意兩件事,第一,如果只安排一個位元組作十進位寄存器,原數據要小於 64H(即100)。第二,由於新寄存器是十進位的,要隨時調整。

二、檢查 半位元組+3 是否大於 7,是,則 +3

在 51 系列裡有十進位調節指令(半位元組大於 9,則加 6,應該不難理解),PIC 里沒有,只好採取變通的方法。

檢查 半位元組+3 是否大於 7,也就是檢查半位元組是否大於 4。因為,如果大於 4(比如 5、6),下一步左移就要溢出了,所以加 3,等於左移後的加 6,起到十進位調節的作用。

那為什麼要繞個圈子去檢測 半位元組+3 是否大於 7 呢?這樣程序編起來會簡練一些。

一個例子

假如有一個八位二進位數255,我把他轉255的十進位數

0 1111 1111 原數

1 0000 0001 ;左移一次

2 0000 0011 ; 左移二次

3 0000 0111 ;左移三次,檢查低四位+3>7?

3.1 0000 1010 ;大於7,加3進行調整

4 0001 0101 ;左移四次, 檢查低四位+3>7?

4.1 0001 1000 ;大於7,加3進行調整

5 0011 0001 ;左移五次

6 0110 0011 ;左移六次,檢查高四位+3>7?

6.11001 0011 ;大於7,加3進行調整

71 0010 0111 ;左移七次,檢查低四位+3>7?

7.11 0010 1010 ;大於7,加3進行調整

810 0101 0101 ;左移八次(得到BCD碼255) 一次反推可以用移位發進行BCD轉二進位的演算法BCD碼右移一位後判斷,高四位,和第四位是否大於7,如果大於7則減3,然後再移位,即可轉化位所要求的二進位碼 1 10 0101 0101 轉換為二進位 1.1 10 0101 0101 ;右移一位的 01 0010 1010 二進位數為1000 0000 1.1.1 01 0010 1010 ;判斷高四位,低四位是否大於7 1.1.2 低四位大於7 則間3 01 0010 0111 1.2 01 0010 0111 ;右移一位得 00 1001 0011 二進位數位 1100 0000 1.21 判斷高,低四位 是否大於7 時則減3 得 00 0110 0011 1.3 00 0110 0011 ;右移一位得 00 0011 0001 二進位數位 1110 0000 1.3.1 判斷高低四位 1.4 00 0011 0001;右移一位得 00 0001 1000 二進位數位 1111 0000 1.4.1 判斷高低四位 的00 00010101 1.5 00 0001 0011 ;右移一位得 00 0000 1010 二進位數位 1111 1000 1.5.1 判斷高低四位 的00 0000 0111 1.6 00 0000 0111;右移一位得 00 0000 0011 二進位數位 1111 1100 1.7 00 0000 0011 ;右移一位 00 0000 0001 二進位數位 1111 1110 1.8 00 0000 0001; 右移一位 00 0000 0000 二進位數位 1111 1111

推薦閱讀:

三種角色轉換讓智慧女人抓牢你的男人
『轉關』就是轉換
excel轉換txt時,使用任意分隔符
漫談ACR、Lightroom和RAW轉換
角色轉換

TAG:二進位 | 十進位 | 進位 | 轉換 |