PICmicro®中档机和AVR 微处理器之比较。
(一)内核比较
两者都属于HAVARD 结构(哈佛结构和普林斯顿结构的提出都是为了美国研究武器的需要而分别由这两所大学提出,最后军方采取了普林斯顿的方案-一根总线当然便宜啦),即有独立的程序总线和数据总线。两者都是8位机,即数据总线是8位宽度。PIC的程序总线在中档系列中是14位的,一条指令同时包含指令代码和数据(如果有),造成寻址能力有限制,所以存在page和bank的问题,但却获得高效的执行结果。AVR的程序总线是16位的,所以8K的ATMEGA相当于4K! 举一个例子:将一个特定RAM中数据送(PIC中叫w累加器,AVR中通用寄存器),在PIC中一条14bit指令只能获得7bit访问能力,所以在访问前必须确定目标RAM所处的bank,这样一般需要2条指令,占据2字节程序空间,花费2个指令周期;而在AVR中虽然只用了一个指令,如STS,但是该指令是32位操作码,显然占据2个程序空间,但是寻址能力因为总线为16bit,就不需要bank的概念,执行时间也是2个指令周期(查看MEGA8的数据手册)。所以基本上同属于一个架构的CPU,两者的效力也应该差不多(AVR提供大量的专用指令,而PIC只有区区30几条,所以相同的任务AVR只要一条指令,PIC可能需要多条指令)。但14bit的总线我想当然认为其制造成本要比16bit要低(虽然你可能会讨厌bank和page 带来的麻烦)。重要提示:AVR的标注容量你需要除与2才能得出有意义的值,我不知道ATMEL为何这样标,MICROCHIP可没有将4K标为7K(14/8 * 4)!
(二)片上资源比较
两者何其相似!一个8bit T/C0, 一个16bit T/C1, 一个8bit T/C2(主要用于PWM)。我怀疑是同一个人或者团队设计?,看门狗,内部复位,内部晶振,内置ADC,比较器,PWM,USART, SPI,一个都没少!IO口都需要设置方向才能正确使用,内部有RC晶振校正值,看一下在PIC中如何用C语言读取校正值,该值位于FLASH ROM 地址0X3FF处,#define _READ_OSCCAL_DATA() (*(unsigned char(*)())0x3FF)()。细节差异自己用的时候看一下数据手册就可以了。
(三)中断与堆栈
终于发现大不同了,AVR类似51,不同的中断向量有独立的地址,分优先级,PIC中档只有一个中断地址(软件判断中断类别),没有优先级。另外PIC只有硬件堆栈(8级),所以不可能支持递归,AVR应该可以吧。据说PIC上述独特的设计是它能有良好抗干扰的原因之一。
(四)开发
AVR的开发太便宜了,ISP, JTAG, GCC,AVRSTUIO,总共花费不过百元,还很好使!GCC我用下来非常好,虽然没有ICC使用简单,一般是ICC改用GCC,没有听说GCC改用ICC。MICROCHIP就贵一点了,首先得想办法搞一套C编译器(IAR,HI-TECH),头大了,然后搞一套ICD2,900元还不是很好使,MPLAB倒是免费的。我认为AVR有32个累加器(我用累加器表明它相当于PIC的W或者51中的ACC),所以C语言的效率应该是最高的(很多书有详细说明)。如果你不习惯用C,汇编器都是免费的。
(五)生产
在PIC中叫配置位configuration bit,AVR中叫熔丝位fuse,一个道理,对CPU工作频率,看门狗等进行配置。这是优于51的。但是我已经说过,PIC的配置位可以在程序中用宏指令定义好,在生产的时候随便叫一个人简单培训就可以批量烧写而不犯错误。AVR好像做不到这一点,烧写程序需要大专以上学历,性格仔细。
(六) 高级功能
ICP/ISP, boot loader,如果你搞定了这些功能,自己制作编程器到网上叫卖吧。
(七)成熟度
PIC已经成长为8位机市场中的老大了,逼得Motorola改名Freescale,PIC成熟稳重(产品线的一贯性和连续性),性格刚毅(抗干扰口碑好),平易近人(价格蛮便宜的)。AVR想要成为白马王子还得努力一把。
(八)还要用51系列吗?
看看PHILIPS的LPC9XX系列,怎么越看越熟悉呢?
补充:C语言的能力很重要,这不是几个月的问题,需要好几年的时间来品味C语言的精华。如果你看了这篇,对你学习microcontroller有一点帮助,也算没白写。
Firstelec 2005-03 |
|