用了几个月的时间学习AVR,从51单片机过渡到了AVR单片机,从最开始的2313到现在的MEGA128,中间有许多波折,现在,我把这段时间来的设计经验作以总结,希望你会爱上AVR单片机,或者让你对AVR的单片机有所了解。
1.关于RISC指令:传统的51是复杂指令集CISC,需要12个时钟周期执行一条指令,AVR是精简指令集,一个时钟周期执行一条指令,理论上速度可以快12倍,但是,在实际应用中发现,速度的提升大约在4-6倍左右,与具体的程序有关。一般来讲,AVR用上8M的频率工作,一般的51是难以望其项背的。现在虽然有高速的51芯片,但是价格贵得惊人,品种也不齐全,普及起来难度较大。
2.IO口特点:51的IO是准双向口,不用定义IO方向,AVR就必须要定义,用到得寄存器是DDR;51的输入读的是锁存器的值,AVR读的是管脚的真实值PIN。例如:输出高电平,51读进仍然是高电平,即使外电路将他拉成了低电平,AVR就能够读进真实的低电平。
3.定时器:AVR的定时器都可以预分频,对于较长时间的定时很方便,51就需要另外处理了。PWM功能也很有用,我的几个产品都用到了这个功能,用它来实现DA转换,速度比专用的DA低,但是最适合4-20MA电流环的应用。
4.位变量:AVR中没有位变量,但是可以使用CHAR代替,AVR的RAM很充足,可以放心使用,当然,如果你觉得有点浪费,那么可以把几个标志位放进一个CHAR变量里。
5.EEPROM:AVR内置了EEPROM,可以方便的使用,ICCAVR中只需要调用两个子程序,比起外扩24C02,可靠性要高许多,至于以前提到的异常情况下0地址被改写的问题,我还没有真正遇到过,不过,为了以防万一,我的数据一般从20H开始存放。
6.中断:AVR中的中断没有优先级。使用中要注意。不过,对应用没有过多的影响,当然,可以手工定义一个高优先级的中断,方法是在其他中断中开发全局中断(SEI),这样,其他的中断就可以被响应,具体的处理就不细说了。
7.熔丝设置:我和许多朋友都有写错熔丝的时候。的确,AVR的熔丝是很好的一个功能,但是建议你一定要读懂了数据手册和相关的资料再下手,最糟糕的情况是需要用并行编程器重写,一般都不具备这个条件。从MEGA8开始,熔丝的设置就比较复杂,最重要的是时钟不要设错。
8.开发环境:如果你是一个51的开发者,并且具有一定的开发经验,那么用软件仿真的方式开发AVR单片机应该不会困难。ATMEL提供了一个极好的AVR软件仿真平台-AVR Studio,目前的版本是4.07,这可以说是我见过的最好的软件仿真环境之一,比KEIL丝毫不差。编译器推荐使用ICCAVR,有DEMO版本,正式版可以联系双龙电子或其他网友。这个软件是不错的,自认比IAR好。
9.ISP软件:推荐免费的PONYPROG2000,www.lancos.com有免费下载,ISP适配器也很简单,只有一片244和若干电阻,需要电路图可以和我联系。
10.ISP接口:多数芯片的ISP口线与SPI口线是公用,但是MEGA128是一个例外,真正用到的是PE0和PE1,大家一定要小心。
11.用过MEGA128的贴片,焊接起来比430F133容易许多。
用户1370494 2009-7-2 21:54
用户195098 2009-6-25 17:04