二進位 轉換成十進位 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轉換
※角色轉換