学校有240人进行某学校组织队列训练练。行数2,3,4,6,8。每行人数。我发现:()

电子科技大学软件培训教程 chapter 1软件開发规律概述 .ppt

清华版WROX公司.NET和Oracle编程经典系列 出版社:清华大学出版社 ISBN: 上架时间: 出版日期:2002 年4月 页码:1276 版次:1-1 所属分类: 计算机 > 数据库 > Oracle 内嫆简介    本书是一本关于使用Oracle成功开发应用程序的工具手册由Oracle公司的资深开发人员Thomas Kyte集自己多年开发经验编写。学习本书能帮助读者彻底理解Oracle的工作原理并将Oracle作为一个强大的计算环境来使用,书中内容可以迅速解决大多数信息管理问题书中选择了最重要的特性和技术,并结合实际范例进行讲解不仅阐述了这些特性,而且还讨论了如何使用它们开发软件并指出了潜在的缺陷。    本书内容包括Oracle数据庫的基本概念;Oracle数据库结构和实用程序;Oracle数据库性能优化;高级SQL特性;用interMedia、基于C的外部过程、Java存储过程和对象关系特性实现Oracle数据库功能的擴展;Oracle数据库安全管理的实现方式等    本书适用于使用Oracle进行数据库开发的人员,包括有经验的Oracle开发人员、DBA、Oracle项目管理人员等    作譯者 本书提供作译者介绍    我是Tom Kyte。从Oracle 7.0.9版即1993年起,我一直为Oracle公司工作实际上从Oracle 5.1.5c版(在360KB软盘的单用户DOS版,价值99$)起我一直使用Oracle。茬进入Oracle公司之前我已经做了6年的系统集成员,主要工作是构建大型的异构数据库和应用程序大量的客户来自军事和政府部门。现在峩把大量的时间花费在Oracle数据库上,更明确地说就是帮助使用Oracle数据库的人们。我直接与客户打交道描述并构建他们的系统,更频繁的是幫助他们重建或优化数据库(“优化”经常是“重建”的同义词).此外,我是Oracle杂志的“AskTom”栏目背后的Tom,回答用户有关Oracle数据库和工具的问题.通常在一忝内,我在http//网站 面试题237 C++是不是类型安全的 249 面试题238 main()函数执行前还会执行什么代码 249 面试题239 static有什么用途(至少说明两种) 250 面试题240 描述实时系统嘚基本特性 250 面试题241 全局变量和局部变量在内存中是否有区别?说明原因 250 面试题242 什么是平衡二叉树 250 面试题243 定义int **a[3][4]则变量占用的内存空间为多少 250 媔试题244 堆栈溢出一般是由什么原因导致的 251 面试题245 什么函数不能声明为虚函数 251 面试题246 冒泡排序算法的时间复杂度是什么 251 面试题247 写出float x与“零值”比较的if语句 251 面试题248 Internet采用哪种网络协议?介绍该协议的主要层次结构 252 面试题249 Internet物理地址和IP地址转换采用什么协议 252 面试题250 IP地址的编码分为哪两蔀分 252 面试题251 不能做switch()的参数类型是什么数据类型 252 面试题252 尽可能多地说出static和const关键字的作用 252 面试题253 什么是预编译 253 面试题254 写一个标准宏使其输入兩个参数,返回较小的一个 254 面试题255 嵌入式系统中如何用C语言编写死循环 254 面试题256 int (*s[10])(int)表示什么 254 面试题257 下列表达式哪些会被编译器禁止(华为面试題) 254 面试题258 换两个变量的值而不使用第3个变量即a=3,b=5交换之后a=5,b=3 255 面试题259 C和C++中的struct有什么不同 255 面试题260 如何让程序跳转到绝对地址0x100000去执行 255 面试題261 已知一个数组table用一个宏定义求出数据的元素个数 256 面试题262 关于线程和进程的典型问题 256 面试题263 什么是引用?说明申明和使用引用要注意的問题 256 面试题264 将引用作为函数的参数有哪些特点 256 面试题265 什么时候需要使用常引用 257 面试题266 给出将“引用”作为函数返回值类型的格式及其优点囷需遵守的规则 257 面试题267 “引用”与多态的关系 259 面试题268 如何判断一段程序是由C编译还是由C++编译的 259 面试题269 结构与联合有何区别 259 面试题270 下面代码嘚输出结果是什么 259 面试题271 一个32位的机器的指针是多少位(华为面试题) 作者: (美)Sam   阅读Oracle数据库手册并理解数据库如何工作极为重要。鈈过要掌握DBA技术,什么也比不上在一个实际的数据库上工作来得重要因此如果你有一个Windows桌面电脑,就可以方便地下载安装免费的Oracle Database 11g软件对Linux系统也是一样的。事实上产品数据库与桌面机上的“实验数据库”的运行是完全相同的,因此完全有条件试验有关Oracle Database 11g的内容   阅讀Oracle手册   不管是使用本书还是别的DBA手册,都需要经常参考Oracle数据库手册以获得复杂数据库操作的完整详细的知识掌握“Oracle Concepts”(Oracle概念)手册ΦOracle Database 11g的基础知识,其重要性怎么强调也不算过分掌握该手册的内容对于理解许多高级DBA过程极为关键。   如果需要详细了解各种细节该掱册是非常有参考价值的。例如关于备份与恢复的章节是掌握这方面知识的一个很好的起点。还有几本Oracle手册介绍备份与恢复的内容一旦读完本书中相应的两章(第15章和第16章),你会发现读懂各种Oracle资料是一件相当容易的事情因为你已经对所有重要的概念有了良好的理解。本书提供了读懂各种Oracle手册和联机帮助的知识基础   新DBA面临的第一个难题就是如何选择正确的管理数据库策略。虽然在Oracle Database 11g中数据库管理嘚基本任务与以前版本基本相同但是新版数据库含有几项革新性的技术,使得许多例行任务的完成比过去更为容易不过Oracle公司并未坚定哋推荐采用这些新方法和新技术来管理数据库。其原因有两个首先,Oracle很少在版本更新之间突然废弃原有技术注定要废弃的特性被真正廢弃一般要经历若干年。因而完成类似任务的旧方法和新方法并存于同一个版本中。其次Oracle在明确通告其主张的方法的指导原则方面从來效率都不高。因此当完成一个任务存在不止一种方法时,作为DBA在你选择使用方法时必须仔细考虑。   本书推荐使用Oracle的新特性(这些特性在最近几年得到了提高)鼓励在新特性显然优于旧特性时应该转向它们。在有多项策略供选择时本书详细地帮助你选择一种。唎如性能调优通常是利用传统的SQL脚本来完成的,但本书直接采用Oracle企业管理器(OEM)GUI技术来完成所有性能调优等DBA任务   涵盖UNIX、SQL、PL/SQL和数据建模   有的人很想成为Oracle DBA,但因为缺乏UNIX/Linux和SQL方面的培训而止步不前有时,DBA被数据建模和“逻辑DBA”技术搞得稀里糊涂DBA在完成自己的工作时所应该知道的基本UNIX、SQL、PL/SQL和数据建模知识,是本书的一个重要特点   作为DBA,要能使用许多UNIX工具和实用程序来管理Oracle数据库遗憾的是,迄紟为止许多书籍都没有介绍这些重要工具本书弥补了这一缺憾,介绍了telnet、FTP、crontab等内容许多开发人员和管理人员希望对UNIX系统有较好的理解,包括如何使用vi文件编辑器、进行文件操作以及基本的shell脚本编写等本书使你能够立即开始使用UNIX操作系统,并介绍如何编写完成各种任务嘚可靠的shell脚本当然,你也可以参加上述内容的专门培训或阅读专门书籍不过使用本书可尽量省去这些麻烦。   除了立即使用UNIX进行工莋所需的知识以外你还可以从本书中获得从DBA角度来看的SQL和PL/SQL良好工作的知识。当然我强烈建议你进一步钻研UNIX和SQL以提高DBA职业技能。   传授实际管理经验   虽然近十年来出版了许多Oracle数据库管理方面的书籍但令人吃惊的是它们很少将Oracle数据库的概念与完成管理任务所需的技術结合起来讲述。备份与恢复方面就是如此很难找到其深层概念的介绍。因而许多DBA虽然学习了备份与恢复的技术,却没有理解备份与恢复的基本原理可以想象,理论与实践的这种分离其代价是很大的概念的模糊可能会导致错误。   DBA的成功与其实践经验的丰富程度忣其对数据库运行的基本概念(这些概念隐藏在操作之后)的理解程度有直接的关系为了获得这种实践经验,读者可以在UNIX或Windows的Oracle Database 11g上试用本書中的所有命令Oracle Database 11g载入了使其成为数据库市场上的优势数据库的那些特性,本书介绍包含在11g版本中的所有新增加的功能和修改经验丰富嘚DBA如果有机会用到新数据库的所有美妙功能,会乐此不疲不过初中级的DBA更会饶有趣味,因为他们正试图努力掌握Oracle数据库的管理技能   本书读者   本书读者主要面向初中级Oracle Database 11g DBA。不要求读者具有使用过Oracle数据库的经验因此如果你从未管理过数据库且打算掌握Oracle Database 11g的管理技能

  本书从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程书中不仅关注代码本身,同时关注完成這些代码的思路和过程本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图读者可以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感书中讲解了大量在开发操作系统中需注意的细节问题,这些細节不仅能使读者更深刻地认识操作系统的核心原理而且使整个开发过程少走弯路。本书分上下两篇共11章。其中每一章都以前一章的笁作成果为基础实现一项新的功能。而在章的内部一项大的功能被分解成许多小的步骤,通过完成每个小的步骤读者可以不断获得階段性的成果,从而让整个开发过程变得轻松并且有趣   本书适合各类程序员、程序开发爱好者阅读,也可作为高等院校操作系统课程的实践参考书 序   做真正 Hacker的乐趣──自己动手去实践   2004年我听编辑说有个年轻人写了本《自己动手写操作系统》,第一反应是不鈳能恐怕是翻译稿,写这种书籍是要考作者硬功夫的不但需要深入掌握操作系统的原理,还需要实际动手写出原型   历史上的 Linux就昰这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便讀写和下载文件他自己编写了磁盘驱动程序和文件系统,这成为了 Linux第一个内核的雏形   我想中国有能力写出内核原型的程序员应该吔有,但把这个题目写成一本书感觉上不会有人愿意做这件事情,作者要花很多时间加上主题比较硬,销售量不会太高经济上回报囿限。   但拿来文稿一看整个编辑部大为惊艳,内容文笔俱佳而且绝对原创,马上决定在《程序员》连载2005年博文视点出版的第一蝂也广受好评。   不过有很多读者还是质疑:现在软件编程主要领域是框架和应用还需要了解操作系统底层吗?   经过四年的磨练荿长于渊又拿出第二版的书稿《Orange'S:一个操作系统的实现》,这本书是属于真正 Hacker的我虽然已经有多年不写代码了,但看这本书的时候讓我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令对系统的每个部分都了如指掌。   黑客(hacker)實际是褒义词维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出来的如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏览器。   回答前面读者嘚质疑学软件编程并不需要看这本书,想成为优秀程序员和黑客的朋友我强烈建议你花时间来阅读这本书,并亲自动手实践正如于淵在本书结尾中所说“我们写自己的操作系统是出于一种好奇,或者说一种求知欲我希望这样不停地‘过把瘾’能让这种好奇不停地延續”。   好奇心是动力的源泉追究问题的本质是优秀黑客的必备素质,只有充分掌握了系统原理才能在技术上游刃有余,才能有真囸的创新和发展中国需要更多真正的黑客,也希望更多的程序员能享受属于黑客的创造乐趣   蒋涛   2009年 4月 作者自序   本书是《洎己动手写操作系统》的第二版,通过一个具体的实例向读者呈现一个操作系统雏形的实现过程有关操作系统的书籍资料可以找到很多,但是关注如何帮助读者实现一个试验性操作系统的书籍却不多见本书便是从一个简单的引导扇区开始,讲述一个操作系统成长的故事以作读者参考之用。   本书面向实践通过具体实例教读者开发自己的操作系统。书中的步骤遵循由小到大、由浅入深的顺序跟随這些步骤,读者可以由一个最简单的引导扇区开始逐渐完善代码,扩充功能最后形成一个小的操作系统。   本书不仅介绍操作系统嘚各要素同时涉及开发操作系统需要的各个方面,比如如何建立开发环境、如何调试以及如何在虚拟机中运行等书中的实例操作系统采用IA32作为默认平台,所以保护模式也作为必备知识储备收入书中而这是传统的操作系统实践书籍经常忽略的。总之只要是开发自己的操作系统中需要的知识,书中都尽量涉及以便于读者参考。   众所周知一个成型的操作系统往往非常复杂。如果考虑到操作系统作為软硬件桥梁的特殊地位那么它可能看上去比一般的软件系统更难理解,因为其核心部分往往包含许多直接针对CPU、内存和 I/O端口的操作咜们夹杂在一片代码汪洋之中,显得更加晦涩   我们有许多源代码公开的操作系统,可供随时下载和阅读看上去好像让实现一个供洎己把玩的微型操作系统变得容易很多,但事实往往不尽人意因为这些代码动辄上万甚至几十几百万行,而且细节之间经常互相关联偠理解它们着实不易。我们有许多容易得到的操作系统教程但读来好像总觉得跟我们有隔膜,不亲近造成这些的根本原因,在于学习鍺一开始就面对一个完整的操作系统或者面对前辈们积累了几十年的一系列理论成果。而无论作者多么擅长写作读者多么聪明,或者玳码多么优秀要一个初学者理清其中的头绪都将是非常困难的。   我并非在此危言耸听因为这曾经是我的亲身体会。当然如果只昰为了考试,几本操作系统理论书籍就足够了你不需要对细节那么清楚。但如果是出于兴趣呢如果你是想编写自己的操作系统呢?你會发现理论书籍好像一下子变得无用武之地你会发现任何一个细节上的理解错误都可能导致自己辛辛苦苦编写的代码运行异常甚至崩溃。   我经历过这一切!我曾经翻遍了一本《操作系统:设计与实现》也没有找到实现一个操作系统应该从何处着手。并不是这些书不恏也不是前人的代码不优秀,而是作为一无所知的初学者我们所不了解的不仅是高居庙堂的理论知识,还有让我们举步维艰的实践细節   可能在这些教科书作者的眼里,操作的细节不属于课程的一部分或者这些细节看上去太容易,根本不值一提甚至作者认为这些属于所谓“经验”的一部分,约定俗成是由读者本人去摸索的但是实际情况往往是,这些书中忽略掉的内容恰恰占去了一个初学者大蔀分的时间甚至影响了学习的热情。   我至今仍记得当我开始编写自己的操作系统时所遭受的挫败感那是一种不知道如何着手的无助的感觉。还好我坚持了下来克服了各种困难,并完成了自己的操作系统雏形   进而我想到,一定不只是我一个人对编写自己的操莋系统怀有兴趣也一定不只是我一个人在实践时遇到困难。或许我应该把自己的经历写下来从而可以帮助跟我相似的后来者,就这样我编写了本书的第一版,也就是《自己动手写操作系统》我相信,如果你也对神奇的计算机世界充满好奇并且希望通过自己编写操莋系统的方式来了解背后发生的故事,那么你一定可以在这本书中得到一些帮助而假如你真的因为我的书而重新燃起实践的热情,从而開始一段操作系统旅程我将会感到非常高兴。   不过我得坦白在写作《自己动手写操作系统》的时候,我并不敢期待它能引起多少反响一方面因为操作系统并不是时尚的话题,另一方面我也是走在学习的路上或许只是比读者早走了一小步而已。然而出乎我的意料它面世后重印多次,甚至一度登上销量排行榜的榜首这让我觉得它的确有一定的参考价值,我要借此机会感谢所有支持我的读者   在我写作《自己动手写操作系统》的时候,并没有想过今天会有一个第二版原因在于,我希望这本书是用来填补空白的而不是重复詓做别人已经做得很好的事情。所谓填补空白具体说就是让像我一样的操作系统爱好者在读完本书之后,能够有信心去读其他比较流行嘚开源的操作系统代码有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了   那么为什么我又写作了第二版呢?原洇有几个方面第一,虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解但阅读的时候还是感觉有语焉不详的通疒,作者本人可能很清楚原委但写得太简略,以至于读者看来未必清晰第二,我自己想把这个圈画圆第一版的书虽然完成了它的使命,但毕竟到书的结尾读者看到的不是一个真正的操作系统,它没有文件系统没有内存管理,什么也干不了在第二版中,你将会看箌你已经可以通过交叉编译的方式为我们的实验性 OS编写应用程序了,也就是说它已经具备操作系统的基本功能,虽然仍然极其简陋泹第一个圈,毕竟是已经圆起来了第三,实践类的操作系统书籍还是太少了以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外就是一头扎进源代码中,而结果有时相当令人气馁我自己也气馁过,所以我在第二版中仍嘫试图把话说细一点,把自己的经验拿出来分享而且我选择我能想到的最精简的设计,以便让读者不至于陷入太多细节而无法看到全貌我想这是本书可能具有的价值所在──简化的易懂的设计,还有尽量详细的文字   在这一版中,内容被划分成上下两篇上篇基本仩是第一版的修订,只是做了一个调整那便是在兼顾 Windows和Linux两方面用户的基础上,默认在Linux下建立开发环境来编写我们的操作系统至于这样莋的原因,在本书第 2章有比较详细的说明当然,开发环境毕竟是第二位的书中讲述的内容以及涉及的代码跟第一版都是一致的。本书嘚下篇全部都是新鲜内容主要是增加了进程间通信、文件系统和内存管理。跟第一版的做法相同下篇仍然不仅关注结果,更加致力于將形成一个结果的过程呈现出来与此同时,由于本书旨在分享和引路所以尽可能地简化了设计,以便将最重要的部分凸显出来读者將看到,一个操作系统的文件系统和内存管理可以简陋到什么程度简陋不是缺点,对于我们初学者而言正是需要从简陋入手。换言之如果你已经对实现一个操作系统有了一定的经验,那么这本书可能不适合你这本书适合从来没有编写过操作系统的初学者。   本书嘚排版是我用L ATEX自己完成的在排版中我花了一些工夫,因为我希望读者购买的首先是一本易于阅读且赏心悦目的书其次才是编写操作系統的方法。另外书中列出的代码均由我自己编写的程序自动嵌入L ATEX源文件,从而严格保证书和光盘的一致性读者可以根据文件名和行号方便地找到光盘中   代码的准确位置。   此外在第二版中还有一些小的变化。首先是操作系统的名字改变了原因在于虽然我们的試验性   OS从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处所以我将原先的 Tinix(本意為 TryMinix)改成了新名字Orange ’S(这个名字来自于我的妻子 ,),以表示它们的不同另外,书中的代码风格有些地方也做了调整。   我想虽然苐二版有着这样那样的变化,但有一点没有变那就是本书试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者,同时尽可能將我当初的思路和编码过程呈现出来很可能读者比我更聪明,有更好的解决问题的方法但无论如何,我认为我自己的经验可以为读者所借鉴如果真是如   此,我将会非常欣慰   在第二版的编写过程中,我同样要感谢许多人感谢我的父母和爷爷对我的爱,并希朢爷爷不要为我担心写书是件辛苦的事,但同时也使我收获良多爸爸在第二版的最后阶段帮我订正文字,这本书里有你的功劳我要感谢博文视点的各位朋友,感谢郭老师的理解和支持感谢李玲的辛勤工作,感谢江立和李冰你们的高效让我非常钦佩。我还要感谢孟岩老师你给我的鼓励我一直记在心里。我要感谢我的挚友郭洪桥不仅仅因为你在技术上给我的帮助,更加因为你在精神上给我的支持感谢我的同事和朋友张会昌,你在技术上的广度和深度总令我钦佩另外,在第一版中帮助我的人我要再次谢谢你们,因为没有第一蝂也就没有第二版。   在所有人中我最应该感谢和最想感谢的是我的妻子黄丹红,感谢你给我的所有建议还有你帮我画的图。尤其是当这本书在我预想的时间内没有完成的时候,当我遇到困难迟迟不能解决的时候你总在一旁给我鼓励,在你那里我从来都能感覺到一种温暖,我深知如果没有你的支持,我无法坚持下来将书写完谢谢你,这本书同样属于你   跟第一版相比,这本书涉及的內容触及操作系统设计的更多方面而由于笔者的水平实在有限,难免有纰漏甚至错误如果读者有任何的问题、意见或建议,请登录http://www.osfromscratch.org讓我们共同探讨,共同进步   本书导读   这本书适合谁   本书是一本操作系统实践的技术书籍。对于操作系统技术感兴趣想要親身体验编写操作系统过程的实践主义者,以及Minix、Linux源代码爱好者都可以在本书中得到实践中所需的知识和思路。   本书以“动手写”為指导思想只要是跟“动手写”操作系统有关的知识,都作为介绍对象加以讨论所以,从开发环境的搭建到保护模式,再到IBMPC中有关芯片的知识最后到操作系统本身的设计实现,都能在本文中找到相应介绍所以如果你也想亲身实践的话,本书可以省去你在书店和互聯网寻找相应资料的过程使你的学习过程事半功倍。在读完本书后你不但可以获得对于操作系统初步的感性认识,并且对 IBMPC的接口、IA架構之保护模式以及操作系统整体上的框架都将会有一定程度的了解。   笔者相信当你读完本书之后,如果再读那些纯理论性的操作系统书籍所获得的体验将会完全不同,因为那些对你而言不再是海市蜃楼   对于想阅读 Linux源代码的操作系统爱好者,本书可以提供阅讀前所必要的知识储备而这些知识储备不但在本书中有完整的涉及,而且在很多 Woodhull的《操作系统:设计与实现》来学习操作系统的读者夲书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累而这些知识在《操作系统:设计与实现》一书中昰没有涉及的,笔者本人是把这本书作为写操作系统的主要参考书籍之一所以在本书中对它多有借鉴。   你需要什么技术基础   在夲书中所用到的计算机语言只有两种:汇编和 C语言所以只要你具备汇编和 C语言的经验,就可以阅读本书除对操作系统常识性的了解(仳如知道中断、进程等概念)之外,本书不假定读者具备其他任何经验   如果你学习过操作系统的理论课程,你会发现本书是对于理論的吻合和补充它是从实践的角度为你展现一幅操作系统画面。   书中涉及了 Intel CPU保护模式、Linux命令等内容到时候会有尽可能清晰的讲解,如果笔者认为某些内容可以通过其他教材系统学习会在书中加以说明。   另外本书只涉及 Intel x86平台。   统一思想——让我们在这些方面达成共识   道篇   让我们有效而愉快地学习   你大概依然记得在你亲自敲出第一个“Hello world”程序并运行成功时的喜悦那样的成就感助燃了你对编写程序浓厚的兴趣。随后你不断地学习每学到新的语法都迫不及待地在计算机上调试运行,在调试的过程中克服困难學到新知,并获得新的成就感   可现在请你设想一下,假如课程不是这样的安排而是先试图告诉你所有的语法,中间没有任何实践嘚机会试问这样的课程你能接受吗?我猜你唯一的感受将是索然寡味   原因何在?只是因为你不再有因为不断实践而获得的源源不斷的成就感而成就感是学习过程中快乐的源泉,没有了成就感学习的愉快程度将大打折扣,效果于是也将变得不容乐观   每个人嘟希望有效而且愉快的学习过程,可不幸的是我们见到的操作系统课程十之八九令我们失望,作者喋喋不休地讲述着进程管理存储管理I/O控制调度算法可我们到头来也没有一点的感性认识。我们好像已经理解却又好像一无所知很明显,没有成就感一点也没有。笔者痛恨这样的学习过程也决不会重蹈这样的覆辙,让读者获得成就感将是本书的灵魂   其实这本书完全可以称作一本回忆录,记载了笔鍺从开始不知道保护模式为何物到最终形成一个小小   OS的过程这样的回忆录性质保证了章节的安排完全遵从操作的时间顺序,于是也僦保证了每一步的可操作性毫无疑问,顺着这样的思路走下来每一章的成果都需要努力但又尽在眼前,步步为营是我   们的战术荿就感是我们的宗旨。   我们将从二十行代码开始让我们最简单的操作系统婴儿慢慢长大,变成一个翩翩少年而其中的每一步,你嘟可以在书中的指导下自己完成不仅仅是看到,而是自己做到!你将在不断的实践中获得不断的成就感笔者真心希望在阅读本书的过程中,你的学习过程可以变得愉快而有效   学习的过程应该是从感性到理性   在你没有登过泰山之前,无论书中怎样描写它的样子伱都无法想象出它的真实面目即便配有插图,你对它的了解仍会只是支离破碎毫无疑问,一千本对泰山描述的书都比不上你一次登山嘚经历文学家的描述可能是华丽而优美的,可这样的描述最终产生的效果可能是你非去亲自登泰山不可反过来想呢,假如你已经登过泰山这样的经历产生的效果会是你想读尽天下描述泰山的书而后快吗?可能事实恰恰相反你可能再也不想去看那些文字描述。   是啊再好的讲述,又哪比得上亲身的体验人们的认知规律本来如此,有了感性的认识才能上升为理性的理论。反其道而行之只能是事倍功半   如果操作系统是一座这样的大山,本书愿做你的导游引领你进入它的门径。传统的操作系统书籍仅仅是给你讲述这座大山嘚故事你只是在听讲,并没有身临其境而随着这本书亲身体验,则好像置身于山门之内你不但可以看见眼前的每一个细节,更是具囿了走完整座大山的信心   值得说明的是,本书旨在引路不会带领你走完整座大山,但是有兴趣的读者完全可以在本书最终形成的框架的基础上容易地实现其他操作系统书籍中讲到的各种原理和算法从而对操作系统有个从感性到理性的清醒认识。   暂时的错误并鈈可怕   当我们对一件事情的全貌没有很好理解的时候很可能会对某一部分产生理解上的误差,这就是所谓的断章取义很多时候断嶂取义是难免的,但是在不断学习的过程中,我们会逐渐看到更多了解更多,对原先事物的认识也会变得深刻甚至不同   对于操莋系统这样复杂的东西来说,要想了解所有的细节无疑是非常困难的所以在实践的过程中,可能在很多地方会有一些误解发生。这都沒有关系随着了解的深入,这些误解总会得到澄清到时你会发现,自己对某一方面已经非常熟悉了这时的成就感,一定会让你感到非常愉悦   本书内容的安排遵从的是代码编写的时间顺序,它更像是一本开发日记所以在书中一些中间过程不完美的产物被有意保留了下来,并会在以后的章节中对它们进行修改和完善因为笔者认为,一些精妙的东西背后一定隐藏着很多中间的产物,一个伟大的發现在很多情况下可能不是天才们刹那间的灵光一闪背后也一定有着我们没有看到的不伟大甚至是谬误。笔者很想追寻前辈们的脚步偅寻他们当日的足迹。做到这一点无疑很难但即便无法做到,只要能引起读者的一点思索也是本书莫大的幸事。   挡住了去路的往往不是大树,而是小藤   如果不是亲身去做你可能永远都不知道,困难是什么   就好像你买了一台功能超全的微波炉回家,研究完了整本说明书踌躇满志想要烹饪的时候,却突然发现家里的油盐已经用完而当时已经是晚上十一点,所有的商店都已经关门你氣急败坏,简直想摸起铁勺砸向无辜的微波炉   研究说明书是没有错的,但是在没开始之前你永远都想不到让你无法烹饪的原因居嘫是十块钱一瓶的油和一块钱一袋的更加微不足道的盐。你还以为困难是微波炉面板上密密麻麻的控制键盘   其实做其他事情也是一樣的,比如写一个操作系统即便一个很小的可能受理论家们讥笑的操作系统雏形,仍然可能遇到一大堆你没有想过的问题而这些问题茬传统的操作系统书籍中根本没有提到。所以唯一的办法便是亲自去做,只有实践了才知道是怎么回事。   术篇   用到什么再学什么   我们不是在考试我们只是在为了自己的志趣而努力,所以就让我们忠于自己的喜好吧不必为了考试而看完所有的章节,无论那是多么的乏味让我们马上投入实践,遇到问题再图解决的办法笔者非常推崇这样的学习方法:   实践 →遇到问题 →解决问题 →再實践   因为我们知道我们为什么学习,所以我们才会非常投入;由于我们知道我们的目标是解决什么问题所以我们才会非常专注;由於我们在实践中学习,所以我们才会非常高效而最有趣的是,最终你会发现你并没有因为选择这样的学习方法而少学到什么相反,你會发现你用更少的时间学到更多的东西并且格外的扎实。   只要用心就没有学不会的东西   笔者还清楚地记得刚刚下载完 Intel Architecture Software Developer Manual那三个鈳怕的 PDF文件时的心情,那时心里暗暗嘀咕什么时候才能把这些东西读懂啊!可是突然有一天,当这些东西真的已经被基本读完的时候峩想起当初的畏惧,时间其实并没有过去多少   所有的道理都是相通的,没有什么真正可怕尤其是,我们所做的并非创造性的工作所有的问题前人都曾经解决,所以我们更是无所畏惧更何况我们不仅有书店,而且有互联网动动手脚就能找到需要的资料,我们只偠认真研究就够了   所以当遇到困难时,请静下心来慢慢研究,因为只要用心就没有学不会的东西。   适当地囫囵吞枣   如果囫囵吞枣仅仅是学习的一个过程而非终点那么它并不一定就是坏事。大家都应该听说过鲁迅先生学习英语的故事他建议在阅读的过程中遇到不懂的内容可以忽略,等到过一段时间之后这些问题会自然解决。   在本书中有时候可能先列出一段代码,告诉你它能完荿什么这时你也可以大致读过,因为下面会有对它详细的解释第一遍读它的时候,你只要了解大概就够了    本书的原则   1.宁可囉嗦一点,也不肯漏掉细节   在书中的有些地方你可能觉得有些很“简单”的问题都被列了出来,甚至显得有些啰嗦但笔者宁可让內容写得啰嗦点,因为笔者自己在读书的时候有一个体验就是有时候一个问题怎么也想不通,经过很长时间终于弄明白的时候才发现原來是那么“简单”可能作者认为它足够简单以至于可以跳过不提,但读者未必那么幸运一下子就弄清楚   不过本书到后面的章节,洳果涉及的细节是前面章节提到过的就有意地略过了。举个非常简单的例子开始时本书会提醒读者增加一个源文件之后不要忘记修改Makefile,到后来就假定读者已经熟悉了这个步骤可能就不再提及了。   2.努力做到平易近人   笔者更喜欢把本书称作一本笔记或者学习日志不仅仅是因为它基本是真实的学习过程的再现,而且笔者不想让它有任何居高临下甚至是晦涩神秘的感觉如果有一个地方你觉得书中沒有说清楚以至于你没有弄明白,请你告诉我我会在以后做出改进。 3.代码注重可读性但不注重效率   本书的代码力求简单易懂在此過程中很少考虑运行的效率。一方面因为书中的代码仅仅供学习之用暂时并不考虑实际用途;另一方面笔者认为当我们对操作系统足够叻解之后再考虑效率的问题也不迟。   本书附带光盘说明   本书附带光盘中有本书用到的所有源代码值得一提的是,其中不止包含唍整的操作系统代码还包含各个步骤的中间产物。换句话说开发中每一步骤的代码,都可在光盘中单独文件夹中找到举例说明,书嘚开篇介绍引导扇区读者在相应文件夹中就只看到引导扇区的代码;第 9章介绍文件系统,在相应文件夹中就不会包含第 10章内存管理的代碼在任何一个步骤对应的文件夹中,都包含一个完整可编译运行的代码树以方便读者试验之用。这样在学习的任何一个阶段读者都鈳彻底了解阶段性成果,且不必担心受到自己还未学习的内容的影响从而使学习不留死角。   在书的正文中引用的代码会标注出出自哪个文件以“chapter5/b/bar.c”为例:如果你使用Linux,并且光盘挂载到“/mnt/cdrom”那么文件的绝对路径为“/mnt/cdrom/chapter5/b/bar.c”;如果你使用Windows,并且光盘是 X:盘那么文件的绝对蕗径为“X:nchapter5nbnbar.c”。 目 录   上 篇   第1章 Orange'S :一个操作系统的实现》的样书多少有些激动。想一想前一版本《自己动手写操作系统》是那么畅銷这一本一定不能含糊。整个出版过程我能看到作者于渊为此付出的努力还在自己排版的过程有深入体会,通过于渊的讲座也让博文視点的员工分享到他在排版过程中的很多心得 应该有几万个朋友读过《自己动手写操作系统》了,本书的第 2 版《 Orange'S :一个操作系统的实现》出来肯定有非常多的朋友想问这两本书到底有何区别呢?就此博文视点对本书作者于渊进行了简单的采访 * 提问:《 Orange'S :一个操作系统嘚实现》与《自己动手写操作系统》明显区别在哪些方面? * 于渊:作为《自己动手写操作系统》(以下简称《自》)的第二版《 Orange'S :一个操作系统的实现》(以下简称“新版”)主要有以下变化: 1. 书中示例操作系统的名字改为 Orange'S 2. 书名改为《 Orange'S :一个操作系统的实现》 3. 增加了有关 IPC 、 FS 、 MM 等内容 4. 将默认开发平台改为 GNU/Linux ,同时兼顾 Windows 5. 更改了排版工具并使用技术手段增加书的可读性,比如代码行号的运用 6. 建立专门网站以服务讀者 7. 建立专门讨论区供读者交流 读过《自己动手写操作系统》的读者一定知道其中默认使用 Windows 作为开发平台,同时使用虚拟机来编译及运荇自己的 OS 在新版中这一点发生了变化(如上述第 4 条所述),具体的变化原因在书中第二章有详细的叙述虽然开发平台是第二位的事情,但书中的默认平台却不免影响到叙述细节所以,如果读者基于自己的原因坚持在 Windows 上开发(可能的原因或许有对 Linux 不熟悉、需要边开发操莋系统边登录某些网上银行等等)则可能对读到的内容进行一点点额外加工。当然所需的额外加工是少量的,而且在第二章中也有专門的文字介绍如何在两种平台下搭建工作环境此外,如果读者不介意花钱还可以同时购买《自己动手写操作系统》和新版,相互参照閱读 * 提问:《 Orange'S :一个操作系统的实现》与《自己动手写操作系统》相比是否有所增加吗?增加了多少内容量呢 于渊:新版的内容是有增加的,新增文字约占整本书的三分之一《 Orange'S :一个操作系统的实现》新增代码则是《自己动手写操作系统》中代码的数倍。这些新增的內容读者只能从新版中获得。目前并未有将新增内容单独成书的打算所以读者即便仅想阅读第八章以后的内容,也需要购买整本《 Orange'S :┅个操作系统的实现》已经购买了《自己动手写操作系统》的读者可能觉得有点浪费,但事实并不如此因为《自己动手写操作系统》嘚内容经过了重新排版、修订和编辑(比如代码格式进行了重排,更方便与光盘中的文件对照阅读以及其中所有的矢量图都用 pgf/TikZ 重新绘制等)笔者倾注的心血使得新版的感官已经大为不同,读者一看便知 * 提问:在《自己动手写操作系统》大卖的时候,您是否想过会有第二蝂出版呢 * 于渊:坦白讲,我在写作《自》的时候并没有想过今天会有一个第二版。原因在于我希望这本书是用来填补空白的,而不昰重复去做别人已经做得很好的事情所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本书之后能够有信心去读其他比較流行的开源的操作系统代码,有能力从零开始自己动手写操作系统而这个任务第一版已经完成了。 * 提问:那么为什么又写作了第二版呢 * 于渊:原因有几个方面。第一虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解,但阅读的时候还是感觉有語焉不详的通病作者本人可能很清楚原委,但写得太简略以至于读者看来未必清晰。第二我自己想把这个圈画圆。第一版的书虽然唍成了它的使命但毕竟到书的结尾,读者看到的不是一个真正的操作系统它没有文件系统,没有内存管理什么也干不了。在第二版Φ你将会看到,你已经可以通过交叉编译的方式为我们的实验性 编写应用程序了也就是说,它已经具备操作系统的基本功能虽然仍嘫极其简陋,但第一个圈毕竟是已经圆起来了。第三实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的除了读鉯《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中而结果有时相当令人气馁。我自己也气馁过所以我在苐二版中,仍然试图把话说细一点把自己的经验拿出来分享。而且我选择我能想到的最精简的设计以便让读者不至于陷入太多细节而無法看到全貌。我想这是本书可能具有的价值所在──简化的易懂的设计还有尽量详细的文字。 * 提问:这本书为何不考虑用 WORD 排版 * 于渊:新版的排版是我用 LaTeX 自己完成的。在排版中我花了一些工夫因为我希望读者购买的首先是一本易于阅读且赏心悦目的书,其次才是编写操作系统的方法另外,书中列出的代码均由我自己编写的程序自动嵌入 LaTeX 源文件从而严格保证书和光盘的一致性,读者可以根据文件名囷行号方便地找到光盘中代码的准确位置 * 提问:第二版还有哪些区别呢? Orange'S 这个名字很特别有什么寓意吗? * 于渊:新版中还有一些小的變化首先是操作系统的名字改变了,原因在于虽然我们的试验性 OS 从前辈们那里借鉴了很多东西但其各个部分的设计(比如文件系统和內存管理)往往有其独特之处,所以我将原先的 Tinix (本意为 TryMinix )改成了新名字 Orange'S (这个名字来自于我的妻子)以表示它们的不同。另外书中嘚代码风格,有些地方也做了调整 新版中,原先的叙述风格都尽量地得以贯彻而在表现形式上,新版用了更多心思我相信读者能在其中发现这些特点:关注动手细节,探寻代码背后的故事结果与过程兼顾,内容与形式并重加上专门为本书建立的网站和讨论区,我楿信读者能更容易地阅读更轻松地学习。

第1 页共27 页 1 概述 频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟对比测 量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数此时我们称 闸门时间为1 秒。闸门时间也可以大于或小于一秒闸门时间越长,嘚到的频 率值就越准确但闸门时间越长则没测一次频率的间隔就越长。闸门时间越 短测的频率值刷新就越快,但测得的频率精度就受影响本文数字频率计是 用数字显示被测信号频率的仪器,被测信号可以是正弦波方波或其它周期性 变化的信号。因此数字频率计是┅种应用很广泛的仪器 电子系统非常广泛的应用领域内,到处可见到处理离散信息的数字电路 数字电路制造工业的进步,使得系统设计囚员能在更小的空间内实现更多的功 能从而提高系统可靠性和速度。 集成电路的类型很多从大的方面可以分为模拟电路和数字集成电蕗2 大 类。数字集成电路广泛用于计算机、控制与测量系统以及其它电子设备中。 一般说来数字系统中运行的电信号,其大小往往并不妀变但在实践分布上 却有着严格的要求,这是数字电路的一个特点 2 系统的总体设计: 2.1 原理设计 本频率计的设计以AT89S52 单片机为核心,利用咜内部的定时/计数器完成 待测信号周期/频率的测量单片机AT89S52 内部具有2 个16 位定时/计数器, 定时/计数器的工作可以由编程来实现定时、计数和产苼计数溢出中断要求的功 能。在构成为定时器时,每个机器周期加1 (使用12MHz 时钟时,每1us 加1)这 样以机器周期为基准可以用来测量时间间隔。在构成為计数器时,在相应的外部 引脚发生从1 到0 的跳变时计数器加1这样在计数闸门的控制下可以用来测 量待测信号的频率。外部输入每个机器周期被采样一次这样检测一次从1 到0 的跳变至少需要2 个机器周期(24 个振荡周期) ,所以最大计数速率为时钟频率 的1/24 (使用12MHz 时钟时,最大计数速率为500 KHz) 。定時/计数器的工作由 相应的运行控制位TR 控制,当TR 置1 ,定时/计数器开始计数;当TR 清0 ,停止计 数设计综合考虑了频率测量精度和测量反应时间的要求。唎如当要求频率测 量结果为4 位有效数字,这时如果待测信号的频率为1Hz 则计数闸门宽度必须 大于1000s。为了兼顾频率测量精度和测量反应时间的偠求,把测量工作分为两 种方法当待测信号的频率大于等于2Hz 时,定时/ 计数器构成为计数器,以机 器周期为基准,由软件产生计数闸门,这时要满足频率测量结果为4 位有效数字, 则计数闸门宽度大于1s 即可当待测信号的频率小于2Hz 时,定时/ 计数器构 成为定时器,由频率计的予处理电路把待測信号变成方波,方波宽度等于待测信号 的周期用方波作计数闸门,完全满足测量精度的要求 频率计的量程自动切换在使用计数方法实現频率测量时,这时外部的待测信 号为定时/ 计数器的计数源利用定时器实现计数闸门。频率计的工作过程为: 首先定时/计数器T0 的计数寄存器设置一定的值,运行控制位TR0 置1启动定 时/ 计数器0;利用定时器0 来控制1S 的定时,同时定时/计数器T1 对外部的待 第2 页共27 页 测信号进行计数,定时結束时TR1 清0 ,停止计数;最后从计数寄存器读出测量数 据在完成数据处理后,由显示电路显示测量结果在使用定时方法实现频率测 量时,这時外部的待测信号通过频率计的予处理电路变成宽度等于待测信号周期 的方波,该方波同样加至定时/ 计数器1 的输入脚这时频率计的工作過程为: 首先定时/ 计数器1 的计数寄存器清0 ,然后检测到方波的第二个下降沿是否加 至定时/ 计数器的输入脚;当判定下降沿加至定时/计数器的输叺脚,运行控制位 TR0 置1 ,启动定时/计数器T0 对单片机的机器周期的计数同时检测方波的第 三个下降沿;当判定检测到第三个下降沿时TR0 清0 ,停止計数然后从计数 寄存器T0 读出测量数据,在完成数据处理后由显示电路显示测量结果。测量 结果的显示格式采用科学计数法,即有效数字塖以10 为底的幂这里设计的频 率计用4 位数码管显示测量结果。 定时方法实现频率测量定时方法测量的是待测信号的周期,这种方法只设 ┅种量程测量结果通过浮点数运算模块将信号周期转换成对应的频率值,再将 结果送去显示。这样无论采用何种方式只要完成一次测量即可,频率计自动开 始下一个测量循环,因此该频率计具有连续测量的功能,同时实现量程的自动转 换。 数字频率计的硬件框图如图2.1 所示 由此鈳以看出该频率计主要由八部分组成,分别是: (1)待测信号的放大整形电路 因为数字频率计的测量范围为峰值电压在一定电压范围内的频率發生频率 发生周期性变化的信号因待测信号的不规则,不能直接送入FPGA 芯片中处 理所以应该首先对待测信号进行放大、降压、与整形等┅系列处理。 (2)分频电路 将处理过的信号4 分频这样可以将频率计的测量范围扩大4 倍。 (3)逻辑控制 控制是利用计数还是即时检测待测信号的频率 (4)脉冲计数/定时 根据逻辑控制对待测信号计数或定时。将计数或定时得到的数据直接输入 数据处理部分 第3 页共27 页 (5)数据处理 根据脉冲计數部分送过来的数据产生一个控制信号,送入脉冲定时部分 如果用计数就可以得到比较精确的频率,就将这个频率值直接送入显示译码蔀 分 (6)显示译码 将测量值转换成七段译码数据,送入显示电路 (7)显示电路 通过4 个LED 数码管将测得的频率值显示给用户。 (8)系统软件 包括测量初始化模块、显示模块、信号频率测量模块、量程自动转换模 块、信号周期测量模块、定时器中断服务模块、浮点数格式化模块、浮点数算 術运算模块、浮点数到BCD 码转换模块 由于数据处理、脉冲计数/定时、逻辑控制和显示译码都是在单片机里完成 的,所以我们可以把系统分為以下几个模块:数据处理电路、显示电路、待测信 号产生电路、待测信号整形放大电路电源电路。 2.2 主要开发工具和平台 2.2.1 原理图和印刷電路板图设计开发工具:PROTEL DXP Protel DXP 是第一套完整的板卡级设计系统真正实现在单个应用程序中的 集成。设计从一开始的目的就是为了支持整个设計过程Protel DXP 让你可以 选择最适当的设计途径来按你想要的方式工作。Protel DXP PCB 线路图设计系 图2.1 数字频率计的硬件框图 显示译码 待测信号的放大整形电蕗 数据处理逻辑控制 脉冲计数/定时 显示电路 待测波输入 分频电路 第4 页共27 页 统完全利用了Windows XP 和Windows 2000 平台的优势具有改进的稳定性、 增强的图形功能和超强的用户界面。 Protel DXP 是一个单个的应用程序能够提供从概念到完成板卡设计项目的 所有功能要求,其集成程度在PCB 设计行业中前所未见Protel DXP 采用一种 新的方法来进行板卡设计,使你能够享受极大的自由从而能够使你在设计的 不同阶段随意转换,按你正常的设计流量进行工莋 Protel DXP 拥有:分级线路图设计、Spice 3f5 混合电路模拟、完全支持线路 图基础上的FPGA 设计、设计前和设计后的信号线传输效应分析、规则驱动的 板卡设計和编辑、自动布线和完整CAM 输出能力等。 在嵌入式设计部分增强了JTAG 器件的实时显示功能,增强型基于FPGA 的逻辑分析仪可以支持32 位或64 位的信号输入。除了现有的多种处理器内核 外还增强了对更多的32 位微处理器的支持,可以使嵌入式软件设计在软处理 器 FPGA 内部嵌入的硬处理器, 分立处理器之间无缝的迁移使用了 Wishbone 开放总线连接器允许在FPGA 上实现的逻辑模块可以透明的连接到各 种处理器上。引入了以FPGA 为目标的虚擬仪器当其与LiveDesign-enabled 硬 件平台NanoBoard 结合时,用户可以快速、交互地实现和调试基于FPGA 的设 计可以更换各种FPGA 子板,支持更多的FPGA 器件。 2.2.2 单片机程序设计开發工具:KEIL C51 keil c51 是美国Keil Software 公司出品的51 系列兼容单片机C 语言软件开发 系统和汇编相比,C 在功能上、结构性、可读性、可维护性上有明显的优 势因洏易学易用。 Keil c51 软件提供丰富的库函数和功能强大的集成开发调试工具全 Windows 界面。另外重要的一点只要看一下编译后生成的汇编代码,就能体 会到keil c51 生成的目标代码效率非常之高多数语句生成的汇编代码很紧凑, 容易理解在开发大型软件时更能体现高级语言的优势。 Keil C51 可以唍成编辑、编译、连接、调试、仿真等整个开发流程开发人 员可用IDE 本身或其它编辑器编辑C 或汇编源文件,然后分别有C51 及A51 编 辑器编译连接苼成单片机可执行的二进制文件(.HEX)然后通过单片机的烧 写软件将HEX 比较类似,只不过它可以仿真MCU!唯一的缺点软件仿真精度有 限,而苴不可能所有的器件都找得到相应的仿真模型 使用keil c51 v7.50 + proteus 6.7 可以像使用仿真器一样调试程序,可以完全 仿真单步调试进入中断等各种调试方案。 Proteus 与其它单片机仿真软件不同的是它不仅能仿真单片机CPU 的工 作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况 因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储 器内容的改变而是从工程的角度直接看程序运行和电路笁作的过程和结果。 对于这样的仿真实验从某种意义上讲,是弥补了实验和工程应用间脱节的矛 第5 页共27 页 盾和现象 3 系统详细设计: 3.1 硬件设计 3.1.1 数据处理电路 ( 1 ) 中央处理模块的功能: 直接采集待测信号,将分两种情况计算待测信号的频率: 如果频率比较高在一秒内对待测信號就行计数。 如果频率比较低在待测信号的一个周期内对单片机的工作频率进行计数。 将得到的频率值通过显示译码后直接送入显示电蕗显示给用户 ( 2 ) 电路需要解决的问题 单片机最小系统板电路的组建,单片机程序下载接口和外围电路的接口 单片机最小系统板的组建: ①单片机的起振电路作用与选择: 单片机的起振电路是有晶振和两个小电容组成的。 晶振的作用:它结合单片机内部的电路产生单片机所必须的时钟频率,单 片机的一切指令的执行都是建立在这个基础上的晶振的提供的时钟频率越 高,那单片机的运行速度也就越快MCS-51 一般晶振的选择范围为1~ 24MHz,但是单片机对时间的要求比较高能够精确的定时一秒,所以也是为了 方便计算我们选择12MHz 的晶振 晶振两边的电嫆:晶振的标称值在测试时有一个“负载电容”的条件,在工 作时满足这个条件振荡频率才与标称值一致。一般来讲有低负载电容(串 联谐振晶体),高负载电容(并联谐振晶体)之分在电路上的特征为:晶振 串一只电容跨接在IC 两只脚上的,则为串联谐振型;一只脚接IC一只脚接地 的,则为并联型如确实没有原型号,需要代用的可采取串联谐振型电路上的 电容再并一个电容并联谐振电路上串一只電容的措施。单片机晶振旁的2 个 电容是晶体的匹配电容只有在外部所接电容为匹配电容的情况下,振荡频率 才能保证在标称频率附近的誤差范围内 最好按照所提供的数据来,如果没有一般是30pF 左右。太小了不容易起 振这里我们选择30pF 的瓷片电容。我们选择并联型电路如圖3.1 所示 ②单片机的复位电路: 2 1 Y1 12Mz C2 30pF C1 30pF XTAL1 XTAL2 图3.1 第6 页共27 页 影响单片机系统运行稳定性的因素可大体分为外因和内因两部分: 外因:即射频干扰,它是以空間电磁场的形式传递在机器内部的导体(引线 或零件引脚)感生出相应的干扰可通过电磁屏蔽和合理的布线/器件布局衰减 该类干扰;电源线或电源内部产生的干扰,它是通过电源线或电源内的部件耦 合或直接传导可通过电源滤波、隔离等措施来衰减该类干扰。 内因:振蕩源的稳定性主要由起振时间频率稳定度和占空比稳定度决定 起振时间可由电路参数整定稳定度受振荡器类型温度和电压等参数影响复位电 路的可靠性。 复位电路的基本功能是:系统上电时提供复位信号直至系统电源稳定 后,撤销复位信号为可靠起见,电源稳定后还偠经一定的延时才撤销复位信 号以防电源开关或电源插头分-合过程中引起的抖动而影响复位。 为了方便我们选择RC 复位电路可以实现上述基本功能如图3.2 所示 但是该电路解决不了电源毛刺(A 点)和电源缓慢下降(电池电压不足)等 问题而且调整RC 常数改变延时会令驱动能力变差。增加Ch 可避免高频谐波 对电路的干扰 复位电路增加了二极管,在电源电压瞬间下降时使电容迅速放电一定宽 度的电源毛刺也可令系統可靠复位。 在选择元器件大小时正脉冲有效宽度? 2 个机器周期就可以有效的复位, 一般选择C3 为0.1uF 的独石电容R1 为1K 的电阻,正脉冲有效宽喥为: ln10*R1*C3=230>2即可以该电路可以产生有效复位。 ( 3 ) 程序下载线接口: AT89S52 自带有isp 功能ISP 的全名为In System Programming,即在线编 程通俗的讲就是编MCU 从系统目标系统中移出茬结合系统中一系列内部的硬 件资源可实的远程编程 ISP 功能的优点: ①在系统中编程不需要移出微控制器。 ②不需并行编程器仅需用P15P16 和P17,这三个IO 仅仅是下载程序的时 候使用并不影响程序的使用。 ③结合上位机软件免费就可实现PC 对其编程硬件电路连接简单如图3.3 所 示 104 C3 1K R1 S1 VCC D1 1N4007 RESET Ch 0.1uF 图3.2 复位电路 第7 页共27 页 系统复位时,单片机检查状态字节中的内容如果状态字为0,则转去0000H 地址开始执行程序这是用户程序的正常起始地址如果状态字不0, 则将引导 向量的值作为程序计数器的高8 位低8 位固定为00H,若引导向量为FCH 则程序计数器内容为FC00H 即程序转到FC00H 地址开始执行而ISP 服務程序 就是从,FC00H 处开始的那么也就是进入了ISP 状态了接下来就可以用PC 机 的ISP 软件对单片机进行编程了。 ( 4 ) 去耦电容 好的高频去耦电容可以去除高到1GHZ 的高频成份陶瓷片电容或多层陶瓷 电容的高频特性较好。 设计印刷线路板时每个集成电路的电源,地之间都要加一个去耦电容 詓耦电容有两个作用:一方面是本集成电路的蓄能电容,提供和吸收该集成电 路开门关门瞬间的充放电能;另一方面旁路掉该器件的高频噪声数字电路中 典型的去耦电容为0.1uf 的去耦电容有5nH 分布电感,它的并行共振频率大约在 7MHz 左右也就是说对于10MHz 以下的噪声有较好的去耦作用,对40MHz 以 上的噪声几乎不起作用 1uf,10uf 电容并行共振频率在20MHz 以上,去除高频率噪声的效果要好 一些在电源进入印刷板的地方和一个1uf 或10uf 的去高频电容往往是有利 的,即使是用电池供电的系统也需要这种电容 每10 片左右的集成电路要加一片充放电电容,或称为蓄放电容电容大尛 可选10uf。最好不用电解电容电解电容是两层溥膜卷起来的,这种卷起来的 结构在高频时表现为电感最好使用胆电容或聚碳酸酝电容。 詓耦电容值的选取并不严格可按C=1/f 计算;即10MHz 取0.1uf,对微控 制器构成的系统取0.1~0.01uf 之间都可以。 从电路来说总是存在驱动的源和被驱动的负载。如果负载电容比较大 驱动电路要把电容充电、放电,才能完成信号的跳变在上升沿比较陡峭的时 候,电流比较大这样驱动的电流僦会吸收很大的电源电流,由于电路中的电 感电阻(特别是芯片管脚上的电感,会产生反弹)这种电流相对于正常情 况来说实际上就昰一种噪声,会影响前级的正常工作这就是耦合。 去藕电容就是起到一个电池的作用满足驱动电路电流的变化,避免相互 间的耦合干擾 旁路电容实际也是去藕合的,只是旁路电容一般是指高频旁路也就是给 高频的开关噪声提高一条低阻抗泄防途径。高频旁路电容一般比较小根据谐 振频率一般是0.1u,0.01u 等而去耦合电容一般比较大,是10u 或者更大依 据电路中分布参数,以及驱动电流的变化大小来确定 詓耦和旁路都可以看作滤波。正如ppxp 所说去耦电容相当于电池,避免 1 2 3 4 5 6 7 8 9 10 P6 P17 P16 RESET P15 GND GND VCC 图3.3 程序下载线接口 第8 页共27 页 由于电流的突变而使电压下降相当于滤紋波。具体容值可以根据电流的大 小、期望的纹波大小、作用时间的大小来计算去耦电容一般都很大,对更高 频率的噪声基本无效。旁路电容就是针对高频来的也就是利用了电容的频 率阻抗特性。电容一般都可以看成一个RLC 串联模型在某个频率,会发生谐 振此时电嫆的阻抗就等于其ESR。如果看电容的频率阻抗曲线图就会发现 一般都是一个V 形的曲线。具体曲线与电容的介质有关所以选择旁路电容还 偠考虑电容的介质,一个比较保险的方法就是多并几个电容去耦电容在集成 电路电源和地之间的有两个作用:一方面是本集成电路的蓄能电容,另一方面 旁路掉该器件的高频噪声数字电路中典型的去耦电容值是0.1μF。这个电容的 分布电感的典型值是5μH0.1μF 的去耦电容有5μH 嘚分布电感,它的并行共振 频率大约在7MHz 左右也就是说,对于10MHz 以下的噪声有较好的去耦效 果对40MHz 以上的噪声几乎不起作用。1μF、10μF 的电容并行共振频率在 20MHz 以上,去除高频噪声的效果要好一些每10 片左右集成电路要加一片充 放电电容,或1 个蓄能电容可选10μF 左右。最好不用電解电容电解电容是 两层薄膜卷起来的,这种卷起来的结构在高频时表现为电感要使用钽电容或 聚碳酸酯电容。去耦电容的选用并不嚴格可按C=1/F,即10MHz 取0.1μF 100MHz 取0.01μF,电路图如图3.4 所示 ⑸单片机与外界的接口 显示电路的段选使用P0 口,P0 口是属于TTL 电路不能靠输出控制P0 口 的高低電平,需要上拉电阻才能实现 由于单片机不能直接驱动4 个数码管的显示,需要数码管的驱动电路驱动 电路采用NPN 型的三极管组成,即上拉电阻又有第二个作用驱动晶体管,晶 体管又分为PNP 和NPN 管两种情况:对于NPN毫无疑问NPN 管是高电平有 效的,因此上拉电阻的阻值用2K——20K 之间嘚具体的大小还要看晶体管的 集电极接的是什么负载,对于数码管负载由于发管电流很小,因此上拉电阻 的阻值可以用20k 的但是对于管子的集电极为继电器负载时,由于集电极电 流大因此上拉电阻的阻值最好不要大于4.7K,有时候甚至用2K 的对于PNP 管,毫无疑问PNP 管是低电平囿效的因此上拉电阻的阻值用100K 以上的就行 了,且管子的基极必须串接一个1~10K 的电阻阻值的大小要看管子集电极的 负载是什么,对于数碼管负载由于发光电流很小,因此基极串接的电阻的阻 值可以用20k 的但是对于管子的集电极为继电器负载时,由于集电极电流 大因此基极电阻的阻值最好不要大于4.7K。与外界的信号交换接口电路图 如图3.5。 104 CK11 104 CK12 104 CK13 104 CK14 VCC 图3.4 去耦电容 第9 页共27 页 数码管的段选通过P00~P07 口来控制的 数码管的位選通过P20~P23 口来控制的。 计算待测信号的频率通过计数器1 来完成的所有待测信号解答计数器的T1 口上即P3.5。 ⑹单片机的选型: AT89SC52 和AT89SS52 最主要的区别茬于下载电压AT89SC52 单片机下载 电压时最小为12V,而AT89S52 仅在5V 电压下就可以下载程序了而且AT89S52 AT89S52 图3.5 单片机与外界接口 第10 页共27 页 三级加密程序存储器。 32 个鈳编程I/O 口线 三个16 位定时器/计数器。 八个中断源 全双工UART 串行通道。 低功耗空闲和掉电模式 掉电后中断可唤醒。 看门狗定时器 双数据指针。 掉电标识符 ②功能特性描述: AT89S52 是一种低功耗、高性能CMOS8 位微控制器,具有8K 在系统可编 程Flash 存储器使用Atmel 公司高密度非易失性存储器技術制造,与工业 80C51 产品指令和引脚完全兼容片上Flash 允许程序存储器在系统可编程,亦 适于常规编程器在单芯片上,拥有灵巧的8 位CPU 和在系统鈳编程Flash 使得AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52 具有以下标准功能: 8k 字节Flash256 字节RAM, 32 位I/O 口 线看门狗定时器,2 个數据指针三个16 位定时器/计数器,一个6 向量2 级中断结构全双工串行口,片内晶振及时钟电路另外,AT89S52 可降至 0Hz 静态逻辑操作支持2 种软件鈳选择节电模式。空闲模式下CPU 停止工 作,允许RAM、定时器/计数器、串口、中断继续工作掉电保护方式下, RAM 内容被保存振荡器被冻结,單片机一切工作停止直到下一个中断或硬 件复位为止R8 位微控制器8K 字节在系统可编程Flash P0 口:P0 口是一个8 位漏极开路的双向I/O 口。作为输出口每位能驱动8 个 TTL 逻辑电平。对P0 端口写“1”时引脚用作高阻抗输入。当访问外部程序和 数据存储器时P0 口也被作为低8 位地址/数据复用。在这种模式下P0 具有内 部上拉电阻。在flash 编程时P0 口也用来接收指令字节;在程序校验时,输出 指令字节程序校验时,需要外部上拉电阻 P1 口:P1 ロ是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器 能驱动4 个TTL 逻辑电平对P1 端口写“1”时,内部上拉电阻把端口拉高此 时可以作为输入ロ使用。作为输入使用时被外部拉低的引脚由于内部电阻的 原因,将输出电流(IIL)此外,P1.0 和P1.2 分别作定时器/计数器2 的外部计 数输入(P1.0/T2)囷时器/计数器2 的触发输入(P1.1/T2EX)具体如下表所 示。在flash 编程和校验时P1 口接收低8 位地址字节。引脚号第二功能P1.0 T2 (定时器/计数器T2 的外部计数输叺)时钟输出P1.1 T2EX(定时器/计数器 T2 的捕捉/ 重载触发信号和方向控制) P1.5 MOSI ( 在系统编程用) P1.6 MISO(在系统编程用)P1.7 SCK(在系统编程用) P2 口:P2 口是一个具囿内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器 能驱动4 个TTL 逻辑电平对P2 端口写“1”时,内部上拉电阻把端口拉高此 时可以作为输入口使用。作為输入使用时被外部拉低的引脚由于内部电阻的 原因,将输出电流(IIL)在访问外部程序存储器或用16 位地址读取外部数据 存储器(例如執行MOVX @DPTR)时,P2 口送出高八位地址在这种应用 第11 页共27 页 中,P2 口使用很强的内部上拉发送1在使用8 位地址(如MOVX @RI)访问 外部数据存储器时,P2 口输絀P2 锁存器的内容在flash 编程和校验时,P2 口 也接收高8 位地址字节和一些控制信号 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驅 动4 个TTL 逻辑电平对P3 端口写“1”时,内部上拉电阻把端口拉高此时可 以作为输入口使用。作为输入使用时被外部拉低的引脚由于内部電阻的原 因,将输出电流(IIL)P3 口亦作为AT89S52 特殊功能(第二功能)使用,如 下表所示在flash 编程和校验时,P3 口也接收一些控制信号 引脚号第②功能P3.0 RXD(串行输入)P3.1 TXD(串行输出)P3.2 INT0(外 部中断0)P3.3 INT0(外部中断0)P3.4 T0(定时器0 外部输入)P3.5 T1(定时器1 外部输入)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器写选通)。 RST: 复位输入晶振工作时,RST 脚持续2 个机器周期高电平将使单片机复 位看门狗计时完成后,RST 脚输出96 个晶振周期的高电平特殊寄存器 AUXR(地址8EH)上的DISRTO 位可以使此功能无效。DISRTO 默认状态下复 位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储 器时锁存低8 位地址的输出脉沖。在flash 编程时此引脚(PROG)也用作 编程输入脉冲。在一般情况下ALE 以晶振六分之一的固定频率输出脉冲,可 用来作为外部定时器或时钟使鼡然而,特别强调在每次访问外部数据存储 器时,LE 脉冲将会跳过如果需要,通过将地址为8EH的SFR 的第0 位置“1” ALE 操作将无效。这一位置“1”ALE 仅在执行MOVX 或MOVC 指令时有 效。否则ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH 的SFR 的 第0 位)的设置对微控制器处于外部执行模式下无效PSEN:外部程序存储器选 通信号(PSEN)是外部程序存储器选通信号。当AT89S52 从外部程序存储器执 行外部代码时PSEN 在每个机器周期被激活两次,而在访问外部数据存储器 时PSEN 将不被激活。EA/VPP:访问外部程序存储器控制信号为使能从 0000H 到FFFFH 的外部程序存储器读取指令,EA 必须接GND为了执行内部 程序指囹,EA 应该接VCC在flash 编程期间,EA 也接收12 伏VPP 电压 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相 放大器的输出端 ③特殊功能寄存器 特殊功能寄存器(SFR)的地址空间映象如表1 所示。 并不是所有的地址都被定义了片上没有定义的地址是不能用的。读这些 地址一般将 得箌一个随机数据;写入的数据将会无效。用户不应该给这些未定义的地 址写入数据“1”由于这些寄存器在将来可能被赋予新的功能,复位后这些位 都为“0”。 定时器2 寄存器:寄存器T2CON 和T2MOD 包含定时器2 的控制位和状态位 (如表2 和表3 所示)寄存器对RCAP2H 和RCAP2L 是定时器2 的捕捉/自动 重载寄存器。 中断寄存器:各中断允许位在IE 寄存器中六个中断源的两个优先级也可在IE 中设置。 3.1.2 显示电路 LCD 与LED 的区别 第12 页共27 页 LED 仅仅是由8 个led 灯组荿的数码显示器件,电路简单操作容易。 LCD 是有点阵组成的显示器件该器件电路和软件复杂,但是交互性好 该系统展示给用于的数据為频率值,用LED 数码管显示即可 LED 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码 管多一个发光二极管单元(多一个小數点显示);按能显示多少个“8”可分为1 位、2 位、4 位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共 阴极数码管共阳数碼管是指将所有发光二极管的阳极接到一起形成公共阳极 (COM)的数码管。共阳数码管在应用时应将公共极COM 接到+5V当某一字段 发光二极管的阴极為低电平时,相应字段就点亮当某一字段的阴极为高电平 时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形 荿公共阴极(COM)的数码管共阴数码管在应用时应将公共极COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电平时相应字段就点亮。当某一 芓段的阳极为低电平时相应字段就不亮。 数码管要正常显示就要用驱动电路来驱动数码管的各个段码,从而显示 出我们要的数字因此根据数码管的驱动方式的不同,可以分为静态式和动态 式两类 ① 静态显示驱动 静态驱动也称直流驱动。静态驱动是指每个数码管的每┅个段码都由一个 单片机的I/O 端口进行驱动或者使用如BCD 码二-十进制译码器译码进行驱 动。静态驱动的优点是编程简单显示亮度高,缺点昰占用I/O 端口多如驱动 5 个数码管静态显示则需要5×8=40 根I/O 端口来驱动,要知道一个89S51 单片 机可用的I/O 端口才32 个呢:)实际应用时必须增加译码驅动器进行驱动, 增加了硬件电路的复杂性 ② 动态显示驱动 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态 驱動是将所有数码管的8 个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起另外为 每个数码管的公共极COM 增加位选通控制电路,位选通由各自独立的I/O 线控 制当单爿机输出字形码时,所有数码管都接收到相同的字形码但究竟是那 个数码管会显示出字形,取决于单片机对位选通COM 端电路的控制所以峩们 只要将需要显示的数码管的选通控制打开,该位就显示出字形没有选通的数 码管就不会亮。通过分时轮流控制各个数码管的的COM 端僦使各个数码管轮 流受控显示,这就是动态驱动在轮流显示过程中,每位数码管的点亮时间为 1~2ms由于人的视觉暂留现象及发光二极管嘚余辉效应,尽管实际上各位数 码管并非同时点亮但只要扫描的速度足够快,给人的印象就是一组稳定的显 示数据不会有闪烁感,动態显示的效果和静态显示是一样的能够节省大量 的I/O 端口,而且功耗更低由于我们使用的FPGA 芯片的型号为EPF10K10, 有足够的IO 口分别去控制数码管嘚段选这里我们采用动态显示方式。 由于FPGA 的IO 口没有足够的驱动能力去驱动数码管所以需要数码管的 驱动电路,该驱动电路我们选择由彡极管组成的电路该电路简单,软件容易 实现其中一个数码管的驱动电路图如图3.6 所示。 数码管为共阴极当CS1=1 时,即三极管Q9 被饱和导通则数码管的公共 极被间接接地,数码管被选中数据将在该管上显示,当CS=0 时三极管Q9 被截至,则数码管的公共极被没有接地即使CSA,CSBCSC,CSDCSE, 第13 页共27 页 CSFCSG,CSDP 被送入数据也不会有显示 CSA,CSBCSC,CSDCSE,CSFCSG,CSDP 分别为数码管的位选 哪一位为“1”,即相应的三极管饱和导通则相应嘚数码管段被点亮。“0”为截 止相应的数码管段灭,这样数码管就有数字显示出来 我们在该系统使用了4 个数码管,使用动态显示即通过片选,是每个数码 管都亮一段时间不断循环扫描,由于人的眼睛有一段时间的视觉暂留所以 给人的感觉是每个数码管同时亮的,這样4 个数码管就把4 位十进制数据就显示 出来了 数码管驱动电路:由于单片机芯片没有足够的能力驱动4 个数码管,因此需 要增加数码管驱動电路 驱动电路我们可以选择由三极管组成的电路,该电路简单程序容易实现. 3.1.3 待测信号产生电路 可变基准发生器模块的功能为:主要鼡于仿真外界的周期性变化的信号,用 于电路的测试对频率的精度没有要求,只要能产生周期性变化的信号即可 该部分不为频率计的組成部分,再加上为了节省成本我们使用LM555 芯片 组建的多谐振振荡器电路电路如图3.7 所示电容C,电阻RA 和RB 为外接元 件,其工作原理为接通电源后5V 电源经RA 和RB 给电容C 充电,由于电容 上电压不能突变电源刚接通时,555 内部比较器A1 输出高电平A2 输出低电 平,即RD=1,SD=0,基于RS 触发器置“1”输出端Q 仩升到大于5V 的电压的三分之一时,RD=1,SD=1,基本 RS 触发器状态不变即输出端Q 仍为高电平,当电容两端电压Vc 上升到略大 于2*5V/3 是RN=0,SD=1,基本RS 触发器置0,输出端Q 為低电平这时Q=1, 使内部放电管饱和导通于是电容C 经RB 和内部的放电管放电,电容两端电压 按指数规律减小当电容两端电压下降到略小於5V 电压的三分之一时,内部比 较器A1 输出高电平A2 输出低电平,基本RS 触发器置1输出高电平,这 时Q=0,内部放电管截止于是电容结束放电,如此循环不止输出端就得 到了一系列矩形脉冲。如图3.8 所示 电路参数的计算: 为了使Q 端输出频率可变,RB 用电位器来取代 电容选择如果选择105的独石电容,即C=1uF= uF RA选1K的电10?10?6 2 时, f=240Hz, 由此可得 该电路的输出频率范围为: 240~1443(Hz)。 元器件的简介 LM555/LM555C 系列是美国国家半导体公司的时基电路峩国和世界各大 集成电路生产商均有同类产品可供选用,是使用极为广泛的一种通用集成电 路LM555/LM555C 系列功能强大、使用灵活、适用范围宽,鈳用来产生时间 延迟和多种脉冲信号被广泛用于各种电子产品中。 555 时基电路有双极型和CMOS 型两种LM555/LM555C 系列属于双极 型。优点是输出功率大驅动电流达200mA。而另一种CMOS 型的优点是功 耗低、电源电压低、输入阻抗高但输出功率要小得多,输出驱动电流只有几 毫安 另外还有一种双時基电路LM556,14 脚封装内部有两个相同的时基电路 单元。 特性简介: 直接替换SE555/NE555 定时时间从微秒级到小时级。 可工作于无稳态和单稳态两种方式 可调整占空比。 输出端可接收和提供200mA 电流 输出电压与TTL 电平兼容。 温度稳定性好于0.005%/℃ 应用范围 精确定时。 脉冲发生 连续定时 频率變换 脉冲宽度调制 脉冲相位调制 电路特点: LM555 时基电路内部由分压器、比较器、触发器、输出管和放电管等组 成是模拟电路和数字电路的混合体。其中6 脚为阀值端(TH)是上比较 器的输入。2 脚为触发端( TR ) 是下比较器的输入。3 脚为输出端 (OUT)有0 和1 两种状态,它的状态由輸入端所加的电平决定7 脚为 放电端(DIS),是内部放电管的输出它有悬空和接地两种状态,也是由输 入端的状态决定4 脚为复位端(R),叫上低电平(< 0.3V)时可使输出端为 低电平5 脚为控制电压端(CV ),可以用它来改变上下触发电平值8 脚为电 源(VCC),1 脚为地(GND) 一般可以把LM555 電路等效成一个大放电开关的R-S 触发器。这个特殊 的触发器有两个输入端:阀值端(TH)可看成是置零端R要求高电平;触发 端(TR)可看成是置位端S,低电平有效它只有一个输出端OUT,OUT 可 第16 页共27 页 等效成触发器的Q 端放电端(DIS)可看成由内部放电开关控制的一个接 点,放电开关甴触发器的反Q 端控制:反Q=1 时DIS 端接地;反Q=0 时 DIS 端悬空此外这个触发器还有复位端R,控制电压端CV电源端VCC 和接地端GND。 这个特殊的R-S 触发器有两个特点:(1)两个输入端的触发电平要求一高一 低:置零端R 即阀值端TH 要求高电平而置位端S 即触发端TR 则要求 低电平。(2)两个输入端的触发電平也就是使它们翻转的阀值电压值也不 同,当CV 端不接控制电压是对TH(R) 端来讲,> 2/3VCC 是高电平 1< 2/3VCC 是低电平0;而对TR(S)端来讲,> 1/3VCC 是高电平1< 1/3VCC 是低电平0。如果在控制端CV 加上控制电压VC这时上触发电平 就变成VC 值,而下触发电平则变成1/2VC可见改变控制端的控制电压值可 以改变上下觸发电平值。 3.1.4 待测信号整形放大电路 顾名思义该模块的主要功能为:将周期性变化的信号变成方波送入 AT89S52 芯片检测信号也许电压比较高在這里我们使用一个电阻和5.1V 的稳 压管组成的一个降压电路。如果输入的信号功率比较低或输入电阻比较低需要电 压跟随器提高功率或输入电阻然后经过一个电压比较器将不规则的周期性变化 的信号变成方波送入FPGA 处理,电路如图3.9 所示 电压跟随器,顾名思义就是输出电压与輸入电压是相同的,就是说电 压跟随器的电压放大倍数恒小于且接近1。电压跟随器的显著特点就是输入 阻抗高,而输出阻抗低一般來说,输入阻抗要达到几兆欧姆是很容易做到 的输出阻抗低,通常可以到几欧姆甚至更低。在电路中电压跟随器一般 做缓冲级及隔離级。因为电压放大器的输出阻抗一般比较高,通常在几千欧 到几十千欧如果后级的输入阻抗比较小,那么信号就会有相当的部分损耗在 前级的输出电阻中在这个时候,就需要电压跟随器来从中进行缓冲起到承 上启下的作用。应用电压跟随器的另外一个好处就是提高了输入阻抗,这 2 4 5 3 12 U1A R1 D1 VCC 2 4 5 3 12 U2A 10K R3 10K R4 VCC 51K R5 VCC 5V VCC 图3.9 待测信号整形放大电路 第17 页共27 页 样输入电容的容量可以大幅度减小,为应用高品质的电容提供了前提保证 电压哏随器的另外一个作用就是隔离,在HI-FI 电路中关于负反馈的争议已经 很久了,其实如果真的没有负反馈的作用,相信绝大多数的放大电蕗是不能 很好的工作的但是由于引入了大环路负反馈电路,扬声器的反电动势就会通 过反馈电路与输入信号叠加。造成音质模糊清晰度下降,所以有一部分 功放的末级采用了无大环路负反馈的电路,试图通过断开负反馈回路来消除大 环路负反馈的带来的弊端但是,由于放大器的末级的工作电流变化很大其 失真度很难保证。 电压比较器是集成运放非线性应用电路他常用于各种电子设备中,它将 ┅个模拟量电压信号和一个参考固定电压相比较在二者幅度相等的附近,输 出电压将产生跃变相应输出高电平或低电平。比较器可以組成非正弦波形变 换电路及应用于模拟与数字信号转换等领域 图3.10 所示为一最简单的电压比较器原理图,UR 为参考电压加在运放的 同相的輸入端,输入电压ui 加在反相的输入端 电路图传输特性当ui<UR 时,运放输出高电平稳压管Dz 反向稳压工作。 输出端电位被其箝位在稳压管的穩定电压UZ即uO=UZ。当ui>UR 时运放 输出低电平,DZ 正向导通输出电压等于稳压管的正向压降UD,即uo=- UD 因此以UR 为界,当输入电压ui 变化时输絀端反映出两种状态,高电位 和低电位 表示输出电压与输入电压之间关系的特性曲线,称为传输特性图3-1(b) 为(a)图比较器的传输特性。 常鼡的电压比较器有过零电压比较器、具有滞回特性的过零比较器、滞回电压 比较器窗口(双限)电压比较器。这里我们使用LM339 构成各种电壓比较 器 3.1.5 分频电路 ⑴频率的功能 为了提高系统的可测信号的频率,添加分频器可以扩大频率的测量范围 ⑵电路的选择与比较 分频电路鈳以使用CPLD 和74LS74 完成。 CPLD 和74LS74 也可以实现高速频率的分频工作但是一般情况CPLD 用 于多分频的,如10 分频以上使用1 片74LS74 可以将信号4 分频,在本系统 中为叻考虑成本使用74LS74将待测信号4 分频,即可时频率计的测量范围扩 图3.10 电压比较器原理 第18 页共27 页 大四倍电路图如图3.11 所示。 74LS74 是两个D 触发器组成嘚仿真如图3.12 所示。 3.1.6 5V 电源产生电路 该模块的主要功能是:为电路中的所有的元器件提供电源 在选择5V 稳压芯片时,可以选择5.1V 稳压管或LM7805 集成芯片由于的 不考虑负载的情况下,两种选择能得到同样的效果但是,加上许多负载时 5.1V 稳压管的输出电压会随着后面负载的输入电阻嘚变化而变化,如果电源的 输出电阻比较大而负载的输入电阻比较小的时候,负载的变化将会引起电源 输出电压的很大的变化由于LM7805 的輸出电阻非常的大,接近于无穷大 所以在制作电源时使用LM7805 在性能上将会比5.1V 稳压管好。即使负载的功 率很高我们也可以通过加入扩流电蕗使电源提高输出功率。 电路的选择与特点: 二极管的选择:选择1N400 系列中的1N40071N4007 的反向截止电压为 1000V,对于我们电路输入整流桥之前就已经通過变压器使220V 市电变为9V 的交流电1N4007 有足够的能力使9V 电压反向截至。通过4 个二极管组成的 整流桥后虽然把有正有负的交流电变成了全是正的角鋶电这样的交流电即使 有效电压为正5V 的,也不能把这样的电压给FPGA 和单片机等芯片供电需要 流。为了电容两端的电压不支持突变当外堺电压高于电容两端电压时,外界 就向电容充电当外界电压低于电容电压时,电容就要向外界放电通过电容 使电压保持在一个恒定的徝。我们在电路中使用的两个不同的电容为:C4、 C5C5 使用的是电解质电容,因为一般情况下电解质电容容量比较大存储电 量比较多,在滤波电路中多用于高频滤波这里我们使用的是容量100uF,最 高电压为25V 的电解质电容C4 使用的是独石电容,容量比电解质的小一般 在uF 以下,多鼡于低频滤波这里我们使用比较常用的104,即0.1uF 由Q1,Q2,Q3 组成的是过流保护的扩大输出电流的电路。Q2 的输出电流I0 增加为I0=I01+I02正常时,Q1Q3 截至,電阻R1 上产生压降使T2 导通 若I0 过流,I01 增加限流电阻R3 上压降增大使T3 导通,导致T1 趋于饱和 T2 管基-射间电压|VBE1|降低,限制了功率管T2 的电流IC1保护功率管不致 因过流而损坏。 将电容输出的电压送入LM7805 芯片继续稳压整流使电压变成FGPA、单 片机可以接收的5V 电源。 9V 的交流电输入到4 个二极管组荿的整流桥通过整流桥后,有效电压为 输入电压的0.9 倍即:0.9?9 ? 8.1?V ?,当通过接着的两个电容时这时的电 压为输入电压的1.2 倍,即: 甴于LM7805 要求输入电压高于9?1.2 ?10.8?V ? 标准输出电压2V,由于使用的是7805输出电压为标准的正5V,即输入电压 要高于5 ? 2 ? 7(V )通过整流桥和电容之后的電压为10.8V>7V,由此可以看出 LM7805 将正常工作输出电压为5V。电路如图3.10 所示 元器件的选型与电路参数的计算: LM7805 芯片简介: 外形图及引脚排列H 7805 系列为3 端正稳压电路,TO-220 封装,能提供 多种固定的输出电压应用范围广。内含过流、过热和过载保护电路带散 热片时,输出电流可达1A虽然是固萣稳压电路,但使用外接元件可获得 不同的电压和电流。 主要特点: 1 IN 3 OUT 2 GND U1 LM7805 Q1 PNP Q2 PNP Q3 NPN R1 当稳压器远离电源滤波器时要求用C1。 CO 可改善稳定性和瞬态响应 該模块的不足和对进一步完善提出建议: 该模块的不足: 转换的效率低:线性稳压器的效率直接与其调整管所消耗的功率有 关。调整管的功耗等于电流×(输入电压-输出电压)由此可见,有些情况下调整 管会产生较大损耗例如,负载为1A 时将10V 的电压降至5V 输出,线性稳 压器的功耗为5W效率将低于50%。该电路将会很耗电 散热问题:由上可知线性稳压器的功耗将在高于总电路的50%,例如我 们的电路功率为10W,那么线性稳压器的功率将会高于5W这5W 的99%将通 过热量散失到外界,如果散热管理不适当将会使整个系统在高温下工作影响 整个系统的性能之外,吔严重的影响着整个系统的寿命 提出建议: 线性稳压器的低效率迫使寻求新的改进方案,开关电源引起人们的关注 根据开关电源的工莋原理,在不同负载和电压下一个设计良好的开关电源的 效率可达90%甚至更高。这相比线性稳压器效率提高了40%。通过直观的比 较开关電源降压的优势便体现出来了,其他开关电源的拓扑结构同样具有相 近或是更高的效率开关电源设计不仅仅具有高效率这一主要优势,甴于功耗 的降低还带来许多直接的好处例如,与低效率的竞争产品相比开关电源的 散热片面积大大减小。降低了对热管理的要求;而苴更重要的是由于器件不 会工作在低效的高温环境中,大大提高了器件的可靠性进而延长工作寿命。 图3.11 第21 页共27 页 3.2 软件设计 3.2.1 编程语言的選择: 汇编和C 语言 汇编语言(Assembly Language)是面向机器的程序设计语言 在汇编语合中用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号 (Label)代替地址码这样用符号玳替机器语言的二进制码,就把机器语言变成 了汇编语言于是汇编语言亦称为符号语言。 使用汇编语言编写的程序机器不能直接识别,要由一种程序将汇编语言 翻译成机器语言这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中 语言处理系统软件汇编程序把彙编语言翻译成机器语言的过程称为汇编。 汇编语言比机器语言易于读写、易于调试和修改同时也具有机器语言执 行速度快,占内存空間少等优点但在编写复杂程序时具有明显的局限性,汇 编语言依赖于具体的机型不能通用,也不能在不同机型之间移植 C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大 的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语 言编写的用C 语言加上一些汇编語言子程序, 就更能显示C 语言的优势了, 象PC- DOS 、WORDSTAR 等就是用这种方法编写的。归纳起来C 语言具有 下列特点: ①C 是中级语言 它把高级语言的基本结构和語句与低级语言的实用性结合起来C 语言可 以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工 作单元。 ② C 是结构式语言 结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必 要的信息交流外彼此独立这种结构化方式可使程序层次清晰, 便于使用、维 护以及调试。C 语言是以函数形式提供给用户的, 这些函数可方便的调用, 并具有多种循环、条件语句控制程序流向, 从而使程序唍全结构化 ③C 语言功能齐全 C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更 高。另外C 语言也具有强大的图形功能, 支持多種显示器和驱动器而且计算 功能、逻辑判断功能也比较强大, 可以实现决策目的。 ④C 语言适用范围大 C 语言比汇编更容易编写和移植虽然該程序对时间要求比较严格但是如果 我们使用定时器的话对

代理成本价揭秘提到蚁王可能夶家也都是比较熟悉的,当然蚁王的是非常不错的,日常生活中发现夫妻生活质量变差肾虚,勃起困难对丁丁的尺寸不满足都可以垺用蚁王来改善,它对于促进我们男性朋友们性功能是很有帮助的但是很多的男性朋友们可能比较短小,所以就想要服用蚁王来增粗那么蚁王有增粗的吗?相信大家都是比较关注的我们一起来了解一下。我是蚁王指定小静微信:(招代理十盒2200元起)全国批发零售

蚁王臨床测试效果显示:

  152%的人群服用蚁王1天延长时间!

  2,67%的人群服用蚁王一天硬度得到提升!

  3,71%的人群服用蚁王1盒增长明显龜头变大!

联系我时,请说明是在列举网看到的谢谢!

泰国精戈能量咖啡效果好吗 真实反馈案例后怕 宁波

泰国精戈能量咖啡小蕊微信【】

泰国精戈能量咖啡小蕊微信【】

特别提醒:广大男性朋友如果您有房事时间短、勃.起硬度不够、性功能衰退、控制不住射精、神疲乏力、肢体困倦、夜尿频多、腰膝酸软,两腿无力、心烦易怒...等问题不妨添加

泰国精戈能量咖啡正品订购中心小蕊【微信:】进行咨询,会详细为你诊疗解答并分享成功案例,帮助更多的男性朋友摆脱烦恼!要想女人能够死惢塌地的爱你就得给女人想要的,老话说得好汉子硬了,妹子自然也就软了

男人三十除了忙事业、忙家庭,更应该呵护自己的肾健康一旦肾精亏虚就会烦躁易怒、性冷淡、腰膝酸软、精神倦怠。夫妻生活时间短不能让自己满意,更让伴侣扫兴有的人30岁肾虚、肾虧活得像50岁;有的人50岁还能肾气充足,快活得却像30岁补肾的这些错,你是否还在犯

泰国精戈能量咖啡效果好吗 真实反馈案例后怕 宁波 泰国精戈能量咖啡经过泰国FDA认证,FDA证书识别号:24-2-8当然生产过程也是经过严格控制的能确保每一盒产品到客户手里都是优质的,非常安全泰国精戈能量咖啡小蕊微信【】

泰国精戈能量咖啡不仅具有快速增硬的效果,而且长期使用能完全解决勃起困难、早i泄等问题而本品的主要成分为阿拉比卡咖啡,小山奈花蚕蛹,枸杞等使所有提取物保持完整性和活性,因此效果会更好服用后无任何副作用和。

精戈咖啡的主要:修复海棉体增加尺寸调节身体增加抵抗,提高免疫平衡分泌增加欲望,彻底调节阳i痿早i泄、肾i虚肾亏增硬助勃,提高精力全方位改变亚健康的状态等。

调理身体请选择泰国精戈能量咖啡的4大理由:

1、基于信任:泰国进口,泰国FDA认证这是一个负责任囿实力的品牌;

2、发于安全性:珍稀材料提取与咖啡完美结合,没有副作用没有依赖;

3、成于有效性:1-3天见效吸收好的当日有感觉,比傳统的打粉中

我要回帖

更多关于 某学校组织队列训练 的文章

 

随机推荐