工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf ·...

25
工程背景下的单片机原理及系统设计 I 单片机文化基础.............................................................................................................. 1 1.1 数制................................................................................................................... 1 1.1.1 十进制数 ................................................................................................ 1 1.1.2 十进制计数 ............................................................................................ 2 1.1.3 二进制 .................................................................................................... 2 1.1.4 二进制计数 ............................................................................................ 2 1.1.5 八进制数 ................................................................................................ 4 1.1.6 十六进制 ................................................................................................ 4 1.2 数制与代码 ....................................................................................................... 4 1.2.1 二、十六进制数向十进制转换的方法 .............................................. 5 1.2.2 十进制数转换成二、十六进制数 ...................................................... 5 1.2.3 二进制与十六进制之间的相互转换 .................................................... 6 1.2.4 十进制与十六进制转换实用方法 ......................................................... 7 1.3 二进制数的运算 ............................................................................................. 9 1.3.1 二进制数的算术运算 .......................................................................... 9 1.4.2 二进制数的逻辑运算 ................................................................................ 11 1.5 计算机中数的表示方法 ............................................................................... 12 1. 5.1 数的码制 ............................................................................................. 12 1.5.2 编码...................................................................................................... 16 1.6 浮点数简介 ..................................................................................................... 19 1.6.1 位、字节、字 ...................................................................................... 20 1.6.2 浮点数构成原理 .................................................................................. 20 习题 1 ..................................................................................................................... 23

Transcript of 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf ·...

Page 1: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

I

目 录

单片机文化基础 .............................................................................................................. 1

1.1 数制................................................................................................................... 1

1.1.1 十进制数 ................................................................................................ 1

1.1.2 十进制计数 ............................................................................................ 2

1.1.3 二进制 .................................................................................................... 2

1.1.4 二进制计数 ............................................................................................ 2

1.1.5 八进制数 ................................................................................................ 4

1.1.6 十六进制 ................................................................................................ 4

1.2 数制与代码 ....................................................................................................... 4

1.2.1 二、十六进制数向十进制转换的方法 .............................................. 5

1.2.2 十进制数转换成二、十六进制数 ...................................................... 5

1.2.3 二进制与十六进制之间的相互转换 .................................................... 6

1.2.4 十进制与十六进制转换实用方法 ......................................................... 7

1.3 二进制数的运算 ............................................................................................. 9

1.3.1 二进制数的算术运算 .......................................................................... 9

1.4.2 二进制数的逻辑运算 ................................................................................ 11

1.5 计算机中数的表示方法 ............................................................................... 12

1. 5.1 数的码制 ............................................................................................. 12

1.5.2 编码 ...................................................................................................... 16

1.6 浮点数简介 ..................................................................................................... 19

1.6.1 位、字节、字 ...................................................................................... 20

1.6.2 浮点数构成原理 .................................................................................. 20

习题 1..................................................................................................................... 23

Page 2: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

1

单片机文化基础

1.1 数制

说明:本章内容为计算机科学的基础,也是学习单片机课程的基础。安排此章内容的

目的是:对没有这方面基础的读者,应补充这部分知识;而对已具备这方面知识的读者,

可以跳过此章内容。

1.1.1 十进制数

数字技术中使用了多种数制,最常用的有十进制、二进制、八进制和十六进制。由于

十进制作为日常使用的计数方法,因此,人们对十进制非常熟悉。

在数字系统中,十进制不便于实现。原因是,很难设计一个电子器件,使其具有 10

个不同电平。相反,设计一个具有两个工作电平的电子电路却

很容易。基于该原因,几乎所有的数字系统都采用二进制,作

为其运算的基本计数体系。

按进位原则进行计数的方法,称为进位计数制。十进制又

称为以 10 为基数的计数体制,人有十个手指,这可能是形成

十进制的原因。研究十进制的特点有助于更好地理解其它计数

体制。十进制数有两个主要特点:  

(1)有 10 个不同的数字符号:0,1,2,3,4,5,6,7,8,9;  

(2)低位向高位进位的规律是“逢十进一”。 因此,同一个数字符号在不同的数位

所代表的数值是不同的。如 345.56 中从左到右分别代表 300、40、5、0.5 和 0.06 个计数单

位。该数中 3 的位权最大,称之为最高有效位(MSD),6 的位权最小,称之为最低有效

位(LSD)实际上,345.56 等于:

345.56=(3×10+2)+(4×10+1)+(5×100)+(5×10-1)+(6×10-2)

一般情况下,任何数值均可表示为每位数字与其位权的乘积之和。上式中的 10 称为

十进制的基数, 102、101、100、10-1、10-2 称为各数位的权。如图 1-1 所示。

(3)用两位十进制,可以表示 102 = 100 个不同的数值(0~99);用三位十进制,可

3 4 5 5. 6

102 101 100 10-110-2

十进制小数点

位权

MSD LSD

图 1-1 十进制数的位权

Page 3: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

2

以表示 103 = 1000 个不同的数值(0~999),依次类推。一般情况下,N 位十进制,可以

表示 10N个不同的数值(0~10N-1)。

1.1.2 十进制计数

当采用十数制计数时,最低位每一步都在变化,十位每 10 步变化一次,百位每 100

步变化一次,依次类推。即

0 1 2 3 4 5 6 7 8 9

10 11 …… 95 96 97 98 99

100 101 102 …… 995 996 997 998 999

1.1.3 二进制

在二进制中,只有“0”和“1”两个符号,但二进制同样可用来表示十进制或其它进

制所能表示的任何数值,只是二进制表示一个数时所用的

位数较多。

前面关于十进制的论述都可以推广到二进制体系。特

别地:二进制的进位规律为“逢二进一”,其中每一个二

进制数字都具有特定的数值,用 2 的幂指数表示其位权,

如图 1-2 所示。图中的二进制数为 1011.011。为了求得与

二进制数对应的十进制数,可把二进制各位数字(0 或 1)乘以位权再相加,即

1011.0112 =(1×23)+(0×22)+(1×21)+(0×20)+(1×2-1)+(1×2-2 )

= 8+0+2+1+0+0.25+0.125

= 11.37510

注意,在上面的运算中,下标(2 和 10)用来表示特定数制的基数,这一约定避免了

多种进制体系可能出现的混淆。

在二进制中,数位常常简称为位(bit)。今后我们将使用这一名词。因此,在图 1-2

中,小数点左边有 4 位,它们是该数的整数部分;小数点右边有 3 位,是该数的小数部分。

最左边的一位是最高有效位(MSB),最右边的一位是最低有效位(LSB)。

1.1.4 二进制计数

1 0 1 1 .

23

二进制小数点

位权

MSB LSB

22 21

0 1 1

20 2-1 2-2 2-3

图 1-2 二进制数的位权

Page 4: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

3

当涉及到二进制计数时,通常都限定在特定

的位数内。这种限定是基于用来表示二进制数的

电路、CPU 的位数或可寻址空间大小等。例如,8

位单片机,它的 CPU 一次可并行处理 8 位二进制

数,即绝对值不大于 111111112 的数。如果单片机

有 16 根地址线,它可寻址的地址就不会超过 216

(个)。

下面以四位二进制为例,说明二进制计数方

法。如图 1-3 所示,计数起始于各位全为 0,称为

0 状态。对于每一次连续计数,位权为 1 的位(单

位位)的数字变化一次。每当单位位从 1 变为 0

时,位权为 2 的位改变状态;每当权 2 位从 1 变

为 0 时,权 4 位改变一次状态。类似地,每当权 4

位从 1 变为 0 时,权 8 位改变一次状态。当二进制数多于 4 时,其高位状态的变化,延续

上述同一过程。

适用于十进制的某些规律在二进制中仍然适用,N 位二进制可实现 2N计数。

【例 1-1】用 8 位、10 位、12 位、16 位二进制能表示的最大数分别是多少?

解:

8 位:2N-1=28-1=25510=111111112

10 位:2N-1=210-1=102310=11111111112

12 位:2N-1=212-1=409510=1111111111112

16 位:2N-1=216-1=6553510=11111111111111112

【例 1-2】用 8 位、10 位、12 位、16 位二进制能表示的最大状态数分别是多少?

解:

8 位:2N=28=25610=1000000002

10 位:2N=210=102410=100000000002

12 位:2N=212=409610=10000000000002

16 位:2N=216=6553610=100000000000000002

请熟记这几组数据,今后会常用到。10 位、12 位、16 位二进制能表示的最大状态数

在微机中常称为 1K、4K、64K。

23=8 22=4 21=2 20=1 等值十进制数

0000

0000

0011

0101

0123

0000

1111

0011

0101

4567

1111

0000

0011

0101

891011

1111

1111

0011

0101

12131415

位权

图1- 3 二进制计数顺序

Page 5: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

4

1.1.5 八进制数

在八进制中,有 0、1、2、…、7 共 8 个不同的数码,采用“逢八进一”的原则进行

计数。如(503)8 可表示为:

(503)8= 5×82 + 0×81 + 3×80 = (328)10

1.1.6 十六进制

在十六进制中,有 0、1、2、…、 9、 A、B、C、D、E、F 共 16 个不同的数码,

进位方法是“逢十六进一”。

例如(3A8.0D)16 可表示为:

(3A8.0D)16=3×162+10×161+8×160+0×16-1+ 13×16-2=(936.05078)10

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

mn

nn

n RaRaRaRaRaN −−

−−

−−

−− +⋅⋅⋅+++⋅⋅⋅++= 1

10

02

21

1

∑−=

×=n

mi

ii Ra

式中,ai 是 0、1、 …、 (R-1)中的任一个数,m、 n 是正整数,R 是基数。在 R

进制中, 每个数字所表示的值是该数字与它相应的权 Ri 的乘积,计数原则是“逢 R 进一”。

当 R 分别为 2、8、10、16 时,对应二、八、十、十六进制计数体系。

1.2 数制与代码

在数字系统中,二进制是最重要的一种数制。除数字系统外,十进制常用来表示数量,

以适应人们的计数习惯。这意味着,将十进制数输入数字系统时,系统内部必须将其转换

为二进制数,才能进行处理。例如,把一个十进制数输入一台数字仪器或设备(内含微处

理器或数字电路的仪器或设备)后,数字仪器首先要将十进制数转换二进制数,才能被识

别并正确工作。

同样,在数字系统的输出部分,二进制必须转换为十进制数,以方便人们读取。例如,

数字仪器或设备(典型的如计算器或计算机),先用二进制计算出的具体答案,然后再将

计算结果以十进制数显示出来。

除二进制和十进制外,数字系统中还广泛使用八进制和十六进制,它们是较大的二进

Page 6: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

5

制数的有效表示方法。我们将会看到,这两种数制的优点是可以方便地与二进制进行相互

转换。

在数字系统中,可能同时会用到 3~4 种数制,因此,熟练运用其它数制是必须的,同

时要求设计者具有对不同数制间的数的转换能力。

1.2.1 二、十六进制数向十进制转换的方法

由于二、十六进制都属于位权计数系统,通过按权展开法将它们转换为等值的十进制

数,再将各位的位权相加在一起即可实现二、十六进制数向十进制的转换。

【例 1-3】将数(10.101)2,(2D.A4)16 转换为十进制数。

解:

(10.101)2 = 1×21 + 0×20 + 1×2-1 + 0×2-2 + 1×2-3 = 2.625

(2D.A4)16 = 2×161 + 13×160 + 10×16-1 + 4×16-2 = 45.64062

1.2.2 十进制数转换成二、十六进制数

任意十进制数 N 转换成 R(二、八、十六)进制数,需将整数部分和小数部分分开,

采用不同方法分别进行转换,然后用小数点将这两部分连接起来。

1.整数部分:除基取余法

分别用基数 R 不断地去除 N 的整数,直到商为零为止,每次所得的余数依次排列即

为相应进制的数码。最初得到的余数为最低有效位,最后得到的余数为最高有效位。

【例 1-4】 将数(25)10 转换为等值的二进制数。

解:上述转换的过程的流程如图 1-4 所示。

【例 1-5】将数(423)10 转换为等值的十六进

252

= +

122

= +

12

6

62

= +3

32

= +1

12

= +0

余数 1

1MSB

余数 0

余数 0

余数 1

余数 1

1 00 122510 =

LSB

图 1- 4 例1 - 4 解题流程

42316

= +

2616

= +

26

1

116

= +0

余数 7

1MSD

余数 10

余数 1

A 716即:42310=

LSD

图 1- 5 例1 - 5 解题流程

Page 7: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

6

制数。

解:上述转换的过程的流程如图 1-5 所示。

2.小数部分:乘基取整法

分别用基数 R(R=2、8 或 16)不断地去乘十进制的小数部分,每次取乘积的部分[0~

(R-1)],并使乘积再次成为纯小数,直到积的小数部分为零,或直到所要求的位数(转

换精度要求)为止,将每次乘积的整数依次排列即为相应进制的数码。 最初得到的乘积

的整数为最高有效数字,最后得到的乘积的整数为最低有效数字。

【例 1-6】将 0.687510 转换成二进制数。采用四舍五入法,保留四位小数。

解:转换的过程的流程如图 1-6 所示。

即 0.687510= 0.10112

【例 1-7】将 0.718310 转换成十六进制数。采用四舍五入法,保留四位小数。

解:转换的过程的流程如图 1-7 所示。

即 0.718310= 0.B7E316

在图 1-7 中,第五位小数,在所对应的数制的基数中排在 50%以上,按四舍五入法,

应向上进位。所以 0.718310= 0.B7E316。

1.2.3 二进制与十六进制之间的相互转换

由于 24= 16,所以一位十六进制数相当于四位二进制数,反对应关系仍然成立。当带

有小数部分时,以小数点为界分别向左、右两边每四位为一组,转换为十六进制数,不足

四位的以 0 补足。

0.68752

1. 3750 整数部分=1...b-10.3750

2

0. 7500 整数部分=0...b-22

1. 5000 整数部分=1...b-30.5000

2

1. 0000 整数部分=1...b-4

图1-6 十进制小数转换为二进制小数流程

0. 718316

11.4928 整数部分=11...b-10. 4928

16

7. 8848 整数部分=7...b-2

16

14. 1568 整数部分=14...b-30. 1568

16

2. 5088 整数部分=2...b-4

0. 8848

0. 508816

8. 1408 整数部分=8...b-5

图1-7 十进制小数转换为十六进制小数流程

Page 8: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

7

【例 1-8】将数(25.6875)10 转换为等值的十六进制数。

解:利用【例 1-4】和【例 1-6】的结果,得:25.687510= 11001.10112,过程如下

十六进制转换:以小数点为界分别向左、右两边每三位为一组,并补 0 得:

0001,1001.10112

再转换为十六进制数得:0001,1001.10112=19.B16

验证:19.B16 = 1×161+9×160+11×16-1= 16+9+0.6875=25.687510

1.2.4 十进制与十六进制转换实用方法

在单片机中,二进制、十六进制用的多,原因是它们有对数字电路逻辑直观表达、便

于阅读理解的优点。例如,一个 8 位并行口的状态用 11001101B 表示,可以直观地表示出

个位的状态,而用十六进制 CDH,直观性就差一些,如果用十进制表示,则为:205,则

完全没有直观感了。

另一方面,在读有关计算机书时,作者出于一些考虑,用十进制来描述问题,例如,

E 的 ASCⅡ十进制数是 69,而它的十六进制值为 45H。其转换的原理是:

6910 = 64 + 5 = 4 × 161 + 5 = 4516

这里用的是心算再结合观察法进行十进制到十六进制转换,对 256 以内的数,能算得

的很快,但对大数和带小数部分的数的转换就不够方便了,这时可以借助于计算器实现它

们的互换。有些计算器有进制转换功能,直接按功能键即可实现各种数制之间的转换。但

初学者应首先学会转换原理。数的范围是无穷大的,但单片机接触的数据范围是有限的。

因为多数单片机的寻址范围一般在 64K 以内(16 根地址线,寻址范围 216=65536,即 64K),

在 4 位十六进制数范围之内。对 32 位单片机,如 ARM,则数制转换的范围扩展到 8 位十

六进制数范围。本章只讨论 4 位十六进制数范围的数据转换问题。

1.十进制整数向十六进制转换

为了实现快速转换,请记住以下几个重要数据:

162=256、163=4096,再结合计算器,就可很快实现 4 位十六进制数范围以内数据转换

了。

【例 1-9】将数 6500010 转换为等值的十六进制数

解:

第一步,因为 6500010>409610,所以,用 6500010除以 409610得:15.869…10

第二步,计算器减去整数部分 15,得:0.869…10,同时得到十六进制的幂 3 位 F;

Page 9: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

8

第三步,计算器 0.869…10,乘以 409610 得:356010;

第四步,因为 356010>25610,所以,用 356010 除以 25610 得:13.9062510

第五步,计算器减去整数部分 13,得:0.9062510,同时得到十六进制的幂 2 位 D;

第六步,计算器 0.9062510,乘以 25610 得:23210

第七步,因为 23210>1610,所以,用 23210 除以 1610 得:14.510

第八步,计算器减去整数部分 14,得:0.510,同时得到十六进制的幂 1 位 E;

第九步,计算器 0.510,乘以 1610 得:810,就是十六进制的幂 0 位 8;

所以,6500010=FDE816

从上述解题过程我们可以看出如下特点:

(1)转换过程每三步一个循环,循环的次数由数的大小决定,一般数字愈大,转换

的次数愈多;

(2)转换结果从高位起,最后是个位。最高位对应十六进制数的位数由第一步减数

(16i)决定。对应十六进制的 i 次幂位。

(3)转换结果可能出现对应十六进制的某次幂位为“0”的情况,不可丢失。

2. 十进制小数向十六进制转换

这是乘基取整法的具体应用,适用于二进制、八进制和十六进制。

【例 1-10】将数 3.1415910 转换为等值的十六进制数(保留 4 位小数)

解:

第一步,十六进制数的整数部分为 3,以下为小数部分的转换过程:

第二步,计算器对 0.1415910 乘以 1610 得 2.2654410;

第三步,计算器减去整数部分 2,得:0. 2654410,同时得十六进制的幂(-1)位 2;

第四步,计算器对 0. 2654410 乘以 1610 得 4.2470410;

第五步,计算器减去整数部分 4,得:0. 2470410,同时得十六进制的幂(-2)位 4;

第六步,计算器对 0. 2470410 乘以 1610 得 3.9526410;

第七步,计算器减去整数部分 3,得:0. 9526410,同时得十六进制的幂(-3)位 3;

第八步,计算器对 0. 9526410 乘以 1610 得 15.2422410;

第九步,计算器减去整数部分 15,得:0. 2422410,同时得十六进制的幂(-4)位 F;

第十步,0. 2422410<0. 510,故将余数舍去。(不必再转换,对照例 1-6)

所以,3.1415910=3.243F16

在单片机应用中,习惯用字母 B 表示二进制,如 10011100B,字母 H 表示十六进制,

如 9CH,十进制用字母 D 表示,但一般都省略了,八进制用字母 O 表示,但一般很少用。

Page 10: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

9

1.3 二进制数的运算

二进制数的运算包括算术运算和逻辑运算两部分。算术运算与十进制算术运算方法相

同,规则相似,但因基数不同,所以要熟练处理进位与借位情况,避免出错;逻辑运算就

是数字电路课程中的布尔代数的应用。二进制数的运算在单片机系统中经常出现,应用比

八进制、十六进制数的运算更为普遍,这是二进制在逻辑运算上的优势决定的。至于算术

运算,八进制和十六进制的运算方法,与二进制数运算没有本质区别。

1.3.1 二进制数的算术运算

二进制数只有 0 和 1 两个数符,其算术运算较为简单,加、减法遵循“逢二进一”、“借

一当二”的原则。

1.加法运算规则:0+0=0;0+1=1; 1+0=1;1+1=10(有进位)

2.减法运算规则:0-0=0;1-1=0;1-0=1;0-1=1(有借位)

3.乘法运算规则:0×0=0;0×1=1×0=0;1×1=1

4.除法运算规则:0/1=0;1/1=1

【例 1-11】 二进制数加法:求 10011100B+10101011B 的和。

解:算法如图 1-8 所示。即: 10011100B+10101011B =

101000111B

注意这个结论:两个 8 位二进制数相加,结果可能是 8 位或 9

位,但不可能出现其它更高位数的情况。

【例 1-12】二进制数减法:求 11100110B-11000101B 的差。

解:算法如图 1-9 所示。即:11100110B-11000101B = 100001B

注意这个结论:两个 8 位二进制数相减,被减数大于等于减数时,结果只能是 8 位以

下,被减数小于减数时,产生借位,结果为负值。例如,11012-11102

其差应为-00012,但运算结果为 11112。这是因为在计算机中引入

带符号的运算,规定二进制数的最高位为符号位,“0”为正、“1”

为负数;并规定数值一律用补码表示,所以出现了 11112 这个运算

结果见计算机有符号数的表示方法。

【例 1-13】 二进制乘法:求 1011B×101B 的积。

解:算法如图 1-10(a)、(b)所示。即:1011B×101B = 110111B

1 0 0 1 1 1 0 0

+ 1 0 1 0 1 0 1 1

1 0 1 1 1 0 0 0 0进位

和 1 0 1 0 0 0 1 1 1

图1-8 二进制加法算法示意图

1 1 0 0 0 1 0 1-

1 1 1 0 0 1 1 0

0 0 0 0 0 0 0 1 0借位

差 0 0 1 0 0 0 0 1

图1-9 二进制减法算法示意图

Page 11: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

10

注意:设被乘数和乘数的乘积的位数分别为 m、n,则乘积的位数为 m+n。

图 1-10(a)是从乘数的低位展开的,这是手算的通用方法。而图 1-10(b)是从乘数

的高位展开的方法,这种方法具有更易于使用循环计算法,循环次数为乘数的倍数。循环

算法特别适用于计算机编程。实现的步骤如下:

(1)给定被乘数和乘数。将乘数排在左边,由于本例被乘数和乘数分别为 4 位和 3

位,所以要留出 7 位空间存放积,最初数据的整体排列顺序如下:1010000。其中左边前 3

位是乘数,后 4 位为部分积;

(2)乘数与部分积整体左移一位,最右边一位补 0,形成新的部分积:1 0100000 最

前面的“1”称为移出位;

(3)如果移出位为“1”部分积与被乘数相加求合,否则进行下一步;

(4)左移次数等于乘数位数吗?是:结束;不是:返回步骤 2 重复执行;

(5)结束。

4 次迭代的结果如下:

第一次:1 010 1011B,部分积移位再加被乘数,即 010 0000 + 1011 = 010 1011B;

第二次:0 101 0110B,部分积移位再加被乘数。乘数位为 0,所以+0,相当于只移

位;

第三次:1 010 1100B,部分积移位再加被乘数,即 010 1100 + 1011 = 011 0111B;

读者可试试将 4 次迭代的过程用图表示出来。循环算法很容易推广到更高位的两个二

进制数的乘法运算中,对计算机程序而言,程序结构相同,只增加循环次数。

【例 1-14】 二进制除法:求 10100101B÷1111B 的商。

解:算法如图 1-11 所示。即:10100101B÷1111B = 1011B

问题:仿照【例 1-13】,找出适用于计算机的算法,并验证之。

1 1 1 1

0图1-11 二进制除法解题流程

1 0 1 1

0 1 1 1 1

1 0 1 0 0 1 0 11 1 1 1

0 1 0 1 1

1 0 1 1 01 1 1 1

1 1 1 1

1 0 1

1 0 1 1

+

1 0 1 1

1 0 1 1

1 1 0 1 1 1

0 0 0 0

图1-10 二进制乘法算法示意(a)

1 0 1

1 0 1 1

+ 1 0 1 1

1 0 1 1

1 1 0 1 1 1

0 0 0 0

图1-10 二进制乘法算法示意(b)

Page 12: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

11

1.4.2 二进制数的逻辑运算

1.“与”运算

“与”运算是实现“必须都有,否则就没有”这种逻辑关系的一种运算。运算符为“·”,

其运算规则如下:

0 · 0 = 0, 0 · 1 = 1 · 0 = 0, 1 · 1 = 1

2.“或”运算

“或”运算是实现“只要其中之一有,就有”这种逻辑关系的一种运算,其运算符为

“+”,运算规则如下:

0 + 0 = 0, 0 +1 = 1 + 0 = 1, 1 + 1 = 1 

3.“非”运算

“非”运算是实现“求”反逻辑的运算,如变量 A 的“非”运算记作 A 。其运算规则

如下: 10,01 ==

4.“异或”运算

“异或”运算是实现“必须不同,否则就没有”的逻辑功能,在数字逻辑中常叙述为

“相同为 0,相异为 1”。运算符为“⊕ ”。其运算规则是: 011,101,110,000 =⊕=⊕=⊕=⊕

【例 1-15】 完成下列逻辑运算。

① 若 X=1011B,Y=1001B,求 X·Y。

② 若 X=10101B,Y=01101B,求 X+Y。

③ 若 A=10101110B,,求 A 。

④ 若 X=10101101B,Y=01100011B,求 X⊕ Y。

解题流程见图 1-12。注意,上述的运算都是按位进行的,即所谓的“按位与、或、非、

异或”。

从上述对按位逻辑运算的讨论,可归纳出以下几条结论,对今后的编程有很大的帮助,

要认真体会,并熟记。

1 0 1 1

1 0 0 1

1 0 0 1

(a)与运算

1 0 1 0 1

+ 0 1 1 0 1

1 0 1 0 1

0 1 0 1 0 0 0 1 A = 1 0 1 0 1 1 1 0

=

图1-12 例1-15的解题流程

.

1 1 0 0 1 1 1 0

1 0 1 0 1 1 0 1 0 1 1 0 0 0 1 1

(b)或运算 (c)非运算 (d)异或运算

Page 13: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

12

(1)“按位与”具有屏蔽某些位的作用;

(2)“按位或”具有将某些位置“1”的作用;

(3)“按位反”的功能就是将源目地操作数的内容按位求反;

(4)“按位异或”可用于判断两个相同长度的二进制数是否相等;

注:本书将八进制内容做了裁减。但作为训练八进制数的有关问题仍出现在习题中,

供读者练习,扩充知识面。

1.5 计算机中数的表示方法

计算机在数的运算中, 不可避免地会遇到正数和负数,那么正负符号如何表示呢?由

于计算机只能识别 0 和 1,因此,对于带有符号的数,我们将一个二进制数的最高位用作

符号位来表示这个数的正负。规定符号位用“0”表示正,用“1”表示负。例如,X= -1101010B,

(7 位) Y= +1101010B(7 位),则 X 表示为:11101010B,Y 表示为 01101010B。

如上所述,连同符号位一起作为能被计算机识别的数,就称为机器数,而它所代表的

数值称为机器数的真值。

1. 5.1 数的码制

1.原码 

正数的符号位用 0 表示,负数的符号位用 1 表示,数值部分用真值的绝对值来表示的

二进制机器数,称为原码,用[X]来表示,设 X 为整数。

若 X= +Xn-2Xn-3…X1X0,则[X]原=0Xn-2Xn-3…X1X0=X; 

若 X= -Xn-2Xn-3…X1X0,则[X]原=1Xn-2Xn-3…X1X0=2n-1-X。 其中,X 为 n-1 位二进制数,Xn-2、Xn-3、 …、X1、X0 为二进制数 0 或 1。例如+115

和-115 在计算机中(设机器数的位数是 8)其原码可分别表示为: [+115]原= 01110011B;[-115]原= 11110011B 可见,真值 X 与原码[X]原的关系为:

⎪⎩

⎪⎨⎧

≤<−−

<≤=

−−

02,2

20,][

11

1

XX

XXX

nn

n

例如,[-115]原= 128+115 = 243 = 0F3H = 11110011B。

值得注意的是,由于[+0]原=00000000B,而[-0]原=10000000B,所以数 0 的原码不唯一。

8 位二进制原码能表示数的范围是:-127~+127;而 16 位二进制原码能表示数的范围

Page 14: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

13

是: -32767~+32767。

2.反码 

反码用[X]反表示。最高位为符号位,其余为数值位,正数的反码与原码相同。如

[+7]反= 00000111B

[+127]反= 01111111B

表示负数的反码时,可先将其看成正数,然后逐位(包括符号位)求反而形成。如

[+7]反= 00000111B

[-7]反= 11111000B

[+127]反= 01111111B

[-127]反= 10000000B 真值 X 与原码[X]反的关系为:

⎪⎩

⎪⎨⎧

≤<−+−

<≤=

−−

02,12

20,][

11

1

XX

XXX

nn

n

例如,[-115]=128-1+(-115)=12= 0CH = 10001100B。别忘记符号位。

又如,[-127]=128-1+(-1127)=0= 10000000B。别忘记符号位。

总结上述讨论可归纳出反码表示法的特点:

(1)反码的“0”也有两种表示方法,即“+0”和“-0”;

(2)N 位数的反码可以表示的数的范围为:-(2N-1)~ +(2N-1)。这里共 2N+1 个不

同的数,包括两种“0”。8 位二进制反码(N=7)能表示数的范围是:-127~+127;而 16 位

二进制反码(N=15)能表示数的范围是:-32767~+32767。

(3)由反码求原码时,正数(符号位为 0)后面的数位与原码相同;负数,其数值位,

经逐位求反后,得到原码。

3.补码 

(1)模的概念。“模”是指一个计量系统的计数量程。如时钟的模为 12。任何有模的

计量器,均可化减法为加法运算。仍以时钟为例,设当前时钟指向 11 点,而准确时间为 7

点。调整时间的方法有两种:一种是时钟倒拨 4 小,即 11-4=7;另一种是时钟正拨 8 小时,

即 11+8=12+7=7。 由此可见,在以 12 为模的系统中,加 8 和减 4 的效果是一样的,即 -4

= +8(mod 12)。 (2)对 n 位计算机来说,数 X 的补码定义为

⎪⎩

⎪⎨⎧

≤<−+

<≤=

−−

022

20][

11

1

X,X

XX,X

nn

n

补 即正数的补码就是它本身, 负数的补码是真值

Page 15: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

14

与模数相加而得。例如,n = 8 时, 

[+75]补= 01001001B

[-75]补= 10000000 B- 01001001B = 10110111B 

[0]补= [+0]补 = [-0]补 = 00000000B 

可见,数 0 的补码表示是唯一的。

(3)在用补码定义求负数补码的过程中,由于做减法不方便,一般该法不用。而采

用下述实用方法:先用原码求反码,再在反码数值末位加 1,即[X]补=[X]反+1。

例如:[-30]补=[|-30|原]反+1 =[+30]反+1=11100001+1=11100010B。(注意符号位的处理)

(4)用 N 位数的反码可以表示的数的范围为:-(2N)~ +(2N-1)。这里共 2N+1 个不

同的数,包括一个 0(0000,0000)。

8 位二进制补码(N=7)能表示的范围为:-128 ~+127,对应于:[1000,0000~0111,

1111],若超过此范围,则为溢出。

4.相反数

求相反数是将一个正数变成其相反的负数或是将一个负数变成其相反的正数。

规则:对于一个有符号的二进制数求其相反数,只要求其补码即可。两次求反将回到

原点,过程如下所示:

开始→01001 = +9

补码(求相反数)→10111 = -9

再求相反数→01001 = +9

5.引入反码、补码概念的意义

(1)用补码系统来表示有符号的数,可用加法来完成减法运算。这一点非常重要,

因为这意味着数字计算机能用相同的电路完成加法和减法运算,节省了硬件。

(2)补码系统有一套完整的算术运算规则。

(3)反码、补码在定点数系统中的应用

定点数是计算机数据表示类型之一。另一种数据表示类型是浮点(数)。了解定点数,

对于用定点表示小数和数的符号等问题有所了解,才能对今后程序的设计和使用范围、精

度等注意事项有所了解。

定点数的定义为:如果约定二进制代码的某个确定位置为一个小数点位,这样表示的

数就称为定点数。

例如:

00101011.B=25+23+21+20 = 43D

Page 16: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

15

DB212122221.0010101 1024 =+++= −

DB1611222221011.0010 4311 =+++= −−−

DB25643)2222(2222200101011.0 013588753 =+++=+++= −−−−−

又例如:

DBB2137)2222(101001011.1011010 1025 −=+++−=⋅−= −

DBB16114)2222(101101000101.1011 4312 −=+++−=⋅−= −−−

定点数的位数可以任意扩大,如小数部分用四位二进制表示,由于舍去误差的影响,

绝对精度可保证在 2-4=0.0625 或者说计算可保证的精度可保证在 6.25%以内。整数部分的

位数决定参与运算的数值及结果的范围。为了保证高精度和大的数值范围,就必须用更多

位数的定点数来表示计算机中的数,并对它们进行基本运算。这是以计算机则付出更多的

内存空间和更多的运算时间为代价的。这是定点数的一个缺点,所以在理解定点数的情况

下,根据任务合理确定定点数的位数是很有必要的。

在定点数的应用中,大量用到原码、反码、补码的概念和它们之间的互换,所以深入

的领会反码、补码概念,意义是很显然的。数的各种码制的表示形式如表 1-1 所示。

表 1-1 各种码制下数的表示形式

二进制数 无 符 号 数 原 码 补 码 反 码

00000000 0 +0 +0 +0

00000001 1 +1 +1 +1

00000010 2 +2 +2 +2

┆ ┆ ┆ ┆ ┆

01111110 126 +126 +126 +126

01111111 127 +127 +127 +127

10000000 128 0 -128 -127

10000001 129 -1 -127 -126

10000010 130 -2 -126 -125

┆ ┆ ┆ ┆ ┆

11111101 253 -125 -3 -2

Page 17: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

16

11111110 254 -126 -2 -1

11111111 255 -127 -1 -0

6.运算溢出

用有限的二进制位数来表示数或进行算术运算时,不可避免的产生运算溢出的问题。

各种有限长度的码制数都有数的表示范围。运算溢出是系统的设计者和程序员必须注意并

解决的问题。微机中都有所谓的标志寄存器为 CPU 和程序员提供判断各种发生运算溢出

的标志,如进位、半进位、借位、结果为 0 及溢出等。程序员经过对标志位的检测,判断

是否发生运算溢出,并用程序来解决溢出问题。MCS-51 系列单片机的标志寄存器称为程

序状态字 PSW,详见第 3 章。

1.5.2 编码

编码就是用数字表示数字(另一种体制的数字)、字母或文字,这种“数字”叫做代

码。

如前所述,任何一个十进制数都可以用等值的二进制数来表示。在二进制中,一组 0

和 1 可作为十进制数的代码。当一个十进制数用二进制数表示时,称为直接二进制编码。

数字系统都使用某种形式的二进制数实现其内容操作,而数字系统之外使用十进制

数,这就意味着经常需要完成二进制数与十进制数之间的相互转换。但对于较大的数,两

者之间的转换花费的时间长且复杂。由于这一原因,在某些情况下,使用了一种综合的十

进制与二进制特点的十进制编码方法。

1.二-十进制编码

如果每个十进制数字的位都用其等值的二进制数表示,所形成的代码称为二-十进制

码,简称 BCD 码。由于十进制最大数码为 9,因此需要用 4 位二进制对每一个数码进行编

码(如 9 的二进制码是 1001)。

十进制数转换成 BCD 码的方法是,将其每一位变换为等值的二进制数,然后按照书

写的习惯从左到右、从高到低位将等值的二进制数顺序排列即可。

例如,十进制数 853 转换成 BCD 码的过程:8 1000,5 0101,3 0011 根据上述的

方法排列,得:85310 =1000 0101 0011BCD

同理,736910=0111 0011 0110 1001BCD。

BCD 码用 4 位二进制数表示每一位十进制数字,显然,仅用到 4 位二进制数的

0000~1001,而 1010,1011,1100,1101,1110,1111 六个数没有用到。如果在使用 BCD

Page 18: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

17

码的机器中,任何时间出现了任一禁用的 4 位二进制数,则表明系统出错。

BCD 码向十进制的转换是十进制数向 BCD 码转换的逆过程,比较简单。

【例 1-18】 试把 BCD 数 0110 1000 0011 1001 转换为等值的十进制数。

解:把 BCD 数按 4 位进行分组,并转换成十进制数,得

0110 1000 0011 1001BCD = 683910

【例 1-19】试把 BCD 数 0111 1100 0001 转换为等值的十进制数。

解:在 BCD 数中,出现禁用码“1100”,表明系统出错。

BCD 码的最大优点是容易实现与十进制数的相互转换,仅需记忆十进制数 0~9 所对应

的 4 位码二进制数。在数字系统中,十进制与 BCD 码的相互转换要依靠逻辑电路来实现。

因此,从硬件角度看,容易实现是十分重要的。

在单片机中,有时也要用到 BCD 数。单片机中,应用最广泛的是 8 位机。而 BCD 码

占用 4 位二进制数空间,即半字节。如以半字节长度处理 BCD 数,则 CPU 的效率将降低,

并且占用系统的大量内存。所以在 8 位机中,用一个字节表示两位 BCD 数,称为压缩的

BCD 数。如,59H 这个十六进制数,在 BCD 码系统中,则表示 5910。对于位数更多的十

进制数,可用多个字节表示,如这时内存中的 556677,表示 55667710,同样,此概念可扩

展到定点数,如,668833.99H 表示 668833.9910,依次类推。对于 8 位以上的单片机,为

提高 CPU 效率,可用字或双字作为压缩的 BCD 数。

BCD 码,也称为 8421BCD 码,以表示从左到右四位二进制位的权值。

表 1-2 列出了十进制数与 BCD 码的对应关系。

表 1-2 十进制数与 BCD 码的对应关系表

十 进 制 数 BCD 码 十 进 制 数 BCD 码

0 0000 1000 8

1 0001 1001 9

2 0010 10000 10

3 0011 10001 11

4 0100 10010 12

5 0101 10011 13

6 0110 10100 14

7 0111 10101 15

2.字符数字码

除数字数据外,计算机还必须能处理非数字信息。换句话说,计算机应能识别表示字

Page 19: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

18

母、标点符号及其它特殊符号以及数字的代码。这些代码叫做字符数字码。一个完整的字

符数字码,能表示计算机键盘上能够看到的各种符号和功能。

表 1-3 ASCⅡ码表

b6b5b4

b3b2b1b0 000 001 010 011 100 101 110 111

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

NUL SOH STX ETX EOT ENQ ACK BEL BS HT LE VT FF CR SO SI

CLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ECS FS GS RS US

SP ! ” # $ % & ' ( ) * + , - . /

0 1 2 3 4 5 6 7 8 9 : ; < = > ?

@ A B C D E F G H I J K L M N O

P Q R S T U V W X Y Z [ \ ] ↑ ←

、 a b c d e f g h i j k l m n o

p q r s t u v w x y z { | } ~

EDL

美国信息交换码(简称 ASCⅡ码)是应用最为广泛的字符数字码。ASCⅡ码是 7 位码,

因此有 27=128 各可能的代码组合。这足以表示标准键盘的字符、回车、换行等控制功能。

表 1-3 列出了全部 7 位 ASCⅡ编码。

表 1-3 中字符表示的含义如表 1-4 所示。

表 1-4 ASCⅡ码表中字符表示的含义

字符 含义 字符 含义 字符 含义

NUL 空 FF 走纸控制 CAN 取消

SOH 标题开始 OR 回车 EM 纸尽

STX 正文开始 SO 移出 SUB 取代

ETX 正文结束 SI 移入 ESC 脱离

EOT 正文结束

DEL 数据链换码

FS 文件分组

Page 20: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

19

ENQ 询问 DC1 设备控制 1 GS 字组分离

ACK 肯定回答 DC2 设备控制 2 RS 记录分离

BEL 铃 DC3 设备控制 3 US 单元分离

BS 退一格 DC4 设备控制 4 SP 空格

HT 横向列表 NAK 否定回答 DEL 作废

LF 换行 SYN 同步空转

VT 竖行制表 ETB 成组传送结束

应该注意的是:十进制数 0~9 对应的十六进制数是 30H~39H;26 个大写英文字母是

十六进制数的 41H~5AH。在微型机中,一个字节存一个 ASCⅡ字符。由于 ASCⅡ字符是

7 位字符,最高位(b7)空着不用时,实际上是个“0”。我们可以借用最高位做很多事,

如,通信时通常有命令和数据两种数据形式,为分清通信过程中的这两种数据形式,常用

ASCⅡ码传送数据(7 位),命令是最高位为 1 的(≥80H)数据,以此来分出通信过程中

的命令和数据,这是常用的方法。另外,如通信只传输数据,可用 ASCⅡ码作为数据,而

将最高位用作校验位。用 ASCⅡ码传送数据,并不是说它表示 7 位二进制数,而是说它是

7 位 ASCⅡ码。

字节中第 8 位用上后形成的 ASCⅡ码,统称为扩展 ASCII 码(见附录 2)。因此,在

标准 ASCII 码基础上从 128 扩展到 255 个(FFH 没定义),并首先在 IBM PC 中使用,随

之得以发展。

1.6 浮点数简介

在计算机中有定点和浮点两种数据表示类型。在一般的控制工程中,控制过程的运算

比较简单,一般为正整数运算,采用数的原码系统进行计算最为方便。当涉及带符号和可

预料的小数时,采用上述讨论的定点数进行计算已经足够。定点数具有数据结构简单、运

算速度高、占用系统资源少的优点。因此,只要能保证运算的要求(如数据范围、精度等)

应尽可能以这种数据格式。但在实际应用中,系统涉及的数据范围很宽,并包含小数,用

定点数很难选择定点数的长度,难免出现数据溢出和精度不够的问题。如果强行使用定点

数,在软件设计时,先要清楚所处理的数据的变化范围,确定定点数的长度。造成程序的

移植性和适应性都很差。

另一方面,当涉及初等函数的运算时,如对电网的功率检测方面,要用到三角函数进

Page 21: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

20

行功率因数的计算,定点数的缺陷就表现出来了,为了达到精度,需要很多字节来存储数

据,并进行计算,使程序的复杂性剧增。解决复杂计算问题的有利武器就是计算机的另一

种数据表示类型:浮点数。

在浮点表示法中,小数点的位置不是固定的,而是浮动的。它们用固定字节长度的空

间来表示数,根据计算要求的数据范围和精度,浮点数长度有三字节、四字节浮点数。在

PC 机中还有 8 字节长型浮点数。在单片机中,根据实际需要一般采用三字节及四字节浮

点数。下面我们将会知到,一般而言,浮点数的长度愈长,则它能表示的数据范围就愈宽,

精度就愈高。浮点数具有规范的运算方法,长度固定,数值变化范围宽,计算精度高,可

移植性好,被广泛应用于计算机中。

1.6.1 位、字节、字

1.位(Bit):二进制数的一位(空间)。

2.字节(Byte):由 8 位二进制数组成

的数,称为 1 字节(Byte)。

3.字(Word): 2 字节长度的数称为 1

字(Word)。

位(Bit)、字节(Byte)、字(Word)

之间的关系如图 1-13 所示。图中的 LSB 表示

最低位,MSB 表示最高位。

1.6.2 浮点数构成原理

1.浮点数构成原理

当我们用幂指数表示有效数字时,在规定的数据范围及精度范围内,该集合中的数就

可用一固定长度表示出来。一般说来,任何一个二进制数 N 可用下式表示:

SN P ×±= ±2 (1-1)

式中:S 表示数 N 的尾数,它表示数 N 的有效值。用位 Sf(式 0-1 中的±号)表示尾

数的符号,“0”表示正数,“1”就表示负数。

P 表示数 N 的阶码,它表示小数点的位置。用位 Pf 表示阶码的符号,“0”表示正阶

码,“1”表示负阶码。

LSBMSB

1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0D0D1D2D3D4D5D6D7

1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0

1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0

1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

图1-13 计算机中的数据单元:位、字节、字

字节地址 0

字节地址 1

字节地址 2n-2

字节地址 2n-1

位0,1 ,6,7

字地址0(低)

字地址1(高)

字地址 n-1(低)

字地址 n-1(高)

Page 22: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

21

2.浮点数的格式

由于历史的原因,各公司的浮点数格式不尽相同,有的格式的定义相同(指数符、阶

符、阶码、尾数等的长度、位置),但浮点数的字节排列地址次序相反(从低向高排与从

高向低排),但无论何种浮点数格式,只要掌握一种,其它格式的浮点数理解起来就容易

了。但不同格式的浮点数是不能兼容的,这点要特别注意。浮点数分为阶码和尾数两部分,

在数的表示中都有各自的符号位,这些是共同之处。

例如 Franklin C51、Keil C51 的浮点数据类型与 IEEE-754 标准(32)兼容,它为四字节

浮点数据类型,一个浮点数占用四个字节。这种浮点数格式被大多数软件软件所采用。如,

C、C++、多数支持 C 语言的单片机编译软件,如 C196、PIC 系列单片机的 C 编译器等。

具有极高的兼容性,略为修改可将源程序(不依赖于硬件)相互移植。下面就讨论这种格

式的浮点数。它具有 24 位精度,尾数可见的部分

为 23 位,是小数部分,但规定加“1”,因而不

表示出来。各位的分布如下:一位符号位,8 位指

数位,23 位尾数位。其格式如图 1-14 所示。

图 1-15 是浮点数在计算机中存贮的一种格式,图中:

S 为符号位,1 表示负数,0 表示正数。

E 为阶码(在两个字节中)偏移为 127

M 为 23 位尾数,加 1 后形成 24 位精度。

例如,浮点数-12.5 的十六进制为 C1480000,在计算机(包括

单片机)内存中的保存方式如图 1-16 所示。

3.浮点数表示数的范围与精度

三、四字节的浮点数,具有 8 位阶码,偏移量为 127,数值范围在±(10-38~1038)数

量级,但它们的尾数分别为 16 位和 24 位,所以计算的相对误差分别约为:0.000015 和

0.00000006,通常说,三字节的浮点数能保证提供四位半十进制数字的有效数字,四字节

的浮点数(在高级语言中称为单精度实数)能保证提供七位十进制数字,就是以此计算结

果为依据的。而八字节浮点数,在高级语言中称为双精度实数,由于占用太多的内存资源

和 CPU 的运行时间,只在 PC 微机以上的计算机中作为高精度数学计算时使用,双精度实

阶符

1位

阶码 数符 尾数

图1-14 四字节浮点数格式

8 位 1位 23位+最高位 (总为1)

地址

内容 MMMM MMMM MMMM MMMM EMMM MMMM SEEE EEEE

+0 + 1 + 2 +3

图1-15 四字节浮点数存贮格式

地址 内容

+0

+1

+2

+3

0x 00

0x 00

0x 48

0 xC 1

图1-16 四字节浮点数在计算机中的一种存贮方式

Page 23: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

22

数的数值范围在±(10-308~10308)数量级,提供 15~16 位十进制数有效数字。双精度实数在

单片机中很少用到,因为四字节的浮点数的计算精度已足以满足单片机应用场合的精度要

求了。

4.浮点数与十进制数的互换

(1)计算机或单片机计算出来的单、双精度实数,直接输出是不易被人看懂,即使

能看懂也是非常不方便的。因此在计算机输出结果前先要进行数制转换。将浮点数转换为

十进制数的过程称为“浮点数二翻十”。转换的方法就的根据浮点数的格式,结合 0.2.3

讨论的方法进行转换。

【例 1-16】 将四字节浮点数 C1 48 00 00H,转换为十进制数。

解:第一步,将 C1 48 00 00H 排列成图 1-14 的格式,即:

1100 0001 0100 1000 0000 0000 0000 0000 B

第二步,按图 1-14 的定义,用“,”将各部分内容分开:

1,1000,0010,1001,0000,0000,0000,0000,0000 B

第三步,按图 1-14 的定义,因数符为“1”,所以此数为负数;阶码为 82H>127(7FH),

阶码为正,23 位可见尾数为 900000H(是小数部分);

第四步,分别计算阶码和尾数的值。

阶码 P = 82H - 7FH = 3(D);

尾数 S = (1+9/16) = 1.5625,式中的“1”默认值;

将计算结果代入(1-1)式,得:

5.1225625.12 3 −=×−=×−= PSN

(2)计算机或单片机对输入的十进制数首先要转换为计算机能够“看懂”的二进制

数,然后再进行计算和处理。将十进制数转换为浮点数的过程称为“浮点数十翻二”。转

换的方法当然还是根据浮点数的格式的定义进行转换。

【例 1-17】将 0.0488 转换为四字节浮点数形式。

解:第一步,按图 1-14 四字节浮点数格式,将 0.0488 表示为某一小数,乘以 2 的幂

形式。具体做法是对 0.0488 连续乘以 2,每乘一次,2 的幂减 1。注意:乘以 2 的步骤持

续进行,直到预转换数为 1.XXXXXX…的形式为止。即:

0.0488=1.5616×2-5

第二步:将 0.0488 的 2 的幂式系数中的“1”(是四字节浮点数格式中不可见的总为

1 部分),提出来,剩余的小数部分转换为十六进制小数(用计算器采用乘以 16,然后提

整数,再减去整数的方法)直到达到尾数长度或小数部分乘积出现“0”为止,即:

Page 24: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

23

1.5616= (1+8/16+15/256+12/4096+5/65536+4/1048576)

第三步:确定浮点数的阶码,本题是:7FH –5 = 7AH(阶码初值为 7FH=127),接着

再确定数符位,本题为“0”(正数);

第四步:合并第一、二、三步结果,并转为十六进制形式,然后按图 1-14 的格式排列

浮点数的各个部分,形成浮点数整体:

0.0488 = 1.5616×2-5 = (1+0.8FC504) ×2-5= 0 011|1 101|0 100|0 111|1 110|0 010|1 000|0

010|0 B

=3D47E283H

注:在上述二进制计算式中,最左边的“0”(加黑)是数符位,表示此数为正值;

最后 23 位,是尾数。注意:真正的尾数值为 23 位尾数值+1。

注意在应用中,转换结果(3D47E283H)在计算机内存中存放的次序,本书格式是图

1-16 所示的格式。

定点数和浮点数都有自己完备的计算体系,完全讨论清楚它们,需要较大的篇幅。本

书的目的仅在于让读者对它们有初步的了解,为今后的应用打基础。后面将会有些少量的

讨论,有兴趣的读者可参考有关的参考资料。

如仅限于用浮点数,不涉及其构造,可以跳过此节。

习题 1

1-1 在二进制计数序列中,101112 下一个二进制数是什么?

1-2 用 14 位二进制能表示的最大十进制数是什么?最多能表示的多少种不同的数(用

十进制表示)?

1-3 计算机是怎样解决数值计算问题的?

1-4 将 425.687510 转换成二、八、十六进制数。

1-5 将数 31.548 转换为等值的十六进制数。

1-6 将 3.141610 和 2.718310转换成二、八、十六进制数。

1-7 将数 6161110 转换为等值的十六进制数

1-8 三字节长度的定点数,整数部分长 2 个字节(包括一位符号位),小数部分长 1

个字节,则该定点数能表示的数的范围是多少?其绝对精度为多少?

1-9 将“π”转换为四字节浮点数。

1-10 将“光速 c”转换为四字节浮点数单位用 m/s 表示。

Page 25: 工程背景下的单片机原理及系统设计 Idept.wyu.cn/dpj/uploadfile/20114151363823.pdf · 工程背景下的单片机原理及系统设计 i 目 录 ... 因此,同一个数字符号在不同的数位

工程背景下的单片机原理及系统设计

24

1-11 将四字节浮点数 126ABC55H 转换为十进制数。

1-12 将四字节浮点数 926ABC55H 转换为十进制数。

1-13 试把 BCD 数 0110 0111 1000 1001 转换为等值的十进制数。

1-14 试把十进制数 5340 转换为等值的 BCD 数。

1-15 试用等值的直接二进制数表示 17810,并用 BCD 码对 17810 进行编码。

1-16 总结直接二进制数与 BCD 数的不同之处。

1-17 两个字节的 BCD 码能表示的最大十进制数是多少?两个字节压缩的 BCD 码

呢?

1-18 从表 1-3 查出 26 个小写英文字母对应 ASCII 的十六进制值。

1-19 半个字节能表示多少位十六进制数?两个字呢?

1-20 下列数都是二进制的补码形式。求它们的十进制值。(a)01100(b)11010(c)

10001

1-21 一台计算机存储器中存入了两个带符号数的补码: 0001111B=31D ,

11110100B=-12D,当执行一个程序时,计算机要将其换为相反符号,即把+31 变成-31,

把-12 变成+12。计算机将如何完成这一工作?

刘焕成 编著 2011 年 2 月 14 日修改

刘焕成 编著 2011 年 2 月 16 日修改