51 指 MCS-51 系列单片机,CICS 指令集。由 Intel 公司开发,其结构增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(CMP)、16 位数据指针、布尔代数运算等指令,以及串行通信能力和 5 个中断源,内有 128 个 RAM 单元及 4K 的 ROM。其代表型号是 ATMEL 公司的 A 系列,它广泛应用于工业之中。目前国内的 51 单片机市场主要为国产的产品 STC 系列其号称,稳定与廉价的。
学习 51 单片机的误区
误区一、51 单片机是学习的基础
“51 单片机是学习的基础”这句话本身并没有错。在我读本科的时候,当时它无疑是学习的基础——毕竟那时没有更高级的单片机可以供使用,国内更没有更高级的教材供参考,老师的水平也是参差不齐,而 51 单片机正符合这样的需求,不仅有大量的成型的教材,示例,当时工作的实际项目也是 51 单片机为主,于是 51 单片机理所当然的成为当时的学习基础。要知道笔者读本科的时候是 2004 年,即 10 年前的东西。按照莫尔,行业每 18 个月更新换代,10 年前的技术现在已经更新了 6 代了——事实也确实如此。
目前 32 位 Crtex-M 系列单片机的各种教程已经普及,其学习的难度不断降低。以公司的 F 系列单片机来说,意法在推广产品初期大量赠送了核心板。免费赠送的核心板不仅有流行的 32 位 Cortex-M 系列微,更在板上集成在线调试器。随机附赠的光盘或者链接更是提供了大量的示例源代码。我们只需要安装开发环境即可直接编译与下载调试。这时,如果再说 51 单片机是学习的基础肯定是不合时宜了。
误区二、51 单片机可以学习的操作
51 单片机可以学习寄存器的操作,这一点儿是不容置疑的。我们分析一下其更深层的原因。在 MSC-51 单片机的编程环境中,最初是以汇编语言为主要编程语言。要知道汇编语言就是直接操作寄存器的,汇编语言是无法做到 C 语言的函数调用与的。如果说 51 单片机是以操作寄存器为优点,我觉得更应该说 51 单片机操作寄存器是一种无奈,是只有一个选项的选择题。
我们现在的 Cortex-M 系列单片机就无法学习寄存器了吗?显然不是。在中,硬件的操作方式就是寄存器的操作,但是其实现却是可以不同。各微处理器提供的 C 语言库函数包其实质就是将操作寄存器的指令进行了 C 语言环境下的封装。我们这里用 ST 官方库函数举一个示例:
void USART_Init (USART1, *USART_InitStruct);// 实现 1 的初始化,简单明了,无需注释
笔者在这里也想举一个示例来说明寄存器操作的步骤,但是操作寄存器实在是太复杂了,笔者不想去浪费时间去整理了。
通俗易懂的 C 语言,方便移植的 C 语言与硬件平台相对应的联合,就能完成硬件的操作。有了简单、方便的方式,我们为什么还要考虑繁琐,复杂的汇编语言与寄存器操作呢?
误区三、51 单片机的成本低
成本都是左右应用的主要因素。项目的立项主要考虑成本,销售的定价主要成本。低成本的方案才会在市场里占有优势。可是,51 单片机真就是最低成本了吗?非也。现在按照功能划分,部分 Cortex-m0 系列的的成本也能做 3 元人民币。其性能已经是 51 单片机的好几倍了,而且更容易开发与维护。
还有另外一个成本:开发难度成本。51 单片机不支持在线调试,有一些问题在编程初期没有发现,只有与硬件连接后才会显现出现来,例如控制操作中经常用到的延时。这时在线调试的巨大优势就体现出来了,它可以极其方便的查看微处理器当时的状态,使得问题的分析变得简单而透明。从而,有效降低开发的难度,缩短开发周期,节约开发资金。
误区四、51 单片机入门简单
51 单片机入门简单?我对于这个观点持保留意见。想要入门 51 单片机,我不仅熟悉该款单片机外设,而且还要充分了解寄存器的某位的意义。对于时钟,的配置必须了如指掌。这样无疑会增大我的学习难度与熟悉的周期。如果我们使用 32 位单片机的库函式,我们只需要具备 C 语言的知识,了解 API 函数,直接看已经注释过的寄存器意思即可,不需要了解其底层的硬件实现,更不需要了解某个寄存器某个指定位的意义了。这样,减少了我的工作量,从而降低了开发难度。你说是 51 单片机入门简单,还是 32 位 Cortex 内核微处理器简单?
单片机的学习是非常枯燥而又有挑战性的事情。由于与实际的硬件直接连接,不仅要考虑编写的正确性,而且还要考虑硬件的可靠性。这时,简单、高效的软件编写就变向的降低我们开发难度与风险。51 单片机已经是明日黄花,向前看才是发展。也许是时候向 51 单片机说再见了!