说到单片机,应该是从兴趣开始的吧。基于兴趣,才能激发开发的灵感。学习单片机快一年多了,也渐渐找到了感觉,也让自己更热衷于开发了。
当初是以AVR单片机入门的,自己跟着视频,慢慢开始的。刚开始可能感觉有些难,但坚持下来,还是有收获的。 pic单片机也只是简单了解。在学校里公选课选修过瑞萨单片机,接触几类不同的单片机后,发现都差不多,基本能熟悉一种,就看所在的实验室和将来所在的公司用什么芯片了。从一种单片机转型到另一种单片机不是难事。
当然在很多的教学中,都是以51单片机为主。在自己接触51单片机的过程中,也有所感觉。这只是个人的一些意见和整理, 希望对读者有所帮助。如果你是单片机高手,抱歉,你会觉得我这文章是在显摆。如果你是初学爱好者,希望你可以作为参考一下。毕竟合适自己的才是最好的方法。有一个是必须的,如果要学好,那就是坚持。
这不是教大家怎么入门单片机,只是自己学习单片机过程中的一些整理。
一 单片机的入门技巧
1.所需基础知识。
单片机开发,不仅仅只是一块芯片那么简单。当然至少得了解这块芯片。 比如51芯片,虽然是51的内核,但很多公司都基于这个内核,开发自己的芯片。但只要懂得对51内核进行程序编写,基本不成问题。比如常用的89c51,就有STC89c51,AT89c51,在keil开发的时候,常用AT89c51,当然还有什么90啊,52啊,都差不多。
如果你上过微机原理这个课,相信对你的单片开发有帮助,因为单片机的内部,也是由CPU和各种东西组成。如果懂多一些内部结构,对嵌入式开发更有帮助。既然是嵌入式,对内部结构理解了,才能更好的嵌入啊,虽然这个说法有点不太科学。还要有数电知识的基础。毕竟你会接触很多数字芯片。至少你在编程时,接触的二进制,十六进制会比十进制还多。这点基础还是要的。
哪怕你前面的基础都没有,但,至少,你也得有c的基础。我所说的基础,并不是要一定精通,至少,你要去开发的,你得去积累这些基础。我建议可以去看看这个单片机教程 http://www.51hei.com/mcuteach/252.html 里面介绍的比较通俗易懂. 很多东西并不一定要记住理解即可.
2.开发过程。
我认识的不少人都是自己在网上买个开发板回来,然后自己跟着视频教程慢慢学。当时我自己也是这么做的。如果,你想节省成本,那么,你得要学会使用proteus这个仿真软件了。当然,你总得有编程的工具吧。那么,keil这个软件,应该是你的好帮手了。 这两个软件都可以在网上找到很多资源的。鉴于版权问题,以防被人肉,就不提供资源与链接。当我有权让读者知道至少还有这两个软件是单片机开发的好助手。如果还有兴趣,protel这个软件也是不可缺少的。
3.由内到外认识单片机
认识单片机呢,至少知道它有什么,怎么用。这样你至少都可以开发了。至于它的原理,构造,有兴趣可以作深入研究。比如51单片机,有四组8位端口,然后这8位端口都怎么用,以及复用功能只要了解,就可以开发了。还有定时计数器有几个,对应的寄存器是什么,怎么用。中断有几个,还有串口通信等。这应该相对说内。要说外,可多了,先是简单的LED,数码管,开关,蜂鸣器,电机,LCD显示器,点阵。ADC/DAC等。这些至少都是一般开发板或单片机书介绍所基本有的硬件。要说在外,那可是说不胜数,当是各种数字芯片,各种功能模块,如果每一个都学的话,都不知道学到什么时候。你所要做的就是掌握学习的能力,知道它有什么功能,怎么用就好,原理,结构甚至可以不用了解。(当然,这是对初级开发的建议)
4. keil软件的使用
刚开始的时候,也不知道keil这个软件怎么使用。当时的做法就是从一个例子里打开,然后把程序删掉, 输入自己的练习程序,就可以生成hex,烧写到单片机。使用多次后就会对keil这个软件熟悉了。
但尽管使用多次后,我相信还是有部分人没有考虑修改keil编程文字的字体,大小,颜色了。只是按默认的方式。当然默认的方式不影响编程开发,但,如果作些修改的话,看程序比较明朗一些。
点击edit,选择最后一项Configuration,弹出一个对话框。如下:
在这里就可以修改显示文字的颜色,字体,大小了。这里的一个功能不只是这样,更重要的是,可以选择不同类型的编程文字显示不同。
比如至少c语言的关键字显示为蓝色或其它你喜欢的颜色,至少你看到这类颜色,就知道这些是关键字了。预定义的颜色,数组颜色,字符串颜色等,改变这些颜色和大小,在看程序的时候,就比较直观了,易于检查和管理程序,养成开发好习惯。别小看了这点功能,这个会潜移默化的帮助开发,至少,我是这么认为。
5.proteus的使用。
如果英语不太好的同学,建议使用中文版的。不过,个人建议还是用英文版的好,毕竟用英文版的洋气一些(这句只是我朋友的原话),用英语版呢用开发还是有好处的,由于好处太多,就不列出来占篇幅了。毕竟这具好处在网上百度一下还是很多版本的。知道里面有什么芯片,尽管拉出来使用,不在于乎原件个数及成本,这是用来学习的一个好处。可以到网上多找些例子来仿真看看,有一定熟悉了再自己设计仿真。
二,单片机开发的一些技巧
在开发上,如果掌握了一些技巧,可以缩短开发周期。或者说,让开发变得更容易一些。
1. keil开发技巧
keil的开发,应该也差不多是程序的开发了吧。很多例子上都是选用at89c51,当然也不一写。
(1),设置不同的数据类型显示不同的颜色,字体,大小。方便自己看程序,也有一定的纠错能力。如果你想写一个关键字,发现它不是蓝色的(不好意思,我这里使用的是蓝色),就说明你输入错了,就可以及时纠错了。 一些常用的语句或定义可以将其设置为用户自定义关键字,这些显示的时候,就可以方便自己的管理。
自己把main定义用用户关键字后,就可以以关键字显示出来,这样一看就知道main在哪里了。我曾帮忙同学检查过一个错误。程序无论怎么都不能正常运行,一堆代码里,检查了半个小时,后来才发现原来是main()写成了mian()。
(2) .要学会使用keil c里面的库函数
keil c里面的库函数和我们常说的c语言函数库差不多。里面定义了很多函数,我们就可以直接调用。学会使用这些库,可以让我们的代码更优秀。
字符函数库 ctype.h 里面是对字符的检查与转换等功能。内部函数库, intrins.h ,里面有移位操作及空指令操作等。字符串函数库,
string.h,相信用过c语言的,对这个函数库不陌生了。还有数学函数库,math.h相信大家不陌生了,特别是如果用到单片机开发一些游戏算法的,这些数学算法就离不开了。特别是产生随机数的话,这个库是不可缺少的。还有一些库就不作介绍了。
(3) ,尝试使用#error进行错误检测
先看这个例子:
因为你的程序如果比较长的话,适当进行插入这些的错误检测,可以让你快速检测出程序的错误。
2.要学会建立自己的库。
开发的时候,经常会用到常用的模块,而这些模块是自己都用过的,每次都要重新写相应的程序的话,还是比较麻烦的事 ,因此建立自己的函数库呢,就是事半功倍了。比如常用到lcd1602,就可以建立一个lcd1602的库,里面是对使用lcd1602引脚的定义, 初始化函数,写指令函数, 就是和lcd有关的,都可以写进去。这样以后用到lcd1602的时候,就可以直接使用自己的库,最多只是改一下引脚的定义就行了。当然还有各种延时函数啊,lcd12864,时钟芯片,温度传感芯片,还有IIC通信,串口通信等都可以建立自己的库,方便下次编程调用。
3, 学会使用通信协议模拟。有些芯片不支持IIC通信,SPI通信,CAN通信。但有些芯片模块是使用这些协议,因此,学会使用协议模拟是很实用的。比如51单片机模拟IIC通信协议,去网上找腾IIC通信的例子,把有关IIC的函数,定义整理成一个库,这就模拟了IIC协议,就可以直接和支持IIC协议的模块使用了。毕竟芯片太多,我们不可能学完,要懂得用程序模拟其它功能。这样编写的程序,移植性就比较强。
4, 保留用过的数据
比如开发点阵的时候,就用过很多显示数据,把这些代码保留起来,下次编写到类似程序的时候,就可以用到这些数据了。以及数码管显示数据(共阴,共极的)都备份一些,这样用到数码管的时候,就可以直接调用了。还有显示屏开发的时候,用到的自定义图形数据就更多了,如果每次都用取模软件现场取模数据就比较费时了。
5 积累错误,把自己的错误记下来, 防止同样的错误犯两次。
以上仅是个人的一些整理,谈不上建议。毕竟每个人都有自己的编程习惯。还有更多的技巧,算法,有时间再和大家交流交流。
|