1 辩证地看待51内核单片机
要回答这个问题,首先需要来看一下传统的51单片机。在有些文章或者书本中,对于51单片机的态度是全面否定的,一旦听到某人要学习或者使用51单片机,则有种“群起而笑之”之势,觉得其主频低,外设少,技术老,然后以这些理由劝退要去学习51单片机的同学。其实,这个态度是非常武断的,必须被批判,虽然现在32位的单片机遍地都是,但是对于一些成本为首位的产品,8位机无疑还是有很大的价格优势的。而市面上最多的8位单片机产品,内核架构最普遍的还是51。批判51单片机不行的人,出发点无疑就是外设少,外部晶振8分频->12分频(笔误)的硬伤这两点,然而这两点只不过是它们印象中的十几年前的51单片机产品。时代在发展,51单片机也在发展,为了区别那些全盘否定51单片机的人口中的“51单片机”,不断发展的51单片机一般被称为“增强型51单片机”。
接下来,我们用辩证的眼光,再来审视一下现在的“增强型51单片机”。
“增强型51单片机”保留了51单片机开发简单,内部结构简单,价格低廉等优点,弥补了传统51单片机的一些不足,增加了主流的外设资源。介于此,“增强型51单片机”的性价比到目前为止还是非常突出,新手上手程度也很简单,有点51单片机基础的,稍微看一下数据手册就可以直接使用。
但是,无论利用何种形式去增强51单片机,51单片机结构的一些致命硬伤是永远存在的,比如用于操作特殊功能寄存器的寻址,在C语言开发中只能利用C51独有的“sfr”关键词去定义特殊功能寄存器,而“sfr”又不是标准C中的关键词,因此51单片机的程序有一部分是无法直接移植到其他平台上去的。中断关键词“interrupt”也是一样。
辩证地看待其优缺点,“增强型51单片机”非常值得花时间学一学。
2 发展的眼光看51单片机
我们所说的51单片机,用现在比较潮流的说法应该是“MCS51内核”的单片机。如果这么分类的话,51单片机最早的型号其实是8031单片机,这个单片机的内核和现在的“51内核”基本一致,不过它是一个内部没有存储器(ROM)的芯片,在使用的时候,需要外部扩展存储器,非常麻烦。如图1所示。
图1 51单片机外部存储器扩展示意
等到后来的8051单片机,就开始在内部继承ROM,这样可以减少由于外扩存储器带来的烦恼,从而简化了电路结构,降低了元器件成本。
最早的51单片机存储器是EPROM,因此它是需要通过特殊的编程器来烧写程序,而程序擦除时,也需要将单片机曝光在光线下半小时以上才能擦除,而这种EPROM存储程序不稳定,擦写次数也有限,其外形如图2所示。
图2 EPROM的51单片机
为了解决这个问题,FLASH等先进的存储器技术被用到了51单片机上,因此实现了可重复多次擦写,甚至后面多种在应用编程(IAP),在系统编程(ISP)方式也被用到了51单片机上,现在的51单片机,利用一根串口线就可以实现程序的烧写,非常方便。
51单片机的程序烧写问题被flash解决了,后面随着应用程序的需求,51单片机的程序开发难度越来越大,因此一些厂商推出了一些可以在线调试的芯片,在程序开发的时候,利用带调试功能的51单片机进行程序开发,做产品时,将调试好的程序烧录到51单片机即可。后来的一些增强型51单片机,可以直接支持程序调试,如我们使用的STC8A,可以直接使用一根串口线和Keil软件进行程序调试。如图3所示。
图3 程序在线调试界面
传统的51单片机,内存只有几百个字节,程序存储器也小的可怜,而且其外设支持非常有限,只支持2个外部中断,2个定时计数器,1个串口,这样的芯片,放到现在来看,根本满足不了任何应用。尽管如IIC,SPI的外设我们都可以使用IO去模拟,但是模拟外设的程序会占据大量的代码空间,同时,为了满足时序需求所增加的延迟,也浪费了宝贵的CPU资源。为了解决这个问题,目前的增强型51单片机外设变得琳琅满目,如STC8A的内存最大可到到8K byte,程序存储器最大可达到64K byte,而其外设资源有5个外部中断,5个定时计数器,4个高速串口,4组16位的PCA模块,8组15位增强型带死区控制PWM,SPI,IIC,12位精度15通道的ADC(采样率800K),GPIO支持准双向,强推挽,开漏,高阻等模式。并且内置最高24MHz的高精度RC振荡器。这个配置放在目前的8位机市场,甚至是低端32位机市场,也拿得出手。具体如图4所示。
图4 STC8A的配置
除此之外,51单片机特有的12分频瓶颈也早已被弥补,现在的51单片机更多的是1T的单片机。
用发展的眼光来看,增强型51单片机经过国内外四十几年的发展早就与时俱进,满足了市场需求,经住了产品考验。在过去16位单片机,如今32位单片机轮番挤压下,还能保留自己的市场地位。