08年因为FM发射电路是用BH1415芯片做的,需要单片机控制,所以我开始用单片机。虽然之前在学校学的时候是作为一门课程来学的,但是已经荒废了将近五年了,基本都忘光了,也算是从零开始学吧。
经常看到有人在群里、论坛里问:单片机怎么学?经常看到有人说学了几个月了,就是没什么进步。当然,由于每个人的教育水平和个人理解能力的差异,学习速度也会有差异,但我觉得最重要的还是学习方法。好的学习方法可以让你事半功倍。下面是我学习单片机的经验和方法。
08年因为FM发射电路是用BH1415芯片做的,需要单片机控制,所以我开始用单片机。虽然之前在学校学的时候是作为一门课程来学的,但是已经荒废了将近五年了,基本都忘光了,也算是从零开始学吧。
当时买了一个功能很简单的实验板,比论坛实验板功能少,还有一个仿真器,也比较简单,SST芯片。然后从大家熟知的流水灯开始写。万事开头难。第一个程序基本是抄袭别人的。我查了一个快速入门的学习资料,写下了第一个程序。然后在模拟器中,我们一步一步的看运行结果,从每一步看,效果都体现在硬件上。很快,我们对单片机的操作有了非常感性的认识,这和只是看书想象自己操作完全不同。然后,是对其他程序的进一步学习。一个月的时间,我已经基本熟悉了51的各种硬件资源。学习行灯,数码管动态扫描,中断等等,然后写一个综合的程序,也就是时钟。
通过这个程序的编写,我的编程水平有了很大的飞跃。之后逐渐学会写更多的程序,控制各种外围设备等。,通过写程序让自己不断进步。学完汇编,转行学C语言。因为之前没学过C语言,一切都很陌生,所以就按照学习汇编的方法。我花了大概三天的时间对C语言有了基本的了解,然后我试着写了上面提到的时钟。以汇编程序为参考,用C语言写的。我花了几天时间完成了这个程序,实现了从汇编编程到C编程的转变。然后用C语言编写外围设备的控制程序,熟悉C的编程风格,到现在基本都是C语言编程,一直用汇编作为调试程序的辅助。
下面我总结了自己的一些学习经验和体会:
1.万事开头难,勇敢迈出第一步。
刚开始的时候,不要总给自己找借口,说KEIL建不了项目,没有实验板。当你遇到困难的时候,你得一个一个地去克服。不会建项目就先学。这方面有很多在线教程。随便看看,做几次就好了。那你可以参考一下别人的节目。抄袭他们也没关系。写最简单的,让它跑,先培养自己的感情,知道写程序是什么样子。不管你写的是大程序还是小程序,要做的过程都不会差太多。你要建一个项目,然后配置项目,然后建一个程序,加入项目,然后写代码,编译生成HEX,刷到单片机里运行。你必须熟悉这个过程。个人认为,学习板还是很有必要的。写一个好的程序,运行它看看结果。学习效果会好很多。模拟机看个人需求。单片机讲究理论和实践,不动手看书是学不到的。
2,知识点是用来学习的,不用的就暂时扔到一边。
一本厚厚的书让人看着就头晕。学完后面,前面的估计也快忘了。所以结合实际程序使用的时候最好读一下。不用说,你得从第一页开始读这本书,读完之后再写程序。比如写流水灯,完全没必要看中断的知识。专心学好流水灯就好。这就是把整本书拆成碎片,一点一点咀嚼。
3.不要光看不写程序,一定要自己写。
刚开始的时候,什么都不懂,可以抄别人的程序,看看每一句都是为了什么,达到什么目的,运行后会有什么后果。理解了之后,一定要自己写。你会发现看懂别人的程序很容易,但是自己写的时候一个字都写不出来。这就是差距。。。当你能自己写的时候,说明你真的懂了。。。
4、必须学会掌握调试程序的方法。
很多人写一个程序,把代码写好了,然后运行的时候不是自己想要的结果,然后就晕了。然后他们跑到论坛把程序贴出来问:为什么我的程序不能正常运行?那就等别人自己分析吧。这是很不好的行为,你要学会发现问题,学会自己解决问题。这就需要学习调试程序的方法,比如KEIL中的断点,检查寄存器的内容等。这些都是调试程序的手段。当你发现你写的程序运行结果和你想象的不一样的时候,你可以循序渐进,或者破点,然后跟踪检查相关寄存器的内容,看看程序运行过程中有没有偏差,找出影响结果的地方,并加以修正。这个过程非常重要。通过调试程序,可以学到书本上没有的知识。
5.找到解决问题的方法比找到代码更重要。
我们用单片机控制外围设备来达到我们预定的目的,这是一个题目,而如何写一个程序来控制设备按照你想要的结果运行,就是解决问题的思路。要写程序,你得先找到问题的解决方案。对你来说,学会找到这个解比找到代码更重要。很多人喜欢找别人的代码,有的人甚至直接把代码复制到自己的程序里。可以说这不是一种学习态度,不会帮助你提高编程水平。我几乎不看别人的代码。很多时候,我看的是别人的想法。最好有框图,而且如果没有文字描述的话,从代码里看别人处理问题的思路还是挺难的,尤其是大型程序,看起来很累,所以现在才明白我读书的时候说的程序流程图很重要,现在才知道。
当你知道如何解决一个问题时,剩下的就是你安排代码去完成它,这就不再是问题了。比如:数码管的动态扫描,没写过的初学者可能不知道是怎么回事。其实就是控制每个时间段只有一个数码管显示数字,几个数码管依次显示。由于速度快,所有的数码管看起来都像是在人眼上。我理解是这样,剩下的就是你安排每个数码管依次显示对应的数值。显示数字,然后延迟,然后显示下一个数字,延迟,知道是这样,我们在实践中只需要这样做:发送段码到段口,然后打开位置选择显示一个,延迟,然后关闭位置选择,然后发送段码,然后打开另一个位置选择…仅此而已。有了解决问题的思路,就可以把问题分离出来,一个一个解决。如果不了解动态扫描的原理,不知道怎么做,那么这个程序是写不出来的。
6、开动脑筋,运用多种方法,不断优化你的方案。
想出不同的方法来实现相同的功能。这是一个实践和提高的过程。一旦你解决了一个问题,然后再考虑它。能否换一种方式写,实现同样的功能?或者,你能不能简化你写的代码,让程序更高效?这个过程是一个进步的过程。很多知识和经验不是直接写在书上给你看就能获得的。你需要练习,开动脑筋,积累经验,提高编程水平。
7.看别人的代码,学别人的想法。
这在学习初期非常有用。通过阅读别人的代码,尤其是有多年编程经验的人写的代码,可以快速提高自己的编程水平。同时,他们也可以把别人的编程技术和自己的想法结合起来,写出更高级的代码,取得进步。但是注意不要把学习变成抄袭,更不要以为抄袭了就学会了,这样只会让你退步。
8.尽量写一个全面的应用程序。
从运行灯开始,到动态扫描,再到中断,这时你可以试着写一个时钟的综合应用程序。不要低估时钟。写好它不是一件容易的事。包含了单片机的大部分知识,如按键(IO读取)、动态扫描(IO输出)、中断等。如何协调各功能模块的正常工作,是程序员需要学习的。当你单独写的时候,但是把它和其他功能混合在一起,如何让整个程序运行中的各个部分正常工作,并不像写一个键读那么简单,功能模块之间可能会有交互。比如你需要让数码管显示和处理按键读取,如何让这两部分正常工作是一个协调的过程。当你有了这种处理协调的能力,你就开始了。
9、注重培养解决问题的能力,而不是看你写了多少代码或者做了多少。
“学习单片机的重点是学习如何解决问题,而不是局限于特定的芯片类型和语言。”这一直是我的座右铭,是我多年学习单片机学到的。经常看到有人说“你会开XX芯片,太牛逼了”“你做过XX项目,真厉害”。其实这是很片面的。做过XX芯片,做过XX项目,只能说明你做过这个项目,这只是你的表现,而不是你的能力。真正的能力应该是:“当你遇到一个未解决的问题或装置时,你能运用你所学的知识迅速找到解决问题的方法。”这就是能力。写程序的过程就是一个创造的过程。几乎没有完全相同的项目,每次遇到不一样的东西,你拥有的一定是面对新项目时的创作能力,而不是标榜自己过去做过多少项目。当然,表现也能从另一个侧面反映出你的阅历和水平。
10、如果可能的话,多学习一些计算机专业知识,比如数据结构。
这些都是你解决问题的基础知识。你运用这些知识越好,就越容易找到解决问题的方法。这就是为什么计算机专业的人编的程序和非计算机专业的人编的程序不一样。也是一个菜鸟进入高手需要装备的知识。如果我们把编程分为宏编程和微编程,那么微编程就是写具体的代码,比如控制某个设备的语句;宏编程就是如何对整个程序进行布局和安排,使功能模块按照你想要的方式运行,得到你想要的结果。
如前所述,“能控制XX设备”只能算微编程,这一步只能算菜鸟水平。如果你面对的是一个新的设备,你没有把握写出这个控制程序,说明你还是一个初级菜鸟。当你有了一定的编程经验,控制了相当数量的设备后,你会发现这些控制设备的任务都是大同小异,重复的,并不能体现编程的水平,最多就是写的好和写的不好的区别,只能算是一些小技巧的应用。整个程序的布局和编排是最麻烦的事情,真正的高手是做到宏编程和微编程两不误。程序越大,越能体现这一点。
11.面对一个新项目的时候,多动动自己的脑子,不要急着找别人的方案。
很多人面对一个新项目,首先想到的就是在网上找别人写的代码,然后抄一段,自己写几句,一起完成任务。虽然这样可能会节省时间,但对你的学习肯定没有好处。当你接到一个新项目的时候,首先要构思整个程序的结构,思考如何完成。如果可能的话,画一个流程图,可以在脑海中简单的画出来,对程序中用到的数据和变量做一个初步的整理,然后自己写出来。遇到解决不了的事情,问问别人或者看看别人是怎么处理的,这样至少你有自己的想法。如果你一开始就看别人的节目,你的思维就会被别人的思维所限制,你再创新就更难了,所以你永远无法提升自己,因为你是走在别人的影子里。
12.多利用网上搜索,学会提问。
一般来说,在学习的过程中,大部分人之前都遇到过问题,所以如果有什么不懂的地方,自己解决不了的时候,最好先去网上搜一下,看看能不能找到答案。如果找不到,就在论坛里有目的的提问,尽量简单的描述问题,让帮助你的人在最少的时间里明白你说的话。毕竟是免费的,时间也是有的。
以上是我个人学习单片机的经验和体会。我琢磨了很久,终于写完了。希望对大家有帮助。如果说的不好或者说的不对,欢迎批评指正。
主题测试文章,只做测试使用。发布者:rekoe,转转请注明出处:https://www.mulub.com/7878.html