——这本书适合你吗?
有关单片机的书籍很多,嵌入式系统也是目前比较热门的话题,那么嵌入式与单片机有什么关系呢?本书所介绍的主要内容是什么?有哪些特点?你的学习目的是什么?对于嵌入式系统应当采用什么样的学习方法?总之,这本书是否满足你的要求,在选定这本书之前建议先把绪言看完。
一、 嵌入式与单片机
1. 什么是单片机
计算机如果以功能划分,有大型机、中型机、小型机、微型机。对于前三种,即大、中、小型计算机,在目前的教材中很少涉及,人们接触最多的是微型机,具体地说,就是个人计算机(Personal Computer,PC),而在现实生活中应用数量最多的是单片机。
目前已经很难从计算机的体积、功能、运算速度、字长对其进行分类,人们往往按照计算机的物理结构进行简单划分。什么是微型计算机呢?从计算机的组织结构来看,它包括五大部件: 运算器、控制器、存储器、输出设备、输入设备。微机的最大特征是其中的运算器、控制器集成在一个芯片,称为中央处理器(Central Processing Unit,CPU),同时,计算机所有部件组装焊接在一块印刷电路板上(PCB板),称为PC机主板。如果把主板中的电路集成在一个芯片中,也就是说,一片集成电路包含计算机的主要电路,那么这种集成电路芯片称为单片机。
单片机经常应用在工业控制领域,又称为微控制器(Micro Controller Unit,MCU)。一些单片机芯片中还可以集成D/A数模、A/D模数转换电路,各种接口电路和驱动电路,如LED驱动、LCD驱动、PWM调制、I2C总线、SPI总线、CAN总线,USB总线等,甚至集成了DSP电路、CPLD、FPGA可编程电路,种类日趋繁多,可适用于不同应用领域。
单片机的应用极其广泛,从日常家电——计算器、电视机、电冰箱,到医疗仪器、工业仪表、智能传感器、过程控制等几乎无所不能、无处不在。如今的一部轿车从它的各种检测系统到控制伺服系统,往往就要使用几个到十几个单片机。单片机中的程序为特定应用而编写,一旦生产定型,软件程序是不能更改的,显然,单片机系统常常作为某种专用的计算机系统。
2. 什么是嵌入式系统
嵌入式系统是目前计算机界比较关注的话题,嵌入式系统是什么?它和单片机又有什么关系呢?嵌入式系统和单片机是不同视角的两个完全不同的概念,单片机是从计算机体系的物理结构上而划分,嵌入式系统是从计算机应用对象上划分。
实际应用中,计算机分为专用计算机和通用计算机。大家熟悉的PC机是典型的通用计算机,PC机本身是一个独立的完整的设备。它可以配置不同的操作系统,在操作系统下又可以运行各种应用软件,如文字处理、图形处理、语音处理和网络连接等。
嵌入式计算机系统属于专用计算机。“计算机嵌入式系统”一般不会是一个独立的设备,仅仅是整体设备的一个组成部分,或者说,设备的某一部分功能是由计算机系统来完成的,其中的计算机部分称为嵌入式系统。比如在一个大型设备中,整个系统包括各种分系统,如数据采集系统、检测系统、识别系统……; 倘若其中某一分系统是由计算机作为核心而组成实现的,那么,从计算机应用角度来讲,其中的“计算机部分”称为嵌入式系统。
一部设备有可能包含多个计算机嵌入式系统,人们熟悉的计算器、ATM机、数码相机、手机、各种智能仪器及各种大型设备等,均包含计算机嵌入系统。比如大家熟悉的手机,它是典型的嵌入式系统产品,手机的主要功能是打电话,其附属功能通常包括录音、文字输入、文字显示、通信录排序、查找、网络连接、游戏等,这些功能的组织和实现,在很大程度上都依赖手机中的计算机系统来完成,“计算机系统”是手机这个设备的一个重要组成部分,“计算机系统”并不是一个独立的设备,它嵌入在手机这个通信设备中。
3. 单片机与嵌入式
单片机与嵌入式系统之间并没有必然等同的关系,上面已经谈到单片机是指计算机的一种物理结构形式,而嵌入式系统是指计算机的一种特定应用方式,至于嵌入式系统采用什么样的体系结构,则完全由设计者决定; 事实上,在早期的嵌入式系统中大量采用的不是单片机,而是普通微机芯片,如8080、8085、Z80、68HC00,和当时的通用微型计算机采用的芯片,以及体系结构上并没有明显的差别,随着集成电路技术的发展,单片机的功能越来越强、种类越来越丰富,而嵌入式系统一般来讲,对于体积、电源功耗、电磁兼容性以及成本有较高的要求,而单片机在这些方面颇具优势,所以,目前的嵌入式系统一般采用单片机芯片。
嵌入式系统是最近几年风靡起来的热门话题,但是嵌入式这个概念,在微机刚刚出现时便已经存在和应用。可以这样说,由于单片机芯片主要应用在嵌入式系统中,通常所说的单片机系统设计,从应用进度来说,称为嵌入式系统设计更确切。
4. 关注嵌入式
既然嵌入式系统并非新的概念,那么,为什么近些年会受到如此的关注呢?我们知道,在计算机应用中,仅从芯片数量而言,嵌入式系统所占的比例达到70%~90%。由于大规模、超大规模集成电路技术日臻成熟,硬件成本在计算机系统中所占比例越来越小,由于硬件成本的降低,功能的增强大大扩展了嵌入系统的应用领域和范围,从而进一步激发嵌入式系统的发展。
一般来说,简单的嵌入式系统没有必要引入操作系统,当系统达到一定规模时,引入操作系统便成为必然,操作系统的引入使嵌入式应用进入一个新的发展阶段。
说到嵌入式系统,自然使人想到ARM,这是一种16/32位RISC微处理器,完全可以称它是32位的单片机。为什么它的出现会引起计算机界的如此关注,其原因就在于由ARM组成的嵌入式系统可以相对容易地引入操作系统,充分利用目前的各种软件资源。其中的操作系统软件,如μC/OSⅡ、μClinux、Windows CE、VxWorks,其他软件资源,如C语言、C++语言、C#语言、Java语言,提高了软件可移植性,拓展了程序的兼容性和重复引用,操作系统的引入和普及为嵌入式系统的应用开拓了更为高层、更为广阔的前景,也使嵌入式系统设计成为计算机专业中极具发展的一个独立的技术领域。
5. 嵌入式的入门之道
在32位ARM如此热门的时候,撰写一本关于MCS51的书,似乎不合时宜,笔者主要从以下几个方面考虑。
其一,8位的单片机并不过时,它们品种繁多、价格低廉。目前在嵌入式系统设计中,相当多的情况仍然采用MCS51系列,因为在这些情况下8位机仍然可以满足设计要求,8位单片机仍然有非常广阔的市场,在功能满足的前提下,性价比更是首要考虑的问题,而且时至今日,仍然有不少厂家不断有新的MCS51系列推出。
其二,这本书是作为教材编写的,不是新技术介绍; 新的技术固然先进,但是它不适合初学者学习。作为嵌入式系统设计的入门,笔者认为应当从8位单片机入手,应当从MCS51系列入手,如果掌握了8位的单片机,那么对32位的ARM的学习就会轻松得多。另一方面在教学中,“知识”的本身不是第一位的,而学习掌握“知识”的方法才是教学的真正目的,“知识”即教学内容应当由浅入深,循序渐进,充分突出“获取”方法的介绍。
其三,ARM的最大热点是操作系统的引入,显然,操作系统的引入是嵌入式系统设计中较高层次的知识领域,需要较为全面的软件、硬件基础知识。对于32位ARM的学习,其重点和难点应当放在操作系统的引入,侧重在软硬件结合方面,在学习它们之前,如果对嵌入式系统设计中最基础的问题,没有充分理解和掌握,仅仅浅尝辄止,那么对于复杂问题,引入操作系统的学习将无从谈起。
二、 有关这本书
本书主要针对大学专科及本科电类学科计算机应用专业而撰写。在学习这门课程之前,大多数读者应该已经学习了“模拟电路”、“数字逻辑”、“计算机组织结构”、“微机原理及应用”、“汇编语言程序设计”课程,起码需要学习过前两门课程。书中对于一些最基本的概念每个章节都会作系统的回顾和复习,以便适应不同的读者。单片机中的理论知识,从概念上来讲,并没有太多的新的内容,这门课程的主要教学目的是前序课程的综合与应用,是培养硬件、软件综合应用能力; 较多的实验安排也是培养实践动手能力、自学能力的一个很好途径。
强调基础、强调实践、强调自学能力的培养是本书的宗旨,希望将这门课程变为以自学为主、以实验为主导的课程。
1. 撰写宗旨和主要内容
单片机发展到今天,系列繁多,型号品种达千百种,从整体上看很难做出一个客观的评价,只能说各有长短,在教学中我们不可能,也没必要进行全面的介绍,由于MCS51比较典型,应用广泛,开发仿真设备普及,而且有C语言支持,相关的书籍、参考资料丰富,所以本书仍然选择MCS51系列,具体选择ATM89C系列产品。
书中的程序全部使用汇编语言编写,这样做的目的是为了在程序编写、程序调试中加强对系统结构的深入理解,充分理解指令的运行。对于高级语言C51的掌握是完全必要的,但不应当在入门阶段,如果读者学习过C语言,同时参考有关C51的专门教材,C51的学习留作自学。
授之以鱼,不如授之以渔,话虽然如此,但是在教学中如何体现,并不是三言两语的事情,教学的目的不仅仅是介绍有关它的内容,更主要的是介绍有关如何掌握这门学科技术的基本方法和途径; 教学目的第一是方法和思路,第二才是具体知识内容,笔者就是遵照这样的指导思想撰写这本教程的。
学科的知识结构与学习及教学方法密切相关,计算机学科的知识结构有一个显著的特点,它不像多数其他学科那样知识结构呈现为塔状或树状,而是呈现为网状,软件硬件相互交叉,各种概念、不同内容相互交叉,专业课程之间以及课程中的内容很难找到一个“合理”的排序,而且有些内容也很难一下就讲解明白,因而前后内容的交叉讲解,以及最后的综合讲解比较重要,本书在编写中章节内容会有所交叉,甚至会有所重复,请充分注意和理解这一特点。
2. 授课方法建议
本书共7章,内容在逻辑上分3大部分。第1部分包括第1章“编码与数制”、第2章“数字电路设计基础”、第5章“汇编语言程序设计”,这是对前序课程的重复和强调,是计算机学科中最基础的部分。这部分必须充分掌握,对于计算机专业的学生,这部分是前序课程在本书中有针对性的回顾,完全留给学生复习。第2部分包括第3章“MCS51指令系统”、第4章“MCS51系统结构”,是有关嵌入式系统设计的主要内容。也是课堂讲授的主要内容。其中以第4章为主,第3章内容不必独立讲解,主要穿插在第4章及第5章中介绍。第3部分包括第6章“仿真开发系统”和第7章“实验与实践”,作为实验部分,书中给出大量的示例和实验习题,实验是掌握理解本课程的主要手段。教学中主要讲解仿真器的使用和较大实验题目的分解和调试,其余大部分由学生自己动手,其中的基础实验部分在讲授第4章时可以穿插进行,适当提前进入实验教学效果更好,也可以提高激发学生的学习兴趣。
根据笔者的教学经验,对于计算机专业的学生,课堂授课24课时左右,实验课应当在30课时以上; 挑选部分实验作为指定必做内容,其余由学生自由选做。
3. 有关实验的建议
这是一门典型的实践学科,既没有抽象的概念,也没有复杂的计算,一些所谓的难点及较难掌握的概念,其本身并不复杂,之所以称为“难”,往往是由于它们不容易用文字一下子表达清楚、准确和全面。许多人都有这样的体会: 看书看不懂,但通过实例,自己动手,甚至看别人动手,便很快便明白了。嵌入式系统设计这门课,“干讲不练”、“干看不练”是绝对不能学好的,因而学好这门课,实践是其关键的一环。教师如何设计好实验内容,学生如何做好实验,在这门课的教学中占有举足轻重的地位。
目前的教学强调对实践能力、动手能力的培养,虽然在课时安排上体现了这一精神,但是能够充分体现这一宗旨的教材鲜有所见,讲义往往是教授理论,实验指导书才是讲解实践问题,使得理论知识和工程实践在形式上迥然分离,内容上也缺乏有机的融合。就此问题,笔者愿作一个尝试,全书体现“以自学为主,以实验为主导”的指导思想,将讲义和实验指导书合二为一,理论讲解与实验紧密结合,理论指导实验,实验验证理解,其中第4章对于MCS51系统结构中的每一部分的介绍,在实验中都有一个对应的验证性实验,听课后随即验证,使学生在实验中学习整个课程; 使授课形式转变为“在教师的指导下,通过实验自学”。
实验中教师需要根据教学进度和学生的掌握程度对第7章“实验与实践”中的实验项目内容有所选择,对不同性质的实验,验证性实验、综合性实验、设计性实验在数量上和前后顺序上给予安排和组织。
4. 关于本书中的程序
本书中涉及的所有程序都已上机通过,由于篇幅所限,有些程序在书中省略了,读者可到清华大学出版社网站(http://www.tup.com.cn)下载。
作者2008年5月