前言
编写本书有两个目的,一是为计算机、电子通信相关专业大学生指引一个学习的方向;二是用更为简单易学的方式引导读者走进嵌入式软件开发的大门。
近两年亲身走近在校大学生,与他们直接接触,感触最深的是优与劣的差距太大,没有方向感、迷茫、沉迷于游戏的大学生太多。之所以出现这种现象,不能说和现在的教育状态无关!大学之前都是填鸭式教学,高中三年是三点一线式生活;大学之后,忽然没人管了,大把的时间是自己的,而大学的教育还停留在教师只讲好自己的课,没人引导人生职业规划的状态。这就造成了很多大学生在大一失去入学时的那股新鲜劲之后,慢慢沉迷于网络、游戏。但也并非都是如此,一些电子通信类专业的学生在大一学过C语言后,暑假就自学了51单片机,大二拿下STM32(Cortex-M3),大三就开始接项目了;当然也有些学生在大四做毕业设计时还读不懂别人写好的源代码,更谈不上设计了。鉴于此,我们希望看到本书的同学能够更清楚地认识自己的发展方向。我们无法按专业来一一分析,在此仅按照技术的应用方向给出一个发展方向引导图。
首先,你可以选择一个方向:是应用层开发,还是嵌入式开发呢?若不知道自己在哪方面更有兴趣,你可以看看自己所在专业的教学规划,看看更偏重哪个方面。例如,计算机专业大多偏重于应用层开发,而电子信息工程专业则偏重于嵌入式开发。而后,就可以由浅入深,慢慢深入学习了。
这里以嵌入式开发为例,在大一学习过C语言程序设计之后,你可以在51单片机上做一些练习,这样你会更熟悉C语言,同时对单片机也有浅显的认识,此时最大的转变是通过操作寄存器实现外围电路的控制;而后,可以选择一款更复杂的单片机,如AVR,此时的重点是学习如何通过数据手册来学习单片机,因为51单片机的数据手册大多过于简单,不能直接用来指导学习。在以上的学习过程中,你会用到电路、模电、数电的一些简单应用,这样在大二学习相关课程时,自然不会陷于“学这些枯燥的理论有什么用呢”的迷茫。
学习AVR之后,你对嵌入式开发就有了基本的认识,这时基本就可以确定后面自己要深入学习的方向了:继续MCU的学习、转向DSP的学习,还是学习CPLD、FPGA,当然也可以选择进行电路板设计。而且这些方向不是相互独立的,你在选择一个方向之后,还会扩展到其他相关方向的学习。例如,学习嵌入式程序设计,同样要读懂原理图,甚至自己去设计原理图,搭建开发环境。同时,你会对后期的专业课程有更清晰的认识,刚好可以在有些专业课程上花费更多的时间去深入研究。
有些同学会觉得在学习51单片机之后,直接跨入STM32(ARM之Cortex-M3系列)更好,我并不这样认为。我觉得学习51单片机是简单的入门,学习AVR是使用数据手册学习单片机的方法,而到STM32阶段可以重点通过固件库例程来学习单片机,同时扩展到文件系统、操作系统等,这样由浅入深会很轻松。而且,这样学习也并不耽误时间,以我的教学经验,在51单片机学习阶段用一个月的时间,多做一些简单的应用,可以更深刻地理解嵌入式开发的理念;而到AVR阶段,用两周就可以学会通过数据手册学习单片机的方法;到学STM32时,基本上一个月也就能够应用了。近几年,我按照这个思路编写了一套教材,在附录C中按照该学习方法推荐了一些相关书籍与网站,有兴趣的同学可以参考。
编写本书的第二个目的是用更简单易学的方式引导读者入门。这里根据读者的反馈,使用Proteus仿真和开发板共同学习。读者可以首先在Proteus中验证实验,而后将实验例程下载到开发板上运行,使之更接近工作研发的过程,同时比较仿真和实验练习有何区别;而后对例程进行修改,加深对例程的理解;最后可以根据例程发挥想象,实现自己的设计。
另外,为了突出嵌入式开发的思想——通过操作单片机的寄存器实现外设电路的控制,本书第9章总结了51单片机的21个特殊功能寄存器,其中只有6个是需要重点掌握的(需要熟练掌握对其位的操作)。这就将学习的门槛降到最低:学习6个寄存器就能学会51单片机程序设计,如果每天掌握1个寄存器,那么6天就能学会单片机。
全书内容共3篇,3篇内容是独立的。入门篇,是对单片机概念的引入、工具的介绍、单片机基础知识的讲解。学习完入门篇,你会对单片机有个整体的认识,也会知道单片机编程是怎么一回事。如果要深入学习,可以看后面的章节,也可以直接选择其他教材进一步研究。提高篇,是在入门篇的基础上通过扩展外围元器件进一步讲解单片机的应用,可以作为扩展内容学习。应用篇,通过实例的形式应用前两篇的学习内容,如果你有一定的单片机基础,也可以直接用来作参考样例。
另外,除第19章外,本书所有的实例都没有提供电子版代码,因为我一直认为,学习程序设计最重要的就是自己动手,只有自己把代码一个字一个字地输入进去,自己建立工程、编译、仿真,才能学到其中的精髓,如果仅仅是运行、仿真一下别人写好的程序,那是没有什么意义的。甚至,你不但要学会、看懂、调通书中的例程,而且要学会将自己的想法融入到实例之中,学会修改、优化代码。正所谓传授者应授人以渔而非授人以鱼,而读者若能做到授人以渔而非授人以鱼,那将是完美的教与学的过程。书中的所有实例都是我输入计算机做过仿真、实物调试之后才使用的,如果因为描述不清楚或其他原因使调试不能通过,请读者给我发电子邮件或者直接登录到我的博客(young45cublogcn)提问,我会尽快答复并给出解决办法(第19章的例程可以通过该博客下载)。
本书的开放环境是Windows 7系统,使用的工具是Proteus 78、Keil C51 952,学习时最好能选择相近的版本。
全书共19章,由杨百军统稿。其中,杨百军编写第15~19章,湖南女子学院的张玲玲老师编写第1~4章,中国人民解放军国防科学技术大学张志洲老师编写第5~9章,苏州工业园区服务外包职业学院的李鹏举老师编写第10~14章。另外,参加本书编写的还有黄得建、康磊、李楠、刘远峰、聂运中、王路、许元霄、杨俊杰、赵景丽、周宏云和张延杰。此外,深圳市普中科技有限公司和西安网联商贸有限公司的王鸿先生为本书的编写提供了HC6800-EM3 V30开发板,在此表示感谢。
“学然后知不足,教然后知困。”由于我们能力有限,写作过程中难免会出现一些错误,希望读者给我发电子邮件(young45@126com)指出。
最后感谢我的家人,特别是我的父母,是他们用辛勤的汗水培育了我,才有今天的成长;也感谢编写过程中给予我帮助的朋友:段富军、许元霄、高金龙、申雷、黄桂平、钦桂勤等,是他们的关心和帮助让我们完成了本书的编写;特别感谢远在东北的朋友郝云鹏,我们是通过单片机相识的,在近几年的工作和生活中他给我提供了很多的帮助;还有那些来信给出建议的读者们,如郭凯、张锋、王帅阳、牛鹏举、孔宁、李泽飞、吴祖顺、竹显涛、刘宇轩等;也感谢电子工业出版社的王敬栋、张剑、苏颖杰及其他编辑朋友。最后,感谢人生路上伴我走过的所有朋友!
杨百军
于湖南长沙·国防科学技术大学