如何开始学习单片机

时间:2022-08-30 19:44:13

如何开始学习单片机

ldqmoon
2006年10月于深圳

我并不是什么高手,只是自己在摸爬滚打7、8年后得到的一点点经验,说出来和大家分享罢了。这篇文章也就是个经验只谈,大家觉得合适就看看,不合适就不要看下去了。我呢,什么时候发现这片文章需要补充了,就继续来完善,我想,也许用这篇文章,就可以指导你入门单片机。如果你真的是通过这片文章来学习单片机的,那就是我最大的欣慰了。

一、明确为什么要学单片机
    如果你对单片机一无所知,是因为工作原因而*去学习单片机,那我建议你去买个开发板,照着附送的光盘里的程序运行单片机,这样可以比较快的上手。
    如果你是因为兴趣去学习单片机,那么恭喜你,你已经站在的单片机的大门口,接下来只要稍稍努力一下就好了。

    学习单片机,学习arm,学习嵌入式系统,学习这些东西并不是为了追赶潮流,学习他们只是增加自己的见识,提高自己的技术罢了,盲目的追求和无目的的学习,最后只会让自己一无所获。

    如果你是高中初中生,想学习单片机,我建议你不要这么早开始学习。先学好数学,物理,化学这三门课;如果可以的话,把英语、计算机基础打好,然后再进一步学好语文和政治。 数学是学习理工科的技术,单片机世界中的很多知识和物理化学结合的很紧密,所以这三门课是必学的; 学好英语是了能看懂一些外文资料,单片机也离不开计算机,这些都可以辅助自己学习单片机;至于为什么要学习语文和政治,学好这两门课是为了让你能清楚的表达出自己的问题和想法,很多人在发帖提问的时候不能清楚的表达自己的意思,导致别人给出错误的解决方法。

    如果你是大一大二的学习,那正是一个学习单片机的好时光。在大学的课余时间相对较多,环境也好,很适合去学习某一样东西。所以如果这个时候开始学习单片机,等大学4年出来后,你的功底将比同龄人强很多。

    有些人习惯上来就去买开发板,我认为这样做并不好。因为使用开发板,练习的只有程序这一个部分,而对硬件的研究却相对较少.所以我建议,从一些基础的板焊起,这样不但可以练习软硬件,还可以学会一种调试开发板的方法,更可以练习焊接技术,一举而多得,何乐而不为呢?


二、态度问题
    我一直主张学习一定要有个好的态度。学习单片机,最忌讳心浮气燥,遇到问题时在网上到处发帖求人,不去自己解决问题。

    在刚开始学的时候,不要怕自己会犯错误,程序调不通,或者烧几个单片机,是非常正常的事情。基础需要自己一点一点的积累,当积累的一定的数量后,自然就会有质的飞跃。但如果你遇到问题后就到处求人,自己不动脑筋的去解决问题,你就决不可能有质的飞跃。而且,谁都有这么一个初学阶段,没什么大不了的

    基础知识,在我们学习单片机的过程中十分重要。打好基础,就可以从一个点出发,逐渐触及其他知识。这也就是为什么网上有人认为先学好51单片机再去学arm会更好。


三、开始学习前你需要了解的几个概念
    单片机:单片机是个广义的叫法,mcs51系列,96系列,arm系列,msp430系列等等,都可以叫单片机。单片机其实就是指那些把输入输出部分,控制器,运算器等各个部件集成到一个芯片的ic。国外也叫SingalChip。至于把单片机叫做mcu,我觉得因为51系列单片机多用于工业控制领域,所以叫micro control unit。

    烧录: 早期的单片机,要执行某个程序的话,需要从单片机以外的地方(一般是外部存储器)获取指令; 现代的单片机内部集成了存储器,执行时可以直接从内部存储器获取指令。而这些指令是如何写进内部或外部存储器中的呢?当然是通过一种比较特殊的手段写入,这个写入过程就称为烧录

    仿真: 单片机获取了指令后,就会执行下去,执行过程中,你无法看到单片机内部的状态。现在我有这样一个设备,这个设备可以模拟单片机的全部功能,我通过这个设备执行某个程序,这样我就可以查看单片机内部的状态了,这个操作程为仿真。

    烧录器&仿真器: 烧录器是用来给存储器写入程序用的,仿真器是用来模拟单片机运行情况的

    下载线: 当单片机内部具有了存储器后,通过烧录器可以给它的内部存储器写入程序;这种写入方式是并行写入的,也就是一次写入一个字节。这样会带来一些不方便,所以就有厂家使用了串行写入方式,也就是每次写入一个位。上位机(PC)只需要和单片机连接5跟线就可以对单片机的内部存储器写入程序了。这样的5根线就组成了下载线。(为什么不是6根,可以看下文的解释)。

    明白了以上几个概念后,再去学习单片机会更快。
    如果你对上面的几个概念感觉仍然很模糊,就请不要再去思考它们了,随着你学习的深入,上面的几个概念自然会明白的。

四、学习前的准备工作
    首先,你要准备几个必要的东西。

    书: 一本好的书将指导自己如何开始学习。我推荐两本:胡汉才的《单片机原理及其接口技术》 清华大学出版社;还有一本是何立民的《MCS51单片机接口技术》(好象是叫这个名字,很老的一本书了)。 胡汗才的那本用来学习,何教授那本是用来参考的

    工具: 电烙铁和万用表是必备的,除此之外是螺丝刀等其他小工具,都会用的到的,可能你还需要准备一些万用电路板,来焊接电路.如果想自己做电路板的话,可以买一些敷铜板.这些在电子市场都可以买到的.如果没有条件到电子市场,可以考虑邮购,或者,写信给我,我也可以帮忙购买的,当然了,我帮忙购买的话,价格和邮费需要你自己掏了~~

    软件: keil(这个是编译程序不可少的) , Easy51Pro宇宙版(用来下载程序的).这两个软件在网上都可以下到.

    准备好上面几个东西后,再需要准备的就是一个下载线和一个开发板。下载线的电路图在这里可以找到(http://www.mcu123.com/new/Article_Show.asp?ArticleID=3) 注意一下,图中接了6根线,如果去掉那个244不用,只用5根线就可以了。那各244是用来保护并口的,所以最好加上,否则烧并口了不要怪我。


五、 动工了。。。
    虽然是开始动工了,你的那个下载线准备好了吗? 没有的话赶快先焊一根吧,这个可是相当重要的哦

    有了下载线后,你需要下面几个元件
1、一片AT89S51单片机,大概8块钱左右
2、一个12MHz或11.0592MHz的晶振。
3、2个22pF的电容
4、一个10uf的电容和一个10k的电阻
5、一小块电路板,一个插针
总的成本大概是在15块,怎么样,区区15块就可以让你进如单片机的世界,是不是很划算。

呵呵,不过别想的那么好,开始是很便宜,但想深入学习就要做长期打算了,成本有时是很高的哦~

准备好上面的东西后,按照下面的电路图焊好电路板
如何开始学习单片机

那个J1就是用和下载线相连的,注意不要接错


启动Keil,建立工程,注意输出格式是hex文件,输入下面的程序
mov p1,0x55;
jb $
end
不知道什么意思不要紧,先这么做着吧。编译后,你就可以得到hex文件(如何使用keil,请先从网上看相关的文章吧)

焊好之后,启动Easy51Pro,(如何使用就不用我这里罗嗦了),设置编程器类型为Atmel ByteBlaster下载线。打开刚才你编译得到的hex文件,然后点“自动完成” 就可以了

以上的操作,就称之为下载。如果顺利的话,Easy51Pro会提示成功,然后用万用表依次测量P1口,你会得到 高-低-高-低-高-低-高-低这样的电平。

如果Easy51Pro提示有问题,或你得不到这样的输出结果,那就需要进行检查了。

六、焊的板不能工作。。。。
    一般来说,按照上面的电路图,只要焊的没有问题,一般都能正常工作。但也不能排除少数情况。我把可能出现的情况列出来,解决办法不用说大家也该知道了。1-4表示了一个检测顺序,一般来说,上一个检测点对下一个检查点是有影响的。

1、电源。这个电路的工作电压范围是3.3-7v之间,低了单片机就不工作了,高了就要烧单片机了。一般都是5v供电的

2、EA线是否接高? 由于我们使用的单片机内部的存储器,所以这根线一定要接高

3、断开电源,万用表的黑标笔接地,红标笔接在9引脚上,然后上电,看是否能测量到一个大于0.5v的瞬间电压。 这个瞬间电压是给单片机复位用的,没有这个复位信号,单片机是不会开始工作的

4、给电路供电后,万用表的黑标笔接地,红标笔依次测量18、19两个引脚,有没有测量到2v左右的电压? 如果没有,表示晶振部分没有起振,有的话才算单片机的时钟部分开始工作了。

检查完上面这几个地方,对于我们焊的这个板,所有可能出现的问题就都被排除了。如果这样还不能正常的烧录程序或执行程序,那很有可能你的那个单片机挂掉了,换一个来试试。

这里有个小技巧:如果单片机没有正常工作的话,使用Easy51pro的时候,它会提示烧录不成功,这个时候你就需要开始检查焊的那个电路板了,还有你焊的那个下载线,都需要仔细检查。而我们的那个小程序,这个时候还不需要检查的。

现在,我来解释一下那个小程序的意思
mov p1,0x55;   就是往P1口送0x55数据,所以测量出来的结果就是高-低-高-低-高-低-高-低,这种交替电平
jb $       ; 这句是让单片机反复执行这条指令,这样单片机就不会去执行其他程序了,也就是常说的“停机”
end        ; 表示程序结束


上面进行的操作就是一个单片机初学者最开始做的东西.因为等你检查到有那样的交替电平后,表示你自己的单片机学习平台已经搭建好了,剩下的操作是要扩充这个平台,利用这个平台做实验,以及修改这个平台等.

当然,上面的操作完成了最基础的入门.如果你想使自己能更加的入门,则至少要完成下面的四个实验:
1. 流水灯实验. 其实就是在上面的操作上做一些改进.做这个实验是为了熟悉一下单片机的io口操作.另外,可以给自己一个感性上的认识,到底单片机执行程序的速度有多快.
2.行列键盘. 这是使用单片机做为输入用的一个典型程序.虽然有很多通用的键盘扫描程序,但如果自己能设计出一个完美的程序来,则说明自己具有了一定的编程功底.
3.秒表.  这个是利用单片机定时器的一个实验.做这个实验是为了熟悉单片机的内部功能单元以及单片机的寄存器.
4.串口通讯. 这个是一个扩展的实验,用这个实验可以完成单片机和电脑通讯的操作,很值得练一练.同时,也能反映出你搭建的平台是否够稳定.

做完上面的实验后,自己就会具有一定的开发能力了.接下来根据的实际做些小东西,多练练就好了


七、如何学好单片机
    也许,学单片机学久后,就会发现,自己有很长一段时间没有任何长进了,甚至发现自己好象已经无法提高了,好象碰到什么问题拿单片机都能解决,但实际做的时候却有做不出来。如果碰到这样的情况,你就要稍微注意了。你需要提高自己了。
    单片机是一门很广的学问,用佛教的一句话就是“ 至简至深 ”。 单片机很简单,总共才40个引脚,程序也好写。但单片机也很复杂,通过单片机可以做无限的扩展。现代的任何一种微处理器,都会有51单片机的思路。

    想学好单片机,我觉得至少要做到以下几点
1、养成一个好的心态。解决了难题不要骄傲,遇到困难不能放弃;不去求人要程序,也不要自己炫耀自己的技术,等等
2、多看书,多动手。 书要广泛的看,不要只看和单片机相关的书,而是和电子相关的书都要看,比如c++ ,vc,vb,TCPIP,  Internet, 数据结构,模拟电路,数字电路,english 等等。。因为这些东西都是和你所学的东西相关的,看的书越多,你解决问题的思路就会越广。练习的话可以利用你手边的资源来操作。如果自己多注意一下的话,会发现自己身边有很东西可以拿来学习单片机的
3、多和其他人交流。多听取其他人的意见。即使对方说的不对,你也拿来和自己的思路对比一下,看看哪样做会更好。
4、多上网,从网上获取知识。多去论坛,多去解决别人的问题。

七、后记
    在论坛的时候,总是看到有人发帖,询问如何开始学单片机,如何学好单片机。 所以总想写这么一篇文章,给初学者一个参考。写完这片文章的时候,回想起自己刚开始学电子技术的情况,觉得这么多年来,走了很多弯路。也许,就是因为这些弯路,才培养了自己的技术。我觉得,学单片机也好,学其他任何一门课也好,总也摆脱不了那种老套的思路:理论加实践。理论知识学到一定程度的时候,一定需要实践来验证。学单片机的时候,动手非常重要,光看书的话,完全可以把人看晕,并让人产生幻觉,学单片机怎么这么难啊。而一旦自己做进来,就会发现这里面的趣味是无穷的,每一个部分都会让人非常想琢磨到底。这也许就是单片机这门学科的魅力所在。