引言
一直被网上对C8051F的火爆宣传鼓动得心痒痒,最近鄙人开始大量采用此类单片机。不料期间遇到许多莫名的问题,纠缠了很久。今日终于脱困,把心得收获发出,与各位大侠分享,欢迎不吝指正。
质疑一、型号:C8051F410 疑点:I/O口上电时竟然有弱上拉?
本人原先采用NXP LPC9xx单片机的,这次趁改版之机心血来潮也改为Silab的了。不料,板子焊接妥当,程序下载后,软开关启动不了电源了。
汗!开始以为是电源波纹太大,逻辑电平不对了。仔细分析查找(省略痛苦的经历500字),发现此单片机I/O口在上电时拉住了DC/DC的使能端,刚上电就被断了电,根本起不来。具体细节不表。
结论如下:C8051F系列的I/O口缺省是弱上拉100k(大家说100k还算弱吗?),虽然程序跑起来以后可以禁止这个上拉,但上电之初拿它没有办法啊。而我刚好要求上电时必须悬空的,故此才发现了这个问题。不才以为,这是一个失败的设计,至少是不高明的设计。我查看NXP、Freescale等单片机上电都是高阻的。
质疑二、型号:C8051F021 疑点:中断竟然响应于单条指令执行之中?
众所周知,MCS-51系列单片机的中断至少必须在当前指令执行完毕后才能响应。但我发现C8051F021居然在单条指令执行之中去响应了中断。我的判断是这样的。我在主程序中写一个变量,同时在定时中断中会读取这个变量,读取之后通过串口发送出去。我每次写同样的一个数,发送出来的数大多情况是对的,但有时会变为零。在排除串口通信有误的可能性之后,我试着在主程序写数的之前关闭定时器中断,写完之后再打开中断。没想到这个问题立马就消失了。注意我的汇编指令只有一条赋值语句。那么,唯一的解释就是这条语句被中断了。大家没有意见吧?
但鄙人查看F021的Datasheet第116页上赫然写有这样的话:
As soon as the current instruction is complete, the CPU generates a LCALL to ..... 惊愕!
质疑三、型号:C8051F410 疑点:I/O口设为模拟输入后输出竟然还有驱动?
手册上明确说如果I/O设为模拟口则输出的驱动方式(开路或推拉)设置寄存器将被忽略(见Datasheet 第156页)。Output Configuration bits of P0.7- P0.0(respectively): ignored if corresponding bit in register P0MDIN is logic 0
我输出寄存器是设为推拉的,输入设为模拟的。实际去测此I/O口时,发现总是高高的3.3V,永远下不来。很纳闷。无奈试着改一下输出寄存器方式为开路,就OK了。顿时faint!都怪我太相信Datasheet了!
以上是本人最近应用Silab的高性能51的一点遭遇,写出来供大家参考。正在用的遇到类似问题的兄弟可以少走弯路,外面想进来赶热闹的也请三思。
后记
C8051F系列的优点是集成了很多东西,资源相当丰富,你一看到就会非常惊诧,欣喜,产生想用的冲动。同时速度也高,反正各项指标都很高。但我的感觉是多而不精。这让我想起,大学时(90年代)买磁带单放机,有一种国产的功能极多,又便宜,而SONY、松下的就一个放音,还不能倒带,还狂贵。室友们纷纷买国产,半年后就杂音的杂音,卡带的卡带,甚至散架的散架。一有钱的哥们买SONY,到毕业时还是音质纯净、开起来还没有噪音,飕飕的。当时我感想就颇多。不知道这个比方合不合适,毕竟鄙人对C8051F了解还不够,认识还不深。不过我已经毅然把F410换为NXP LPC931了。想起来真折腾啊!
路边侬 2010-10-9 22:26
用户1156376 2009-9-2 11:07
用户1531262 2009-6-4 10:27
用户558843 2008-7-24 13:20
用户558843 2008-7-24 13:08
用户80602 2008-5-30 16:25