Transcript
Page 1: 单片机原理及基于单片机的 嵌入式系统设计

单片机原理及基于单片机的嵌入式系统设计蔡方凯 主 编

中国水利水电出版社

Page 2: 单片机原理及基于单片机的 嵌入式系统设计

绪 论 在工业、农业、军事、保安、金融、仪器仪表、航空航天、医疗、通讯、办公设备、娱乐休闲、健身、体育竞赛、服务领域…… ,大量单片机 -嵌入式技术已经无处不在。正迅速改变着人们传统的生产和生活方式。 请稍微留心一下我们的周围,看看身边到底发生了什么变化?

Page 3: 单片机原理及基于单片机的 嵌入式系统设计

单片机技术的应用遍布国民经济与人民生活的各个领域

Page 4: 单片机原理及基于单片机的 嵌入式系统设计

1.1 微型计算机系统结构输出输入 存储器

控制器

指令

功能模块 数据信号线 控制信号线

数据

运算器

Page 5: 单片机原理及基于单片机的 嵌入式系统设计

微机的工作过程按照“程序存储,程序控制”的方式工作。程序存储是指用户根据实际应用需要将程序编写完毕,并将程序的机器码存放在存储器中。用户编程的根本目的是要求计算机能够按照用户需求一步步的执行该段程序。那么计算机如何能够理解用户程序,并按要求去执行该段程序呢?这就是程序控制。程序控制是指 CPU 内的控制器按照用户程序中的指令顺序,从存储器中取出指令,并分析指令的功能,进而发出各种控制信号,指挥计算机中的各类部件来执行该指令。这种通过取指令、分析指令、执行指令的操作重复执行,直到完成程序中的全部指令操作为止。

1.2 微型计算机工作过程

Page 6: 单片机原理及基于单片机的 嵌入式系统设计

一、如何将程序的机器码存储到程序存储器中?二、如何将程序的机器码从程序存储器中取出?三、当 CPU 完成从程序存储器中读出程序的机器码后,如何执行该语句?

按照“程序存储,程序控制”的方式工作,微机必须解决以下几个问题:

Page 7: 单片机原理及基于单片机的 嵌入式系统设计

对 51 单片机而言,将程序存储到程序程序器中则相对复杂,必须利用 51 单片机芯片厂家提供的专用设备(烧写器)来完成,市场上有专门的单片机烧写器销售。烧写器实际上就是完成对程序存储器的写操作。利用烧写器可以将用户程序的机器码存储到单片机中。

1.2.1 如何将程序机器码烧写到程序存储器中对于普通 PC 而言,其程序存放在硬盘中,此时面临的问题就是将文件、程序内容写入硬盘,在 Windows操作系统中提供了图形化的操作环境,读者不必了解对硬盘的写操作原理,仅需要按“保存”按钮或“保存”菜单就可以很方便的完成该操作。

Page 8: 单片机原理及基于单片机的 嵌入式系统设计

1.2.2 如何将程序从程序存储器中取出 1 最基本的计算机组成 2 存储器 3 非常简单的 CPU 设计与实现4 如何从程序存储器中取程序数据

Page 9: 单片机原理及基于单片机的 嵌入式系统设计

一台简单的计算机通常包括三个主要的子系统,中央处理单元( CPU )、存储系统(用来存储 CPU 正在执行的程序和数据)、输入 / 输出子系统(如键盘、显示等)

1 最基本的计算机组成

CPU 存储系统

I/O子系统

地址线数据线

控制

Page 10: 单片机原理及基于单片机的 嵌入式系统设计

计算机系统采用了三总线结构。从物理上说,总线是一组导线,计算机的部件都是连在总线上的,为了将信息从一个部件传到另一个部件,源部件先将数据输出到总线上,然后目标部件在从总线上接收这些数据。● 地址总线:与其他总线不同,地址总线是单向的,地址总线的内容总是由 CPU 送到地址总线上,而 CPU不读取地址总线上的数据。例如,当 CPU 从存储器读取数据或指令,或写数据到存储器时,必须指明要访问的存储器单元地址, CPU 输出地址内容到地址总线上,而存储器从地址总线上读取地址,并且用它来访问正确的存储单元。对应 I/O 子系统,比如键盘、显示等,都有一个唯一的地址,当访问某个 I/O 子系统时, CPU 将此设备的地址放到地址总线上,每一个设备均从总线上读取地址并且判断自己是不是 CPU 正要访问的设备。若不是则不作任何响应,若是则和 CPU 进行相应的数据传输。

Page 11: 单片机原理及基于单片机的 嵌入式系统设计

● 数据总线: 数据是通过数据总线来传送的,当CPU 从存储器中读取数据时,它首先把需要访问的存储器地址输出到地址总线上,发出读操作命令,然后存储器从地址总线上读取地址,并根据地址访问相应的存储单元,同时将该存储器单元中的数据输出到数据总线上,这样 CPU 就可以从数据总线上读取数据了。当 CPU 向存储器写入数据时,它首先输出地址到地址总线上,发出写操作命令,然后输出数据到数据总线上,这样存储器就可以从数据总线上读取数据并将它存储到正确的存储单元中。当访问某个 I/O 子系统时其数据总线功能类似于对存储器的访问。● 控制总线:控制总线是控制信号的集合,这些信号用来控制数据要读入 CPU 还是要写入 CPU, CPU要访问存储器还是访问 I/O 子系统等。

Page 12: 单片机原理及基于单片机的 嵌入式系统设计

答:只有数据总线,没有地址和控制总线,则通信方式只能采用“广播通信方式”,若只有数据和控制总线,没有地址总线,则每个外部设备都必须有控制总线,若外部设备多,则控制总线就必须增加,控制总线必然称为外部设备扩展的“瓶颈”。若没有地址总线,对应存储器而言,在没法确定当前数据需要存放在存储器的那个地址单元中。

问 1 、为什么需要三总线,只有数据总线不可以?

问 2 、鼠标、键盘是外部 IO 设备,为什么不是三总线?答:在计算机中硬件设计了三总线协议和 PS/2或USB协议的接口转换电路,即将并行数据改为串行数据传输方式

Page 13: 单片机原理及基于单片机的 嵌入式系统设计

存储器用于存储数据的一组电路,虽然在设计中它不是严格的组合电路,一个存储器元件有多个存储单元,每个单元存储固定长度的二进制值,不同的存储器芯片,其存储单元的数量和大小也不相同,存储器芯片存储容量大小由单元数乘以每个单元的位数确定。存储器一般分为随机读写存储器( RAM)和只读存储器( ROM )。

2 存储器

Page 14: 单片机原理及基于单片机的 嵌入式系统设计

随机存取存储器( RAM- Random Access Memory ):简称随机存储器或读写存储器。是一种既能写入又能读出数据的存储器。但当机器断电或关机时,存储器中存储的信息会立即消失。只读存储器( ROM- Read Only Memory ):是计算机内部一种只能读出数据信息而不能写入信息的存储器。但当机器断电或关机时,只读存储器中的信息不会丢失。

Page 15: 单片机原理及基于单片机的 嵌入式系统设计

存储器可以形象的把它理解成装了很多元件盒的元件储存柜,元件储存柜放很多元件盒,每个元件盒中放不同的元件,当用户需要某一元件时,必须知道该元件放在那个元件盒中,即需要对元件盒进行编号,否则只能一个个元件盒查找。对应于存储器,编号即为存储器的地址,元件盒内的元件就是存储数据。例如一个大小为 512×8 位的存储器芯片有 512 个存储单元,每个单元 8 位就可以理解成元件柜共 512 个元件盒,那么如果想找到对应的元件盒里的元件就必须对元件盒进行编号,若采用二进制编号,则 512 个单元共需要 9 位二进制,即对应存储器的地址。 对元件盒里元件个数可以采用 8 位计数,即一个元件盒最多可存放 255个元件,即可以得到对应元件盒中的数据信息。

Page 16: 单片机原理及基于单片机的 嵌入式系统设计

存储器芯片的地址输入选择它其中的一个单元,有个单元的存储器芯片需要 N 位的地址输入,通常标记A【 N- 1…0】,对于大小为 512×8 位的存储器芯片而言,其地址总线为 A【 8...0】。存储器芯片中的数据引脚常用于访问数据,数据总线的每一位都有一个引脚,对于 M位的数据总线在,这些引脚通常标记为 D【M- 1…0】,对于大小为512×8位的存储器芯片而言,其数据总线为D【 7...0】。 问:为什么数据总线不是三根?答:若数据总线是三根,则存储器中存储的数据最大只能为 8 ,若数据总线 8 根,则存储的数据最大为 256

Page 17: 单片机原理及基于单片机的 嵌入式系统设计

这一节描述和设计一个非常简单的 CPU ,这个CPU 在现实中是没有任何应用价值的,因为它太简单了,但是目的是为了读者理解 CPU 的具体工作原理。为了说明 CPU 的设计过程,考虑一个小型的有点不实用的 CPU ,这款 CPU 的特点是:

◆ CPU 仅能够访问 64字节的存储空间(程序存储器和数据存储器共用)◆ 每个字节是 8 位◆ CPU 只包含一个程序员可以访问的寄存器,即一个标记为 ACC的 8 位累加器

3 非常简单的 CPU 设计与实现

Page 18: 单片机原理及基于单片机的 嵌入式系统设计

指令集通常由三大类指令组成,传送类指令、运算(包括逻辑运算)类指令、转移类指令三部分组成。在这款 CPU 中,仅设计 4 条指令,按照等长编码模块, 利 用高二位对 指 令 类型进 行 编 码 ,低 6 位AAAAAA表示地址线,如下表 1 - 1 所示。 MOV指令代表“传送类”指令, ADD 指令代表“运算类 ” 指 令 , AND 指 令代表“逻辑运算 类 ” 指令, LJMP 指令代表“转移类”指令。

该 CPU 的指令集

Page 19: 单片机原理及基于单片机的 嵌入式系统设计

指令 操作码 操作

AND

LJMP

MOV 00

10

11

ADD 01

AC M[AAAAAA]

AC AC+M[AAAAAA]

AC AC^M[AAAAAA]

GOTO AAAAAA

表1-1 系统指令集

Page 20: 单片机原理及基于单片机的 嵌入式系统设计

对上面这个 CPU 而言,可以说:麻雀虽小,五脏具全,从系统结构的指令集设计而言,这个系统包括运算类、传送类、转移类、逻辑运算类指令。根据该款 CPU 的特点,可以看出该 CPU 可访问 64字节的存储器空间,所以其地址总线是 A[5...0] 。由于每个字节是 8 位,所以其数据总线为 D[7…0] 。

CPU 设计到这里,还缺什么?除了 ACC累加器以外, CPU 还需要一些其他的寄存器,以便完成取数据、译码和执行指令所必须的内部操作,这些寄存器为:

Page 21: 单片机原理及基于单片机的 嵌入式系统设计

一个 6位的程序计数器( PC ),它的内容为将被执行的指令在程序存储器中的存储地址。一个 6位的地址寄存器( AR ), CPU 不能直接将地址信息送往地址总线, CPU 首先将地址信息送给地址寄存器 AR, AR 通过地址总线 A[5...0] 向存储器提供地址。一个 8位的数据寄存器( DR ), CPU 不能直接将数据信息送往数据总线, CPU 首先将数据信息送给数据寄存器 DR, DR 通过数据总线 D[7…0] 从存储器读写指令数据。一个 2位的指令寄存器( IR ),它用来存放从存储器中取回指令的操作码。至此,一个简单的 CPU 总算设计完成,一个CPU 该有的都有了,能够完成一些简单的操作。

Page 22: 单片机原理及基于单片机的 嵌入式系统设计

在 CPU 能够执行某条指令之前,它必须将这条指令从存储器中取出来, CPU 从程序存储器中取程序数据的具体操作过程◆ 将当前要执行指令的存储地址送到程序计数器中,由于地址总线 A【 5..0】的内容必须从地址寄存器送出,因此第一步就是要把程序计数器 PC 的内容拷贝到 AR 中,这样,取指令周期的第一步状态就是: 第一步: AR←PC

4 如何从程序存储器中取程序数据

Page 23: 单片机原理及基于单片机的 嵌入式系统设计

◆ CPU 从存储器中读取指令数据: CPU 必须发一个 READ 信号,该信号从 CPU 控制总线输出到存储器控制总线上, CPU给存储器足够的时间按照 CPU 提供的地址访问相应的存储单元 M ,同时存储器将访问的数据(即指令的机器码)发送到数据总线 D【 7…0】上,CPU 通过数据总线将这些数据读入并且存储到DR 中。实际上另一个操作也将在这里完成,增加程序计数器,以便能访问下一条指令。所以第二步实际上是完成如下操作。其中(M )表示存储单元 M 中的内容。 第二步: DR←(M ), PC←PC+1

Page 24: 单片机原理及基于单片机的 嵌入式系统设计

◆ 上述两步完成后, CPU已经得到程序的机器码,作为取指令的一部分, CPU 还必须完成两件事情,首先,它必须将 DR 的高两位拷贝到 IR ,这两位表示那条指令将要执行,同时在取指令阶段 CPU将 DR 的低6位拷贝到 AR 中,这样这两个操作可以表示如下。 第三步: IR←DR[7..6] , AR←DR[5..0]完成上面三步操作后, CPU 将程序存储器内容取出,其高二位存放在指令寄存器 IR 中,为操作码信息,通过 IR 的值可以判断该指令为四条指令中的哪一条。低 6 存放在地址寄存器AR 中,为执行指令操作的操作数的地址编码。例如进行 ADD加法操作,则必须以 AR 单元的内容为地址去访问存储器,并取出该存储单元的内容和累加器 ACC 中的内容进行相加,那么如何以 AR 单元的内容为地址去访问存储器,该存储单元的内容又是如何得到呢?即 CPU 完成 对存储器的读操作。

Page 25: 单片机原理及基于单片机的 嵌入式系统设计

◆ CPU以 AR 单元的内容为地址去访问存储器,从存储器中读取操作数。 CPU 发一个读信号,该信号从 CPU 控制总线输出到存储器控制总线上, CPU给存储器足够的时间按照 CPU 提供的AR 单元的内容作为地址访问相应的存储单元,同时存储器将访问的数据(即指令的操作数)发送到 D【 7...0】上, CPU 通过数据总线将这些数据读入并且存储到 DR 中。所以第四步实际上是完成如下操作。( AR )表示以 AR 单元的内容为地址所对应的存储单元的内容。 第四步: DR←( AR )

Page 26: 单片机原理及基于单片机的 嵌入式系统设计

1.2.3 CPU 读出指令码和操作数后如何执行 当 CPU 把一条指令从存储器中取出来以后,它必须判断所取的是那条指令,对于这个最简单的 CPU而言,有四条指令,根据等长编码原理,可以将四条指令依次编码为 00, 01, 10, 11 。指令寄存器 IR的值由当前指令类型决定,指令寄存器 IR 中的值将决定调用那个执行周期,

IR=00

MOV执行周期 AND执行周期ADD执行周期 LJMP执行周期

IR

IR=01 IR=10 IR=11

Page 27: 单片机原理及基于单片机的 嵌入式系统设计

为执行“传送类”指令, CPU 必须完成两件事情。首先必须从存储器中取出一个操作数,然后将这个操作数送入累加器中。操作数的取值通过对存储器的读操作已经将操作数取出。现在两个操作数分别放在 ACC和 DR 中,因此对于 ADD 指令,主要进行下面的操作。第五步: MOV : ACC←DR当前指令执行完毕后,开始取下一条指令。即将当前 PC值送入 AR 中,重新开始下一条指令的执行。

1 MOV 指令执行周期

Page 28: 单片机原理及基于单片机的 嵌入式系统设计

为执行“加法”指令, CPU 必须完成两件事情。首先必须从存储器中取出一个操作数,然后必须将这个操作数和累加器中当前的值相加,并把结果存回到累加器中。操作数的获取通过第四步对存储器的读操作已经完成。现在两个操作数分别放在 ACC和 DR 中,因此对于 ADD 指令,主要完成下面的操作。第五步: ADD : ACC←ACC+ DR

2 ADD 指令执行周期

Page 29: 单片机原理及基于单片机的 嵌入式系统设计

与加法指令类似,为执行“与操作”指令,CPU 必须完成两件事情。首先必须从存储器器中取出一个操作数,然后必须将这个操作数和累加器中当前的值相“与”操作,并把结果存回到累加器中。现在两个操作数都在 ACC和DR 中,因此对于 AND 指令,主要进行下面的操作。第五步: AND : ACC←ACC DR∧

3 AND 指令执行周期

Page 30: 单片机原理及基于单片机的 嵌入式系统设计

由于 LJMP 指令中不需要操作数,所以 LJMP 指令与上述三条指令执行略有不同,不需要第四步操作。CPU 只需要完成将要跳转的目标地址送给程序计数器即可。因此与上述指令第四和第五步操作不同, LJMP 指令执行周期相对简单,由于地址已经存储在 AR ,仅需要将 AR 的值送给 PC 指针,因此对于 LJMP 指令,仅需要如下操作即可。第四步: LJMP : PC←AR 为了更形象的说明上述过程,可以用图来说明所设计的 CPU 的状态图,包括了取指、译码和执行周期。

4 LJMP 指令执行周期

Page 31: 单片机原理及基于单片机的 嵌入式系统设计
Page 32: 单片机原理及基于单片机的 嵌入式系统设计

1.3 单片机发展历史1971年 intel公司研制成功世界上第一台 4位微处理器;

1973年 intel公司研制成功 8080 8位微处理器 ;

1976年 intel公司推出 MCS-48 系列 8位单片机 ;80年代初在 MCS-48 单片机基础上推出 MCS-51 系列单片机。

Page 33: 单片机原理及基于单片机的 嵌入式系统设计

计算机系统通常由多块印刷电路板制成:

多板机 主板

显卡 声卡 存储器接口网卡输入输出接口

内存条 CPU

Page 34: 单片机原理及基于单片机的 嵌入式系统设计

CPUCPU 芯片内存条存储器接口

存储器芯片输入输出接口输入输出接口芯片定时计数器芯片 A/D、 D/A芯片

单板机 印

刷 电

路 板

Page 35: 单片机原理及基于单片机的 嵌入式系统设计

单 硅

晶 片

CPU存储器控制电路 定时器时钟电路

I / O 口

单片机

Page 36: 单片机原理及基于单片机的 嵌入式系统设计

1.4 单片机发展趋势1 低功耗 CMOS 化 2 微型单片化 3 主流与多品种共存

Page 37: 单片机原理及基于单片机的 嵌入式系统设计

1 小巧灵活、成本低,易于产品化。它能方便的组装成各种智能化的控制设备及各种智能仪器仪表。2 面向控制,能针对性地解决从简单到复杂的各类控制任务,因而能获得最佳的性能价格比。3 抗干扰能力强,适应温度范围宽,在各种恶劣的环境条件下都能可靠地工作,这是其他机种无法比拟的。4 可以很方便地实现多机和分布控制。使整个控制系统的效率和可靠性大为提高。

1.5 单片机特点

Page 38: 单片机原理及基于单片机的 嵌入式系统设计

Intel 公司:8048 、 8051 ( 8位); 8096 ( 16位); 80960 ( 32位)。Motorola 公司:MC-6801( 8位); 68H16( 16位);68HC332( 32位)。另外日本 NEC公司;荷兰 Philips公司等由于 8位单片机基本能满足目前大多数应用系统的要求,所以目前 8位单片机仍是应用主流。

1.6 主要单片机厂商

Page 39: 单片机原理及基于单片机的 嵌入式系统设计

MCS-51 是指由美国 INTEL公司生产的一系列单片机的总称,这一系列单片机包括了很多品种,如 8031 , 8051 , 8751 , 8951 , 8032 , 8052 , 8752 , 8952 等,其中 8051是最早最典型的产品,该系列其它单片机都是在 8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用 8051来称呼MCS-51 系列单片机,而 8031是早些年在我国最流行的单片机,所以很多场合会看到 8031的名称。

MCS-51 系列

Page 40: 单片机原理及基于单片机的 嵌入式系统设计

INTEL公司将 MCS-51 的核心技术授权给了很多其它公司,所以有很多公司在做以 8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中 89C51 就是这几年在我国非常流行的单片机,它是由美国ATMEL公司开发生产的。

AT89 系列

Page 41: 单片机原理及基于单片机的 嵌入式系统设计

补充 单片机的开发过程1、任务分析2、设计并制作硬件3、编写软件。在编写软件之前,首先要确定一些常数、地址,然后用文本编缉器编写软件,编写好后,用编译器对源程序文件编译、查错,直到没有语法错误4、应用仿真机对软件进行调试,直到程序运行正确5、运行正确后,就可以写片(将程序固化在 EPROM 中)

Page 42: 单片机原理及基于单片机的 嵌入式系统设计

仿真是单片机开发过程中非常重要的一个环节,除了一些极简单的任务,一般产品开发过程中都要进行仿真,仿真的主要目的是进行软件调试,当然借助仿真器,也能进行一些硬件排错。一块单片机应用电路板包括单片机部份及为达到使用目的而设计的应用电路,仿真就是利用仿真器来代替应用电路板(称目标机)的单片机部份,对应用电路部份进行测试、调试。 仿真分软件模拟仿真和利用仿真器仿真两类。

仿真、仿真器

Page 43: 单片机原理及基于单片机的 嵌入式系统设计

软件模拟仿真 是指用仿真软件来模拟单片机运行情况,一般我们学习指令系统时常用这种方式,它不能进行硬件系统的调试和故障诊断。利用仿真器仿真 利用仿真器以及微机可以进行软硬件系统的调试和故障诊断。在仿真调试过程中,可以以各种运行方式运行程序(断点、单步、跟踪),还可以观察到单片机内部存储器、寄存器等的状态。

Page 44: 单片机原理及基于单片机的 嵌入式系统设计

源程序 ORG 0000H LJMP START ORG 040HSTART: NOP LOOP: NOP LJMP LOOP ;循环 END ;结束

目标文件也就是最终写入EPROM 的文件:02 00 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FF 00 00 02 00 41 FF FF FF

举例说明 ( 完成一段空操作程序)

Page 45: 单片机原理及基于单片机的 嵌入式系统设计

问:如何学习单片机?1、了解单片机外部硬件接口以便设计硬件电路2、熟悉单片机指令系统和程序设计方法学习单片机的方法:1、预习、复习;2 、多动手(硬件、软件实验);3 、多看参考书 (包括利用网上资料 );4、其它(上课、作业、答疑)


Recommended