单片机原理及应用系统设计
上QQ阅读APP看书,第一时间看更新

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(十六进制)表