Top Banner
基础是最重要、最核心的东西,也是引伸出后续内容的根基和阶梯。 本篇主要讲解单片机的结构原理和汇编语言程序设计,其中包括单片机中 CPU 的工作过程、存储器的组织结构、输入/输出口的结构原理和应用、 定时器/计数器的结构原理和应用、中断系统的结构原理和应用,以及串 行口的结构原理和应用。 只要掌握本篇的内容,就算跨入了单片机世界的大门。
29

CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。...

Jul 22, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

基 础 篇

基础是最重要、最核心的东西,也是引伸出后续内容的根基和阶梯。

本篇主要讲解单片机的结构原理和汇编语言程序设计,其中包括单片机中

CPU 的工作过程、存储器的组织结构、输入/输出口的结构原理和应用、

定时器/计数器的结构原理和应用、中断系统的结构原理和应用,以及串

行口的结构原理和应用。

只要掌握本篇的内容,就算跨入了单片机世界的大门。

Page 2: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。
Page 3: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1 章 单片机基础知识

如今电脑、计算机、单片机,都已成为人们非常熟悉的词语了。然而,单片机与计算

机究竟是什么关系?单片机究竟为何物?单片机与嵌入式系统又是什么关系呢?另外,电

脑最为神奇的作用是处理各种各样的信息,那么,它是如何来表达这些信息的呢?这些问

题是学习本书内容的基础,也正是本章要回答的问题。

本章要点:

单片机的由来和特点。

补码的特点和应用。

单片机的内部基本结构。

CPU 执行指令的过程。

存储器的作用和分类。

输入输出接口的作用。

学习目标:

了解单片机的特点。

掌握补码表示数据的方法及其运算。

掌握 CPU 执行指令的步骤。

掌握存储器存取数据的过程。

1.1 引 言

要回答“单片机究竟为何物,以及单片机与计算机究竟是什么关系”这两个问题,显

然要追溯计算机的历史和发展进程。

1.1.1 计算机

计算机(俗称电脑)诞生于 20 世纪 40 年代,它的功能从最初的计算,不断向控制、信息

处理和通信等各个领域延伸。随着电子技术的发展,计算机经历了电子管时代、晶体管时

代、大规模集成电路和超大规模集成电路时代,计算机家族也从小型机、大型机,发展到

巨型机和微型机。

那么,最初的计算机内部结构是什么样的呢?据文献记载,计算机内部结构的蓝图是

由世界著名计算机科学家冯·诺依曼绘制的,如图 1-1 所示。

Page 4: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

4

图 1-1 冯·诺依曼的计算机硬件结构

在冯·诺依曼的蓝图中,计算机的硬件结构由五大部件组成。这五大部件是当代计算

机硬件的雏形。学习硬件可以从这里出发。以下将对这五大部件的功能进行简要说明。

(1) 运算器。运算器是计算机的中心,其功能就是进行数据运算,“计算机”的名称

也正是因此而来。由于运算器处在计算机的中心位置,早期计算机的一些数据传送需经过

运算器。

(2) 控制器。控制器是执行指令的部件,它向系统中的其他部件发出控制信号,协调

各部件工作。计算机通过它来实现本身运行过程的自动化。

(3) 存储器。存储器是存放程序和数据的部件,正是因为事先将程序储存在存储器中,

控制器才能自动地完成计算机交给的任务。

(4) 输入设备。输入设备是输入信息的部件,输入的信息有原始的程序、数据,以及

计算机操作命令等,常用的输入设备有键盘、鼠标、扫描仪等。

(5) 输出设备。输出设备是输出信息的部件,输出的信息有计算结果、绘制的图形表

格,以及计算机操作提示信息等,常用的输出设备有显示器、打印机等。

也许人们现在已经很难将手头电脑的结构与冯·诺依曼的电脑结构联系起来了。在现

在的电脑中,已看不到独立的运算器和控制器的身影了,那么,它们到哪里去了呢?

在回答这个问题之前,我们先看看冯·诺依曼的计算机是如何工作的,这种计算机有

什么特点,它与后来的计算机有什么关系。

首先仔细观察一下图 1-1。图中的 5 个方框代表了计算机的五大部件,而其中的连接线

有两类,即较粗的有向线段和较细的有向线段,它们分别代表数据线和控制线。控制线的

信号均来自控制器,每一部件也均有一组数据线与相关部件相连。为了使计算机按照人们

的意图进行计算(早期计算机的任务就是计算),必须事先把计算方法和操作步骤用指令编制

成计算机可执行的程序,通过输入设备,将一条一条的指令以二进制数的形式存放在存储

器中。计算机启动后,就从存储器中依次取出指令,送控制器分析,控制器根据指令的操

作要求,向系统各部件发出一系列相应的操作信号,使系统各部件完成相应的工作。例如

要求运算器完成加法工作等。程序执行过程中或执行结束时,可以通过输出设备将中间结

果或最终结果显示出来。

根据冯·诺依曼计算机的工作原理,可以总结出以下特点。

1. 采用存储程序的工作方法

将计算机要处理的数据和计算方法、步骤,事先用计算机操作命令(指令)编制成程序,

Page 5: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

5

存放在计算机的存储器中。计算机运行时,自动地、连续地从存储器中取出指令并执行,

不需要人工干预。

2. 采用二进制代码表示指令和数据

计算机内部的信息全部采用二进制编码,使用这样的设计,主要原因是二进制的 0 和 1

两种状态用电路容易实现,运算器电路比较简单。另外,二进制信息对应的数字电子信号

的抗干扰能力强。

令人感到惊奇的是,目前的计算机(电脑)仍然具有以上两个特性,只是我们通常没有感

知到罢了。比如,在计算机中执行一个程序时,只要对准这个程序的图标点击两下就行。

其实,当用户点击了这个程序后,计算机操作系统就将该程序的二进制信息从硬盘装载到

存储器,然后执行。再比如,我们需要向计算机输入数据时,一般都是直接输入十进制的

数据而不是二进制数据,但其实这也是计算机中的系统软件在暗地里将十进制数转换成二

进制数而已。

由计算机的结构原理引出了两个名词,即硬件和软件,这是计算机区别于过去其他机

器的重要特征。于是,对于计算机结构,完整的描述是:计算机是由硬件和软件组成的,

其硬件主要包括控制器、运算器、存储器、输入设备和输出设备;其软件可分为系统软件、

程序设计语言和应用软件;系统软件包括操作系统、编辑程序、诊断程序、调试程序、数

据库管理程序、装配连接程序等;程序设计语言包括机器语言、汇编语言、高级语言和应

用语言;应用软件包括通用软件、实用软件、用户程序等。

计算机的系统结构如图 1-2 所示。

图 1-2 计算机的系统结构

随着电子技术的发展,特别是大规模集成电路的发展,计算机硬件的结构发生了一个

重要的变化,那就是将原来计算机中的控制器和运算器组合在一起,集成在一块半导体芯

片上,并给它起了一个响亮的名字——中央处理器(Central Processing Unit,CPU)。这就是

为什么在现在的计算机中看不到独立控制器和运算器的原因了。

控制器和运算器隐身后,使计算机系统的可靠性得到了很大的提高。以往在控制器与

运算器之间存在大量的连线,这些连线是导致计算机故障常发的因素,而随着两者在 CPU

中的集成,这些故障也就随之消失了。

Page 6: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

6

1.1.2 微型机

计算机出现后,一方面朝着巨型机的方向发展,不仅体积庞大,而且技术上也追求高

精尖,以满足高端要求,另一方面,又走大众化的道路,来满足普通民众的需求,使得计

算机体积微型化,也就是我们平时看到最多的一种计算机——微型机。

那么,微型机与传统的计算机在结构上有什么不同呢?答案是基本相同。先让我们来

看一下早期的微型机的结构,如图 1-3 所示。

图 1-3 早期微型机的结构

图 1-3 中,表示的是一种单 CPU、单总线的微型机结构。这种结构的微型机中,CPU、

存储器、接口各自连接在系统唯一的总线上,输入/输出设备分别通过接口与系统相连。

在这种结构的电脑中,CPU 通过系统总线到存储器中读取指令或数据,CPU 也是通过

总线与输入/输出设备传送信息。但是,系统不能在同一时刻在三个部件之间传送信息,否

则,不同的信息将在同一条总线上撞车。

微型机的发展是随着计算机的发展而发展的,这里的“计算机”,是指小型机和大型

机,微型机借鉴小型机和大型机发展的技术,从单 CPU、单总线结构,朝着多 CPU(多核)、

多总线结构的方向发展。

对于初学者来说,微型机的有关术语经常容易引起混淆,这里需要先澄清一下,以利

于今后的学习。

1. 微处理器

微处理器是将控制器、运算器、寄存器集成在一块芯片上的系统,称为 MPU(Micro

Processor Unit)。

2. 微型计算机

以 CPU 为中心,配上存储器、接口,用系统总线将三者连接起来的系统,称为 MC(Micro

Computer)。

3. 微型计算机系统

以 MC 为中心,配上输入/输出设备、系统软件组成的系统,称为 MCS(Micro Computer

System),俗称电脑、“计算机”或“微机”。

Page 7: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

7

1.1.3 单片机与嵌入式计算机

在微型计算机系统跟着大型机、巨型机朝着通用性(多功能)方向奋进的同时,制造商又

开辟了新的发展路径。1976 年,Intel 公司推出了世界上第一片单片机芯片 8048。

单片机从诞生那天起,就与微型计算机系统分道扬镳。微型计算机系统走的是通用化

的发展道路,也就是不断地增加自身的功能;而单片机走的是专用化的发展道路,即朝着

控制器的方向发展,使计算机成为人类社会进入全面智能化时代的有力工具。

Intel 公司经过不断完善单片机产品,在 1980 年推出了被业界公认的经典产品 MCS-51

系列单片机。这款产品经历了三十多年,仍然是单片机领域内的主流产品。1984 年,Intel

公司又研制出了高性能的 MCS-96 系列单片机。

20 世纪 80 年代和 90 年代是单片机迅速发展和应用的年代,各种单片机围绕着应用对

象,不断地在内部添加外围接口电路,如 A/D 转换器、D/A 转换器、PWM、日历时钟、电

源监测、程序运行监测电路等。突出地显示出单片机对其应用对象的智能化控制能力。因

此,单片机的称呼也逐渐从 SCM 变成微控制器 MCU(Micro Controller Unit)。

随着单片机技术的发展,嵌入式计算机的概念被提了出来。那么,单片机与嵌入式计

算机又有什么区别呢?答案是没有区别。仅仅是同样的东西被冠以不同的名称而已。嵌入

式计算机就是“嵌入到对象体系中的专用计算机系统”。由此可见,单片机是根据计算机

的特殊结构来命名的,而嵌入式计算机是根据计算机形态来命名的。现在有一个趋势,就

是将单片机统一在嵌入式计算机名下。

由于单片机或嵌入式计算机的应用领域被不断地拓展,应用系统的外围电路也不断地

被集成进嵌入式计算机中,芯片最大化的趋势十分明显,由此,片上系统SoC(System on Chip)

的概念也应运而生,也就是将嵌入式应用系统中的电路元器件尽可能地集成在一块或几块

芯片中。这样做的好处是,应用系统电路板非常简洁,可减少体积和功耗,提高可靠性。

1.2 常用的数制和码制

前面曾经提到过,计算机中的指令和数据均是用二进制数来表示的。本节我们就来学

习二进制数的相关知识。

1.2.1 常用的数制及其转换

计算机中常用的数制有二进制、十六进制和十进制。实际上,CPU 能直接识别处理的

Page 8: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

8

只是二进制数,而十六进制和十进制数只是在高级语言、汇编语言编程时使用。

为了区分不同的进制数,采用在数字后面跟一个字母来标识。比如二进制用 B(Binary)、

十六进制用 H(Hexadecimal)、十进制用 D(Decimal)(通常省略)。

1. 二进制数

计算机中的 CPU 可以对指令代码、数据、地址以及各种符号代码进行处理,这些代码

和数都是用二进制数来表示的。

使用二进制数有以下优点。

(1) 二进制数在物理上容易实现。在电路中用高/低电平、正/负极性、开关的开/合等来

表示二进制数的“1”和“0”。

(2) 二进制数的运算规则简单,所以运算电路的结构也很简单。

(3) 二进制数的“0”和“1”正好与逻辑代数的“0”和“1”吻合,使逻辑运算可以

方便地进行。

(4) 二进制数与其他进制数的转换也比较简单。

对任意一个二进制数 N2,均可用多项式表示为:

n 1 n 2 1 0 1 m

2 n 1 n 2 1 0 1 mN B 2 B 2 B 2 B 2 B 2 B 2

L L

n 1i

ii m

B 2

(1-1)

二进制数的特点是,基数 R=2,数字符号 Bi={0,1},运算规则是“逢二进一”。

例 1-1 写出二进制数 1010.1001B 的多项式表达式。

解: 43210123

2 2120202120212021)1001.1010(

2. 十六进制数

由于二进制数表达一个数时其长度比较长,书写不方便,记忆也不容易,而十六进制

数与二进制数有着天然的联系,即四位二进制数正好表达一位十六进制数,这样,数字的

长度可以被有效地压缩,就克服了二进制数的缺点。与二进制数一样,任意一个十六进制

数 N16均可以表示为:

n 1 n 2 1 0 1 m

1 6 n 1 n 2 1 0 1 mN H 1 6 H 1 6 H 1 6 H 1 6 H 1 6 H 1 6

L L

n 1i

ii m

H 16

(1-2)

十六进制数的特点是,基数 R=16,数字符号 Hi={0,1,2,3,4,5,6,7,8,9,A,

B,C,D,E,F},运算规则是“逢十六进一”。

例 1-2 试将 1001111011001.0011010101101B 用十六进制数来表达。

解:先将题中数的整数部分,从小数点起向左分成四位一组,即 1 0011 1101 1001。如

果最左面的一组数字不满四位,则在其左边添若干“0”,使该组也成四位,变成 0001 0011

1101 1001。接着,将其转换成十六进制数,即 13D9H。

然后,将题中数的小数部分从小数点起向右分成四位一组,即 0011 0101 0110 1。如果

最右面一组数字不满四位,则在其右边添若干“0”,使该组也成四位,变成 0011 0101 0110

1000。接着,将其转换成十六进制数,即 0.3568H。

Page 9: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

9

3. 十进制数

十进制数是人们日常生活中使用最多的数制,我们对其表示和运算都很熟悉,其实,

十进制数与二进制数类似,任意一个十进制数 N10,均可以表示为:

n 1 n 2 1 0 1 m

10 n 1 n 2 1 0 1 mN D 10 D 10 D 10 D 10 D 10 D 10

L L

n 1i

ii m

D 10

(1-3)

十进制数的特点是,基数 R=10,数字符号 Di={0,1,2,3,4,5,6,7,8,9},运

算规则是“逢十进一”。

由于初学者对二进制和十六进制数不太熟悉,往往需要找到二进制数与十进制数的对

应关系,在表 1-1 中,列出了十进制数 0~15 与二进制数和十六进制数的对应关系。

表 1-1 常用十进制数 0~15 与二进制数和十六进制数的对应关系

十进制数 二进制数 十六进制数

0 0000 0

1 0001 1

2 0010 2

3 0011 3

4 0100 4

5 0101 5

6 0110 6

7 0111 7

8 1000 8

9 1001 9

10 1010 A

11 1011 B

12 1100 C

13 1101 D

14 1110 E

15 1111 F

表 1-1 中的内容必须熟记于心,这样才能在以后的二进制数运算中游刃有余。除了这些

数以外,对于二进制数与十进制数之间转换的方法,也是单片机学习者必备的功夫。

4. 十进制数转换为二进制数

十进制数转换为二进制数的基本思路,应该分两步走,即把整数部分和小数部分分别

进行转换,然后再合并起来。

例 1-3 将十进制数 175.625 转换为二进制数。

解:首先,将十进制整数部分转换成二进制整数。

采用“除 2 取余法”。所谓“除 2 取余法”,就是将十进制数的整数反复除以 2,每次

Page 10: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

10

取其余数。若得到的余数为 1,则对应的二进制数的相应位为 1;若得到的余数为 0,则对

应的二进制数相应位为 0。第一次得到的余数是二进制整数的最低位,最后一次余数是二进

制整数的最高位,直至商为 0 为止。具体算法如图 1-4 所示。

图 1-4 把十进制整数转换成二进制整数

由此可得,175=10101111B。

然后,将十进制小数部分转换成二进制小数。

要把十进制小数部分转换成二进制小数,可以采用“乘 2 取整法”。所谓“乘 2 取整”

法,就是将十进制小数部分反复乘 2,每次取其整数,若得到的整数为 1,则对应的二进制

数的相应位为 1;若得到的整数为 0,则对应二进制数相应位为 0。第一次乘 2 得到的整数

是二进制小数的最高位,从高位到低位逐次进行,直到满足精度要求或乘 2 后的小数部分

变 0 为止。具体算法如图 1-5 所示。

图 1-5 把十进制小数转换成二进制小数

由此可得,0.625=0.101B。所以,175.625=10101111.101B。

5. 二进制数转换为十进制数

要将二进制数转换为十进制数,其方法是将二进制数“按权展开求和”,便可得到相

应的十进制数。

例 1-4 将二进制数 101101.1011B 转换成十进制数。

解:101101.1011B=1×25+1×2

3+1×2

2+1×2

0+1×2

-1+1×2

-3+1×2

-4

=32+8+4+1+0.5+0.125+0.0625=45.6875

Page 11: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

11

6. 十进制数转换为十六进制数

与十进制数转换为二进制数类似,十进制数转换为十六进制数的基本思路,也应该分

两步走,即把整数部分和小数部分分别进行转换,然后再合并起来。

十进制整数部分转换成十六进制整数的方法与十进制整数转换为二进制整数类似,采

用“除十六取余法”。十进制小数部分转换成十六进制小数的方法与十进制小数转换为二

进制小数类似,也可采用“乘十六取整法”。

十进制整数部分转换成十六进制整数也可采用间接的方法,即先把十进制数转换为二

进制数,然后再把二进制数转换成十六进制数。

例 1-5 将十进制数 175.625 转换为十六进制数。

解:整数部分的转换如图 1-6 所示。

图 1-6 把十进制整数转换成十六进制整数

小数部分的转换如图 1-7 所示。

图 1-7 把十进制小数转换成十六进制小数

所以,175.625=AF.AH。

如果将数 AF.AH 转换成二进制数,则为 10101111.1010B=10101111.101B。此结果与

例 1-3 相同。例 1-3 与例 1-5 可以相互验证。

1.2.2 常用的码制

现在的电脑不仅能处理数值领域的问题,而且也能处理大量非数值领域的问题。所有

这些信息都必须编成二进制格式的代码,CPU 才能进行处理。数值数据包括定点数、浮点

数、无符号数等。非数值数据包括字母、数字、通用符号、控制符号、汉字等信息,还有

逻辑信息、图形信息、图像信息、语音信息等。这是一个庞大的符号系统。

本小节主要涉及数值数据在计算机内的表示方法。为了说明计算机中数的表示方法,

先说明一些与此有关的概念。

Page 12: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

12

1. 机器数

众所周知,数有很多种类,如整数、小数、正数、负数等。表示这些数都有相应的规

定符号。比如 101101.1011B 是带有小数点的数,-1001100 是一个负数。然而,CPU 只能处

理用“1”或“0”这两种符号表示的数,这就需要将原来数据中的一些符号用一些适合于

CPU 处理的方法来表示。最简单的方法是用一位二进制数的“0”和“1”来表示,用“0”

代表“+”,用“1”代表“-”。并且,将这个符号放在一个二进制数的最高位,称为符号

位。这样,计算机中的符号就被数值化了,用这种方法表达的数,就是所谓的机器数。

小数点的位置在机器数中隐含在一个固定位置,不占用一个数据位。如何约定小数点

的位置,将在定点数中介绍。

例 1-6 设 X=+1100101,Y=-1000101,则它们相应的机器数可分别表示为:

01100101、11000101。

2. 真值

由于机器数将符号进行了数值化,所以机器数的形式值就不等于真正的数值,为了区

别起见,将机器数代表的真正的数值称为真值。

在例 1-6 中,机器数 X 和 Y 的形式值和真值分别为 11000101=197,-1000101=-69。

在计算机中,小数又是如何表示的呢?答案是采用定点数或浮点数的方法。

3. 定点数

小数点在数中位置固定不变的数称为定点数。小数点是隐含约定的,不占用数据位。

根据小数点位置的约定,分为定点小数和定点整数。

(1) 定点小数。

当约定小数点位置在机器数的符号位左侧时,称定点小数。定点小数是绝对值小于 1

的纯小数,数据格式如下所示。

符号位 数值部分(尾数)

‧ 小数点位置

(2) 定点整数。

当约定小数点位置在机器数最低位右侧时,称为定点整数。小数点是隐含约定的,不

占数据位。数据格式如下所示。

符号位 数值部分(尾数) ‧ 小数点位置

本书以后提到的定点数均指定点整数,希望读者注意。

4. 浮点数

小数点在数中的位置不是固定的数,称为浮点数。采用浮点数,是为了扩大数的表示

范围,其表达方式如下:

B=M×RE

其中 M 是尾数,一般为定点小数;R 是底数,因是二进制数,故为 2;E 是指数,也称

Page 13: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

13

为阶码。由于尾数的小数点已固定,故整个数的小数点位置就由指数的大小来决定,而指

数是根据数值的大小而变化的,因此,整个数的小数点位置也是变化的,这就是浮点数的

由来。

有了以上这些概念,对于了解计算机中数的表示方法很有益处。下面具体讨论计算机

中数的表示方法。

5. 无符号数的表示方法

当需要处理的数据是正整数时,采用无符号数的表示方法是效率最高的,省去符号位,

使表达的数值范围更大。若计算机的字长是 8 位,则一个字长的二进制数可表示数的范围

是 0≤N≤28-1。

例 1-7 用 8 位无符号二进制数表示 167、45,然后将这两个数相加。

解:首先将十进制数 167、45 分别转换成 8 位无符号二进制数。

即 167=10100111B,45=00101101B。然后将这两个数相加:

167 = 10100111

+ 45 = 00101101

212 = 11010100B = D4H = 13×16+4 = 208+4 = 212

6. 二-十进制数字编码(BCD 码)

在计算机中,一般是采用编码的方式来表示数的。用四位二进制数编码表示一位十进

制数,称为二-十进制编码,即 BCD 码(Binary Coded Decimal)。它有二进制数的形式,又

有十进制数的特点。

4 位二进制数有 16 个状态,只须用 10 个状态来表示 BCD 码,不同的组合方式可产生

不同的 BCD 码,常用的 BCD 码有 8421 码、2421 码、余 3 码、格雷码等,如表 1-2 所示。

表 1-2 几种 BCD 码

十进制数 8421 码 2421 码 余 3 码 格 雷 码

0 0000 0000 0011 0000

1 0001 0001 0100 0001

2 0010 0010 0101 0011

3 0011 0011 0110 0010

4 0100 0100 0111 0110

5 0101 1011 1000 1110

6 0110 1100 1001 1010

7 0111 1101 1010 1000

8 1000 1110 1011 1100

9 1001 1111 1100 0100

在以上 BCD 码中,8421 BCD 码用最为常用,因为它就是实际的二进制数,所以只要

给出 8421 BCD 码,就能很快得出相应的十进制数。

Page 14: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

14

例 1-8 已知 8421 BCD 码为 001110000101,求其代表的十进制数。

解:先将给定的 BCD 码分组,即 0011 1000 0101,则其代表的十进制数为 385。

由于一个存储器单元一般是存放 8 位二进制数,所以 BCD 码在存储器中的存放形式有

两种。其一是一个存储器单元放一位 BCD 码,放在存储器单元的低 4 位,高 4 位充四个“0”,

这样的 BCD 码称为非压缩 BCD 码。比如十进制数 38,需用两个非压缩 BCD 码表示,即

00000011(03H),00001000(08H)。其二,在一个存储器单元中放两位 BCD 码,这样的 BCD

码称为压缩 BCD 码,则十进制数 38,用压缩 BCD 码表示为 00111000(38H)。

例 1-9 若有两个十进制数 27、48,请将这两个数用 8421 BCD 码表示,并求其和。

解:先将给定的两数分别用压缩 8421 BCD 码表示,27=00100111,48=01001000, 然

后将其相加。

00100111

+ 01001000

01101111

从相加的结果看,低四位是 1111,这并不是 8421 BCD 码。

出现这种情况的原因,是由于计算机在运算时是按二进制数加法规则运算的。因此,

8421 BCD 码在运算时,当其结果的某一位 BCD 码的数值大于 9,或发生进位时,就必须对

该位 BCD 码进行加 6 修正,即:

01101111

+ 00000110

01110101 → 0111 0101 = 75

这样的结果才是 8421 BCD 运算需要的结果。

由此可见,计算机采用 BCD 码进行加法运算时,要注意对结果进行加 6 修正。如果进

行减法运算,当 BCD 码的高 4 位或低 4 位发生借位时,需要对结果进行减 6 修正。

7. 原码

为了提高计算机对数据运算的效率和速度,人们一直在研究二进制数的编码,原码就

是其中之一。原码的特点是,机器数的最高位是符号位,“0”表示正,“1”表示负,其

余位给出数据的绝对值。

原码的定义:设机器数是用 n 位二进制数表示的整数,X 表示真值,则原码的定义可

用下式来表达: n 1

n 1 n 1

0 X 0 X 2 1[X]

2 | X | (2 1) X 0

L L L

L L L原

≤ ≤

≤ ≤

例 1-10 已知 X = -1000100,求用 8 位二进制数表示的原码。

解:根据原码的定义,由于 X< 0,且 n=8,则算法如下。

[X]原 = 27+| X | = 10000000+1000100 = 11000100

原码的性质如下:

[X]原 = 符号位 + |X|。

当 n=8 时,数表示的范围是:-(27-1)≤X≤2

7-1,即-127≤X≤127。

原码的零有两种表示法,若 n=8。则 00000000 和 10000000 均表示零。

Page 15: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

15

原码表示直观,与真值转换容易。但是,原码进行加减运算时,符号位不能同数值位

一样参加运算,运算不方便。

例如,对于 X=-1,Y=1,求 X+Y。采用原码运算的结果为:

显然,结果不合理。

8. 反码

如何使计算机在进行加减法运算时,能连同符号位一起运算呢?采用反码,就可以做

到这一点。

反码的特点,是机器数的最高位为符号位,“0”表示正,“1”表示负。数值部分若

其真值小于零,则将其二进制数真值的绝对值按位取反;数值部分若其真值大于零,则保

持原真值不变。

反码的定义:设机器数是用 n 位二进制数表示的整数,X 表示真值,则反码的定义可

用下式表达: n 1

n 1 n 1

0 X 0 X 2 1[X]

2 | X | (2 1) X 0

L L L

L L L反

≤ ≤

≤ ≤

例 1-11 已知 X=-0000100,Y=0000010,求用 8 位二进制数表示的反码,并求其和。

解:根据反码的定义,由于 X<0,Y>0,且 n=8,则它们的反码分别为:

[X]反 = 28 -1 - | X | = 100000000-1-0000100 = 11111011

[Y]反 = 0+Y = 00000010

它们的和为:

[X]反+[Y]反 = 11111011 + 00000010 = 11111101

以上运算结果转换成真值为,11111101→10000010→-0000010。这与真值运算 X+Y=

-0000100+0000010 = -0000010 的结果是吻合的。

反码的性质如下:

当 n=8 时,数表示的范围是:-(27-1)≤X≤2

7-1,即-127≤X≤127。

反码的零有两种表示法,若 n=8,则 00000000 和 11111111 均表示零。

对于正数,[X]反=[X]原;对于负数,符号位为 1,将原码的其他位按位取反,即得

到反码。

反码进行加减运算时,虽然符号位能同数值位一样参加运算,但当运算发生最高位进

位时,需要对结果做加 1 修正。

例如,若 X=-0000001,Y=00000010,求[X]反+[Y]反,则:

这与实际结果相比,显然少了 1。

Page 16: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

16

9. 补码

为了克服反码在运算中缺点,补码就应运而生了。

补码的定义:设机器数是用 n 位二进制数表示的整数,X 表示真值,则补码的定义可

用下式表达: n 1

n n 1

0 X 0 X 2 1[X]

2 | X | 2 X<0

L L L

L L L补

≤ ≤

或者用一个式子来表示:

[X]补 = 2n + X (Mod 2

n)

求一个数的补码,可以根据定义式来求,也可以用以下简便的方法来求。最高位是符

号位,“0”代表正,“1”代表负。对于正数,补码的数值部分为其真值的数值部分不变;

对于负数,补码的数值部分为其真值的绝对值取反,再加 1,除了 X=-2n-1 以外。

例 1-12 已知 X=-0000100,Y=0001010,求用 8 位二进制数表示的补码,并求其和。

解:根据补码的定义,由于 X<0,Y>0,且 n=8,则它们的补码分别如下。

[X]补 = 28 +X = 100000000 - 0000100 = 11111100

[Y]补 = 0+Y = 00001010

它们的和为:

[X]补 = 11111100

+ [Y]补 = 00001010

00000110 (最高位进位舍去)

以上运算结果转换成真值为:00000110。

这与真值运算 X+Y = -0000100+0001010 = 0000110 的结果是吻合的。

补码的性质如下:

当 n=8 时,数表示的范围是:-27≤X≤2

7-1,即-128≤X≤127。

补码的零只有一种表示法,若 n=8,则为 00000000。

[X]补+[Y]补=[X+Y]补,[X]补-[Y]补=[X]补+[-Y]补=[X-Y]补。这一性质表明,补码运算的

结果仍然是补码,体现了补码运算的完备性。而且补码可以将减法化成加法,这

对于化简 CPU 中运算器的设计是十分有益的。

补码的优点非常多,但缺点是补码表示的数值不太直观,这对于两数运算后是否有溢

出(超出数值范围)的判定比较困难。这就需要另想办法来解决。

有一种直观简便的方法,可以判断补码运算后是否溢出,即采用变形补码的方法。

什么是变形补码呢?就是在原来补码的基础上增加一个符号位,形成双符号位的补码。

判断溢出的规定为:运算结果中,如果两符号位相同,则表示无溢出;如果两符号位相异,

则表示发生溢出。

例 1-13 已知[X]补=01100010,[Y]补=00110101。给出补码的变形补码,计算[X]补+[Y]补,

并判断是否溢出。

解:首先,根据变形补码规定,已知两补码的变形补码分别如下。

[X]变补= 001100010,[Y]变补= 000110101

接下来,继续计算[X]补+[Y]补。

Page 17: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

17

[X]变补 = 001100010

+ [Y]变补 = 000110101

= 010010111

由于运算结果的两符号位不相同,则判断为运算结果发生溢出。另外,从补码表示的

真值运算中也可以得出结论。即[X]补=01100010,X=01100010;[Y]补=00110101,Y=00110101;

X+Y=10010111=128+16+7=151>127,超过了 8 位二进制数补码表达数的范围。

补码运算发生溢出的实质是:运算的结果超出了 n 位二进制补码所表达的数值范围。

判断补码溢出的方法之二,是根据补码的定义,判断补码运算结果是否有溢出。

分以下几种情况来判断补码运算结果是否溢出:

当作加法时,且参加运算的两数是正数,按照补码的定义,运算结果应该仍然为

正数。如果运算结果为负数,则发生了溢出;同理,如果参加运算的两数是负数,

运算结果为正数,则发生了溢出。

当作减法时,且是正数减负数,运算结果为负数,则发生了溢出;同理,如果是

负数减正数,运算结果为正数,则发生了溢出。

当两个正数或两个负数做减法时,其运算结果是不会发生溢出的。

同理,当两个不同符号的数做加法时,其运算结果也是不会发生溢出的。

例 1-14 已知[X]补=01100010,[Y]补=00110101。求[X]补+[Y]补,并判断是否溢出。

解:根据已知条件,对两补码进行加法运算。

[X]补 = 01100010

+ [Y]补 = 00110101

10010111

由于两正数的补码相加结果为负数,则判断为运算结果发生了溢出。

实验一:认识补码

一、实验目的

掌握二进制数补码的表示方法。熟悉 51 系列单片机软件开发工具 Keil Vision2。

二、实验工具

一台电脑,采用软件工具 Keil Vision2。

三、实验内容

运行以下 C 语言程序: signed char Min;

signed char Data_Array[] = {100,32,64,2,1,-1,-2,-32,-64,-100};

void main()

{

signed char x;

unsigned char i;

Page 18: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

18

i = 0;

x = Data_Array[i];

for (i=1; i<10; i++)

{

if(x < Data_Array[i]) { x = Data_Array[i]; }

}

Min = x;

}

四、查看数据

(1) 程序运行后,观察变量 Min 的值。理解计算机是怎样用补码表达数据的。

(2) 单步运行,查看变量 x 值的变化,进一步理解计算机是怎样用补码表达数据的。

五、实验步骤

实验步骤一

(1) 运行 Keil Vision2 软件。

(2) 打开 test1 工程。

(3) 编译、连接 test1 工程。

(4) 单击工具栏上的“调试”按钮。

(5) 将变量 Min 放入窗口 1。

(6) 程序执行前,Min 的值是 0x00。

(7) 程序执行后,Min 的值是 0x9c,即 10011100,是-100 的补码。

实验步骤二

(1) 在实验步骤一完成后,单击“复位”按钮,使程序重新执行。

(2) 单击“单步执行”按钮。

(3) 打开局部变量窗口。

(4) 单击“单步执行”按钮,同时观察和分析变量 x 值的变化。

(5) 反复运行步骤(4),一直到程序执行完毕。

1.3 单片机内部结构概论

在 1.1 节中,已对单片机的由来,单片机与计算机的关系,以及单片机的结构特点,都

一一做了说明。本节就对单片机的内部结构、单片机内部各部件的结构原理和单片机的工

作原理做进一步的阐述。

单片机最初的结构是由 CPU、存储器、一般的 I/O 接口组成的。随着计算机技术的发

展,以及由单片机主要应用于控制的特点决定,现在的单片机内部的典型结构由 CPU、存

储器、一般 I/O 接口、中断系统、定时器/计数器、专用 I/O 接口等组成,如图 1-8 所示。以

下就对单片机内部各部件的结构原理逐一进行介绍。

Page 19: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

19

图 1-8 典型单片机的内部结构

1.3.1 中央处理器 CPU 概论

1. 控制器

控制器的内部结构如图 1-9 所示,其功能主要是执行指令和程序,并协调系统各部件的

工作。为了理解控制器是如何执行指令和程序的,必须了解控制器中的相关部件及功能。

图 1-9 控制器的内部结构

(1) 程序计数器 PC。

程序计数器(Program Counter,PC)是存放指令地址的部件,或者说是指示指令地址的部

件。控制器就是通过它取出存储器中的指令的。程序计数器送出一个地址后自动加 1,以便

Page 20: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

20

形成下一条指令的地址。

(2) 指令寄存器 IR。

顾名思义,指令寄存器(Instruction Register,IR)就是存放指令代码的部件,控制器从存

储器取得的指令代码暂存在这里。

(3) 指令译码器 ID。

指令译码器(Instruction Decoder,ID)是分析指令的部件,控制器通过指令译码器确定指

令的功能。

(4) 微操作信号形成部件。

控制器执行任何一条指令都是根据一系列微操作信号来推动系统各部件动作的,以完

成指令规定的操作。微操作信号形成部件就是产生执行指令信号的部件,系统各部件根据

这些信号,完成指令规定的操作。

(5) 时序电路。

时序电路是控制指令执行节奏的部件,它产生的信号与指令译码器产生的信号一道,

加在微操作信号形成部件上,使得微操作信号形成部件产生一系列有序的、精确的微操作

控制信号。

(6) 地址形成部件。

地址形成部件是产生操作数(数据或地址)地址信息的部件,从而在存储器或寄存器中获

取需要处理的数据。

在控制器内的这 6 个功能部件中,程序计数器可能是一个比较难以理解的部件,这里

做一补充说明。

程序计数器不是一个好名字,它容易使初学者产生误解。与它功能比较贴切的名字应

该叫指令指示器(Instruction Pointer,IP),它用于指明控制器须执行的指令保存在存储器的

哪一个位置,指明控制器执行程序的路线。在程序开始执行时,必须将程序在存储器的首

地址送入 PC,程序运行中,PC 自动加 1,以使 PC 一直指向下次要取的指令代码。

了解了以上控制器内部各部件的功能后,就可以从指令层面上来理解计算机的工作原

理了。计算机的工作过程,可以说是在不断地执行程序的过程,从一个程序执行到另外一

个程序。而程序是由指令组成的,也可以说,计算机工作的过程,是在不断地执行指令的

过程。那么,计算机是怎样执行一条指令的呢?

其实,计算机执行一条指令是分若干个步骤来完成的。对于早期的 CPU,执行一条指

令一般分三步走,即先取指令,再分析指令,最后是执行指令。

① 取指令。

首先,控制器中的程序计数器将指令地址送入地址总线(Address Bus,AB)。地址信息

经地址总线传送到存储器。存储器根据地址信息,将该单元中的指令代码送入数据总线(Data

Bus,DB)(计算机中没有指令总线,指令代码和数据代码都走数据总线),指令代码经数据

总线传送到控制器中的指令寄存器。

② 分析指令。

然后,将指令代码中的操作码部分传送至指令译码器,经指令译码器,对操作码进行

分析,产生与该指令对应的信号。指令代码中的操作数部分经地址形成部件,产生需要被

处理的数据的地址,为执行指令做好准备。

Page 21: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

21

③ 执行指令。

指令译码器产生信号与时序信号一起,加在微操作信号形成部件上,使得微操作信号

形成部件产生一系列有序的、精确的微操作控制信号。系统各部件根据这些信号,完成指

令规定的操作,从而完成指令的执行。

控制器的结构,以及指令执行过程涉及了计算机众多的基本概念,对于今后学习其他

种类的单片机或 CPU 都是非常重要的,因此有必要对这些问题做进一步的阐述。

控制器或 CPU 执行指令时,是按步骤有条不紊地进行的,分三部曲,如下所示:

取指令 分析指令 执行指令

一条指令执行完了,再执行下一条指令,一段程序的执行就是一条条指令累积执行的

结果。如果一条指令执行完了以后,再执行下一条指令,这种执行指令的方式就称为串行

方式,如图 1-10 所示。

图 1-10 指令的串行执行方式

如果第一条指令在完成取指令第一步骤以后,控制器就取第二条指令,取完了第二条

指令就取第三条指令,以此类推,这种指令执行的方式称为并行方式,或称为流水线方式。

如图 1-11 所示。

图 1-11 指令的流水线执行方式

指令的流水线作业方式是目前电脑中 CPU 执行指令的方式,也是一些高级单片机执行

指令的方式,这种指令执行方式的特点,是加快了整个指令序列(程序)的执行速度。关于指

令流水线作业方式的原理,本书不做进一步的介绍,感兴趣的读者可阅读其他有关书籍。

本书涉及的单片机,其处理指令的方式是串行方式。

在指令执行过程中,PC 是一个重要的部件,它的功能有以下三点:

它存放了需要执行的指令在存储器中的地址。

它形成和指明了程序执行路线。

Page 22: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

22

它在完成指令执行的第一步骤(取指令)后,自动将其内容加 1。

控制器除了完成指令的执行这一主要功能外,还担当了对某些异常情况的处理,比如

溢出、校验错误,或内部和外部的中断请求。

2. 运算器

运算器的主要功能,是进行算术运算和逻辑运算。算术运算包括加、减、乘、除。逻

辑运算包括与、或、非等。运算器中的核心部件是算术逻辑运算部件 ALU(Arithmetic Logic

Unit),其他部件有累加器、标志位寄存器、通用寄存器组等,如图 1-12 所示。

图 1-12 运算器的内部结构

运算器中各部件的功能简述如下。

算术逻辑运算部件 ALU:进行算术和逻辑运算。

暂存器:暂时存放将要运算的数据。

累加器 ACC:暂时存放运算的数据和结果。

标志位寄存器:存放数据的特征和运算的状态,作为条件转移指令执行的依据。

运算器的工作也是按步骤进行的。当控制器执行了一条运算指令后,运算器根据控制

器发出的各微操作信号(图 1-12 中已省略),按以下步骤进行。

(1) 通过内部数据总线,将第一个数据送累加器。

(2) 通过内部数据总线,将第二个数据送暂存器,同时,ALU 部件对已送入的数据按

指令要求进行运算。

(3) 将运算的结果按指令要求进行存放。

累加器、标志位寄存器是用户可以访问到的部件,这些部件在编程时都会涉及。

CPU 是计算机中知名度最高的部件,也是反映单片机性能的重要组成部件,体现 CPU

性能的两个主要指标是字长和速度。

字长:字长是 CPU 一次处理的二进制数的位数,可以是 8 位、16 位、32 位、64

位。字长是反映 CPU 一次能处理的信息量的一个指标。

速度:CPU 的速度,传统上是以每秒钟能执行的指令条数来衡量的,如一亿次是

指计算机每秒能执行一亿条指令。现在经常用 CPU 的工作频率来衡量其速度,比

如 2GHz、24MHz 等。

单片机中的 CPU 一般以 8 位字长为主流,工作频率为 12MHz。

Page 23: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

23

1.3.2 存储器概论

存储器系统是计算机中重要的组成部分,其功能是存放计算机工作时所使用的信息,

即程序代码和数据代码。由于有了存储器系统,计算机才有了记忆功能。

1. 存储器分类

随着计算机系统结构的发展,存储器的种类繁多,分类方法也很多,以下就针对存储

器的不同分类方法一一加以介绍。

(1) 按存储器在计算机中的作用和位置分类。

按存储器在计算机中的作用和位置可分为主存储器、辅助存储器和高速缓冲存储器。

① 主存储器。

主存储器就是冯·诺依曼所设计的计算机蓝图中的存储器,用于存放 CPU 需要执行的

程序代码和数据。主存储器是主机的一部分,因此也叫主存或内存。CPU 可直接访问它。

其特点是存取速度快、体积小。电脑中的内存条就是主存储器。

② 辅助存储器。

辅助存储器又称外部存储器,简称辅存或外存。它用于存放需要长期保存的信息。CPU

需通过 I/O 接口才能访问它,因此,从传统的计算机结构来讲,它不属于存储器,而属于输

入/输出设备。比如硬盘、光盘、优盘等。

③ 高速缓冲存储器。

高速缓冲存储器是一种高速存储器,它的存取速度高于计算机中内存条的存取速度一

个数量级,它作为内存的一部分,用于提高计算机的工作速度,一般将计算机中最常用的

程序代码和数据存放于此。

(2) 按存储器的工作方式分类。

按存储器的工作方式,可分为随机存储器和只读存储器。

① 随机存储器。

随机存储器(Random Access Memory,RAM)是一种 CPU 可直接存取信息的存储器,也

叫读/写存储器。其特点是 CPU 能直接访问,便于 CPU 快速地执行程序和存取数据。

这里顺便说一下对存储器“存取”的概念。

所谓“存取”,包含了对存储器的两种操作。其中,“存”表示将信息存放在存储器

中;而“取”,表示将存储器中的内容取出来。另外一种对存储器操作的表示叫“读/写”,

其中“读”操作对应于“取”操作,而“写”操作对应于“存”操作。

随机存储器一般有两种,一种叫动态 RAM,其特点是存储容量大、价格便宜,但存取

速度较慢;另一种叫静态 RAM,其特点是存取速度快,但存储容量较小、价格高。因此,

内存条采用动态 RAM,而高速缓冲存储器采用静态 RAM。

虽然随机存储器具有信息存取方便的特点,但是,随机存储器中的信息也有易失的特

点。计算机只要一断电,随机存储器内的数据就会消失。

② 只读存储器。

只读存储器(Read Only Memory,ROM)是一种 CPU 只能直接读取其内部的信息、不可

Page 24: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

24

直接存入信息的存储器。其特点是存入的信息不易消失。即使断电,ROM 内部的信息仍然

被保存着。根据 ROM 的特点,计算机中的 BIOS 采用 ROM,单片机中的程序代码也存放

在 ROM 中。

单片机中,存放指令/程序的存储器采用 ROM 存储器,原因有两个:首先,单片机应

用系统一般没有硬盘,因此,应用程序必须存放在非易失的存储器中,这样才能保证系统

断电时程序不会丢失;其次,单片机应用系统的程序是单一的专用程序,系统在运行时不

需要调换存储器中的程序。

ROM 也有不同的种类,举例说明如下。

PROM:可编程只读存储器(Programmable ROM,PROM),可通过编程器一次性地

将程序代码和数据代码固化在 ROM 中。

EPROM:可擦拭可编程只读存储器(Erasable Programmable ROM,EPROM),可多

次擦掉其内部信息,可重新通过编程器将程序代码和数据代码固化在 ROM 中。

E2PROM:电可擦拭可编程只读存储器(Electrical Erasable Programmable ROM,

E2PROM),可用电多次擦掉它内部的信息,可重新通过编程器将程序代码和数据

代码固化在 ROM 中。

Flash:快速电擦拭可编程只读存储器(即闪存)。

为了更清楚地了解计算机存储器系统的分类,可参阅图 1-13 的说明。

图 1-13 存储器的分类

2. 存储器的结构原理

电脑中的存储器是用来存放二进制数信息的,下面以 4×8 的随机存储器为例,来说明

存储器的工作原理,如图 1-14 所示。

(1) 首先说明一下存储器内部各部件的功能。

① 存储体。

存储体是存储器的主要部件,所有的信息都放在里面。该存储体有 4 个单元,每一个

单元有 8 位。

Page 25: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

25

图 1-14 存储器的内部结构

② 地址缓冲器。

地址缓冲器是存储器接收来自地址总线的地址信息的部件。

③ 地址译码器。

地址译码器是存储器分析地址信息的部件,根据地址缓冲器中的地址信息,产生选择

存储器单元的信号。

④ 数据缓冲器。

数据缓冲器是存储器接收/发送数据的部件。它外接系统的数据总线,内接存储器单元

的各个位。

⑤ 控制电路。

控制电路是存储器完成“读/写”操作的控制部件。由它向存储器内的各部件发送控制

信号,使各部件完成相应的操作。

(2) 存储器的工作过程也是按步就班进行的,具体过程如下所述。

① 存储器先接收来自地址总线的地址信息(如 A1A0=10),并存放于地址缓冲器中。

② 地址译码器对接收到的地址信息进行分析,并产生访问存储器单元的选择信号。

在本例中,产生了访问 2 号单元的选择信号,打开该单元。

③ 如果是进行写操作,则控制电路发信号给数据缓冲器,使其让来自数据总线的数

据进入数据缓冲器,然后将该数据写入被打开的存储单元(2 号单元)。如果是进行读操作,

则控制电路发信号给数据缓冲器,使其让来自 2 号单元的数据放入数据缓冲器,然后将该

数据发送至数据总线。

从以上的存储器结构原理中可知,存储体中以八位二进制数的长度作为一个单元,单

元数的多少体现了存储器的容量。对存储器的访问必须按地址进行。地址线数与存储器的

容量的关系为 2n,n 是地址线数,则 2

n是存储器的容量。在图 1-14 中,地址线数为 2(A1、

A0),其容量(单元数)为 22,等于 4。依此类推,2

10=1024=1KB,1KB 容量的存储器有 10 根

地址线;220

=1024×1024=1MB,1MB 容量的存储器有 20 根地址线;230

=1024×1MB=1GB,

1GB 容量的存储器有 30 根地址线。

计算机中有一个衡量二进制数长度的术语,叫字节(Byte),其含义是八位二进制数的长

度,即 1Byte=8Bit。

Page 26: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

26

(3) 体现存储器性能的主要指标是容量和存取周期。

① 容量。

容量是反映存储器大小的技术指标。对于电脑来说,似乎是越大越好,然而,对于单

片机却并非如此。存储器越大,单片机体积也就越大,不符合嵌入性的要求。

② 存取周期。

存取周期就是指存储器完成读一个数据或写一个数据操作所需要的整个时间,它反映

了存储器读/写数据的速度。

单片机中的存储器,其容量不能与电脑中的存储器容量相比,因为它要满足嵌入性的

要求,主要存放控制程序,所以它的容量一般为 8KB。

1.3.3 输入/输出接口概论

由图 1-3 可知,在微型计算机结构中,输入/输出(I/O)接口是 I/O 设备连接于计算机系

统的媒介,也就是说,I/O 设备想要与计算机连接,必须经过 I/O 接口。为什么 I/O 设备不

能像存储器一样直接连接到系统总线呢?主要有以下原因:

I/O 设备种类繁多,可以是机械式、电动式、电子式以及其他形式的。

I/O 设备输入/输出的信号各式各样,可以是数字信号、模拟信号、并行信号、串行

信号等。

I/O 设备输入/输出信号的速度不一样,可能是手动键盘输入信号,也可能是扫描仪

电动输入信号等。

如果没有接口,多个 I/O 设备将直接连在系统总线上,这样会使总线上信息过载,

影响数据的传送。

如前所述,计算机只能与并行的数字信号直接打交道。如何才能使计算机与这些电气

性能不同、速度不同、信息格式不同的设备相连呢?解决的办法只能是在计算机与设备之

间加入一个转换控制电路,实现信号的转换及传输速度的匹配,从而使计算机能正确地与

不同的 I/O 设备之间传输信息。由此可见,I/O 接口应具备以下功能。

(1) 数据缓冲的功能:由于计算机中的 CPU 传送数据的速度远高于 I/O 设备,所以接

口必须协调 CPU 与 I/O 设备在传送数据速度上的差异。

(2) 数据隔离的功能:由于计算机一般需接若干个 I/O 设备,而几个设备不能同时与计

算机交换信息,不进行数据交换的设备必须与系统“断开”,也就是与系统隔离。

(3) 数据转换的功能:由于计算机只能与并行的数字信号直接打交道,而 I/O 设备输入

/输出的信号各式各样,所以接口必须将设备的信号转换成并行的数字信号,同时,将计算

机中的并行数字信号转换成设备所需的信号。

单片机配置的接口与微型计算机系统配置的接口有所不同,单片机主要用于控制,而

不是用于数据处理,因此,接口除了一般并行接口和串行接口以外,单片机接口应具有单

线控制的能力。当然,单片机配备一些特殊的接口也是提升单片机应用能力有效方法。

为了提高单片机应用的能力,单片机厂商不断地往单片机里加各种各样的专用功能部

件,比如定时器/计数器(CTC)、看门狗(Watchdog Timer)、脉冲宽度调制器(PWM)等。因此,

Page 27: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

27

单片机的 I/O 接口也是单片机内部各功能部件与外部被控对象联系的桥梁。

1.4 单片机产品概述

自从 1976 年 Intel 公司推出了世界上第一片单片机芯片 8048 后,单片机的发展也从 4

位机、8 位机,一直发展到了 64 位机。单片机的应用从控制领域拓展到了网络、通信、多

媒体等领域。

1.4.1 单片机产品的类型

单片机的生产商从美国的 Intel 公司迅速扩展到世界各地,如 Philips 公司、东芝公司、

Microchip 公司、Atmel 公司等。各个厂商推出的单片机产品种类繁多。目前究竟有哪些系

列的单片机被用户广泛使用呢?据调查,市场上用得最多的单片机主要有 51 系列、AVR 系

列、PIC 系列和 ARM 系列。

1. 51 系列

Intel 公司的 51 系列在市场上占有相当大的比例,这与它优秀的性能分不开。51 系列的

优点诸多,它有完整的按位操作系统,除了能进行传送、置位、清零、测试等操作外,还

能进行位逻辑操作。I/O 脚的设置简单,使用方便。随着技术的发展,其运行速度越来越快,

晶振频率可从以前的 12MHz 提升到 40MHz,并引入了 ISP 功能。ISP 功能实现了在线可编

程功能,可以省去通用的编程器,单片机在用户板上即可下载和烧录用户程序,加快了产

品的开发速度,减少了新产品因软件缺陷带来的风险。

2. AVR 系列

AVR 单片机是 Atmel 公司推出的单片机,其显著的特点是高速度、低功耗。它取消了

机器周期,以时钟周期为指令周期实行作业。AVR 单片机指令以字为单位,且大部分指令

都为单周期指令。在单周期内,既可执行本指令功能,又可以完成下一条指令的读取。通

常时钟频率为 4~8MHz,故最短指令执行时间为 250~125ns。

AVR 系列没有类似累加器 ACC 的结构,它主要是通过 R16~R31 寄存器来实现 ACC 的

功能。在 AVR 中,没有像 51 系列的数据指针 DPTR,而是由 X、Y、Z 三个 16 位的寄存

器来完成数据指针的功能。

3. PIC 系列

PIC 单片机系列是美国微芯公司(Microchip)的产品,是当前市场份额增长最快的单片机

之一。CPU 采用 RISC 精简指令集,分别有 33、35、58 条指令(视单片机的级别而定)。采

用 Harvard 双总线结构,运行速度快(指令周期约 160~200ns),采用指令流水线结构,使程

序存储器的访问和数据存储器的访问并行处理。此外,它还具有低工作电压、低功耗、驱

动能力强等特点。PIC 系列单片机共分三个级别,即基本级、中级、高级。PIC 系列单片机

的 I/O 口是双向的,其输出电路为 CMOS 互补推挽输出电路。I/O 脚增加了用于设置输入或

Page 28: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

单片机原理、实验和接口教程(第 2版)

28

输出状态的方向寄存器,当置位 1 时为输入状态,且不管该脚呈高电平或低电平,对外均

呈高阻状态;置位 0 时为输出状态,不管该脚为何种电平,均呈低阻状态,有相当的驱动

能力。并具有在线调试及编程(ISP)功能。

4. ARM 系列

ARM 公司位于英国,由 Acom、苹果公司和 VLSI 公司联合出资。ARM 公司本身不生

产芯片,是靠转让设计许可实现盈利的,它设计的芯片由联合伙伴公司生产各具特色的芯

片。ARM 公司专注于设计,其内核耗电少、成本低、功能强,具有 16 位/32 位双指令集。

ARM 已成为移动通信、手持电脑、多媒体数字产品嵌入式解决方案的标准。80%的手

机采用 ARM 内核的芯片。

1.4.2 单片机产品的应用

在本章的最后,就嵌入式计算机的应用情况做一说明,这对初学者把握学习方向非常

重要。嵌入式计算机的应用主要分为两个层面,即低端应用模式和高端应用模式。

1.低端应用模式

嵌入式计算机系统起源于微型机时代,在单片机时代,嵌入式系统以器件形态迅速进

入到传统电子技术领域中,以实现传统电子系统的智能化。研发人员以通晓应用对象专业

的电子技术队伍为主,并非由计算机专业的人才来担当研发工作。所用的嵌入式计算机以 8

位机为主,用最少的嵌入式系统软、硬件开销完成特定的控制任务。这种应用模式会长期

存在下去。

2.高端应用模式

随着后 PC 时代的到来,网络、通信技术得以发展,嵌入式计算机的应用从控制领域扩

展到特定的数据处理领域。同时,嵌入式系统的软、硬件技术也更加复杂,这就需要有更

多的计算机专业知识,才能完成相应的任务。

这两种应用模式本不应有“高”、“低”之分,主要还是应从实际出发,根据应用对

象来决定采用哪种应用模式,如果不分青红皂白,全都采用高端嵌入式计算机,则是对资

源的浪费。

本 章 小 结

本章从早期计算机结构谈起,一直谈到单片机,从而使初学者能够了解计算机系统的

结构框架知识,了解单片机与计算机之间互相联系的渊源,了解单片机与日常电脑的相同

之处和不同之处,最终明确单片机的应用范围——控制领域。

对于单片机知识的初学者来说,从本章学到的东西包括:

单片机的结构来自于计算机系统的结构,单片机是将原来计算机中的 CPU、内存、

I/O 接口集成在一块芯片中。

Page 29: CPU - Tsinghua · 输入输出接口的作用。 学习目标: 了解单片机的特点。 掌握补码表示数据的方法及其运算。 掌握cpu 执行指令的步骤。 掌握存储器存取数据的过程。

第 1章 单片机基础知识

29

单片机即嵌入式系统,单片机与嵌入式系统是同一个事物的两个不同称呼而已。

补码表示数的优点在于,数据可以直接运算,可以将减法化成加法来做,从而使

运算器的结构大为化简。

CPU 的功能是执行程序和统筹处理计算机系统中的各类事务。

CPU 执行指令是严格按步骤进行的,主要分取指令、分析指令和执行指令三步。

存储器是根据 CPU 发出的地址信息,以及保存或读取的操作信号,来存取二进制

数据代码的。

I/O 接口具有缓冲、隔离、转换的功能。

本章通过学习单片机产品概论,让读者更加了解了学习本书的目的和意义。

思考与练习

1. 复习思考题

(1) 说明 CPU 的功能,以及 CPU 是如何执行指令和程序的。

(2) 说明单片机内部主要是由哪些部件组成的,并说明各部件的作用。

(3) 对于容量为 8KB 的存储器芯片,它的地址线是多少根?

(4) 将十进制数 78、134 分别用二进制数、十六进制数和 8421 BCD 码来表示。

2. 综合训练题

(1) 将下列真值分别转化为用 8 位和 16 位二进制数表示的原码、反码和补码。

① X=1000100 ② X= -1000100, ③ X= -0111111

(2) 将下列补码转化成二进制数的真值。

① [X]补=00101100 ② [X]补=11111111 ③ [X]补=10000000

(3) 已知下列补码[X]补和[Y]补,分别求[X+Y]补、[X-Y]补,并判断运算结果是否溢出。

① [X]补=10011001、[Y]补=00101100

② [X]补=11111111、[Y]补=10000000

③ [X]补=00110111、[Y]补=11100000

④ [X]补=10000111、[Y]补=11000000