单片机学习经验

2019-04-15 17:04发布

单片机学习经验 座右铭:既然选择了,就不要给自己留退路 单片机知识不一定在大学里读相关的专业才能学好,走在社会上的人同样可以学的很精。万事开头难,迈出第一步是成功的一半。既然选择了就不要给自己留下退路,这样你一定会成功。我本身就是一个很好的例子:两年前从学校毕业出来,我对单片机知识就是一个白痴,对其毫无概念。我读的师范专业,但是毕业后不想当老师,带有一点C语言基础知识的我最后选择单片机嵌入式开发的工作方向。经过熟人介绍我进了一家电子产品开发公司,由于不懂单片机,不懂编程,我只能做测试。边工作边学习单片机知识,这就是我的开始!以下就是我学习单片机学习的经验。分三部分: 第一部分:整体认识单片机 第二部分:模块化编程学习 第三部分:单片机编译原理   第一部分:整体认识单片机 刚接触单片机时,是从看《单片机原理及运用》这本书开始。当时非常认真地一字一字的看,先看单片机基础知识、单片机系统架构、时钟、中断等等。由于对单片机没有一个总体的了解,不知道单片机是做什么,所以看起书来都是不懂,容易犯困,非常痛苦。即使多次重复看后知道时钟,定时器,串口等模块的原理但是也不知道怎么用。弄得各单片机各模块的原理也不是件容易的事,当然这只是相对于没有单片机相关知识的人来说的。其实这是麻木看书的一种表现,这种学习方法效率非常低。甚至这时候我还是不知道C语言怎么运用到单片机上。最后我自己总结原因主要是缺乏对单片机整体的了解。 想避开低效率的学习应该从整体认识再到模块的学习。具体可分为以下几点: 第一:单片机的运用;        想从整体了解单片机就应该知道单片机能做什么,单片机在生活中的运用。单片机的运用在生活中的电子产品无处可见。例如:手上带的电子表,使用单片机中的定时器模块;家用电饭锅,使用单片机中的AD模块检测热敏电阻阻值;洗衣机,空调等等这些电子产品至少都含有一块甚至多块单片机。举多点例子,详细介绍各个例子中包含的单片机模块的使用。这样可以加深对单片机的总体认识,甚至会引起对学习者的兴趣。 第二:单片机的概念;        总体认识单片机之后就应该知道单片机是什么,从概念入手。单片机全称单片微型计算机,又称微控制器,是把中央处理器、存储器、定时/计数器、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。这里不比对每个模块的原理的展开,只需要讲解每个模块的功能。例如:中央处理器主要是执行指令和处理数据,就像人的大脑;存储器顾名思义就是用来存储东西的,这里的东西主要指的是中央处理器需要执行的指令和数据;定时器是用来计时间的,计数器是用来计数;输入输出接口就是IO口,主要用来交流数据,就像电饭锅单片机需要是AD读取热敏电阻阻值时就是通过IO获取数据的。认识单片机含有什么模块及其相应的功能。 第三:如何操作单片机;        单片机的操作是学习单片机的重点。        单片机又称为微控制器,所以说操作单片机也就是控制单片机。那么如何控制单片机,根据什么控制单片机,用什么控制单片机。这时不必急着就去学习如何控制,用什么东西去控制。先是让学习者有一个初步认识如何操作单片机的过程。那最直观的方法就是有经验者演示一个操作单片机的例程或者看操作视频,我觉得这个非常有用,而效果也非常好。演示的例程要尽量详细,包括分析原理图,如何搭建开发环境,使用的高级语言等等。这演示过程只是让学习者有个认识,可以不懂。想起当时我自己学习了很长一段时间后,包括对单片机的每个模块的原理都有些了解,也尝试编写C语言操作单片机,但是对单片机的操作还是很模糊。后来就是看了单片机操作每个模块的相关教学视频,我的思路非常清晰,在思想和认识上提升了一个台阶。(我这里还保存着相关的教学视频)。演示或者看完视频,学习者很自然就知道如何操作单片机,知道根据原理图控制单片机、使用高级语言控制(一般使用C语言)、还知道需要一个开发环境等等。这三点或许会让初学者少走一些弯路。   第二部分:模块化编程学习 从操作单片机演示的过程中可知道单片机编程应具有哪些工具和应具备哪些基础知识:具有的工具: 最起码要有一块单片机模块比较齐全的开发板。比较简单、容易入门的就是51单片机。当然还要有一份单片机相应的规格书,否则我们不知道如何操作它。 具备的基础知识: 编程语言、开发工具的使用、电路原理图的分析。编程语言一般我们都是使用C语言,C语言基础知识独立学习;电路原理图先只要求懂的分析原理。这里我们可以先弄懂手上开发板的原理图,可以整体上认识原理图对我们编程的作用;开发工具的使用,例如keil,我们需要知道如何搭建环境,建立一个新的工程,添加文件,编译,链接,烧录等。对于编译原理可以暂时不深入了解,对我们编程操作单片机没有影响,这部分的工具开发工具会帮我们处理。 了解这些之后,我们操作单片机的思想、步骤和目标就很明确。下面分模块编程讲解如何控制单片机,让单片机实现我们的要求。 建立一个工程是编程的开始。所以我们编程之前一定要懂得如何建立一个新的工程,刚接触这个一定要自己动手去操作两三遍。这里的步骤细节我不展开,可以去看教学视频等等。 模块的学习从易到难:控制IO口的输出,按键,主时钟的分频 ,定时器,中断,串口,IIC通讯,·····例如控制IO口输出最简单的运用就是点亮一个LED灯,再到流水灯。这里很明显我们肯定会有一个疑惑——我们如何操作IO口的输出。 所以这时最需解决的问题就是理解单片机IO口模块的原理。 单片机模块化编程学习应分为以下步骤: 第一:理解模块的原理 第二:理解模块运用原理图 第三:对照模块原理进行编程 第四:编译(包括链接)生成目标文件 第五:烧录生成文件验证功能 理解模块原理: 任何事物都一样,运用它必须要知道其原理,单片机也不例外。控制单片机模块必须要知道原理,否则无从下手。模块原理包括其控制寄存器的操作,模块的功能。例如,IO模块:需要了解该模块的功能,驱动,控制寄存器,IO输入输出的电压,输入输出的频率和形式。比如推挽输出,上拉输入,中断,IO的控制使能等等。当然,由于51单片机比较简单,没有输入输出的频率。 理解模块运用原理图 单片机模块的操作还要有一份原理图,原因很简单:我们都知道单片机芯片都是用引脚与外部链接的,而且每个引脚的功能可能都不一样,那到底哪个引脚链接哪个外部器件必须要有相应的图纸吧,也就是原理图。就好像用IO控制LED,那我们也要知道哪个IO口连接了LED灯。所以我们原先也要分析好原理图。对于嵌入式软件编程员会分析即可,因为出原理图的工作可以说是电子工程师做的。 对照模块原理进行编程 如果理解了模块的驱动和操作原理,对照相应的功能编写驱动那接下来就是编写C语言的工作啦。如果C语言学的过关的话,就比较简单。建议初学者把模块的每个功能都要C语言编程控制一下,看看效果,会有个全面的认识。把每个功能都操作后,再回头看看模块的原理,加深影响。 编译生成目标文件 编译就是对我们编写的C程序进行编译,至于为什么要编译然后生成目标文件这里暂时不讲。其实这个编译过程很复杂,但是这些工作都交给了开发环境中的编译器处理。我们要知道开发环境中的最基本的开发工具的使用,包括当前文件编译和工程所有文件编译的操作、编译信息的查找、调试等。这些辅助工具可以缩短我们的开发时间,提高效率。 烧录生成文件验证功能 编译源程序之后编译器就会生成一个目标文件,如果是keil开发环境编译后会有一个hex文件,我们必须还有把这个文件烧写进单片机内部才能达到控制单片机的效果。同时也可以验证单片机是否实现我们原先的设计要求。这部分需要了解如何把hex文件烧写进单片机存储器中。 学习完所有单个模块后,接下来就是使用更多的模块组合在一起编写一个小项目。熟悉灵活的运用各个模块的功能。如果你走到这一步,恭喜你基本可以开发项目。很可能你在开发的过程中你会遇到很多很多问题,不过没关系慢慢积累经验问题就会越来越少。积累项目经验的途径很多:可以通过网上学习别人的项目经验分享,可以学习有经验者开发的项目程序,可以从自己编程时解决问题的方法中积累经验。   第三部分:单片机编译原理 学习单片机编程原理之前,要对单片机系统的和框架有个系统的认识,建议找一本有关单片机原理书看一遍。这时候看书你会比较容易理解,肯定不会像我一样,开始就麻木毫无效率的拿着书本在吭。 单片机编译原理可以分成5部分: 第一:程序编程(软件开发) 第二:源程序编译 第三:目标文件链接 第四:Hex文件烧录 第五:单片机运行指令 对于单片机编译原理这5过程,我觉得应该先用逆向思维来认识之后再从头开始进行深入的理解。好比:单片机实现功能要CPU运行二进制指令和处理数据,单片机内部要知道指令和数据放在那里才能获取;接着就要解决单片机内部指令和数据从那里来,这就是hex文件的烧录,想知道指令和数据应该放在单片机内部哪个位置,第一个要知道的就是hex文件的内容;然后就是hex文件从哪里来的,当然就是编译器编译源程序而产品的目标文件。而为什么要用编译器把源程序进行编译,这就是因为单片机执行的是二进制代码,而我们编写的源程序是C语言,单片机无法识别直接识别C语言,所以就要进行编译。而编译器是怎么编译的,这就是编译原理。然后我们又回到源程序上,为什么要这样编程,答案肯定是根据现实功能的需求来操作单片机的模块驱动而编的。这就是上面5个过程的逆向认识。但是对于单片机编译原理,第一个过程我们在第二部分已经讲解过,在此不做重复。最主要是下面的4个过程。 在此不张开介绍,以后会继续补充详细讲解。