自动化网-工控人家园官网移动版

主页 > 技术文库 > 电子技术 >

如何从零开始学习单片机技术-C语言汇编语言

  很多想学单片机的人问我的第一句话就是怎样才能学好单片机?对于这个问题我今天就我自己是如何开始学单片机,如何开始上手,如何开始熟练这个过程给大家讲讲。

  先说说单片机,一般我们现在用的比较多的的MCS-51的单片机,它的资料比较多,用的人也很多,市场也很大。就我个人的体会怎么样才能更快的学会单片机这门课。单片机这门课是一项非常重视动手实践的科目,不能总是看书,但是学习它首先必须得看书,因为从书中你需要大概了解一下,单片机的各个功能寄存器,而说明白点,我们使用单片机就是用软件去控制单片机的各个功能寄存器,再说明白点,就是控制单片机那些管脚的电平什么时候输出高,什么时候输出低。由这些高低电平的变化来控制你的系统板,实现我们需要的各个功能。至于看书,只需大概了解单片机各管脚都是干什么的?能实现什么样的功能?第一次,第二次你可能看不明白,但这不要紧,因为还缺少实际的感观认识。所以我总是说,学单片机看书看两三天的就够了,看小说你一天能看五六本,看单片机你两三天看两三遍就够了,可以不用仔细的看。推荐一本书,就这一本就足够,书名是《新编MCS-51单片机应用设计》,是哈尔滨工业大学出版社出的的,作者是张毅刚。大概了解一下书上的内容,然后实践,这是非常关键的,如果说学单片机你不实践那是不可能学会的,关于实践有两种方法你可以选择,一种方法:你自己花钱买一块单片机的学习板,不要求功能太全的,对于初学者来说你买功能非常多的那种板子,上面有很多东西你这辈子都用不着,我建议有流水灯、数码管、独立键盘、矩阵键盘、AD或DA(原理一样)、液晶、蜂鸣器,这就差不多了。如果上面我提到的这些,你能熟练应用,那可以说对于单片机方面的硬件你已经入门了,剩下的就是自己练习设计电路,不断的积累经验。只要过了第一关,后面的路就好走多了,万事开头难,大家可能都听过。方法二:你身边如果有单片机方面的高手,向他求助,让他帮你搭个简单的最小系统板。对于高手来说,做个单片机的最小系统板只需要一分钟的时间,而对于初学者可就难多了,因为只有对硬件了解了,才能熟练运用。而如果你身边没有这样的高手,又找不到可以帮助你的人,那我劝你最好是自己买上一块,毕竟自己有一块要方便的多,以后做单片机类的小实验时都能用得上,还省事。单片机已经无处不在,与我们生活更加相关并渗透入生活的方方面面。单片机的特点是小,也就是其集成的特性,其内部的结构是普通的计算机系统的简化。在增加一些外围电路之后,就能成为一个完整的系统。比如,我们常用的一类电子秤,内部就安装了一块单片机,再加上传感器、显示器和一些附加电路,就形成了一个应用系统。所以单片机的可扩展性是相当好的。又比如K85这样的电脑中频电疗仪,能够从病人身上获取数据,然后根据现有的算法从几种治疗处方中选择,而在每一种处方中还能够根据病人的病情而改变中频和波形及输出电流强度。这样可以看出单片机本身也具有和普通计算机类似的强大的处理,可以增加复杂的算法,获得很强的数据处理能力。单片机也可以应用在电脑缝纫机上,这样单片机可以替代很多机械部分,还能提供很多老式的缝纫机无法实现的图案。所以单片机在工业中的应用,极大地提高了工业设备的智能化,提高了处理能力和处理效率,而且无需占用很大的空间和复杂的设备。

   在错误的道路上日夜兼程,最终也无法成功因此,方法和思路绝对是第一重要的。一些学技术的同学,往往看到这类章节会直接跳过去,因为大多数类似章节都是废话连篇。但是,今天在这里我可以很负责任的告诉你,本章节讲到的学习单片机的方法,都是我们学习单片机的无数经验和教训总结出来的瑰宝。因为我们披荆斩棘,开辟了道路,所以可以告诉你路在何方;也因为我们摸过烧红的铁块,烫了手,所以可以把教训告诉你。希望各位都能站在我们的肩膀上,成为巨人。

1.1 学什么单片机

单片机的型号那么多,如何选取一款合适的进行学习?如果身边有比较便利的学习单片机的条件,有什么条件就学习什么型号。比如,你所在的公司刚好用到某个型号单片机,那么就方便多了。开发板不用购买,直接用公司现成的板子,指导老师到处是,公司的工程师,只要你耐心虚心的不耻上问,相信他们都会帮你解答问题。如果你跟着学习的导师,正在使用某个型号开发产品,那么同样的道理,你也会有得天独厚的优势,直接跟着学就行了。其实单片机型号虽然多,但是用法大同小异,学会一种,再上手其他的就很快了。

如果你这些条件都没有,那就跟着我学吧,我建议你学习51单片机。为什么呢?现在单片机种类和型号非常多,每个型号都有一定的市场份额,但是哪个型号也没有早期51单片机那般的风光和火爆,虽然现在地位不是那么高了,但是因为51单片机资料非常多,大家学起来有很多可以参考的东西,所以上手肯定比其他型号的要快一些。如果你学习稍微偏门的单片机,可能一个简单的软件问题就要折腾你好长时间,不仅仅浪费了你的学习时间,更重要的是打击你学习单片机的信心。

那是不是我们每个单片机都要学习一遍呢?答案当然是否定的。大家跟着我来学习51单片机,必须得跟着学会举一反三和融会贯通的能力。单片机型号那么多,挨个学下来估计头发白了也学不完,所以大家跟着我学51单片机,不能仅仅当做51来学习,更重要的是要当做单片机来学,要通过我们的这个教程,把所有的单片机的内部资源都搞清楚弄明白,每个内部模块的用法理解透彻,这样当你遇到一个从没有用过的单片机,也就知道如何下手去应用开发了。

1.2 如何学习单片机

前边提到过,单片机是一门实用技术,我们学习它已经不是为了应付考试了,我给大家总结了单片机的学习方法是:一个要领,四个步骤。

学习单片机的要领就是:在实践中成长,In Doing We Learn!

学射箭,你得去拉弓,整天只摆造型肯定不行;学游泳,你得下水扑腾,整天在岸上做模仿活动不行;学开车,你得坐车上去开,坐沙发上肯定学不会。同样的道理,学单片机,整天盯着单片机看肯定不行,你也必须得亲自动手去练。

没有不下水就学会游泳成为游泳健将的,没有不到车上练就能成为赛车手的,这点大家都清楚,可为什么总是那么多人学单片机的时候,总是要抱着一本书看呢。第一,我们小学中学甚至大学的学习模式是如此,学什么东西主要都是靠看书;第二,很多人想实践不太清楚该怎么去实践。

不是不让大家看书,而是看了一点以后,要马上去实践验证,然后再回头结合实践的结果,理解书上的内容。从这个地方,大家要得出一个结论来,就是在学实际技术过程中,和应付考试不同,书上的内容不需要你去硬性记忆,书是用来查的,不是用来记忆的。遇到问题,你学会翻书,知道去哪里找,找到相关知识点,分析明白,领悟透彻即可,包括咱这本书也是一样,大家先看完一节课,然后马上就把这节课相应的实验做了,做实验的过程中,哪里有不懂的问题,随时翻阅书籍查找,再实验,再查找,反反复复的过程就可以把本节课的内容掌握。

下面,就是我总结的跟着我学习单片机的四个步骤。

第一步,鹦鹉学舌。

刚出生的孩子叫“爸爸”“妈妈”的时候,他甚至不知道“爸爸”“妈妈”是什么意思,更不会理解这些声音是什么意思,但是我们带着孩子见到他爸爸就让他喊“爸爸”,见到妈妈就让他喊“妈妈”,见到爷爷就喊“爷爷”……慢慢的你会发现,次数多了,孩子就知道谁是爸爸,谁是妈妈,谁是爷爷,谁是奶奶了。

大家刚开始接触单片机的时候,也属于单片机行业的新生儿。单片机的样子,单片机外围的各种器件,单片机内部的各种结构,单片机用C语言的编程方法,初学者可能都没有见过。没关系,有些概念和方法你不理解也没有关系,甚至不需要你理解,你只需要跟着我去鹦鹉学舌式学习,第一遍学习某一节课的内容时,对于程序,大家就可以完全跟着抄下来,甚至抄两三遍,过一段你会发现,好多东西你也认识了,好多概念你慢慢的也理解清楚了,你也能大概看懂别人的小程序了,切忌觉得自己看会了,而简单复制粘贴。

第二步,照葫芦画瓢。

很多同学学习的时候喜欢看,看我做的视频,看我写的程序,甚至看别人的程序,都能看懂,觉得自己就会了,等到自己写程序的时候,感觉就是老鼠啃天,不知道从哪里下手了,这是初学者很容易犯的“眼高手低”这样一个毛病,所以第二步的内容就非常重要了。

我的要求是,每一位同学,在学完了当课的内容,把第一步顺利完成以后,然后关掉视频教程,关掉源代码,自己通过看电路图和查找非源代码的其他任何资料,把当节课我写的程序代码重新默写出来,边写边多少理解那么一点点,不是纯粹的背诵,应该说是背诵加理解的结合体。甚至学过几节课以后,可以回头把前边曾经这样实现过的课程,再按照这种方法做一遍。千万不要认为这一步没必要,这一步是你能否学会单片机的一个关键步骤,学完本教程之前,每一课内容都要这样做,如果每一个程序你都能够完美的完成,那么可以说,当节课的内容,百分之七八十你已经掌握了。

第三步,他山之石可以攻玉。

单片机技术的最大特点就是可以通过修改程序来实现不同的功能,因此举一反三的能力就必不可少了。每一节课的例程后边,我一般都会布置一两个作业,大家尽量去独立完成这个作业。在完成这个作业的过程中,都可以参考我的程序思路,在这个基础上通过动脑思考去构建你自己的程序框架,最终将程序完成。

在我们工程师实际产品研发的时候,很多种情况下也是如此。比如一个产品,我们如果从0开始着手的话,可能会走很多弯路,所以我们通常的做法是寻找购买同类几款产品,然后先研究他们的各自优缺点,学习他们的长处,然后在同类产品基础上在来设计我们的产品,这就是他山之石可以攻玉。

初学者在学习的时候,往往遇到的问题很多,你应该想到,你遇到的问题,可能前辈们早就遇到过了,所以遇到问题后,不要慌张,首先利用谷歌或者百度这些搜索引擎搜索一下,要做什么新东西,先去网上找找相关资料了解一下,不管是编程还是硬件设计,多参考参考别人的东西,只要把别人的东西分析明白了,自己用起来,就可以成为自己的知识了。

第四步,理论实践结合,温故知新。

当大家把所有的课程都按照前边三步完成后,这个时候不妨把书打开,看看书,通过自己实战的经验,再看书的时候,很多知识点会有一种恍然大悟的感觉。甚至视频教程,书籍,都可以反复看两遍,可能有的知识点当时学习的时候不明白,过了一段时间,回过头来再学习的时候,一下就明白了。

1.3 单片机学习的准备工作

第一、足够的信心、恒心和耐心。

有同学问过我,单片机这门技术难不难。我觉得这个问题得从两个方面去分析。

首先,我们从战略上藐视它。那么多同学跟着老师学一段时间就可以做出来小车,超声波测距,甚至做出来机器人,似乎很拽的样子。那他们又不是三头六臂,我们也没有什么做不了的道理。实际上要说技术,其实就是一层窗户纸,表面看不透彻,感觉特别神秘,实际只要你稍微一努力就可以捅破它,夸张点说,单片机的逻辑上的关系,只有小学的水平,简单的很。正所谓会者不难,难者不会,大家不懂这个东西,看起来感觉很神秘。所以大家只要认真踏实坚持学下去,肯定能学好这么技术。

其次呢,我们从战术上要重视它。你说单片机这东西,如果十天八天就学会了,那么这个技术还能值钱吗?我可以这样去表达,如果一个技术很简单就被学会,那么很多人都会的这个技术,肯定也没什么前途和钱途。那究竟多久能学会呢?我给大家制定的学习方案,根据每个人的基础不同,平均每天要拿出2个小时以上的学习时间,大概一到三个月可以入门。入门的概念是给你一个单片机开发任务,你起码知道努力的方向和解决问题的方法了。技术这东西,关键是坚持做下去,有恒心和耐心,如果长时间不用的话,肯定还会生疏。所以要想成为单片机高手,起码需要一年左右的单片机开发的历练才行。成为单片机高手的概念就是你自己可以从头根据自己的想法,去设计一个电路,根据需要的功能编写代码,做一个产品出来。

第二、教材和教程。

要学习单片机这门技术,良好的教材和教程必不可少。单片机方面,大家可以直接学习我们这本《51单片机C语言开发》,我们也有精心制作了《单片机高手之路》视频教程,并且后期会进行不定期更新。本着开源、共享的理念,我们的视频教程和电子教程都是免费开放的,大家可以到我们的网站www.51hei.com找到下载链接,如果有条件,也可以购买我们一般纸质教材,纸质书籍查阅起来比视频教程和电子教程更方便。另外,因为我们做单片机开发使用的是C语言,所以最好能有一本纯C语言教材,我们学到一些C语言语法性质的问题的时候,大家可以方便查阅,或者你可以直接把相关语法问题通过百度和谷歌等搜索一下也可以。

第三、电脑一台,单片机开发板一块。

电脑呢,是学习单片机必不可少的工具,因为我们编程,查资料都用得到,但是有句题外话说一下,不要把电脑当成游戏机或者影碟机,偶尔玩玩游戏看看电影是可以的,劳逸结合,但是不可沉溺其中,否则还不如不买电脑。

单片机开发板,这也是必须的。如果还上学,老师实验室有开发板,可以考虑跟老师借一个,或使用师兄师姐用完的,这样可以省点钱。当然,如果身边有高手,比如辅导老师,会单片机的师兄,在他们的指导下做一个也可以,身边有人指导的话,不懂的问题还可以问他们。如果这些条件不具备,那么可以购买一个,先学习别人的板子设计思路,给自己以后设计电路板打下基础。在这里我推荐一下我们的51开发板,用来配套学习。我不敢说我们设计最好,但是我可以很负责任的说,我们的板子是出自经验丰富的一线工程师之手其中的设计都是根据实际项目开发的思路进行的,包括整体规划、电路设计、器件布局等等可以为你今后的项目开发提供一个优质的参考。另外一方面,因为我们的教程是基于我们的开发板做的,所以大家用配套的话可以节省时间,提高学习效率。

当然,即使不购买我们的开发板,你想学单片机,必须要有一块开发板,不要总去用软件仿真,软件仿真是学不会单片机技术的。经常有同学过来问我,老师我用软件模拟的好用,做了硬件不好用是什么原因。在这里我提一下,如果你上课用这个软件仿真,糊弄老师应付考试可以的,但是实际开发和仿真软件差别太大,如果是学习单片机这门技术,那我只能告诉你,拿起烙铁焊电路,动手写程序,远离仿真软件,靠软件仿真永远学不到真正的技术。

1.4 单片机开发软件环境搭建

单片机开发,首要的两个软件一个是编程软件,一个是下载软件。编程软件我们用Keil  uVision451版本,也叫做keil C51,不做过多介绍,先直接讲如何安装。

1、首先准备KEIL uVision4安装源文件,双击安装文件,弹出安装的欢迎界面,如图1-1所示。

 

1-1 Keil安装欢迎界面

 

2、点击“Next按钮,弹出“License Agreement”对话框,如图1-2所示,这里显示一些用户安装协议,我们在“I agree to all the terms of the preceding License Agreement打勾,如图1-2所示

  1-2 License Agreement”对话框
3、点击“Next”按钮,弹出“Folder Selection”对话框,如图1-3所示。这里可以设置安装路径,默认安装路径在“C\Keil”文件夹下。点击“Browse”按钮,可以修改安装路径,这里建议大家用默认的安装路径,如果你要修改,也必须使用英文路径,不要使用包含有中文字符的路径   

1-3 Folder Selection”对话框
4点击Next”按钮,弹出“Customer Information”对话框,如图1-4所示。大家输入用户名、公司名称以及E-mail地址即可。    

1-4 用户信息
5、单击“Next”,就会自动安装软件,如图1-5所示   
 
1-5 安装过程
6、安装完成后,弹出来安装完成对话框,如图1-6所示,并且出现几个选项,大家刚开始把这几个选项的对号全部去掉就可以了,暂时先不用关注他有什么作用。   

1-6安装完成
7、最后,点击“Finish”,Keil编程软件开发环境就这么装好了。  
 

 

1.5 Keil基本概况介绍

首先,打开一个工程项目,如图1-7所示


1-7 工程文件

 

从图1-7我们可以很轻松的分辨出菜单栏、工具栏、工程管理区、程序代码区和信息输出窗口。这个是Keil4的英文版,网上有一些汉化版本的,我不建议用。即使你的英语不好,使用英文版本的软件一点问题没有,刚开始大家先跟着我去使用,一共没几个单词,不需要你去翻译,用几次你就记住怎么用了。因为以后做实际开发的时候,大多数软件都是英文版的如果现在学习的时候一直用中文软件,将来一旦换了其它的英文软件慌了,所以从现在开始,我们慢慢的来熟悉英文软件,将来以后再用其他英文软件的时候,就可以做到触类旁通、驾轻就熟了

Keil软件菜单栏和工具栏的具体细化功能,和字典一样用来备查,所以我把它写到了附录里边,在这里只介绍一点,关于Keil软件里边的字体大小和颜色设置。在View-->Configuration-->Colors &Fonts里边,可以进行程序的颜色,字体大小的设置,如图1-8所示  
 
1-8 字体设置()       因为我们用的是C语言编程,所以我们在Window栏用鼠标选择8051:Editor C Files,然后在右侧Element栏目里可以选择要修改的内容,一般我们平时用到的,只是其中几项而已,比如TextText SelectionNumber/*Comment*///Comment//KeywordString这几项,Keil本身也有默认设置,你如果觉得不是很适合你的感觉,你可以更换一下。 

1-9 字体设置()
    Keil菜单栏和工具栏的详细介绍,和字典一样,是备查的,不需要记住,所以我把它写到了附录里,如果大家对Keil哪个工具哪里有疑问,可以随时到附录里进行查找。

 

1.6答学生问

很多同学经常问我一些问题,我把一些典型的,直接写出来给大家看一下,让大家了解这门技术,了解我们这个行业。

1、单片机学完了能做什么?

单片机的应用非常广泛,电子,自动化,通信等领域都能用到,至于能做什么,得看你将来以后做什么工作。如同电脑一样,电脑可以用来编程,PS图片,看电影,打游戏,你用电脑做什么是不一定的。但是掌握好这门技术,起码可以让你学会一门工具,为将来从事电子、通信、自动化等领域的工作做好准备

2、学单片机的捷径是什么?

做技术必须得脚踏实地,没有任何捷径,如果说有的话,那我只能告诉你,拳不离手曲不离口,就是最好的捷径,我学习单片机的时候,每天早上8点半进入老师实验室,晚上10点离开实验室,曾经创下连续3个月没有休息日的记录,你如果能这样学的话,那估计很快可以学好这门技术。

3学习单片机应该学习什么语言,有没有必要再学习汇编

相比较来说,汇编语言比较接近单片机的底层,使用汇编语言比较容易理解单片机内部结构。简单的程序,用汇编语言,程序效率也比较高,但是当程序容量达到到几千上万行以后(这时也仅能算个不太小的项目,还远没到大项目的级别),汇编语言在组织结构、修改维护等方面就会成为你的梦魇了此时时候C语言就有不可替代的优势了。所以实际开发过程中,90%以上的工程师都在用C语言做单片机开发,只有在很低端的应用中或者是特殊要求的场合,才会用汇编语言开发,所以我建议大家还是用C语言开发比较好一些。

如果现在正好上学学到了汇编语言,我建议认真学一下,学好了肯定有益无害。但是现在如果说想直接快速学单片机技术,那我建议不要去看汇编语言了,直接学C语言就可以了,那些单片机底层的结构什么的,也可以在开发过程中慢慢理解。

4学会单片机后能找什么样的工作

单片机是一个工具,和电脑有点类似但不完全一样,我们学会电脑,可以用来编程,可以用来画图,可以用来PS照片,可以用来看电影.......学会单片机,可以用来做通信技术,做自动控制技术等等,但是单片机本身来说仅仅是一个工具,你在用单片机的时候,慢慢接触多了,会有一个应用方向,你不仅仅要会单片机,也得对这个应用方向熟悉,比如我个人从事过扩频通信技术的算法研究,那么我就要对扩频通信熟悉,然后把这个技术用单片机实现出来,也得会单片机。当然大家也不用担心,找工作的时候公司对这个方向问题要求也不会很高,懂的话,肯定也会提高自己的竞争力。

5、学完了这个工资待遇如何

对于技术来说,技术水平高低直接决定你的工资薪酬。技术如果学的不好,那工作都找不到,更谈不上工资了,而技术做的好的,那工资就会很高。我们不清高,我们需要足以安身立命的薪资报酬,但是我希望的是,一旦你决定从事技术,你不用把过多的精力关注在能挣多少钱上,而应该放在如何把技术提高起来,只要技术水平高,比很多人都厉害,钱自然就找上门了。有一部印度的励志片叫做《三傻大闹宝莱坞》,我推荐做技术的都可以看看,里边有一句经典台词非常适合我们技术人员:追求卓越,成功就会在不经意间追上你。

  有了单片机学习板之后你就要多练习,最好是自己有台电脑,一天少看电影,少打游戏,把学习板和电脑连好,打开调试软件坐在电脑前,先学会怎么用调试软件,然后从最简单的流水灯实验做起,等你能让那八个流水灯按照你的意愿随意流动时你已经入门了,你会发现单片机是多么迷人的东西啊,太好玩了,这不是在学习知识,而是在玩,当你编写的程序按你的意愿实现时你比做什么事都开心,你会上瘾的,真的。做电子类的人真的会上瘾。然后让数码管亮起来,这两项会了后,你已经不能自拔了,你已经开始考虑你这辈子要走哪一行了。就是要这样练习,在写程序的时候你肯定会遇到很多问题,而这时你再去翻书找,或是问别人,当得到解答后你会记住一辈子的,知识必须用于现实生活中,解决实际问题,这样才能发挥它的作用,你自己好好想想,上了这么多年大学,天天上课,你在课堂上学到了什么?是不是为了期末考试而忙碌呢?考完得了90分,哈哈哈好高兴啊,下学期开学回来忘的一干二净,是不是?你学到什么了?但是我告诉你单片机一旦学会,永远不会忘了。另外我再说说用汇编和C语言编程的问题。很多同学大一二就开设了C语言的课,我也上过,我知道那时天天就是几乘几,几加几啊,求个阶乘啊。学完了有什么用?让你用C语言编单片机的程序你是不是就傻了?书上的东西我们必须要会运用。单片机编程用C语言或汇编语言都可以,但是我建议用C语言比较好,如果原来有C语言的基础那学起来会更好,如果没有,也可以边学单片机边学C语言,C语言也挺简单,只是一门工具而已,我劝你最好学会,将来肯定用得着,要不你以后也得学,你一点汇编都不会根本无所谓,但你一点C语言都不会那你将来会吃苦头。汇编写程序代码效率高,但相对难度较大,而且很罗嗦,尤其是遇到算法方面的问题时,根本是麻烦的不得了,现在单片机的主频在不断的提高,我们完全不需要那么高效率的代码,因为有高频率的时钟,单片机的ROM也在不断的提高,足够装得下你用C语言写的任何代码,C语言的资料又多又好找,将来可移植性非常好,只需要变一个IO口写个温度传感器的程序在哪里都能用,所以我劝大家用C语言。

  总结上面,只要你有信心,做事能坚持到底,有不成功不放弃的强烈意志,那学个单片机来说就是件非常容易的事。

  步骤:1.找本书大概了解一下单片机结构,大概了解就行。不用都看懂,又不让你出书的。(三天)

  2.找学习板练习编写程序,学单片机就是练编程序,遇到不会的再问人或查书。 (二十天)

  3.自己网上找些小电路类的资料练习设计外围电路。焊好后自己调试,熟悉过程。 (十天)

  4.自己完全设计具有个人风格的电路,产品,。。。你已经是高手了。 。。。。

  看到了吗?下功夫一个多月你就能成为高手,我就讲这么多了,学不学得会,下不下得了功夫就看你的了。

(责任编辑:admin)