machao 发表于 2011-10-11 02:58:50

我的AVR故事来自thinki_cao的博客-与非网博客

我的AVR故事来自thinki_cao的博客-与非网博客(http://www.eefocus.com/thinki_cao/blog/10-10/197884_f2c43.html)

我的AVR故事 2010-10-31 21:06

我今年大三,电子信息工程专业。我接触AVR大约有快一年了,其实也是一次偶然的机会,让我认识了AVR,也同时看到了AVR的优势。这里我想先说说我的单片机之路,虽说接触AVR是从今年1月份开始,但我接触MCU已经有一年半了,一开始学的是51,当时自己什么都不懂,而且又没有人指导,所以就去图书馆随便找了一本入门级的教材,当时是大一下,还没有学过数电模电,书上讲的全是单片机内部的硬件结构以及汇编指令等等,但我硬是把书啃完了,可是我发现回过头来什么都不会编,于是就去找学长求助。学长给我推荐了郭天祥的那本新概念C51(这里不是为那本书打广告,但是我的单片机之所以能够有大的进步多亏了那本书,所以现在回顾过来真的很感谢郭老师),我后来一气呵成顺便把那本书配套的学习板也买回来了,现在想想这板子还真不便宜,不过这对于当时我在没有任何基础的情况下快速入门单片机C语言起了很好的作用。我花了半个暑假把那本书仔细看了一遍,同时也把所有的程序都经过了自己的理解,消化和吸收,最后我能够完全独立地编写出一个电子钟,这也算是我的第一个比较大的程序。

    到了二年级的时候我加入了我们院科协的电子部,跟着学长们继续学习电子方面的知识,由于有了学长们指导,我的软硬件制作能力都有了很大提高,同时对于51的各个功能都有了很全面的了解,也渐渐地看到了51的局限性,我开始往其他单片机方面发展,起初看的是PIC,但是最后在综合意见考虑下我还是选择了AVR,开始了我的AVR学习之路。有了51学习的基础我深刻地体会到入门时选一本好书是多么地重要,最终在学长的建议下我选择了马潮的《AVR单片机嵌入式系统原理与应用实践》(建议AVR初学者学习这本书),对应的IDE是CVAVR,主要介绍的是Mega16,我花了一个寒假在家里把书上的内容全部看了一遍,同时也对应每一个章的实验我都做了Proteus仿真,个人还是比较推崇这个软件的,基本上在这个软件下能够仿真实现的,实物电路都可以实现,而且这个软件可以很有效地缩短程序开发周期。通过马老师的这本书我真正体会到:单片机在更新换代时,我们的编程思想也要有一个变化,对AVR的认识不能停留在51的基础上。

    我想一定也有不少像我这样从51转型来学AVR的,在此我想给一些个人的心得

      1 不要用51的思想去编AVR,这样常常会出错。比如51对于IO的定义比较模糊,读写用的都是同一个寄存器,而AVR则清楚地定义了PINX,DDRX,PORTX。在读取电平时,我们常常会用类似于51的编写方法去读IO口的电平。我曾经常犯地错误就是在读取IO口电平时会读取PORTX寄存器的值。同时51的程序也请你不要直接移植过来,如果不了解内部结构,那么很可能不能正常实现原来的功能:比如在做矩阵按键扫描时,作为输出部分的IO口必须连续送两次高电平。(以下省略n个字)

2 对于51的初学者相信大家都知道郭天祥老师的那本C51的书以及他的十天学会单片机视频,的确在入门初期,郭老师以通俗易懂的语言和生动地讲解帮助我们快速入门了单片机,但是当我在学习AVR的过程中渐渐体会到,郭老师这本书的目的是帮助大家入门,但是很大程度上书中的例程只适合做实验用,实际中那些编程思想用的很少。比如在编写键盘扫描时,那种类似于while(key!=){}的死循环扫描法只会降低CPU的执行效率,使得程序永远卡在那里,而我后期接触的马潮老师的基于状态机的按键扫描则克服了这个问题。又如在编写单片机程序中,大多数人都会采用轮询方式去实现串口发送等等,其实这样也只会降低CPU的执行效率,推荐的做法是中断+缓冲区。

      3 51的编译器种类比较单一,但是AVR的开发环境获得了比较大的好评,个人比较建议初学者选用ICCAVR或者CVAVR,尤其喜欢他们的程序自动生成功能,免去了查询技术文档的工作。

      4 对于熟悉51的人常常会用sbit指令来支持位操作,的确51在支持位操作上做的很到位。但是到了AVR上,位操作指令不如51那样地丰富,大多数的时候都只能是字节上的操作,虽然在众多编译器中也有支持位操作指令的(如CVAVR中可以使用类似于PORTX.x=0的位操作指令),但这个显然不利于程序的移植,现在流行的操作:置1 REG|=(1<< X) 清0 REG&=~(1<<X)。而且此类代码能够直接与汇编指令对应,编译效率高。

      5 对于汇编与C的选择,我想大多数人入门都会建议C语言,当然我也是持这样的观点。但关于汇编也不该一味否定。下面引用马潮老师的一句话:

      如果你对单片机内部结构和汇编语言根本不了解,请先不要用C语言编程

      如果你对单片机内部结构和汇编语言根本不了解,也写不出好的C语言

同时在此与大家分享一下本人学习AVR以来所做过的一些较综合性作品。(以下再次省略n个字)。

。。。。。。。。。。。。。。。。。。。

贴上该博客后面一个评论的贴图:
http://cache.amobbs.com/bbs_upload782111/files_46/ourdev_683741HR9WJ6.jpg
(原文件名:未标题-1 拷贝.jpg)

turf456 发表于 2011-10-11 03:49:10

夜半沙发

mzbhy 发表于 2011-10-11 07:03:32

恩,说的很好。
顶马老师的那段汇编与C的论点。
郭老板的东西确实比较贵,但确实是许多初哥的首选。

leirui001 发表于 2011-10-11 15:50:41

马老师总是夜半发帖

RUANJI 发表于 2011-10-13 23:30:52

从马老师这儿学到了不少东西。

E-WALKER 发表于 2012-5-21 12:16:57

感谢马老师

xiawenfeng2012 发表于 2012-7-2 18:25:27

我什么我看到这个已经是毕业了?我大一在干嘛啊

gujiamao_love 发表于 2014-8-28 20:14:57

我大一的时候,在干吗?

dtum 发表于 2014-8-28 20:40:43

我是一上手就学的AVR,后来老师教51单片机,感觉不适应,各种觉得51不如AVR{:lol:}

dela2000 发表于 2016-3-21 13:32:06

单片机可能设计上确实有强弱,但是作品或者说产品其实还是看人本身的功底,我手头上有一块80年代的板子,用的是Z80,控温杠杠的,波动可以做到0.01℃。

robotway 发表于 2016-4-18 16:49:59

AVR还是比较方便使用的
页: [1]
查看完整版本: 我的AVR故事来自thinki_cao的博客-与非网博客