单片机实践与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 数制及其转换

通过前面的学习,我们知道单片机是数字计算机的一个重要分支。学习单片机也离不开数字基础。

例如,单片机进行数据处理时只能使用二进制数据,编程和计算地址时需要用到十六进制数据,而人们在使用数据时往往习惯使用十进制数据,这就是数制问题。如何将三者有机统一,这就是数制之间的转换问题。

2.1.1 数制

十进制数有10个不同的数字符号:0、1、2、…、9,低位向高位进位的规律是“逢十进一”,“10”代表十进制数的10,记做10D。

二进制数有2个不同的数字符号:0和1,低位向高位进位的规律是“逢二进一”,“10”代表十进制数的2,记做10B。

十六进制数有16个不同的数字符号:0、1、2、…、9、A、B、C、D、E、F,低位向高位进位的规律是“逢十六进一”,“10”代表十进制数的16,记做10H。

任意一个十进制数N都可以表示成按权展开的多项式:

其中,di是0~9共10个数字中的任意一个,m是小数点右边的位数,n是小数点左边的位数,i是数位的序数。例如,543.21可表示为:

543.21=5 ×102 +4 ×101 +3 ×100 +2 ×10 -1 +1 ×10 -2

任意一个十六进制数N可以表示成按权展开的多项式:

其中,di是0~F共16个数字中的任意一个,m是小数点右边的位数,n是小数点左边的位数,i是数位的序数。例如,54E.21H可表示为:

54E.21H=5 ×162 +4 ×161 +14 ×160 +2 ×16 -1 +1 ×16 -2

任意一个二进制数N都可以表示成按权展开的多项式:

其中,di是0、1两个数字中的任意一个,m是小数点右边的位数,n是小数点左边的位数,i是数位的序数。例如,101.01B可表示为:

101.01B=1 ×22 +0 ×21 +1 ×20 +0 ×2 -1 +1 ×2 -2

一般而言,对于用R进制表示的数N,可以按权展开为:

式中,ai是0、1、…、(R-1)中的任意一个,m、n是正整数,R是基数。在R进制数中,每个数字所表示的值是该数字与它相应的权Ri的乘积,计数原则是“逢 R进一”。

2.1.2 数制之间的转换

首先,我们看看二进制数与十六进制数之间存在怎样的关系。

下面我们了解一下二进制数的计数方法:

0000(B)=0(H)

0001(B)=1(H)

0010(B)=2(H)

0011(B)=3(H)

0100(B)=4(H)

0101(B)=5(H)

0110(B)=6(H)

0111(B)=7(H)

1000(B)=8(H)

1001(B)=9(H)

1010(B)=A(H)

1011(B)=B(H)

1100(B)=C(H)

1101(B)=D(H)

1110(B)=E(H)

1111(B)=F(H)

其中,(B)代表二进制数,(H)代表十六进制数。

从中不难看出,4位二进制数刚好是一位十六进制数。

同一个数,用二进制表示需要8位,但用十六进制表示只需要2位。这就是我们引进十六进制数的理由。它使我们书写起来可以更简单。

计算机使用二进制数,我们书写时采用十六进制数。

实际上,n位二进制数可以表示2n种组合。

1位能表示21种组合(0、1),在计算机中称为位。

4位能表示24 =16 种组合(0 ~15 的整数,即1 位十六进制数),在计算机中称为半字节。

8位二进制能表示28 =256种组合(0 ~255的整数,即2位十六进制数),00H~FFH即为000D~255D共256个数字。8位二进制数在计算机中称为字节。

我们了解了二进制数和十六进制数的计数方法后,就不难看出它们之间的对应转换关系了。

2.1.3 非十进制数与十进制数转换

十进制数转换成非十进制数,转换时将整数部分与小数点部分分别转换。

整数部分采用除基数取余法,直至商为0,先得到的余数为低位,后得到的余数为高位。小数部分采用乘基数取整法,直至乘积为整数或达到控制精度为止。

【例2.1】 将十进制数168转换成二进制数和十六进制数。

解:整数采用除基数取余法。

所以,168D=10101000B;168D=A8H。

【例2.2】 将0.625D转换成二进制数和十六进制数

解:小数部分采用乘基数取整法,直至乘积为整数或达到控制精度为止。

转换为二进制数:乘2取整。

0.625 ×2=1.25取整数1,0.25 ×2=0.50取整数0,0.5 ×2=1取整数1。

所以,0.625D=0.101B。

转换为十六进制数:乘16取整。

0.625 ×16=10取整数A。

所以,0.625D=0.AH。

2.1.4 二进制数和十六进制数之间的转换

由于二进制数和十六进制数之间的特殊关系,可以采用分组法快速转换。将二进制数转换成十六进制数可按4位一组进行分组,每一组对应十六进制的相应数码,如表2.1所示,组合后即可得转换结果。分组时如果位数不够一组,整数部分在最左边补0,小数部分在最右边补0。

表2.1 十进制数与二进制数、十六进制数对应关系

将十六进制数转换成二进制数,只需将其每一位对应转换成二进制数的4位即可。

【例2.3】 将二进制数1011010.101B转换成十六进制数。

所以,1011010.101B=5A.AH。

【例2.4】 将十六进制数8E.38H转换成二进制数。

所以,8E.38H=10001110.00111B。