一、前言
很多单片机初学者与我交流时总说的一句话是我现在是单片机初学者,我怎样才能更快的学好单片机,我该从哪方便入手。对于这个问题,现在就我自己如何学单片机,如何入门,如何熟练谈谈想法。
先说单片机,现在用的比较多的以51为内核的8位单片机(考虑到成本及引脚资源在实际开发中用的51单片机型号不一),它的学习资料非常多,且学习成本非 常低,可能有些初学者会说企业里用的不是51单片机,更多的是松翰、义隆什么,但是我想说的是那些单片机的辅助开发工具你有吗。51单片机对于智能电子技术的入门学习是非常有优势,成本低,开发简单,一线下载程序,ARM太神秘,PLC太高贵,想来想去还是51,曾经有过AVR和PIC,但是现在51也不 赖。
那怎样才能更快更好的学好单片机呢?
单片机作为集电子技术与计算机编程技术为一体是一项非常重视动手实践的科目,如果你是单片机高手,那么说明你也是计算机编程和电子技术高手。
二、学习单片机一定要看书
不能总是看书,但是学习它首先必须得看书,那这不很矛盾?因为从书中你需要了解单片机各个功能寄存器(比如引脚控制寄存器、定时、中断、串口相关寄存 器),控制单片机的核心是用程序去控制单片机的各个功能寄存器,给寄存器赋值二进制数据0或者1,对于像中断、定时器、串口、AD转换等内部资源寄存器, 单片机也可以通过二进制数据0和1进行设置和使用。比如单片机引脚寄存器P1,语句P1=0xfe;(MOV P1,#0FEH)指控制单片机P1口的第 一个引脚输出低电平,其他引脚输出高电平,外设电路根据高低电平工作。比如中断允许寄存器IE,语句IE=0x81;(MOV IE,#81H) 则说明 控制中断打开总开关和外部中断0的子开关。当然了,单片机的寄存器还可以接受位控制,这样编程更方便。
至于看书,只需大概了解单片机各管脚、各个功能寄存器是干什么的能实现什么功能就够了?这个非常重要,这也许是看单片机参考书最主要目的之一。
第一次,第二次你可能看不明白,但这不要紧,因为还缺少实际的感观认识。通过接下来的实验就可以非常感观的认识,在这个过程一定要花时间,学习程序不能硬背,但是学习寄存器一定要下功夫,理解他的功能所在,适当的时候当单词背下来。
推荐一本书,就这一本就足够了,书名是《列说8051》,有汇编语言和C语言两种版本,现在已经是第三版本了。非常强悍的一本书,没有广告,没有局限,不像培训手册,更不像教科书,完全是一本非常好的参考书。我用一个五一假期的时间看完了这本书,真的当时看完后,觉得自己已经是单片机高手了,很多曾经抽象的知识不再抽象。书中图文并茂,内容安排紧张有序,并非市面上很多说教的技术文档式的书,什么学完概念,学指令,学完指令学接口,学完接口才知道,原来学 习单片机像在学天书,因为前面的章节已经使你头昏脑胀了,自己看还好,一讲更有问题。
那如何看书呢?第一步先根据书本的安排循序渐进的看完前两章,在你脑子开始发热,觉得自己已经是工程师的时候,接下来一定是实践,一定是实践啊,这是非常 非常关键的,当然了实践并非一定是左手电烙铁右手万能板的那种,也可以是仿真软件Proteus,或者是自己自己电路原理路的简单单片机实验板(千万不要 用那种有贴片器件很多,看半天看不清电路连接的那种)。三国期间,诸葛亮挥泪斩马谡的重典告诉我们纸上谈兵害人害己,学习单片机也一样,很多相关专业的研 究生甚至博士生直到毕业都不清楚单片机的IO口的分布,不知分布谈何开发。
只要过了第一关,后面的路就好走,万事起步难啊。
第二:你身边如果有单片机入门者,动手能力比较强,请他帮忙,搭个简单的单片机最小电路,哪怕是控制一个LED闪烁的电路。只要在你眼皮底下经过电路设 计、程序编写、程序下载都通过了,那你就要感谢他一辈子,因为你已经在入门了。对于他们来说,做个单片机的最小系统板是轻而易举,而对于初学者可就难多,中间的一层窗户纸破了什么都简单了。因为在这个过程中,你学会了如何下载程序到单片机内部,如何识别单片机,如何设计单片机最小电路。为什么有很多电子和 计算机专业的学生不好找工作,因为他们中很多同学在将自己简历设计的眉飞色舞的时候,他还没有见过单片机单片机。
因为只有对硬件了解,才能熟练运用。只有知道程序是如何被下载的,才会清楚为什么要写单片机控制程序,这个动力来自于哪里,来至于心里有底。
单片机编程就是与单片机对话,如果不知道对方谁,有没有再听,你还会有说话的冲动吗。当然了如果没有这样的人,还是那句话,在网上多找几个最小电路电路原 理图,在面包板上焊接就可以了。当然了这个也不会的,那建议你一定要买一块功能简单的实验板,以后单片机的学习实验及项目测试验都用的上。
四、如何迈入单片机开发世界
有了单片机实验板你就要多练习,最好是自己有台电脑,少下载几部电影,少网络游戏,把实验板和电脑连好,安装上必备的软件 (Keil Proteus STCisp),下载参考程序,并修改参考程序,从最简单的交通灯实验开始,等你发现你能控制交通灯,并了解交通的软硬设计 的时其实你已经入门了,你会发现单片机是多么迷人的东西啊,这不是在学习知识,而是在提升自身的价值。
用途那么广的交通设计都不在话下,你还会为自己身无绝技而烦扰吗?还会觉得自己什么都不会吗?计算机编程、电子技术的专业知识都用上了啊。
当你编写的程序按你的意愿实现时,比做什么事都开心,那种学习的收获感和成就感还有充实感是非常难得的。然后让数码管亮起来显示你所需要的数字,都到这一步,你已经不能自拔了,你已经开始考虑你这辈子要走哪一行了。
入门入门,什么才叫入门,要对得起自己啊。
我的要求很简单,单片机是否入门只有三点:
1、独立掌握Keil+Proteus两大软件的使用方法并设计出仿真版的交通灯。
2、独立在面包板上搭接单片机最小电路,并通过下载器将控制一个LED闪烁的HEX文件下载进去看到效果。
3、清楚自己单片机学的动力所在,并为自己的学习做一个规划。
但是在写程序的时候你肯定会遇到很多问题,而这时你再去翻书找,这其中你会找你之前学过的编程的书,还有数电模电的书,你会发现原来之前学的知识还是有用 的。遇到不懂再去找以前学过的书本查阅,这才是 “温故而知新,可以为师矣”的大道理啊。知识必须用于现实生活中,解决实际问题,用单片机设计个简易的家 电定时器、红外遥控器什么,这样才能发挥它的作用,好好想想,上了这么多年大学,探索了那么久,犹豫徘徊,天天上课,在课堂上学到了什么?、
是不是为了期末60分的考试而忙碌,侥幸靠了90分,很高兴啊,在别人面前吹自己专业知识如何如何学习的好,殊不知,大学考试不像高中考试啊,拿到奖学金 又怎么样。下学期开学回来一想,所学的知识已经忘得一干二净。学到什么了?为什么要推荐学习单片机,因为单片机是工科生学的,集合计算机编程电子技术及多 门控制语言为一体的学科,与其说是在学习单片机,不如说是在学习一个大学科。
五、学习单片机是汇编编程还是C语言编程
关于用汇编和C语言编程的问题。
这个问题困恼很多人,但是我觉得学习汇编语言和C语言就像一个人进入社会要学习方言和普通话一样。都要掌握,孰重孰轻自己把握。可能主要是学校教学和部分 教材引导,大一开了C语言编程,没等学生知道到底C语言有什么实际用途,马上其他的语言一下子过来了。即使开设了专门单片机课程,但是课程的内容与技术文 档很相识,程序虽然很多,但完整的不多,所以学完了也不知道,到底为什么要学习编程。
很多同学大一就开设了C语言的课,我也上过,但是那时就是天天几乘几,几加几啊,求个阶乘啊,用C语言去解决小学数学问题,每周两次上机,对着书本不停的敲打,完全在练习打字速度。下课了也不知道自己到底掌握了什么,掌握了这个有什么用途。学完了有什么用?
如果在面试的时候,老板问,你学过编程吗,你脑子里马上是什么“C语言,VC什么VB。很多,什么C语言是基础是面向工程的,什么VC是高级面向对象 的”,但是老板又问,你能将你所学习的C语言应用到实际开发中,比如设计一个定时报警器的C语言。这下傻了,老师没教过啊。
单片机编程用C语言或汇编语言都可以,但是我建议用C语言比较好,模块化管理编程方便,移植性强,适合编写大程序。如果原来有C语言的基础那学起来会更 好,如果没有,也可以边学单片机边学C语言。虽然很多人是从汇编语言开始接触单片机的,但是写小程序汇编语言还是简单的,如果要实现一些算法,那汇编语言 就不简单了。虽说C语言编译以后代码量明显比汇编长,而且执行效率也没有汇编语言高,但是在以前单片机开发中芯片工艺的限制,及单片机主频的限制,很多单 片机内部存储器小的可伶,主频也小得可伶。但是现在不一样了,芯片内部的存储器根不不在乎这点差别。主频也越来越高。
那汇编语言是不是不学了呢?不是的,一定要学习,有两方面首先入门单片机的时候要用汇编语言,它的语法简单。第二如果你要做单片机的程序的高级设计师,那 汇编语言是非掌握不可的,很多像高级单片机ARM都是汇编语言作为引导代码的,还有就是很多新出品的单片机起先也是先有汇编语言编译器之后才有C语言编译 器。所以,我觉得对于单片机学习汇编语言入门,C语言精通,汇编语言再精通。
有句话很有道理“单片机C语言高手绝对是汇编语言高手,但是汇编语言高手不一定是C语言高手”
最后,对于单片机的学习,入门为先,入门了以后就要去关注市场,关注企业,企业需要什么样的人才,我想有了基础以后在面试之前了解下企业所需要的单片机类型,很快就上手了,毕竟学习是相同的。