最近又入手PIC的单片机,之前有用AVR的,所以特想了解一下这两种芯片的不同之处。于是搜集了网友的的评论。只可惜对这两个芯片我都是用C作开发,真正的区别估计要用汇编开发时才能发现到底用哪种芯片比较好用。
AVR阵营:
PIC的只有几层堆战,用起来简直繁的要死 ,尤其是PIC12C508 或者PIC16C54之类的 连个中断都没有,写其程序来麻烦的要命 , 当你连续调用两个子程序的时候,堆栈就溢出了,你说痛苦不痛苦 ,更不要说移植UC/OS之类的操作系统了(操作系统一般都要频繁的使用堆栈) 。就算PIC16F877还算可以,可是价格高的吓死人 和AVR的没法比 , PIC唯一的优点就是指令少 适合一些什么都不懂的初学者,只有33条指令,就是傻子也能学会 。但是如果你要进行判断大与 小于 或者等与 之类的东西时 你就会知道 PIC是多么的垃圾.。我相信能用PIC指令独立写出 判断大与 小于 或者等与 的不是很多. 。如果你用AVR的指令基本上1到2条指令就能很快的判断出结果了. 。还有PIC的RAM和ROM都要来回的分页,把你的头都搞大了.而AVR的都是线性地址不存在分页问题 AVR是是我用到的性价比最高的一款芯片,其速度也是最块的,最近有好多新的单片机或者低价位的ARM ,我看了一下,其功能比AVR的强不了多少 ,现在用涌出了一大批台湾系列的芯片,其内核与PIC的差不了多少 ,就是因为PIC的内核简单,很容易被 。被人仿造,比如 义隆EMC 麦肯MDT HOLTEK合泰 普泰PT 通泰等等 你仔细分析一下其指令集和PIC的基本一致 有好多可以直接代替PIC的,比如EMC公司的 和MDT的 具体什么型号的我就不多说了 。但是市场上到现在为止没有一款可以仿造AVR的内核的 因为他是真正的好东西,不是谁都能仿造的 。其实PIC的片子和台湾的片子功能大同小异,和AVR还是有点差距 ,台湾合泰的片还是不错的 C至少有一套完整的C开发工具,尤其最近还推出了可以反复擦写的,比如 ,HT48E06等纯IO口单片机.
PIC的OTP,说是能够降低成本不少,但是看到武汉力源的报价,简直就是杀人,而且,OTP在开发初期特别是资本小的时候,真的怕怕,如果用UV擦除的芯片,寿命不说,光擦除就够受的了,麻烦死了,而16F84、16F877等等芯片比起同类AVR的可开发性和价格来说基本上就是垃圾。 HT还是好一点,价格好,开发费用算比较低的。虽然资源少,但是家电特别是小家电来说,足够了。 很多人用NEC或者富士通芯片,不是为了别的,只是为了防止别人解密仿制,用量很少的芯片一般很少有人破解,这是个好处。但是PIC就麻烦得很,2K/1天就可以完全破解,连地摊老板都这么说。
PIC是最早推出来低价位的芯片,比如8只脚的PIC的PIC12C508 只有0。5K的ROM 还有PIC16C54 这两个片子就是纯IO口的 只有两级堆栈,连个中断都没有, 就占了一个出来的最早的优势,但是那时候AVR是没有研制出来,因为当时不需要, 主要是AVR也是ATMEL的一个系列而已,ATmel的AT89C51已经全世界都在用。 ATMEL公司当时不把PIC当作一回事。 不过有人说PIC的抗干扰能力好,是因为他的功能少只有IO,没有中断,肯定会好一些 ,但是功能多的72,或者73 抗干扰并不好。 现在有好多直接代替PIC的,不需要转移程序,价格做到两块钱以下,但是PIC的价格连PIC12C508的都在4块多。我不认为PIC现在的价格占优势。 你也不会拿16C54根MEGA48去比吧 ,懂行的人一看资料就是到这两个片子不是一码事
因为软件仿真同实物还是有差别的,所以很多时候直接用实物运行,但是用OTP问题就来了,AVR的Mega16L我可以修改5000次(我现在就修改了5000多次了,好几个东西用一片),不会增加负担,但是PIC的OTP就惨了,就算6元/pcs,5000次都是3万哪。。。。实在受不了了。。。。。原来烧废了100多片,心痛。
pic分页让人头痛,一个函数大于分页容量就编译通不过了。对于一个函数大于2k似乎是设计不妥,但是在单片机范畴里,是有这种可能的,频繁的调用对实时性是打折扣的~~~
另外,我同事在使用pic的过程中发现,电路没问题,c写的软件没问题,但是程序就跑飞掉了,反汇编一看,果然是跳转指令跳错地方了,而应该跳到的地址是在另外一页相同偏移量的地方。这样的问题应该是分页特性和编译器造成的。解决方法更加夸张,我同事把几个子程序长长短短的相隔排列,结果就好了,真是晕掉~~~ ,相比之下,还是信任AVR和avr-gcc。 PC上的gcc毕竟经受了商业公司的考验,例如google,ibm等,因为它们都使用了用gcc编译的linux,而风河的tornado5使用了arm-gcc-2.9.5。 移植为avr后,尽管有或这或那的问题,但是稳定性是存在的,因为gcc的目的就是为了跨平台,支持,至少不会出现PIC出现的问题~~~
PIC阵营:
用PIC的,为的是价格低。因为核芯简单造价低便是一大好处。可能楼主没有考虑过,好几年前,AVR还没有出生时,PIC与51相比,很有价格优势。之于开发难度大小问题,习惯了,开发起来一点也不难的。就像我认为AVR汇编很难,但老外还不是一样用汇编写操作系统,而且性能很好。你认为难的,别人不一定认为难。再者难,只是难在工程师,老板却不觉得。以10k的量,可以做otp加裸片。价格很低的,特别是玩具市场和小家电控制。还有AVR的内核已经有几个仿造品了,而且是高档的m128。性能比atmel的还好。只是它核芯复杂,成本高,利润空间不大。用PIC的并不怕别人破解,因为破解了也挣不到什么钱。研发成本比破解费更低。
PIC的不是怎么烂的吧,它的抗干扰好象很强的嘛,有不少电能表都用PIC的片子的.
不过我最讨厌的就是PIC什么都分页,CALL个子程序先换页,CALL回来再换页.三换两换头都晕了
当时还不会单片机的时候(多年以前),有个课题需要用单片机开发一个小板子,就拿来51书来看,看了半个月,还搞不清什么叫长跳转。。。只是周围的人都用51来开发项目,更可笑的是好多人争抢一个仿真器的情形。有一天,看到网上有人卖PIC开发套件,ICD2+开发板,只要不到200元,遂决定买来一套玩玩。拿到手后对照其推荐的书籍学了一下,一周完全掌握了PIC16F877,一个月板子已经装在仪器中用着了。当时感觉,这就是我要用的单片机!有相见恨晚的感觉。Microchip给样片很大方,要过几次,全部都给了,不过后来申请的从美国寄到中国就没有了下文,据说是被代理收走了。学PIC的另一个原因是老外用PIC的很多,网上可找到大量资料;相对老外用51的少,可能是开发成本比较高吧(多年以前,51还是要用仿真器仿真的)。另外,PIC的很多功能都是内置的,用起来很方便,同事开发的51的板子有10个左右的芯片,而我用PIC开发类似的板子只要3~4只片子就解决问题。 再一个我用PIC的原因是CCS-PICC的库很全,感觉很方便。特别是Delay_ms() Delay_cycle() Delay_us() 这些库很好用,不用任何计算,就可将延时精确做好。还有94C46、4x4键盘一类的驱动也都有。效率不高可以用FLASH大一倍的芯片嘛,不差那几元钱,因为我的项目一般附加值都是很高的。 我虽然用PIC,但我也不排斥,不鄙视其它的单片机。因为适合自己的才是最好的,自己不熟悉的再优秀也和自己没关系。任何一个MCU大厂能够生存下来,必然有它的道理。最近在看MSP430,就是想用它做两节干电池能用1年的自容式设备。有些人争论什么MCU效率高、价格如何如何,但对我一个开发者来说,一个月可做一个项目可以赚2万;如果用效率很高,性能很好,且价格便宜10元,但自己不熟悉的MCU,多花一个月时间,就等于少赚2万。所以我用熟了PIC,就一直用PIC,它能很好的为我赚钱,为何不继续用呢?所以,适合自己的才是最好的,存在即有其合理性。
哈佛总线的一个好处,就是可以允许数据总线,指令总线具有不同的宽度, 可以设计出最具成本优势的MCU, 这就是为什么经融危机下MICROCHIP可以到处撒钱收购别的企业, ATMEL差点被收购的原因,”
虽然我说了关于好多PIC芯片方面的不足 但是我还是很感激PIC公司的,因为我可以直接在PICC下面进行写程序 ,然后直接烧到兼容 PIC的片子里去(降低成本)。 由于工作的需要 我有时候不得不用PIC的东西,最近就刚刚用PIC10F202做了一个小产品(主要因为他是6只脚,天下没有比他在小的东西) 其他公司的都太大了无法装到产品上去,真是无奈。 本人用PIC单片机开发的东西太多了,有些情况是客户指定要PIC的你没办法,还有些客户指定要用2元的单片机 你也没办法,人生有时候太无奈。你想用好一点的片子 但是由于成本不允许,支能忍辱负重。
可是我们老板点名要用PIC,为什么,就是两块钱就能买得到代用片,呵呵!!!
我觉得PIC单片机事非常好用的。举个例子:公司给我一个项目,前提是一定要PIC来做,首先声明我以前没有用过,但从认识到编写程序就用了 一天时间,编写10K代码到调试完毕用了1个月,是不是很快,但用过AVR之后我觉得AVR要比PIC难用点,而且因为AD转换器的原因,现在已经弃而不用了,有时间研究AVR还不如直接上ARM,性能还是强很多的。
从51转过来的人,用汇编开发的,都PIC好用,指令少。如果配合强大的伪指令,更省心。
一开始用C搞PIC的,也不会特别被分页所困扰。PIC的编译器,不论HI-TECH公司做的,还是MICROCHIP做的,都很优秀。几乎不曾听过被优化优死掉的事情。
中间阵营:
pic和avr各有好处;这要看你的要求和习惯;
一个公司中要是同时使用几种单片机,是有一定的压力的;举个例子:俺同学公司时作石油井下数据采集的,有一种是存储式的,要放在井底一两个星期才提升出来转移数据,老板以前请电子科大的人用51系列开发的,由于当时并没有用于高温井(90度以上),所以还可以应付;去年开始作100度以上的,51系列的麻烦就来了;工业级的已经不够用,到处托人情才买来一批军工级的,可后续供货就麻烦了;而pic系列的军工级相对好买;avr的军工级也比较好买;。。。 俺自己有些东西需要体积小重量小,如果用51系列就麻烦,avr和pic就好啦,但俺还是偏重于pic,这也就是习惯问题,毕竟俺去年才开始接触avr;俺是半路出家的,学的专业是机械,但不能老是去求人做吧?反正东西也不复杂,俺也懂少许电子,早两年接触到pic的PICBASIC PRO编译器,真的如获至宝。。;以前用汇编用怕了;去年开始学AVR,如果还用汇编或C,太麻烦,幸亏有BASCOMAVR,呵呵,而且还有BASCOM 8051,..... 俺的用法是这样的:简单功能的用PIC,毕竟8脚的好买;涉及到复杂而且有界面要求的用AVR,毕竟BASCOMAVR对液晶和曲线等支持的多;51基本上不用啦; 对某些行业的设备要求极高,并不在乎几百一两千的费用,不需要去节约那一点点,而开发周期才是致命的,实际上的开发费用绝大部分都是处在开发期的时间和人工上。。 所以不一定非要强调只用哪一种单片机,公司内部的习惯和技术的延续要求应该是比较重要的。。
最早用PIC,汇编写程序.感觉就是记住几个常用指令程序就可以写出来.很好用. 其实PIC应用最大的问题就是要换页,程序没写出来人先累死了.但PIC的C编译器不大好用. AVR要配置的东西太多,个人感觉不用C的话大点的程序根本没法完成,看那上百条的汇编指令头就大了.能用汇编写AVR的都是超人.
PIC不是想象的那么难写了,只是很多人写C习惯了,写PIC的汇编写的少,也只是一个熟练的程度而已,PIC的分页,只要程序结构安排合理,也不是那么复杂的,堆栈本来就是程序员自己心里要要清楚控制的,现在做过几年MCU的人应该说很少会死在堆栈上了吧.
要说功能,个人觉得都不错,分工目的有些不一样了,抗干扰的,高速AD和高速PWM我一般都用PIC的,低价格的一般用和PIC兼容的台湾MCU(EMC,MDT,ALPHA,还有几家了,好象现在海尔也是和PIC兼容的啊),呵呵,做一般的控制和普通功能的就用AVR,C语言写起来快啊(不过说句,AVR的汇编是写过的汇编中最难写的,以前觉得是430的,^_^,写过个语音的,用AVR汇编,写的人是无法形容啊)
要说PIC我觉得在这个论坛上我算是有发言权了,我用了整整三年的PIC16c5X系列(12位指令)。要说PIC的性价比好,大概说的是以前,如今PIC12fF509(与5X为同一个档次产品)在华强北大概是4元一片(两级堆栈,41RAM,6IO)和ATtiny12,13相比价格相当,但其落后的架构导致其在性能上却相去甚远。5x系列动不动就要切换RAM bank和ROM page,写子函数要小心再小心,一不留神就会堆栈溢出,查表时表格放置位置有要求,长度有限制,就算你已经调试好的代码,很有可能在下次修改时增加两句,而导致页溢出,或表格中有几行位置超出查表范围,让使你死的很难看。倒是有个C编译器,但是不好用,也是一不留神就会出问题的, 这个不怪C编译器的开发商,5x系列这个架构是很难做出高效的C编译器的。说了这些再看AVR就觉得顺眼多了,tiny系列虽然资源也很少,开发起来就方便很多。最后说说抗干扰的问题,PIC的OTP芯片抗干扰是很不错的,FLASH的好象就差一点,用过AVR Mega64片子感觉不比PIC的FLASH差,还有一点我觉得很重要的是PIC的抗干扰性得益于其简单的架构,在PIC中低档的产品中没有那一条指令会超过一个字(字长固定12/14)的,当其程序跑飞时不会落到数据区,总是会落到指令区,从而可以很方便的使用陷阱捕捉错误,但是即使捕捉到错误也很难处理,因其堆栈指针是不可改写,你不能使用软复位。这时一般都会用死循环,使WDT溢出而强行硬复位,不过要是产品需要低功耗,WDT(wdt熔丝开启)不能开,麻烦就大了,跑飞几乎没有有效的复位手段。
写了这么一大段PIC的毛病,有人可能觉得奇怪了,那么不好你怎么还用呢。呵呵,因为我用的不是真正的MicroChip的产品,而是仿PIC的产品,价格超低,有钱赚,老板就要求用了,这在深圳实在不是什么秘密。
|