Ⅰ 單片機C語言中將二進制數轉化為十進制的辦法
按照如下步驟即可用C語言把二進制數轉換成十進制數的程序:
1、首先在主函數中設置成函數Sum,另外定義了一個數組array[8],用於存放輸入的八位二進制數。
Ⅱ 跪求高人指點!!單片機十進制運算
單片機有BCD碼調整指令DA A。如R2=23,R1=45,R1+R2=68。
mov a,r1
add a,r2
da a
此時A=68
Ⅲ 怎樣在單片機中寫8進制數
十六進制改八進制方法:
將十六進制度轉換為二進制,然後將二進制以3位為一個基準,轉換為8進制。
舉個例子給你: F3H=11110011 十六進制是4位為基準即: 1111 0011
那轉換八進制 為 011 110 011 那8進制結果為 363.
八進制 363=3*8*8+6*8+3=243
十六進制 F3H=15*16+3=243
結果為一致。你可以如上方法換算。
你在單片機中下363 指令和 十六進制F3H 是一樣的效果。
Ⅳ 單片機,進制轉換問題
十六進制459C4000轉成二進制是0100 0101 1001 1100 0100 0000 0000 0000最高位為符號位,0表示整數,1表示負數,因此這個是一個正數。然後往後數8個位,這8個位叫階碼,就是1 1011 110=十進制的139。139-127(這個127是固定的)=12。將階碼換成1.,然後就是1.001 1100 0100 0000 0000 0000。根據剛才的到的12,就是小數點右移12位,就是1001 1100 0100 0.000 0000 0000。小數點前面是整數部分,1001 1100 0100 0轉十進制就是5000,然後小數部分為000 0000 0000轉成十進制就是0。因此最終結果是5000了。
十六進制4616000轉成二進制是0100 0110 0001 0110 0000 0000 0000 0000最高位為符號位,0表示整數,1表示負數,因此這個也是一個正數。然後往後數8個位,這8個位叫階碼,就是100 0110 0=十進制的140。140-127=13。將階碼換成1.,然後就是1.001 0110 0000 0000 0000 0000。根據剛才的到的13,就是小數點右移13位,就是1001 0110 0000 00.00 0000 0000。小數點前面是整數部分,1001 0110 0000 00轉十進制就是9600,然後小數部分為00 0000 0000轉成十進制就是0。因此最終結果是9600了。
這個就是計算器中浮點數的存儲、轉換的方式。
望採納。。。。。。
Ⅳ 51單片機16進制編程
如果是ASCII碼表內的符號值,那麼ASCII值本身就可以認為是 16進制的(因為進制只是給人看的,單片機只有2進制,沒有ASCII 和 Hex 之分),但如果是Hex值,經過ASCII發送後,需要接收解出數值,那麼可以用這個函數:
uchar ASCII_ToHex(uchar ascii_data) //ASCII 轉 Hex 函數
{
uchar hex_data=0; //定義 Hex變數存儲轉換結果
if(ascii_data>='0' && ascii_data<='9') hex_data=ascii_data-'0'; //若 轉換內容為 字元'0-9',則轉成對應數字0-9
else if(ascii_data>='a' && ascii_data<='f') hex_data=ascii_data-'a'+10; //若 轉換內容為 字元'a-f',則轉成數字10-15
else if(ascii_data>='A' && ascii_data<='F') hex_data=ascii_data-'A'+10; //若 轉換內容為 字元'A-F',則轉成數字10-15
return hex_data; //返回轉換結果,非以上字元,不在Hex(0-F)范圍內,默認0
}//
Ⅵ 51單片機用匯編把16進制轉化為10進制,這個程序不是很懂,希望高手能詳細解釋下
這個程序是正確的。
程序循環了16次。
把
M_byte,L_byte,左移了16次,最高位,依次移進了Cy;
用
ADDC
指令,把
RW1,RW2,左移了16次,並把Cy,加入到了最低位。
ADDC
指令後面,是十進制調整指令,所以,RW1,RW2
中的內容就是BCD碼。
Ⅶ 單片機原理及應用中的十進制數與二進制數原碼、反碼、補碼詳細解答
首先得說明的一點,原碼、反碼、補碼都是有符號定點數的表示方法。是吧,沒有符號而言就不會出現+0與-0了呀,呵呵。
原碼就是這個數本身的二進制形式。
例如:0000001 就是+1 1000001 就是-1
首先要說明的是:正數的反碼和補碼都是和原碼相同的;
還是再重申一下吧
〔1〕原碼:這個數本身的二進制形式。 例如十進制的8的原瑪就是01000,就是用二進製表示〔2〕反碼:將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。
〔3〕補碼:負數的補碼是將其原碼除符號位之外的各位求反之後在末位再加1。
正數沒什麼好講的,就說說負數吧:負數的原碼,依舊是一個數本身的二進制形式,也就是說十進制的-8的原碼就是11000[注意,第一位1是符號'-'哦];反碼呢,將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。取反操作指:原為1,變為0;原為0,變為1。(1變0; 0變1),這個簡單理解吧。實際上,這樣說不夠准確,因為我們還要除掉符號位再這樣取反。
看好了-8的原碼:11000----->-8的反碼就是原碼除了符號位之後的其他位都按位取反10111
符號位
-8原碼 1 1 0 0 0
-8反碼 1 0 1 1 1
現在懂什麼是原碼和反碼了吧,我已經盡力了,呵呵。好啦,該補碼登場啦。
補碼,簡單地說就是反碼末位〔最後一位〕+1
為什麼要設立補碼呢?
第一是為了能讓計算機執行減法:
[a-b]補=a補+(-b)補
第二個原因是為了統一正0和負0
正零:00000000
負零:10000000
這兩個數其實都是0,但他們的原碼卻有不同的表示。
但是他們的補碼是一樣的,都是00000000
特別注意,如果+1之後有進位的,要一直往前進位,包括符號位!(這和反碼是不同的!)
[10000000]補
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符號位變成了0)
我不知道朋友您看了上面的是否真的懂了,或許還不知道什麼叫做」溢出」吧
所謂的溢出就是當我們要表示的數位不夠表示了
我們的二進制的位數一般有個具體的范圍:
例如一個位元組就是8位,超過8位當然就溢出了
以8位為例子,看好啦
符號位
0 1 1 1 1 1 1 1 1
+ 0 1
------------------------------------
0 [1]0 0 0 0 0 0 0 0
[1]表示就是進位沒地方放了,怎麼說呢,好象在十進制中,我有99個盒子已經裝了99對鞋子,當第 100雙鞋子沒地方放了一樣,超出了盒子個數,這樣就產生了所謂的溢出了
好,我們再回到上面反碼的例子,(別忘記我們是在介紹反碼了)
符號位
[ 1 0 0 0 0 0 0 0]補
=〔 1 0 0 0 0 0 0 0]反+1
= 1 1 1 1 1 1 1 1 ------看到反碼的取反操作在其中哦,0都變成1
+ 1
----------------------------------
= 1 (1) 0 0 0 0 0 0 0
= 0 0 0 0 0 0 0 0(最高位溢出了,符號位變成了0)
看到符號位也參與了計算一樣1+1就變成了0,至於進位的1就丟失了
從而變成了全0
現在我們再來看看,原碼 +0 的補碼就是:0000 0000〔原因是補碼和原瑪是一樣的〕
原瑪 -0 的補碼就是:0000 0000
是不是一樣了,這樣就消除了二異性了,不要說有-0與+0之分了
不知道朋友您是否還會覺得有什麼不妥呢????
也許你會問
10000000這個補碼表示的哪個數的補碼呢?
其實這是一個規定,這個數表示的是-128
所以n位補碼能表示的范圍是
-2^(n-1)到2^(n-1)-1
比n位原碼能表示的數多一個
原碼,反碼,補碼 都是指二進制的形式,所以十進制的對應碼為二進制數,注意負數的符號位,二進制數的碼制轉換就按照我上面說的啦,看仔細,多想一想,撿幾個數做做練習一下,你就會啦,關鍵是練習。
其實就是這樣的,單片機中的也就是計算機中的碼制轉換,單片機也叫微機嘛,即微型計算機,呵呵