- 單片機原理及應用系統設計
- 胡景春主編
- 2074字
- 2021-10-27 13:42:37
1.1.3 單片機數據處理基礎
1.數制
數制是按進位原則進行計數的一種方法,即進位計數制。數制有兩個要素:計數符號和進位原則。
(1)十進制數
1)計數符號:0~9;書寫時用D作后綴(一般省略)。
2)進位原則:逢十進一。
(2)二進制數
1)計數符號:0、1;書寫時用B作后綴。
2)進位原則:逢二進一。
(3)十六進制數
1)計數符號:0~9、A、B、C、D、E、F;書寫時用H作后綴。
2)進位原則:逢十六進一。
2.數制之間的相互轉換
常用數制之間的對應關系見表1-1。
表1-1 常用數制之間的對應關系

(1)二進制及其他進制轉換為十進制數
二進制、八進制和十六進制轉換為十進制的方法是:將二進制、八進制或十六進制寫成按權展開式,然后各項相加,則得相應的十進制數,即
D=∑Ki Ni
其中,Ki為對應進制各位的數值;N為對應的進制;Ni表示對應位數的權值,i在小數點往前依次為0、1、2、…、n-1,在小數點往后依次為-1、-2、…、-n。
【例1-1】把二進制數10101.1011B轉換成相應的十進制數。
解:10101.1011B=1×24+0×23+1×22+0×21+1×20+1×2-1+1×2-3+1×2-4
=21.6875D
(2)十進制數轉換為二進制數
十進制數據轉換為二進制數是將整數部分按“除2倒讀取余”的原則進行轉換;小數部分按“乘2順讀取整”的原則進行轉換。
【例1-2】把十進制數15.625轉換為對應的二進制數。
解:

所以十進制數15.625=1111.101B。
(3)二進制數與十六進制(八進制)數相互轉換
由表1-1可見,每4位(3位)二進制數可以完整地表示1位十六進制(八進制)數。所以,二進制數轉換成十六進制(八進制)數時,從小數點開始,分別向左、向右每4位(3位)二進制數劃為一組,整數部分不足4位(3位)前面添0,小數部分不足4位(3位)后面添0,然后每一組直接寫出對應的十六進制(八進制)數,小數點位置保持不變。
十六進制(八進制)數轉換成二進制數時,只要按相反的方法,每位十六進制(八進制)數寫出4位(3位)二進制數。
【例1-3】把二進制數1111000111.100101B轉換為十六進制數和八進制數。
解:1111000111.100101B=0011 1100 0111.1001 0100B=3C7.94H
1111000111.100101B=001 111 000 111.100 101B=1707.45O
(4)十六進制(八進制)數和十進制數相互轉換
可以用前面介紹的D=∑KiNi進行轉換,但一般通過先轉換成二進制,再轉換成其他進制的方法比較簡便。
3.二進制數的算術運算
(1)加法運算
加法規則:0+0=0;0+1=1;1+0=1;1+1=10。
【例1-4】求0111B與0110B之和。
解:

∴0111B+0110B=1101B
(2)減法運算
減法規則:0-0=0;1-0=1;1-1=0;0-1=1(借位)。
【例1-5】求1110B-0101B=?
解:

∴1110B-0101B=1001B
(3)乘法運算
在計算機系統中,都是將乘法作為連續的加法來執行。其中,自身相加的數為被乘數,相加的次數為乘數。
【例1-6】求1101B×11B=?
解:1101B×11B=1101B+1101B+1101B=100111B
(4)除法運算
除法可以歸結為連續的減法,即從被除數中不斷地減去除數,所減的次數是相除的商,而剩下的值則是相除的余數。
4.二進制數的邏輯運算
(1)邏輯與運算
運算規則:有0為0,全1為1,即0∧0=0;0∧1=0;1∧0=0;1∧1=1。
(2)邏輯或運算
運算規則:有1為1,全0為0,即0∨0=0;0∨1=1;1∨0=1;1∨1=1。
(3)邏輯異或運算
運算規則:相同為0,不同為1,即0⊕0=0;0⊕1=1;1⊕0=1;1⊕1=0。
(4)邏輯非運算
運算規則:取反,即0’=1;1’=0。
注意,邏輯運算都是按對應位的數據運算,不存在算術運算的進位或借位。
5.計算機中數的表示方法
在計算機中,為了運算的方便,對于帶符號數,數的最高位用來表示正、負數。最高位為“0”表示正數,最高位為“1”表示負數,如圖1-1所示。

圖1-1 機器數的表示
一個帶“+”“-”號的數為真值,數碼化了的帶符號數為機器數。
一個機器數的表示方法有原碼、反碼及補碼三種。
1)原碼:用最高位表示符號位,后面各位表示該數的絕對值。
【例1-7】(+69)原碼=01000101B=45H
(-69)原碼=11000101B=C5H
2)反碼:正數的反碼與原碼相同;負數的反碼是在其原碼的基礎上,保留符號位不變,數值位各位取反。
【例1-8】(+69)反碼=01000101B=45H
(-69)反碼=10111010B=BAH
3)補碼:正數的補碼與原碼、反碼相同;負數的補碼是在其反碼的基礎上加1。
【例1-9】(+69)補碼=0100 0101B=45H
(-69)補碼=(-69)反碼+1=BAH+1=BBH
6.補碼的運算
補碼的運算規則為[X+Y]補=[X]補+[Y]補;[X-Y]補=[X]補+[-Y]補。所以減法運算可以轉換為加法運算,而乘法用連續加、除法用連續減,也都能轉換成加法運算。這樣,二進制數的加、減、乘、除都可以轉換為加法運算,通過運算器中的累加器實現。
【例1-10】25-32=25+(-32),因為[25]補=00011001B,[-32]補=11100000B
所以

對結果求補得到原碼為10000111B,即25-32=-7。
7.十進制數編碼
十進制數是人們習慣使用的數制,計算機中提供了十進制數編碼,就是用二進制編碼表示十進制數。根據不同應用,有多種編碼方案,如BCD碼、余3碼、2421碼及格雷碼等,其中BCD碼是最常用的編碼,它用4位二進制位按8、4、2、1的權值相加來表示一個十進制數,見表1-2。
表1-2 BCD碼表

BCD碼分為壓縮BCD碼和非壓縮BCD碼,壓縮的BCD碼用1字節表示2位BCD碼(高4位、低4位各代表1個BCD碼);非壓縮BCD碼用1字節表示1位BCD碼(低4位表示BCD碼,高4位填0)。
8.字符編碼
計算機需要處理大量的字符數據,而這些字符在計算機中也是用二進制編碼表示。這種編碼常用的是美國標準信息交換碼(American Standard Code for Information Interchanger,ASCII),共定義了128個字符,其中33個字符是控制字符,用來控制信息的傳輸和設備的操作,其他95個是可顯示的字符。常用字符的ASCII碼見表1-3。
表1-3 常用字符ASCII(十六進制)表

- Linux KVM虛擬化架構實戰指南
- 顯卡維修知識精解
- Applied Unsupervised Learning with R
- 深入淺出SSD:固態存儲核心技術、原理與實戰
- 硬件產品經理成長手記(全彩)
- 基于ARM的嵌入式系統和物聯網開發
- 精選單片機設計與制作30例(第2版)
- 3ds Max Speed Modeling for 3D Artists
- 深入淺出SSD:固態存儲核心技術、原理與實戰(第2版)
- Artificial Intelligence Business:How you can profit from AI
- AMD FPGA設計優化寶典:面向Vivado/SystemVerilog
- OUYA Game Development by Example
- Practical Machine Learning with R
- OpenGL Game Development By Example
- Machine Learning Solutions