单片机与嵌入式系统600问(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-06 17:40:26

点击下载

作者:林凌

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

单片机与嵌入式系统600问

单片机与嵌入式系统600问试读:

内容简介

“职场新生代实用电子技术问答系列”丛书收集了高年级本科学生、研究生在实验和课题研究过程中的电路问题,还包括工作不久的工程技术人员在新产品研发或产品维护中遇到的大量问题,并进行了解答。这些问题中的绝大多数是电子领域工程技术人员必然会遇到的。问题涉及面广,解答深入,对电子、机电、测控和仪器仪表类专业的大学生掌握电子电路理论、提高实践能力有很大帮助,同时对从事电子领域工作的工程技术人员也有很高的参考价值。

本书主要包括单片机与嵌入式系统基础知识、系统硬件、系统软件,总线与串行接口、无线通信,各种类型的单片机与嵌入式系统及特殊单片机、单片机与嵌入式系统的开发与应用等方面内容,这些知识的重要性是不言而喻的。实际上,是否具备全面的单片机与嵌入式系统知识与足够的开发能力决定了测控系统、仪器仪表等任何一个现代化装置与系统的性能,甚至开发的成败。序言INTRODUCTION

毋庸置疑,“测控电路”是工科院校中开设最多的专业课程之一,学习人数众多。其原因在于测控电路在现代生活中的应用到了无所不在的地步,不论是工业、交通运输,还是国防、科研,即使在人们的日常生活中也无处不在,如冰箱、空调器、自动路灯、电子人体秤、电磁炉、护眼灯中都存在测控电路。可以说,只要用电的地方,就有测控电路的存在。因此,学习并掌握好测控电路,必将在参加工作后能够大展拳脚,建功立业。

但是,“测控电路”既有很强的理论性,又有很强的实践性。因此,在学习时不仅需要刻苦钻研理论知识,而且要努力实践。更为困难的是,测控电路涉及的专业知识面宽,又在迅速发展,这就使得没有哪本教科书或参考书能够为读者提供足够的知识、经验及解惑释疑。加上测控电路的深度和广度都超乎一般人的想象:从理论到实践不说,从元器件、单元电路、各种系统到测量仪器的理想特性与实际特性,从模拟仿真到实际测试,从核心器件到辅助器材,从实验电路、原理样机到批量生产的工艺,从现在仍然发挥作用的晶体三极管到新近普及的SoC(片上系统集成电路)……其中任何一项知识与能力的或缺都将影响一位电子工程师的水准与实力。本丛书就是为使职场新生代迅速成为电子达人而编写的。

我们一直从事“测控电路”的教学和相关科研工作,在教学过程中,深深感受到实践对学好“测控电路”的重要性和“学以致用”在今天的素质教育中的重要性。在引导学生加强实践的同时,我们收集了大量学生在学习“测控电路”中,特别是在实验中提出的各种各样的问题,也有很多问题是我们课题组的研究生或我们学院的研究生们提出的,还有部分是在网络上BBS中讨论的问题。因此,这些问题的覆盖面广,而且是学生或工作不久的工程技术人员所提出的,这样能够更好地反映学习和应用“测控电路”中所遇到的问题,针对性更强,对读者的帮助更大。

在这些问题中,有相当数量的问题回答是由学生自己给出的,只要没有错误,我们尽量保留这些问答,觉得学生(或初学者)的“自问自答”可能更有利于读者明白这些问题。

由于这些问题涉及面广,所以在符号、表达式、电路图等方面就难以统一。例如,在相关课程“电路”或“电路原理”中使用的符号、表达式与“模拟电子技术”中的就不一样,在计算机辅助设计、仿真相关课程中使用的又有不同。本书中只要能够准确地表示和表达,就不追究符号、表达式、电路图的统一,也许这样能够更好地帮助读者理解和掌握。

问题的分类也是一个难有统一标准的事情。例如,精密放大器的PCB布局是算放大器的问题还是PCB布局问题?只好根据作者的理解和侧重把这些问题进行分类。另一个让作者棘手的问题是有些问题可以从不同的层面和角度来回答,如果都集中在一个问题里回答,可能这个问题就成为一篇大论文,让读者感到烦闷、枯燥,而细分开来,又会有一定的重叠。我们倾向于后一种方式,这样读起来可能更轻松,信息量也更大一些,看问题的角度也更全面一些。

为了尽可能穷尽目前学习和应用测控电路可能遇到的问题,本丛书将数以万计的问题进行分类,以方便读者的查找和阅读。

本丛书是依靠群众的力量完成的,有近200位本科生、120多位研究生贡献了他们的力量,特别是我们课题组的研究生,更是直接参与了本丛书的整理工作,他们是杨雪、张林娜、张盛昭、刘妍、刘洋、贺建满、焦彬、贺文钦、徐思佳、胡雅佳、王怀乐、李泽云、张启蕊、李淑娟、彭瑶和刘红艳。没有他们的辛勤努力是不可能完成本书编写的,在此谨向他们致以深深的谢意!编者前言PREFACE

本书作为“职场新生代实用电子技术问答系列”丛书的第五册,主要包括单片机与嵌入式系统的基础知识,系统硬件,系统软件,各种类型的单片机与嵌入式系统,单片机与嵌入式系统中的通信总线、单片机与嵌入式系统的开发与应用等方面的内容。这些关于单片机与嵌入式系统知识的重要性是不言而喻的。实际上,一个测控系统、仪器仪表中一定有“单片机与嵌入式系统”,单片机与嵌入式系统的性能与作用决定了测控系统或仪器仪表的性能,甚至成败。在电子技术上天入地、无所不在的今天,对于一个电子工程师而言,掌握单片机与嵌入式系统的知识和相应的应用,其重要性怎样强调都不过分。虽然职场新生代在校学习期间已经学习了单片机或嵌入式系统的课程,但对单片机与嵌入式系统知识的掌握和应用能力还是十分有限的。本书的目的就是要帮助他们尽快地了解和掌握单片机与嵌入式系统的实际知识。

本书收集了高年级本科生、研究生在实验和课题研究工作中的单片机与嵌入式系统及其应用问题,还包括最新的单片机与嵌入式系统的知识,了解这些问题对电子、机电、测控和仪器仪表类专业的大学生掌握单片机与嵌入式系统的理论、提高实践能力有很大帮助,同时对从事电子领域工作的工程技术人员也有很高的参考价值。

本书收集的问题可能从不同的角度、层面提出,因而有不少问题有一定程度的重叠,但回答问题也有多种角度、不同层面,这样可能更有助于读者理解和体会这些问题和相关知识。

本书共包括七部分,郝丽玲博士编写了第一部分,乔文博士编写了第二部分,王慧泉博士编写了第三部分,陈瑞娟博士编写了第四部分,刘玉良博士编写了第五部分,赵喆博士编写了第六部分,刘近贞博士编写了第七部分。全书由林凌教授和李刚教授主编、整理和统稿。编者2016年春于北洋园第一部分 单片机与嵌入式系统基础知识001 什么是哈佛结构?哈佛结构有哪些特点?

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构(见图1-1)。哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。与两个存储器相对应的是系统的4条总线,即程序的数据总线与地址总线、数据的数据总线与地址总线。这种分离的程序总线和数据总线可允许在一个机器周期内同时获得指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,进而提高了数据的吞吐率。又由于程序和数据存储在两个分开的物理空间中,因此取址和执行能完全重叠。中央单片机首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度。图1-1 哈佛结构

哈佛结构的计算机由CPU、程序存储器和数据存储器组成,程序存储器和数据存储器采用不同的总线,从而提供了较大的存储器带宽,使数据的移动和交换更加方便,尤其提供了较高的数字信号处理性能。

哈佛结构的微单片机通常具有较高的执行效率,其程序指令和数据指令分开组织和存储,执行时可以预先读取下一条指令。

哈佛结构是指程序和数据空间独立的体系结构,目的是为了减轻程序运行时的访存瓶颈。

例如,最常见的卷积运算中,一条指令同时取两个操作数,在流水线处理时,同时还有一个取指操作,如果程序和数据通过同一条总线访问,取指和取数必会产生冲突,而这对大运算量的循环的执行效率是很不利的。

哈佛结构能基本上解决取指和取数的冲突问题,而对另一个操作数的访问就只能采用改进的(Enhanced)哈佛结构了。例如,像TI公司生产的微处理器那样,数据区再分区(Split),并多一组总线,或像ADI公司的DSP那样,采用指令cache,指令区可存放一部分数据。

哈佛结构与冯·诺依曼结构单片机相比,单片机有两个明显的特点:使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,而这两条总线之间毫无关联。002 什么是改进的(Enhanced)哈佛结构?

改进的哈佛结构特点为:使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存,以便实现并行处理;具有一条独立的地址总线和一条独立的数据总线,利用公用地址总线访问两个存储模块(程序存储模块和数据存储模块),公用数据总线则被用来完成程序存储模块或数据存储模块与CPU之间的数据传输,两条总线由程序存储器和数据存储器分时共用。003 什么是冯·诺依曼结构?冯·诺依曼结构有哪些特点?

最早的计算机仅内含固定用途的程序。现代的某些计算机依然维持这样的设计方式,通常是出于简化或教育目的考虑的。例如,一个计算机仅有固定的数学计算程序,它不能被拿来当作文书处理软件,更不能拿来玩游戏。若想要改变此机器的程序,必须更改线路、更改结构,甚至重新设计此机器。当然最早的计算机并没有设计成那种可编程化的。当时所谓的“重写程序”很可能指的是纸笔设计程序步骤,接着制订工程细节,再进行施工将机器的电路配线或结构改变。

而储存程序型计算机的概念改变了这一切。借由创造一组指令集结构,并将所谓的运算转化成一串程序指令的执行细节,而让此机器更有弹性。接着将指令当成一种特别形态的静态资料,一台储存程序型计算机可轻易改变其程序,并在程控下改变其运算内容。

冯·诺依曼结构与储存程序型计算机是互相通用的名词,其用法将于下述。而哈佛结构则是一种将程序资料与普通资料分开储存的设计概念。

储存程序型概念也可让程序执行时自我修改程序的运算内容。本概念的设计动机之一就是可让程序自行增加内容或改变程序指令的内存位置,因为早期的设计都要使用者手动修改。但随着索引暂存器与间接位置存取变成硬件结构的必备机制后,本功能就不如以往重要了。而程序自我修改这项特色也被现代程序设计所弃用,因为它会造成理解与除错的难度,且现代中央单片机的管线与快取机制会让此功能效率降低。

从整体而言,将指令当成资料的概念使得组合语言、编译器与其他自动编程工具得以实现;可以用这些“自动编程的程序”以人类较易理解的方式编写程序;从局部来看,强调I/O的机器,如Bitblt,想要修改画面上的图样,以往认为若没有客制化硬件就办不到。但之后显示这些功能可以借由“执行中编译”技术而有效实现。

此结构当然有所缺陷,除了下面将述的冯·诺依曼瓶颈之外,修改程序很可能是具伤害性的,无论无意还是设计错误。在一个简单的储存程序型计算机上,一个设计不良的程序可能会伤害自己、其他程序甚或是操作系统,导致死机。缓冲区溢位就是一个典型例子。而创造或更改其他程序的能力也导致了恶意软件的出现。利用缓冲区溢位,一个恶意程序可以覆盖呼叫堆栈(Callstack)并覆写程序码,并且修改其他程序档案以造成联锁破坏。内存保护机制及其他形式的存取控制可以保护意外或恶意的程序码改动。

冯·诺依曼结构单片机具有以下几个特点:(1)必须有一个存储器。(2)必须有一个控制器。(3)必须有一个运算器,用于完成算术运算和逻辑运算。(4)必须有输入设备和输出设备,用于进行人机通信。另外,程序和数据统一存储,并在程序控制下自动工作。004 什么是冯·诺依曼瓶颈?

冯·诺依曼结构将CPU与内存分开并非十全十美,反而会导致所谓的冯·诺依曼瓶颈(von neumann bottleneck):在CPU与内存之间的流量(资料传输率)与内存的容量相比相当小,在现代计算机中,流量与CPU的工作效率相比非常小,在某些情况下(当CPU需要在巨大资料上执行一些简单指令时),资料流量就成了整体效率非常严重的限制。CPU将会在资料输入或输出内存时闲置。由于CPU速度及内存容量的成长速率远大于双方之间的流量,因此瓶颈问题越来越严重。而冯·诺依曼瓶颈是约翰·巴科斯在1977年ACM图灵奖得奖致词时第一次提到的,根据巴科斯所言:“……确实有一个变更储存装置的方法,比借由冯·诺依曼瓶颈流通大量资料更先进。瓶颈这词不仅是对于问题本身资料流量的叙述,更重要的是使我们的思考方法局限在‘一次一字符’模式的智能瓶颈。它使我们怯于思考更广泛的概念。因此,编程成为一种计划与详述通过冯·诺依曼瓶颈的字符资料流,且大部分的问题不在于资料的特征,而是如何找出资料。”

在CPU与内存间的快取内存疏解了冯·诺依曼瓶颈的效能问题。另外,分支预测(branch predictor)算法的建立也帮助缓和了此问题。巴科斯在1977年论述的“智能瓶颈”已改变甚多,且巴科斯对于此问题的解决方案并没有造成明显影响。现代的函数式编程及面向对象编程已较少执行,如早期的Fortran一般会“将大量数值从内存搬入/搬出的操作”,这些操作的确占用计算机大部分的执行时间。005 什么是程序寄存器?

程序寄存器用于保存应用程序代码,同时还可以用于保存程序执行时用到的数据(如保存查表信息)。

单片机内部的程序寄存器一般为1~64KB,通常是只读存储器,因为单片机应用系统大多数是专用系统,因此一旦研制成功,其软件也就定性,程序固化到只读存储器,用只读存储器作为程序存储器,掉电以后程序不会丢失从而提高系统的可靠性;另外,只读存储器集成度高、成本低,根据单片机内部程序存储器类型的不同又可分为下列产品。(1)ROM型单片机。这种单片机内部具有工厂掩膜的只读程序储存器ROM,其是定制的,一般价格最低,用户将调试好的程序代码交给厂商,厂商在制作单片机时把程序固化到ROM内,而用户是不能修改ROM中代码的。这种单片机价格最低,但生产周期较长,适用于大批量生产。(2)EPROM型单片机。这种单片机内部具有EPROM型程序存储器,对于有窗口的EPROM型单片机,可以通过紫外线擦除器擦除EPROM中的程序,用编程工具把新的程序代码写入EPROM,且可以反复擦除和写入,使用方便,但价格贵,适合于研制样机。对于无窗口的EPROM型单片机,只能写一次,称为OTP型单片机。OTP型单片机的价格也比较低,既适用于样机研制,也适用于批量生产。(3)FLASH Memory型单片机。这种单片机内部含有FLASH Memory型程序存储器,用户可以用编程器对FLASH Memory存储器进行快速整体擦除和逐个字节写入,这种单片机价格也低,使用方便,是目前最流行的单片机。006 什么是单片机掩膜?

单片机掩膜是指程序数据已经做成光刻板,在单片机生产过程中把程序做进去。优点是程序可靠、成本低。缺点是生产或购买批量要求大,每次修改程序就需要重新做光刻板,不同程序不能同时生产,供货周期长。

在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是在硅片上选定的区域中对一个不透明的图形模板进行遮盖,继而下面的腐蚀或扩散将只影响选定区域以外的区域。007 单片机的I/O编址有哪两种?

在不同的微机系统中,I/O端口的地址编排有两种形式:存储器统一编址和I/O独立编址。(1)存储器统一编址。I/O端口作为存储器(空间)的一部分,其占用存储器的部分地址,可以采用存储器的操作指令来访问。(2)I/O独立编址。I/O端口编址和存储器的编址相互独立,即I/O端口地址空间和存储器地址空间分开设置,互不影响。采用这种编址方式,对I/O端口的操作使用输入/输出指令(I/O指令)。

I/O独立编址的优点是:不占用内存空间;使用I/O指令,程序清晰,很容易看出是I/O操作还是存储器操作;译码电路比较简单(因为I/O端口的地址空间一般较小,所用地址线也就较少)。其缺点是:只能用专门的I/O指令,访问端口的方法不如访问存储器的方法多。008 什么是存储器地址?

存储器地址(memory address)是存储器中存储单元的编号。由于存储器中存储单元数量很多,为了进行查找,需要给每个存储单元赋予一个存储器地址。

定义:

存储器地址是存储器中存储单元的编号。

存储器由大量存储单元组成,需要用编号区别每个单元:编号=地址。

每个存储单元存放一个字节量的数据:

一个字节B(Byte)=8个二进制位b(bit)。

地址表示方法:

采用十六进制数来表示地址。

常用4个十六进制的数来表示一个地址。

存储器地址表示为0000H~FFFFH。

其中大写H(或小写h)表示是十六进制数。009 什么是存储单元?

在计算机中最小的信息单位是bit,也就是一个二进制位,8个bit组成一个Byte,也就是字节。一个存储单元可以存储一个字节,也就是8个二进制位。计算机的存储器容量是以字节为最小单位来计算的,对于一个有128个存储单元的存储器,可以说它的容量为128字节。

如果有一个1KB的存储器,则它有1024个存储单元,它的编号为从0~1023。存储器被划分成若干个存储单元,每个存储单元都是从0开始顺序编号的,如一个存储器有128个存储单元,则它的编号就是从0~127。

存储地址一般用十六进制数表示,而每一个存储器地址中又存放着一组二进制(或十六进制)表示的数,通常称为该地址的内容。值得注意的是,存储单元的地址和地址中的内容的意思是不一样的。前者是存储单元的编号,表示存储器总的一个位置,而后者表示这个位置里存放的数据,正如一个是房间号码,另一个是房间里住的人一样。

存放一个机器字的存储单元,通常称为字存储单元,相应的单元地址叫字地址。而存放一个字节的单元,称为字节存储单元,相应的地址称为字节地址。如果计算机中可以编址的最小单元是字存储单元,则该计算机称为按字寻址的计算机。如果计算机中可编址的最小单元是字节,则该计算机称为按字节寻址的计算机。如果机器字长等于存储器单元的位数,由于一个机器字可以包含数个字节,所以一个存储单元也可以包含数个能够单独编址的字节地址。例如,一个16位二进制的字存储单元可存放两字节,可以按字地址寻址,也可以按字节地址寻址。当用字节地址寻址时,16位的存储单元占两个字节地址。010 什么是十六进制?

十六进制是计算机中数据的一种表示方法。它的规则是“逢十六进一”。

进位制/位置计数法是一种计数方式,故也称进位计数法/位置计数法,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数(radix)或底数,基数为n,即可称为n进位制,简称n进制。现在最常用的是十进制,通常使用10个阿拉伯数字0~9进行计数。

对于任何一个数,均可以用不同的进位制来表示。比如,十进制数57(10),可以用二进制表示为111001(2),也可以用五进制表示为212(5),也可以用八进制表示为71(8),用十六进制表示为39(16),它们所代表的数值都是一样的。

数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。计算机是信息处理的工具,任何信息必须转换成二进制形式数据后才能由计算机进行处理、存储和传输。

十六进制数具有下列两个特点:

英文字母A、B、C、D、E、F分别表示数字10~15。

计数到F后,再增加1个,就进位。

十六进制数是计算机常用的一种计数方法,它可以弥补二进制数书写位数过长的不足,也用于电视机中。

十六进制数的表示方式为0x开头。

示例:0xAF=175

十六进制数的基数是16,采用的数码是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中A~F分别表示十进制数字10~15,十六进制数的计数规则是“逢十六进一”,它的各位的权是以16的N次方标识的。通常,对十六进制数的表示可以在数字的右下角标注16或H,但在C语言中是在数的前面加数字0和字母X即0X来表示的。例如,12AF在C语言中表示为0X12AF。

十六进制数的加减法的进/借位规则为:借一当十六,逢十六进一。十六进制数同二进制数及十进制数一样,也可以写成展开式的形式。

二进制数到十六进制数的转换:从小数点开始,分别向左、右按4位分组转换成对应的十六进制数字字符,最后不满4位的,则需补0。

十六进制数到二进制数的转换:将每位十六进制数用4位二进制数表示即可。011 什么是存储器?

存储器是现代信息技术中用于保存信息的记忆设备。其概念很广,有很多层次。在数字系统中,只要能保存二进制数据的都可以是存储器;在集成电路中,一个没有实物形式的具有存储功能的电路也叫存储器,如RAM、FIFO等;在系统中,具有实物形式的存储设备也叫存储器,如内存条、TF卡等。计算机中全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。有了存储器,计算机才有记忆功能,才能保证正常工作。计算机中的存储器按用途可分为主存储器(内存)和辅助存储器(外存),也有分为外部存储器和内部存储器的分类方法。外存通常是磁性介质或光盘等,能长期保存信息,而内存指主板上的存储部件,用来存放当前正在执行的数据和程序,但仅用于暂时存放程序和数据,关闭电源或断电,数据会丢失。

存储器的主要功能是存储程序和各种数据,并能在计算机运行过程中高速、自动地完成程序或数据的存取。存储器是具有“记忆”功能的设备,它采用具有两种稳定状态的物理器件来存储信息。这些器件也称为记忆元件。在计算机中采用只有两个数码“0”和“1”的二进制来表示数据。记忆元件的两种稳定状态分别表示为“0”和“1”。日常使用的十进制数必须转换成等值的二进制数才能存入存储器中。计算机中处理的各种字符,如英文字母、运算符号等,也要转换成二进制代码才能存储和操作。

存储器:存放程序和数据的器件。

存储位:存放一个二进制数位的存储单元,是存储器最小的存储单位,或称记忆单元。

存储字:一个数(n位二进制位)作为一个整体存入或取出时,称为存储字。

存储单元:存放一个存储字的若干个记忆单元组成一个存储单元。

存储体:大量存储单元的集合组成存储体。

存储单元地址:存储单元的编号。

字编址:对存储单元按字编址。

字节编址:对存储单元按字节编址。

寻址:由地址寻找数据,从对应地址的存储单元中访存数据。

以存储体(大量存储单元组成的阵列)为核心,加上必要的地址译码、读写控制电路,即为存储集成电路;再加上必要的I/O接口和一些额外的电路,如存取策略管理,则形成存储芯片,如手机中常用的存储芯片。得益于新的IC制造或芯片封装工艺,现在已经有能力把DRAM和FLASH存储单元集成在单芯片里。存储芯片再与控制芯片(负责复杂的存取控制、存储管理、加密、与其他器件的配合等)及时钟、电源等必要的组件集成在电路板上构成整机,就形成一个存储产品,如U盘。从存储单元(晶体管阵列)到存储集成电路,再到存储设备,都是为了实现信息的存储,区别是层次的不同。

构成存储器的存储介质是存储元,它可存储一个二进制代码。由若干个存储元组成一个存储单元,然后再由许多存储单元组成一个存储器。一个存储器包含许多存储单元,每个存储单元可存放一字节(按字节编址)。每个存储单元的位置都有一个编号,即地址,一般用十六进制数表示。一个存储器中所有存储单元可存放数据的总和称为它的存储容量。假设一个存储器的地址码由20位二进制数(即5位十六进制数)组成,则可表示2的20次方,即1M个存储单元地址。每个存储单元存放一字节,则该存储器的存储容量为1MB。

表1-1给出了各种存储器的功能。表1-1 各种存储器的功能012 什么是数据总线?

数据总线DB(Data Bus)用于传送数据信息。数据总线是双向三态形式的总线,即它既可以把CPU的数据传送到存储器或输入/输出接口等其他部件,也可以将其他部件的数据传送到CPU。数据总线的位数是微型计算机的一个重要指标,通常与微处理的字长相一致。例如,Intel8086微单片机的字长为16位,其数据总线宽度也是16位。需要指出的是,数据的含义是广义的,它可以是真正的数据,也可以是指令代码或状态信息,有时甚至是一个控制信息,因此在实际工作中,数据总线上传送的并不一定仅仅是真正意义上的数据。013 什么是地址总线?

地址总线(Address Bus)是一种计算机总线,是CPU或有DMA能力的单元,用来沟通这些单元想要访问(读取/写入)计算机内存组件/地方的物理地址。

数据总线的宽度随可寻址的内存组件大小而变,决定有多少内存可以被访问。例如,一个16位宽度的地址总线(通常在1970年和1980年早期的8位单片机中使用)到达2的16次方=65536=64KB的内存地址,而一个32位地址总线(通常在现今2004年的PC单片机中)可以寻址到4,294,967,296=4GB的地址。

在大多数微计算机中,可寻址的组件都是8位的“字节”(所以“K”在这种情况下相当于:“KB”或kilobyte),有很多计算机例子是以更大的数据区块当作其实体上最小的可寻址组件,像大型主机、超级计算机及某些工作站的CPU。

地址总线AB是专门用来传送地址的,由于地址只能从CPU传向外部存储器或I/O端口,所以地址总线总是单向三态的,这与数据总线不同。地址总线的位数决定了CPU可直接寻址的内存空间大小,如8位微机的地址总线为16位,则其最大可寻址空间为216=64KB,16位微机的地址总线为20位,则其可寻址空间为220=1MB。一般来说,若地址总线为n位,则可寻址空间为2n位。

地址总线的宽度随可寻址的内存组件的大小而变,决定有多少内存可以被存取。例如,一个16位元宽度的地址总线(通常在1970年和1980年早期的8位元单片机中使用)到达2的16次方=65536=64KB的内存地址,而一个32位单元地址总线(通常在现今2004年的PC单片机中)可以寻址到4,294,967,296=4GB的地址。但现在很多计算机内存已经大于4GB(Windows XP x32位系统最大只能识别3.29GB,所以要使用4GB以上大内存就要用Windows x64位系统)。所以,目前主流的计算机都是64位单片机,也就是说可以寻址到264=16×1018=16EB的地址,在很长一段时间内这个数字是用不完的。

在大多数计算机中,可寻址的元件都是8位元的“字节”(所以“K”在此情况下相当于“KB”或kilobyte),有很多计算机例子是以更大的资料区块当作其实体上最小的可寻址元件,像大型主机、超级计算机,以及某些工作站的CPU。014 总线有哪些主要技术指标?

总线有以下主要技术指标。(1)总线的带宽(总线数据传输速率)。

总线的带宽指的是单位时间内总线上传送的数据量,即每秒钟传送MB的最大稳态数据传输率。与总线密切相关的两个因素是总线的位宽和总线的工作频率,它们之间的关系为:

总线的带宽=总线的工作频率×总线的位宽/8(2)总线的位宽。

总线的位宽指的是总线能同时传送的二进制数据的位数,或数据总线的位数,即32位、64位等总线宽度的概念。总线的位宽越宽,每秒钟数据的传输率就越大,总线的带宽也就越宽。(3)总线的工作频率。

总线的工作频率以MHz为单位,工作频率越高,总线的工作速度越快,总线的带宽也就越宽。015 什么是直接寻址?

直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址。

在指令格式的地址字段中直接指出操作数在内存的地址ID。

通常情况下,操作数存放在数据段中,所以其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,则操作数可存放在其他段。

直接寻址方式常用于处理内存单元的数据,其操作数是内存变量的值。

指令中直接给出操作数地址(dir)的寻址方式称为直接寻址。

寻址对象为:(1)内部数据存储器。在指令中以直接地址表示。(2)特殊功能寄存器SFR。在指令中用寄存器名称表示。

以寄存器中的内容为地址,该地址的内容为操作数的寻址方式,称为寄存器间接寻址。能够进行寄存器间接寻址的寄存器有R0、R1、DPTR,用前面加@表示,如@R0、@R1、@DPTR。寄存器间接寻址的存储空间包括内部数据存储器和外部数据存储器。由于内部数据存储器共有128字节,因此用一字节的R0和R1可间接寻址整个空间。而外部数据存储器最大可达64KB,仅R0或R1无法寻址整个空间,为此需要由P2端口提供外部RAM高8位地址,由R0或R1提供低8位地址,由此共同寻址64KB范围,也可用16位的DPTR寄存器间接寻址64KB存储空间。

注意:立即寻址方式和直接寻址方式的书写格式不同。在程序中,直接寻址的地址要写在括号“[]”内,立即地址通常用内存变量名来表示,如MOV BX,VARW,其中,VARW是内存字变量。直接寻址如MOV AX[2000H]。

在直接寻址中,指令操作数字段中存放的是操作数的16位偏移地址(EA),即操作数的偏移地址和操作码一起存放在代码段中,而操作数可以存放在数据段,也可以存放在其他段,操作数的物理地址由其所在段的寄存器内容左移4位与指令中给出的偏移地址相加形成。物理地址PH=(DS)*10H+EA(Disp)EA可以用符号或数值表示。如果用数值表示EA则必须用括号括起来,而且在方括号前应给出段寄存器名,直接寻址的操作数可以是字或字节。

如果没有特殊说明,直接寻址的操作数一般在内存的数据段中,即隐含的段寄存器是DS。但是8086/8088也允许段超越,即允许使用CS,SS,ES作为段寄存器,此时需要在指令中特别标明,方法是在有关操作数的前面加上寄存器的名字,再加上冒号。例如:

MOV AX EX:[2000H]016 什么是立即寻址?

立即寻址是汇编语言中的一种寻址方式,在面向不同形式的单片机中会有不同的编写方式。

立即寻址方式的目的就是将操作数紧跟在操作码后面,与操作码一起放在指令代码段中,在程序运行时,程序直接调用该操作数,而不需要到其他地址单元中去取相应的操作数,上述写在指令中的操作数也称作立即数。

在MCS-51单片机汇编语言编程中,该寻址方式是将“#”放在立即数前面,以表示该寻址方式为立即寻址,如将操作数写为#52H。

例如:MOV A,#52H

上述例子中的“MOV”为操作码,“A”为第一操作数,其意义为累加寄存器,“#52H”为第二操作数,其意义就是立即数。通过该条程序指令可将十六进制数52H直接放入累加器中,当然也可以将立即数表示为二进制数或十进制数,如#00B。

在8086系列微型单片机汇编语言编程中,该寻址方式不用将“#”放在立即数前面。

例如:MOV AH,80H

上述例子中的第一个操作数“AH”表示高位累加器,第二个操作数为立即数,其前面不用加入“#”。

立即数表示注意事项如下:(1)根据数制类型不同,可以使用二进制、八进制、十进制、十六进制等表示方法,并在相应的数制类型后面加上B、O、D、H作为区分,如00001111B,02H等。(2)根据微型单片机的处理位数不同,程序编写时应对其取值范围、存储方式加以注意。如对于8位单片机,应采用00H~FFH(以十六进制表示)之间的数。(3)对于16位以上的单片机在立即数为16位或32位时,它将按“高高低低”的原则进行存储。

例如(以下的例子为8086系列汇编语言中的指令格式,括号中为指令的解释):

MOV AH,80H(将8位立即数存入高位累加寄存器)

ADD AX,1234H(将16位立即数与累加寄存器中的数相加并存入累加寄存器)

MOV ECX,12345678H(将32位立即数存入扩展计数寄存器)

MOV B1,12H(将8位立即数存入字节单元)

MOV W1,3456H(将16位立即数存入字单元)

ADD D1,32123456H(将32位立即数与双字单元中的数相加)

应注意,以上指令中的第二操作数(例如,MOV AH,80H中80H为第二操作数)都是立即数。在汇编语言中规定:立即数不能作为指令中的第一操作数。该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。(4)立即数寻址方式通常用于对通用寄存器或内存单元赋初值。017 什么是间接寻址?

间接寻址是相对于直接寻址而言的,指令地址字段的形式地址D不是操作数的真正地址,而是操作数地址的指示器,或者说D单元的内容才是操作数的有效地址。

间接寻址是在直接寻址的基础上建立起来的,也就是直接寻址得到的数据是一个地址,通过这个地址找到最终数据,也就是两次寻址,第一次得到的是地址,第二次才是目标数据。

在MCS-51单片机中,为了对寄存器寻址和寄存器间接寻址加以区别,在寄存器名称前加一个符号@来表示寄存器间接寻址,如MOV A,@R0。

第一次寻址得到寄存器R0的值,这个值是一个地址,再通过这个地址,第二次寻址得到存储器储据,即把寄存器里的内容看成地址,然后把这个地址里面的内容赋给累加器A。比如,R0寄存器中的内容是3AH,而3AH这个地址里的内容是77H,那么上条指令执行后累加器A的内容变为77H。所谓“间接”,即A通过“3AH”找到77H。

操作数放在RAM某个单元中,该单元的地址又放在寄存器R0或R1中。如果RAM的地址大于256,则该地址存放在16位寄存器DPTR(数据指针)中,此时在寄存器名前加@符号来表示这种间接寻址,如MOVA,@R0,其他还有变址寻址、相对寻址、位寻址等。如用单片机控制温度时,需要实时将给定的控制温度(如20℃)减去环境温度,而环境温度实时变化,显然无法在程序指令中给出,只有通过一定方式,将其送入某个输入/输出口,再存放在某个寄存器中,这就必须用到寄存器寻址。又如要进行算术运算,要计算每班学员各科成绩的平均值,如果把每个学员的各科都编一个程序,在程序中直接给出该学员各科成绩再求平均值,显然太麻烦。这里可以编一个求平均成绩的通用程序,把每位学员的成绩送入存储器的各个单元中,这时可采取直接寻址,所以寻址方式越多,编制程序就越方便、灵活,适用范围就越广。

寄存器的间接寻址需要以寄存器符号的形式来表示,且在寄存器名称前面加上间接寻址符号“@”。例如,指令MOVA,@R0就使用了寄存器间接寻址方式,这条指令的意义为将地址指针R0指向的内部数据存储器单元中的数据送入累加器A中。

假设R0中的内容为30H,则此指令的功能以R0寄存器的内容30H为地址,把内部RAM30H单元中的内容传送给累加器A。

8051规定,采用R0、R1DPTR作为间接寻址寄存器,可寻址片内数据存储器RAM的低128B单元和片外数据存储器的低256B单元。

采用DPTR作间址寄存器,可寻址片外数据存储器的整个64KB地址空间。堆栈指针SP用于指示堆栈操作的地址,因此PUSH和POP指令也是寄存器间接寻址。018 单片机与嵌入式系统中的存储器有哪些种类?

从不同的角度看,单片机与嵌入式系统中的存储器有如下种类。(1)按存储介质分

半导体存储器:用半导体器件组成的存储器。

磁表面存储器:用磁性材料做成的存储器。(2)按存储方式分

随机存储器:任何存储单元的内容都能被随机存取,且存取时间和存储单元的物理位置无关。

顺序存储器:只能按某种顺序来存取,存取时间和存储单元的物理位置有关。(3)按读写功能分

只读存储器(ROM):存储的内容是固定不变的,只能读出而不能写入的半导体存储器。

随机读写存储器(RAM):既能读出又能写入的半导体存储器。(4)按信息保存性分

非永久记忆的存储器:断电后信息即消失的存储器。

永久记忆性存储器:断电后仍能保存信息的存储器。(5)按用途分

根据存储器在计算机系统中所起的作用,可分为主存储器、辅助存储器、高速缓冲存储器、控制存储器等。(6)按特点分

高速缓冲存储器(Cache):高速存取指令和数据,存取速度快,但存储容量小。

主存储器:内存存放计算机运行期间的大量程序和数据,存取速度较快,存储容量不大。

外存储器:外存存放系统程序和大型数据文件及数据库,存储容量大,位成本低。019 常见可移动存储器有哪些?

常见可移动存储器有如下几种。(1)U盘

U盘全称为USB闪存盘,英文名为“USB flash disk”。它是一种使用USB接口的无需物理驱动器的微型高容量移动存储产品,通过USB接口与计算机连接,从而实现即插即用。U盘的称呼最早来源于朗科科技生产的一种新型存储设备,名为“优盘”,使用USB接口进行连接。U盘连接到计算机的USB接口后,U盘的资料可与计算机交换,而之后生产的类似技术的设备由于朗科已进行专利注册而不能再称之为“优盘”,所以改称谐音的“U盘”。后来,U盘这个称呼因其简单易记而广为人知,是移动存储设备之一。(2)cf闪存卡

cf闪存卡是一种袖珍闪存卡,英文为compact flash card。像pc卡那样插入数码相机,它可用适配器(又称转接卡),使之适应标准的pc卡阅读器或其他pc卡设备。cf卡的部分结构采用强化玻璃及金属外壳,cf卡采用standard ata/ide接口界面,配有专门的pcm-cia适配器(转接卡),笔记本电脑的用户可直接在pcmcia插槽上使用,使数据很容易在数码相机与计算机之间传递。(3)sm闪存卡

sm闪存卡即smart media,译为智能媒体卡,是一种存储媒介。sm卡采用了ssfdg/flash内存卡,具有超小、超薄、超轻等特性,体积为37(长)mm×45(宽)mm×0.76(厚)mm,质量是1.8g,功耗低,容易升级,sm卡也有pcmcia界面,方便用户进行数据传送。(4)memory stick duo

memory stick duo即微型记忆棒,其体积和质量都为普通记忆棒的1/3左右,目前最大存储容量可以达到4GB。(5)sd闪存卡

sd闪存卡即Secure Digital,规格为32mm×24mm×2.11mm,其存储速度快,非常小巧,外观和MMC一样,市面上大多数数码相机都使用这种格式的存储卡,市场占有率第一。(6)xd闪存卡

xd闪存卡是Fuji film(富士胶卷)和OLYMPUS(奥林巴斯)联合推出的xD-Picture卡,体积很小,传输速度很快,不过价格很昂贵。(7)mmc闪存卡

mmc闪存卡即MultiMedia Card,外形和SD卡完全一样,很多时候也通用。(8)微硬盘

微硬盘是一种比较高端的存储产品,“Hitachi(日立)”和国产品牌“南方汇通”都推出了自己的微硬盘产品。微硬盘的外形和CF卡完全一样,使用同一型号接口。(9)优卡

优卡是lexar公司生产的一种数码相机存储介质,外形和一般的CF卡相同,可以用在使用CF卡的数码相机、pda、mp3等数码设备上,同时可以直接通过USB接口与计算机系统联机,用作移动存储器。(10)数字胶卷

数字胶卷是lexar公司生产的一种数码相机的存储介质,同日立的SM卡、松下的SD卡、索尼的memorystick属同类数字存储媒体。(11)pc卡转换器

pc卡转换器是一种接插件,可以把CF卡或SM卡插入其中,然后整体作为一个PC卡插入计算机的pcmica插口,这是常用于便携机的一种通用扩展接口,可以接入pcmica内存卡、pcmica硬盘、pcmica调制解调器等。020 什么是复杂指令集计算机?

复杂指令集计算机(Complex Instruction Set Computing,CISC)是以微程序技术为基础的、具有较复杂指令系统的计算机。复杂指令集计算机是相对于精简指令集计算机(Reduced Instruction Set Computing,RISC)而言的。

在20世纪60年代到80年代初期,以微程序控制器为基础的处理机占主流地位。自20世纪80年代初、中期以后,采用硬连线控制器,且具有精简指令集的处理机问世并迅速发展以后,就把过去二十多年中传统指令系统比较复杂的计算机称为复杂指令集计算机,其处理器称为复杂指令集处理器。自20世纪60年代初IBM公司开始把计算机产品系列化并做到软件兼容以后,处理器体系结构设计中采用微程序技术作为控制指令执行的控制器的基础,是比较合适的。因为在一个产品系列中,低档机指令系统中的指令的基本操作可以以微程序方式存放在微存储器中。如果高档机要求增加功能更强的、更复杂的指令,则只需要扩充这个微存储器的内容,增加相应的微程序,即可做到从低档机到高档机软件的向上兼容。

此外,以微程序技术为基础的控制器的实现是符合当时计算机工艺的,因为在20世纪70年代末以前,计算机的主存储器仍为较慢的磁心存储器。当时,CPU与微存储器都已采用双极型半导体集成电路或其他较快电路,这种微存储器的周期与CPU的工作节拍相吻合,允许中央处理器1拍执行1条微指令。

指令系统逐渐变得复杂的原因很多,大致可归纳成3点。

①在产品系列中追求软件兼容性,如VAX的高档机要和cIDVAX兼容,Intel80486要和Intel8086兼容。已有的即使不合理的指令仍要保留,而新的产品又要求增加一些新的指令。

②认为指令系统越复杂,就可以缓解所谓的软件危机,因此在指令系统中增加了接近于高级语言语句的指令,如Return指令,这种指令的执行机制十分复杂。此外,还认为指令系统越丰富,编译器越好写,且编译的效率越高。

③当时主存储器价格较贵,存储器容量有限,因而把存储效率作为衡量处理机体系结构好坏的重要标准,从而在处理机中大量采用存储效率较高的存储器—存储器操作指令。021 什么是精简指令集计算机?

精简指令集计算机(Reduced Instruction Set Computing,RISC)是一种执行较少类型计算机指令的微处理器,起源于20世纪80年代的MIPS主机(即RISC机),RISC机中采用的微处理器统称RISC处理器。这样一来,它能够以更快的速度执行操作(每秒执行更多百万条指令,即MIPS)。因为计算机执行每种指令类型都需要额外的晶体管和电路元件,计算机指令集越大就会使微处理器更复杂,执行操作也会更慢。纽约约克镇IBM研究中心的John Cocke证明,计算机中约20%的指令承担了80%的工作,于1974年,他提出RISC的概念。许多当前的微芯片都使用RISC概念。

RISC的指令系统相对简单,它只要求硬件执行很有限且最常用的那部分指令,大部分复杂的操作则使用成熟的编译技术,由简单指令合成。目前在中高档服务器中普遍采用这一指令系统的CPU,特别是高档服务器全都采用RISC指令系统的CPU。在中高档服务器中采用RISC指令的CPU主要有Compaq(康柏,即新惠普)公司的Alpha、HP公司的PA-RISC、IBM公司的Power PC、MIPS公司的MIPS和SUN公司的Sparc。

CPU执行运算速度受以下三个因素的影响。(1)程序中指令数I;(2)每条指令执行所用周期数CPI;(3)周期时间T。

这三者又有如下关系:

程序执行时间=I·CPI·T

因此,从这个等式可看出减小其中任意一个都可提高CPU的速度,因此RISC技术就从这三方面下手,对I、CPI、T进行优化改良,其措施如下。(1)采用多级指令流水线结构

采用流水线技术可使每一时刻都有多条指令重叠执行,以减小CPI的值,使CPU不浪费空周期。

实例:PentiumⅡ/Pro/Celeron可同时发出执行5条指令,AMD-K6/K6-2可同时发出执行6条指令。(2)机器中使用频率高的简单指令及部分复杂指令

这样可减少时钟周期数量,提高CPU速度,其实质是减小CPI下的值实现。

实例:选取运算指令、加载、存储指令和转移指令作主指令集。(3)采用加载(Load)、存储(Store)结构

只允许Load和Store指令执行存储器操作,其余指令均对寄存器操作。实例:Amd-K6/K6-2、PⅡ/Celeron/Pro均支持对寄存器的直接操作和重新命名,并大大增加通用寄存器的数量。(4)延迟加载指令和转移指令

由于数据从存储器到寄存器存在二者速度差、转移指令要进行入口地址的计算,使得CPU执行速度大大受限,因此RISC技术为保证流水线高速运行,在它们之间允许加一条不相关的可立即执行的指令,以提高速度。

实例:主要体现于预测执行、非顺序执行和数据传输等方面,除Intel P54/55C不支持以外,像K6-2、PⅡ均支持。(5)采用高速缓存(Cache)结构

为保证指令不间断地传送给CPU运算器,CPU设置了一定大小的Cache以扩展存储器的带宽,并满足CPU频繁取指需求,一般有两个独立Cache,分别存放“指令+数据”。

实例:PⅡ/Celeron:16K+16K;AMD-K6/K6-2为32K+32K;Cyrix MⅡ:64K(实际上也为2个32K Cache,此作共享Cache);PⅡ还加了L2 Cache,更是大幅提高了CPU速度。022 什么是通用寄存器?

通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。

16位CPU通用寄存器共有8个:AX、BX、CX、DX、BP、SP、SI、DI。

8个寄存器都可以作为普通的数据寄存器使用。

但有的有特殊的用途:AX为累加器,CX为计数器,BX、BP为基址寄存器,SI、DI为变址寄存器,BP还可以是基指针,SP为堆栈指针。

32位CPU通用寄存器共有8个:EAX、EBX、ECX、EDX、EBP、ESP、ESI、EDI,功能和16位的差不多。023 什么是数据寄存器?

数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取不会影响高16位的数据。这些低16位寄存器分别命名为AX、BX、CX和DX,它和先前CPU中的寄存器相一致。

4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL;BX:BH-BL;CX:CH-CL;DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。

寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间,累加器可用于乘、除、输入/输出等操作,它们的使用频率很高。寄存器BX称为基地址寄存器(Base Register),它可作为存储器指针来使用。寄存器CX称为计数寄存器(Count Register),在进行循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数。寄存器DX称为数据寄存器(Data Register),在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据、保存算术逻辑运算结果,而且也可作为指针寄存器,所以这些32位寄存器更具有通用性。024 什么是变址寄存器?

32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。025 什么是指针寄存器?

32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应早期CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载