是时候向51单片机说再见?
51单片机的辉煌过去
51单片机指MCS-51系列单片机,CICS指令集。由Intel公司开发,其结构增加了如乘(MUL)、除(div)、减(SUBB)、比较(CMP)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源,内有128个RAM单元及4K的ROM。其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前国内的51单片机市场主要为国产宏晶的产品STC系列其号称低功耗,稳定与廉价的特点。
学习51单片机的误区
误区1:51单片机是学习的基础
“51单片机是学习的基础”这句话本身并没有错。在我读本科的时候,当时它无疑是学习的基础——毕竟那时没有更高级的单片机可以供使用,国内更没有更高级的教材供参考,老师的水平也是参差不齐,而51单片机正符合这样的需求,不仅有大量的成型的教材,广泛的示例,当时工作的实际项目也是51单片机为主,于是51单片机理所当然的成为当时的学习基础。要知道笔者读本科的时候是2004年,即10年前的东西。按照莫尔定律,电子行业每18个月更新换代,10年前的技术现在已经更新了6代了——事实也确实如此。
目前32位Crtex-M系列单片机的各种教程已经普及,其学习的难度不断降低。以意法半导体公司的STM32F系列单片机来说,意法半导体在推广产品初期大量赠送了核心板。免费赠送的核心板不仅有流行的32位Cortex-M系列微处理器,更在板上集成在线调试器。随机附赠的光盘或者链接更是提供了大量的示例源代码。我们只需要安装开发环境即可直接编译与下载调试。这时,如果再说51单片机是学习嵌入式的基础肯定是不合时宜了。
误区2:51单片机可以学习寄存器的操作
51单片机可以学习寄存器的操作,这一点儿是不容置疑的。我们分析一下其更深层的原因。在MSC-51单片机的编程环境中,最初是以汇编语言为主要编程语言。要知道汇编语言就是直接操作寄存器的,汇编语言是无法做到C语言的函数调用与封装的。如果说51单片机是以操作寄存器为优点,我觉得更应该说51单片机操作寄存器是一种无奈,是只有一个选项的选择题。
我们现在的Cortex-M系列单片机就无法学习寄存器了吗?显然不是。在硬件设计中,硬件的操作方式就是寄存器的操作,但是其实现却是可以不同。各微处理器提供的C语言库函数包其实质就是将操作寄存器的指令进行了C语言环境下的封装。我们这里用ST官方库函数举一个示例:
void USART_Init (USART1, *USART_InitStruct);//实现串口1的初始化,简单明了,无需注释
笔者在这里也想举一个示例来说明寄存器操作的步骤,但是操作寄存器实在是太复杂了,笔者不想去浪费时间去整理了。
通俗易懂的C语言,方便移植的C语言与硬件平台相对应的编译器联合,就能完成硬件的操作。有了简单、方便的方式,我们为什么还要考虑繁琐,复杂的汇编语言与寄存器操作呢?
误区3:51单片机的成本低
成本都是左右应用的主要因素。项目的立项主要考虑成本,销售的定价主要成本。低成本的方案才会在市场里占有优势。可是,51单片机真就是最低成本了吗?非也。现在按照功能划分,部分Cortex-m0系列的32位单片机的成本也能做3元人民币。其性能已经是51单片机的好几倍了,而且更容易开发与维护。
还有另外一个成本:开发难度成本。51单片机不支持在线调试,有一些问题在编程初期没有发现,只有与硬件连接后才会显现出现来,例如控制操作中经常用到的延时。这时在线调试的巨大优势就体现出来了,它可以极其方便的查看微处理器当时的状态,使得问题的分析变得简单而透明。从而,有效降低开发的难度,缩短开发周期,节约开发资金。
误区4:51单片机入门简单
51单片机入门简单?我对于这个观点持保留意见。想要入门51单片机,我不仅熟悉该款单片机外设,而且还要充分了解寄存器的某位的意义。对于时钟,定时器的配置必须了如指掌。这样无疑会增大我的学习难度与熟悉的周期。如果我们使用32位单片机的库函数模式,我们只需要具备C语言的知识,了解API函数,直接看已经注释过的寄存器意思即可,不需要了解其底层的硬件实现,更不需要了解某个寄存器某个指定位的意义了。这样,减少了我的工作量,从而降低了开发难度。你说是51单片机入门简单,还是32位Cortex内核微处理器简单?
嵌入式系统的学习是非常枯燥而又有挑战性的事情。由于与实际的硬件直接连接,不仅要考虑编写的正确性,而且还要考虑硬件的可靠性。这时,简单、高效的软件编写就变向的降低我们开发难度与风险。51单片机已经是明日黄花,向前看才是发展。是时候向51单片机说再见了!
http://www.rdplat.com/
莫在浮沙筑高台。因人而异,因材施教,学习应该遵循其基本规律,循序渐进,IIC 通信,UART通信,SPI通信,等等等等,都可以用51的IO口模拟出来,STM32都做成了模块,站在开发者的角度上,你用的时候非常的方便,站在学习者的角度上,但是你能深刻的理解其原理吗?大家学车考驾照的时候,驾校用法拉利给大家上的训练课吗?中国出不了大师级别的人才,就是因为基础不如人家,把时髦的技术挂在嘴边,不如把过时的技术放在心里。
莫在浮沙筑高台,为这句话顶一记。
沙发说得好,支持一下。
那种都有用,看你要做什么,再选什么芯片
51单片机还有其优势所大啊,成本低就是其中之一,在有些方面很适合的,
那对51再见了,要学什么?
说的很深刻呀。
因人而异,因地制宜!顶下沙发!
顶下
莫在浮沙筑高台,为这句话顶一记。底子不足,学这学那,到时候依然是一场空
51单片机还是有优势的
考虑到性价比,简单的产品还是用51的好。
误区1:51单片机是学习的基础
“51单片机是学习的基础”这句话本身并没有错。在我读本科的时候,当时它无疑是学习的基础——毕竟那时没有更高级的单片机可以供使用,国内更没有更高级的教材供参考,老师的水平也是参差不齐,而51单片机正符合这样的需求,不仅有大量的成型的教材,广泛的示例,当时工作的实际项目也是51单片机为主,于是51单片机理所当然的成为当时的学习基础。要知道笔者读本科的时候是2004年,即10年前的东西。按照莫尔定律,电子行业每18个月更新换代,10年前的技术现在已经更新了6代了——事实也确实如此。
51单片机主要发展历程:AT89C51(已停产)——AS89S51(已淘汰)——STC89C52(2004年,已落后)——STC12系列(2007年)——STC15F系列(2011年)——STC15W(2014年,最新主流)。
目前32位Crtex-M系列单片机的各种教程已经普及,其学习的难度不断降低。以意法半导体公司的STM32F系列单片机来说,意法半导体在推广产品初期大量赠送了核心板。免费赠送的核心板不仅有流行的32位Cortex-M系列微处理器,更在板上集成在线调试器。随机附赠的光盘或者链接更是提供了大量的示例源代码。我们只需要安装开发环境即可直接编译与下载调试。这时,如果再说51单片机是学习嵌入式的基础肯定是不合时宜了。
尽管如此,Crtex-M系列学习难度仍然比51系列复杂不少,如果没有51基础,32几乎不可能透彻掌握,因为32内部集成了更多的功能模块,讲解STM32的书要把STM32内部功能与常用实例讲好已经是很厚的一本书了,不可能再花太多的篇幅去讲相对简单的原理或基础知识。比如单片机上的C语言技巧、UART串口通信原理、IIC通信原理、SPI通信原理、红外通信原理、单总线18B20通信原理、SD卡驱动原理等,在32的书上只能直接抬出程序代码,不懂原理的学习是茫然的。
误区2:51单片机可以学习寄存器的操作
51单片机可以学习寄存器的操作,这一点儿是不容置疑的。我们分析一下其更深层的原因。在MSC-51单片机的编程环境中,最初是以汇编语言为主要编程语言。要知道汇编语言就是直接操作寄存器的,汇编语言是无法做到C语言的函数调用与封装的。如果说51单片机是以操作寄存器为优点,我觉得更应该说51单片机操作寄存器是一种无奈,是只有一个选项的选择题。
不管哪个型号单片机,现在大家都是以C语言编程为主。C语言方便阅读、可以快速建立复杂的工程。
我们现在的Cortex-M系列单片机就无法学习寄存器了吗?显然不是。在硬件设计中,硬件的操作方式就是寄存器的操作,但是其实现却是可以不同。各微处理器提供的C语言库函数包其实质就是将操作寄存器的指令进行了C语言环境下的封装。我们这里用ST官方库函数举一个示例:
void USART_Init (USART1, *USART_InitStruct);//实现串口1的初始化,简单明了,无需注释
笔者在这里也想举一个示例来说明寄存器操作的步骤,但是操作寄存器实在是太复杂了,笔者不想去浪费时间去整理了。 通俗易懂的C语言,方便移植的C语言与硬件平台相对应的编译器联合,就能完成硬件的操作。有了简单、方便的方式,我们为什么还要考虑繁琐,复杂的汇编语言与寄存器操作呢?
个人看法:使用寄存器方式能透彻掌握原理,达到知其然也知其所以然,使用库函数方式编程效率更高,2种方式都应学会。
误区3:51单片机的成本低
成本都是左右应用的主要因素。项目的立项主要考虑成本,销售的定价主要成本。低成本的方案才会在市场里占有优势。可是,51单片机真就是最低成本了吗?非也。现在按照功能划分,部分Cortex-m0系列的32位单片机的成本也能做3元人民币。其性能已经是51单片机的好几倍了,而且更容易开发与维护。
还有另外一个成本:开发难度成本。51单片机不支持在线调试,有一些问题在编程初期没有发现,只有与硬件连接后才会显现出现来,例如控制操作中经常用到的延时。这时在线调试的巨大优势就体现出来了,它可以极其方便的查看微处理器当时的状态,使得问题的分析变得简单而透明。从而,有效降低开发的难度,缩短开发周期,节约开发资金。
10年前的51单片机不支持在线调试,现在的51单片机本身具有完善的自仿真功能,无需外部仿真器即可在线调试,硬件仿真比STM32方便得多。便宜的单片机只需几毛钱。
误区4:51单片机入门简单
51单片机入门简单?我对于这个观点持保留意见。想要入门51单片机,我不仅熟悉该款单片机外设,而且还要充分了解寄存器的某位的意义。对于时钟,定时器的配置必须了如指掌。这样无疑会增大我的学习难度与熟悉的周期。如果我们使用32位单片机的库函数模式,我们只需要具备C语言的知识,了解API函数,直接看已经注释过的寄存器意思即可,不需要了解其底层的硬件实现,更不需要了解某个寄存器某个指定位的意义了。这样,减少了我的工作量,从而降低了开发难度。你说是51单片机入门简单,还是32位Cortex内核微处理器简单?
不学习单片机内部寄存器与工作原理,哪天STM32断货停产让你被迫更换单片机时,会因为不懂单片机内部原理会让程序无法移植,51单片机也可使用寄存器编程方式与库函数编程方式,但不同的单片机库函数不同,同一个单片机在不同时期库函数也不完全统一,所以最好还是学懂内部原理,劝君莫在浮沙筑高台。
嵌入式系统的学习是非常枯燥而又有挑战性的事情。由于与实际的硬件直接连接,不仅要考虑编写的正确性,而且还要考虑硬件的可靠性。这时,简单、高效的软件编写就变向的降低我们开发难度与风险。51单片机已经是明日黄花,向前看才是发展。是时候向51单片机说再见了!
10年前的51单片机早已停产或淘汰,取代它的是增强型的高速51单片机,比如STC15单片机,要比也应该拿年代接近的单片机做比较才是合理的。
永别了51!
有人说你便宜,不过我知道STM8比你更便宜,还有比你更更便宜的台系单片机。
有人说你能用IO口模拟 IIC 通信,UART通信,SPI通信,不过我知道stm8、stm32也可以用IO口模拟那些通讯。
有人说你是基础,学不牢靠就成不了大师。不过我知道就是把你学的再牢靠,也成不了大师,因为真正的基础根本就不是单片机。
价格你没有优势;功能你没有优势;抗干扰你没有优势;运算速度你没有优势;资源你没优势;
唉!用曹操的一句话来讲:“鸡肋”;
因人而已,因项目产品而已。很多项目、产品51绝对够了,没必要用stm32之类的。
大师,你牛啊!
本人不是大师,在天朝玩单片机的,本人见过老手、牛人、高手,就是没见过大师。本朝那些自称大师的人基本就是把人带沟里的人。不过可怜的是,明明已经被人带沟里了还在替人捧臭脚
莫在浮沙筑高台
初学单片机,正学51