资源预览内容
第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
第9页 / 共45页
第10页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
单片机原理及基于单片机的 嵌入式系统设计,蔡方凯 主 编,中国水利水电出版社,绪 论,在工业、农业、军事、保安、金融、仪器仪表、航空航天、医疗、通讯、办公设备、娱乐休闲、健身、体育竞赛、服务领域,大量单片机-嵌入式技术已经无处不在。正迅速改变着人们传统的生产和生活方式。 请稍微留心一下我们的周围,看看身边到底发生了什么变化?,单片机技术的应用遍布国民经济与人民生活的各个领域,1.1 微型计算机系统结构,微机的工作过程按照“程序存储,程序控制”的方式工作。 程序存储是指用户根据实际应用需要将程序编写完毕,并将程序的机器码存放在存储器中。用户编程的根本目的是要求计算机能够按照用户需求一步步的执行该段程序。那么计算机如何能够理解用户程序,并按要求去执行该段程序呢?这就是程序控制。 程序控制是指CPU内的控制器按照用户程序中的指令顺序,从存储器中取出指令,并分析指令的功能,进而发出各种控制信号,指挥计算机中的各类部件来执行该指令。这种通过取指令、分析指令、执行指令的操作重复执行,直到完成程序中的全部指令操作为止。,1.2 微型计算机工作过程,一、如何将程序的机器码存储到程序存储器中? 二、如何将程序的机器码从程序存储器中取出? 三、当CPU完成从程序存储器中读出程序的机器码后,如何执行该语句?,按照“程序存储,程序控制”的方式工作,微机必须解决以下几个问题:,对51单片机而言,将程序存储到程序程序器中则相对复杂,必须利用51单片机芯片厂家提供的专用设备(烧写器)来完成,市场上有专门的单片机烧写器销售。烧写器实际上就是完成对程序存储器的写操作。利用烧写器可以将用户程序的机器码存储到单片机中。,1.2.1 如何将程序机器码烧写到程序存储器中,对于普通PC而言,其程序存放在硬盘中,此时面临的问题就是将文件、程序内容写入硬盘,在Windows操作系统中提供了图形化的操作环境,读者不必了解对硬盘的写操作原理,仅需要按“保存”按钮或“保存”菜单就可以很方便的完成该操作。,1.2.2 如何将程序从程序存储器中取出,最基本的计算机组成 存储器 非常简单的CPU设计与实现 如何从程序存储器中取程序数据,一台简单的计算机通常包括三个主要的子系统,中央处理单元(CPU)、存储系统(用来存储CPU正在执行的程序和数据)、输入/输出子系统(如键盘、显示等),1 最基本的计算机组成,计算机系统采用了三总线结构。从物理上说,总线是一组导线,计算机的部件都是连在总线上的,为了将信息从一个部件传到另一个部件,源部件先将数据输出到总线上,然后目标部件在从总线上接收这些数据。 地址总线:与其他总线不同,地址总线是单向的,地址总线的内容总是由CPU送到地址总线上,而CPU不读取地址总线上的数据。例如,当CPU从存储器读取数据或指令,或写数据到存储器时,必须指明要访问的存储器单元地址,CPU输出地址内容到地址总线上,而存储器从地址总线上读取地址,并且用它来访问正确的存储单元。对应I/O子系统,比如键盘、显示等,都有一个唯一的地址,当访问某个I/O子系统时,CPU将此设备的地址放到地址总线上,每一个设备均从总线上读取地址并且判断自己是不是CPU正要访问的设备。若不是则不作任何响应,若是则和CPU进行相应的数据传输。, 数据总线: 数据是通过数据总线来传送的,当CPU从存储器中读取数据时,它首先把需要访问的存储器地址输出到地址总线上,发出读操作命令,然后存储器从地址总线上读取地址,并根据地址访问相应的存储单元,同时将该存储器单元中的数据输出到数据总线上,这样CPU就可以从数据总线上读取数据了。当CPU向存储器写入数据时,它首先输出地址到地址总线上,发出写操作命令,然后输出数据到数据总线上,这样存储器就可以从数据总线上读取数据并将它存储到正确的存储单元中。当访问某个I/O子系统时其数据总线功能类似于对存储器的访问。 控制总线:控制总线是控制信号的集合,这些信号用来控制数据要读入CPU还是要写入CPU,CPU要访问存储器还是访问I/O子系统等。,答:只有数据总线,没有地址和控制总线,则通信方式只能采用“广播通信方式”, 若只有数据和控制总线,没有地址总线,则每个外部设备都必须有控制总线,若外部设备多,则控制总线就必须增加,控制总线必然称为外部设备扩展的“瓶颈”。 若没有地址总线,对应存储器而言,在没法确定当前数据需要存放在存储器的那个地址单元中。,问1、为什么需要三总线,只有数据总线不可以?,问2、鼠标、键盘是外部IO设备,为什么不是三总线?,答:在计算机中硬件设计了三总线协议和PS/2或USB协议的接口转换电路,即将并行数据改为串行数据传输方式,存储器用于存储数据的一组电路,虽然在设计中它不是严格的组合电路,一个存储器元件有多个存储单元,每个单元存储固定长度的二进制值,不同的存储器芯片,其存储单元的数量和大小也不相同,存储器芯片存储容量大小由单元数乘以每个单元的位数确定。 存储器一般分为随机读写存储器(RAM)和只读存储器(ROM)。,2 存储器,随机存取存储器(RAMRandom Access Memory):简称随机存储器或读写存储器。是一种既能写入又能读出数据的存储器。但当机器断电或关机时,存储器中存储的信息会立即消失。 只读存储器(ROMRead Only Memory):是计算机内部一种只能读出数据信息而不能写入信息的存储器。但当机器断电或关机时,只读存储器中的信息不会丢失。,存储器可以形象的把它理解成装了很多元件盒的元件储存柜,元件储存柜放很多元件盒,每个元件盒中放不同的元件,当用户需要某一元件时,必须知道该元件放在那个元件盒中,即需要对元件盒进行编号,否则只能一个个元件盒查找。对应于存储器,编号即为存储器的地址,元件盒内的元件就是存储数据。 例如一个大小为5128位的存储器芯片有512个存储单元,每个单元8位就可以理解成元件柜共512个元件盒,那么如果想找到对应的元件盒里的元件就必须对元件盒进行编号,若采用二进制编号,则512个单元共需要9位二进制,即对应存储器的地址。 对元件盒里元件个数可以采用8位计数,即一个元件盒最多可存放255个元件,即可以得到对应元件盒中的数据信息。,存储器芯片的地址输入选择它其中的一个单元,有个单元的存储器芯片需要N位的地址输入,通常标记 A【N10】,对于大小为5128位的存储器芯片而言,其地址总线为A【8.0】。 存储器芯片中的数据引脚常用于访问数据,数据总线的每一位都有一个引脚,对于M位的数据总线在,这些引脚通常标记为D【M10】,对于大小为5128位的存储器芯片而言,其数据总线为D【7.0】。,问:为什么数据总线不是三根?,答:若数据总线是三根,则存储器中存储的数据最大只能为8,若数据总线8根,则存储的数据最大为256,这一节描述和设计一个非常简单的CPU,这个CPU在现实中是没有任何应用价值的,因为它太简单了,但是目的是为了读者理解CPU的具体工作原理。 为了说明CPU的设计过程,考虑一个小型的有点不实用的CPU,这款CPU的特点是: CPU仅能够访问64字节的存储空间(程序存储器和数据存储器共用) 每个字节是8位 CPU只包含一个程序员可以访问的寄存器,即一个标记为ACC的8位累加器,3 非常简单的CPU设计与实现,指令集通常由三大类指令组成,传送类指令、运算(包括逻辑运算)类指令、转移类指令三部分组成。在这款CPU中,仅设计4条指令,按照等长编码模块,利用高二位对指令类型进行编码,低6位AAAAAA表示地址线,如下表11所示。MOV指令代表“传送类”指令,ADD指令代表“运算类”指令,AND指令代表“逻辑运算类”指令,LJMP指令代表“转移类”指令。,该CPU的指令集,对上面这个CPU而言,可以说:麻雀虽小,五脏具全,从系统结构的指令集设计而言,这个系统包括运算类、传送类、转移类、逻辑运算类指令。 根据该款CPU的特点,可以看出该CPU可访问64字节的存储器空间,所以其地址总线是A5.0。由于每个字节是8位,所以其数据总线为D70。 CPU设计到这里,还缺什么?除了ACC累加器以外,CPU还需要一些其他的寄存器,以便完成取数据、译码和执行指令所必须的内部操作,这些寄存器为:,一个6位的程序计数器(PC),它的内容为将被执行的指令在程序存储器中的存储地址。 一个6位的地址寄存器(AR),CPU不能直接将地址信息送往地址总线,CPU首先将地址信息送给地址寄存器AR,AR通过地址总线A5.0向存储器提供地址。 一个8位的数据寄存器(DR),CPU不能直接将数据信息送往数据总线,CPU首先将数据信息送给数据寄存器DR,DR通过数据总线D70从存储器读写指令数据。 一个2位的指令寄存器(IR),它用来存放从存储器中取回指令的操作码。 至此,一个简单的CPU总算设计完成,一个CPU该有的都有了,能够完成一些简单的操作。,在CPU能够执行某条指令之前,它必须将这条指令从存储器中取出来,CPU从程序存储器中取程序数据的具体操作过程 将当前要执行指令的存储地址送到程序计数器中,由于地址总线A【50】的内容必须从地址寄存器送出,因此第一步就是要把程序计数器PC的内容拷贝到AR中,这样,取指令周期的第一步状态就是: 第一步: ARPC,4 如何从程序存储器中取程序数据, CPU从存储器中读取指令数据:CPU必须发一个READ信号,该信号从CPU控制总线输出到存储器控制总线上,CPU给存储器足够的时间按照CPU提供的地址访问相应的存储单元M,同时存储器将访问的数据(即指令的机器码)发送到数据总线D【70】上,CPU通过数据总线将这些数据读入并且存储到DR中。实际上另一个操作也将在这里完成,增加程序计数器,以便能访问下一条指令。所以第二步实际上是完成如下操作。其中(M)表示存储单元M中的内容。 第二步: DR(M), PCPC1, 上述两步完成后,CPU已经得到程序的机器码,作为取指令的一部分,CPU还必须完成两件事情,首先,它必须将DR的高两位拷贝到IR,这两位表示那条指令将要执行,同时在取指令阶段CPU将DR的低6位拷贝到AR中,这样这两个操作可以表示如下。 第三步: IRDR76, ARDR50 完成上面三步操作后,CPU将程序存储器内容取出,其高二位存放在指令寄存器IR中,为操作码信息,通过IR的值可以判断该指令为四条指令中的哪一条。低6存放在地址寄存器AR中,为执行指令操作的操作数的地址编码。例如进行ADD加法操作,则必须以AR单元的内容为地址去访问存储器,并取出该存储单元的内容和累加器ACC中的内容进行相加,那么如何以AR单元的内容为地址去访问存储器,该存储单元的内容又是如何得到呢?即CPU完成 对存储器的读操作。, CPU以AR单元的内容为地址去访问存储器,从存储器中读取操作数。CPU发一个读信号,该信号从CPU控制总线输出到存储器控制总线上,CPU给存储器足够的时间按照CPU提供的AR单元的内容作为地址访问相应的存储单元,同时存储器将访问的数据(即指令的操作数)发送到D【7.0】上,CPU通过数据总线将这些数据读入并且存储到DR中。所以第四步实际上是完成如下操作。(AR)表示以AR单元的内容为地址所对应的存储单元的内容。 第四步: DR(AR),1.2.3 CPU读出指令码和操作数后如何执行,当CPU把一条指令从存储器中取出来以后,它必须判断所取的是那条指令,对于这个最简单的CPU而言,有四条指令,根据等长编码原理,可以将四条指令依次编码为00,01,10,11。指令寄存器IR的值由当前指令类型决定,指令寄存器IR中的值将决定调用那个执行周期,,为执行“传送类”指令,CPU必须完成两件事情。首先必须从存储器中取出一个操作数,然后将这个操作数送入累加器中。操作数的取值通过对存储器的读操作已经将操作数取出。现在两个操作数分别放在ACC和DR中,因此对于ADD指令,主要进行下面的操作。 第五步:MOV:
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号