缺芯时代,如何看待快被遗忘的51单片机
辩证地看待51内核单片机
要回答这个问题,首先需要来看一下传统的51单片机。在有些文章或者书本中,对于51单片机的态度是全面否定的,一旦听到某人要学习或者使用51单片机,则有种“群起而笑之”之势,觉得其主频低,外设少,技术老,然后以这些理由劝退要去学习51单片机的同学。其实,这个态度是非常武断的,必须被批判,虽然现在32位的单片机遍地都是,但是对于一些成本为首位的产品,8位机无疑还是有很大的价格优势的。而市面上最多的8位单片机产品,内核架构最普遍的还是51。批判51单片机不行的人,出发点无疑就是外设少,外部晶振12分频的硬伤这两点,然而这两点只不过是它们印象中的十几年前的51单片机产品。时代在发展,51单片机也在发展,为了区别那些全盘否定51单片机的人口中的“51单片机”,不断发展的51单片机一般被称为“增强型51单片机”。
接下来,我们用辩证的眼光,再来审视一下现在的“增强型51单片机”。
“增强型51单片机”保留了51单片机开发简单,内部结构简单,价格低廉等优点,弥补了传统51单片机的一些不足,增加了主流的外设资源。介于此,“增强型51单片机”的性价比到目前为止还是非常突出,新手上手程度也很简单,有点51单片机基础的,稍微看一下数据手册就可以直接使用。
但是,无论利用何种形式去增强51单片机,51单片机结构的一些致命硬伤是永远存在的,比如用于操作特殊功能寄存器的寻址,在C语言开发中只能利用C51独有的“sfr”关键词去定义特殊功能寄存器,而“sfr”又不是标准C中的关键词,因此51单片机的程序有一部分是无法直接移植到其他平台上去的。中断关键词“interrupt”也是一样。
辩证地看待其优缺点,“增强型51单片机”非常值得花时间学一学。
发展的眼光看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位机市场,也拿得出手。具体如图1-1-4所示。
图4 STC8A的配置
除此之外,51单片机特有的12分频瓶颈也早已被弥补,现在的51单片机更多的是1T的单片机。
用发展的眼光来看,增强型51单片机经过国内外四十几年的发展早就与时俱进,满足了市场需求,经住了产品考验。在过去16位单片机,如今32位单片机轮番挤压下,还能保留自己的市场地位。
已经学过51单片机,如何进阶?我来教你
大家好,我是小麦,最近有朋友问,已经学过51单片机了,如何进阶?
问题
事情是这样的,他在本科时期已经有相应的单片机开发经验,做过简单的项目,流水灯,倒计时,红绿灯,后面该如何提高呢?
首先我感觉得给进阶下一个定义,也就是明确也学习目标,怎么样才算进阶?我掌握哪些东西,可以独立完成哪些开发任务,才算达到了进阶的目的呢?
如果单纯是单片机开发的进阶?
我认为入门的阶段是这样的:
如果刚开始以51单片机起步,能基于开发板做简单的项目,比如搞个流水灯,再复杂点会做电子万年历(DS1302+LCD1602 )就挺不错了;如果一开始就上STM32了,那么能在常用的STM32开发板上做一些功能,实现一些小的功能,或者能用CubeMX配置和初始化代码,然后做一些项目;我认为的进阶是这样的,需要掌握这些;
首先我觉得硬件设计是必要的,能根据需求,进行硬件开发,进行原理图设计,PCB的Layout,绘制简单的双层PCB板;在进行硬件设计的过程中,可以试着抄一下已经开源的原理图,或者一般集成电路的DataSheet中都有相应的参考电路,根据这些参考电路进行原理图设计,后面可能会进行一些修改,在新的改版中进行修改即可。焊接技能,如果有最好了,没有的话,可以在PCB打样的时候找厂家进行贴片,配套服务还是很不错的,节省了时间成本;样板到了之后,就要动手对板子进行调试了,这时候会比较复杂,配套的技能包,比如示波器如何使用 ?如何捕获波形 ?如何使用万用表 ?有时候问题会比较玄乎,感觉可能在硬件上,又感觉在软件上,这里建议最好有一个方案验证板(至少保证硬件没问题);最后是编写安全可靠的代码,当然如果移植性好,代码框架好最好了;之前也有朋友问我,自己想做一些DIY项目,软硬件都自己设计,该如何学习?他是搞互联网专业的,做嵌入式单纯是爱好,享受生命在于折腾的快乐而已;
硬件设计
新手建议使用Altium Designer,教程比较多,国产软件立创EDA也不错,开源的KiCad也可以使用,选一款就行,软件都大同小异,不要在纠结选择哪一款软件上而浪费时间,我个人建议使用Altium Designer,下面简称AD;
网上有很多免费的教程,可以去搜一下,看完教程一定要自己尝试着设计一个电路,可以简单一点,设计一个单片机的最小系统。
链接:https://pan.baidu.com/s/1yKfsttgIBeKKMK65m9H91g
提取码:pzsz
软件设计
单片机的编程开发是必须要掌握C语言的,汇编语言可以简单能读懂就行,调试的时候能简单看懂反汇编就行,所以要把主要精力放在C语言上,其实,初期C语言会常用的语法:
循环:for,while分支:if else,switch就可以做很多事情了,但是后面还需要进阶,因为写出健壮高效,可复用,可移植的程序,只会这些还远远不够。
好了,我们学习了C语言是为了开发单片机的,是要直接对硬件进行操作,直接操作单片机上的外设寄存器,所以
这里以STM32举例,通常我们需要熟悉常用的接口和协议,和一些常用的外设,后面你会发现,不论是什么厂家的单片机,其实都大同小异;
比较常用的,我们会遇到GPIO,TIM定时器,systick,UART,I2C,SPI,CAN等;
一般来说,像STM32这种硬件平台,前期使用的人很多,网络资源非常丰富,很多时候会Ctrl+C和Ctrl+V就行了,另外ST提供了cubeMX这种工具,初始化根本不需要人为干预,但是有时候过于依赖工具,往往会被工具反噬,我就遇到过用cubeMX配置代码,遇到问题一脸懵逼,不知道如何下手的朋友。
当然我不是提倡大家穿着新鞋走老路,因为时代在发展,不能换一个寄存器一个寄存器去手撸,不过这时候,需要对底层有一个更全面的认识了,从单片机内核架构层面去理解,这需要学习其他的体系知识了,比如地址总线,数据总线,ARM的架构,外设是如何CPU进行数据交换的等等;
比如今年缺芯严重,不得不进行国产替代,不吹不黑,今年换了几款国产的MCU,资料不太完善,也没有太多参考的Demo,后来使用固件库的时候发现了几处BUG,最后还是得靠自己参考开发手册排查错误。
言归正传,我们要学会去官网找资料,有很多应用方案,芯片的开发手册UM( user manual),自己搭建开发环境,然后找到相应的芯片的固件库,这些都能自力更生,就非常不错了。
多提问,多交流
一个人,走得快,一群人,走得远;所以要多与人交流沟通,不耻下问,这里一定要注意提问的技巧;下面是我认为的几点;
尽量别问搜索引擎能解决的问题;尽量收集问题相关的信息;例如单片机而言,你不能问:为什么我的灯点不亮?或者你可以问:我的灯点不亮,测量了IO输出电平正常,但是没有亮?不要使用难懂、模糊化等词句,尽量简短,清晰,简明,扼要地描述你的问题;对的时间,问对的人,在别人全神贯注思考或搬砖的时候,就不要轻易打扰他人;明确你的提问目的是什么,如果你自己都不在自己要问什么,那还是先整理一下问题再问吧;加入嵌入式技术交流群一起进步
最后
这篇文章里我简单地聊了一下如何进行单片机进阶,个人认为需要硬件设计和软件设计两部分;
硬件设计;软件设计;如果详细展开,每个部分都有很多东西可以学习的,其实感觉最初能做简单的PCB,然后在这硬件基础上进行相应的软件开发,就已经达到了一个进阶的目的,后续需要的是不断在项目中进行提高,可以不断积累硬件方面的经验,另外还需要系统地学习基础知识,比如计算机系统(微机原理),C语言,数据结构等,软件部分可以多看一下开源的优秀项目,学习他们的设计思想,这样会提高得很快。
好了,这期先这样,时间比较赶,简单地说一下哈,我是小麦,我们下期再见。
相关问答
标准型51单片机与 增强型51单片机 引脚有什么异同?标准型51单片机与增强型51单片机引脚完全兼容,增强型51单片机可以直接代换标准型51单片机,而不需要担心管脚有差别。增强型51单片机比标准型51单片机主要是更...
51单片机 入门后怎么提高?掌握单片机入门知识后,建议从以下几个方面提高:深入理解硬件结构:深入了解单片机的寄存器、时序图、中断系统和外围电路,为后续学习奠定基础。熟练掌握编程...
51单片机 如何延迟到250纳秒?对于那些老型号51单片机,无论如何也搞不出来250nS程序延迟,因为它们最快的指令也需要1微秒。现在的主流51单片机都提高了主频,并且采用了流水线结构,所以,...
ba 51 和ba52区别?区别主要以下3点:1、ba52单片机的最高外接晶振可以达到33MHz,ba51单片机大概只有24MHz。2、ba52单片机多个定时器,ba51单片机是128,ba52单片机是256。3、b...
STM32比 51 强在哪?*ATMEL(艾德梅尔)的:89C51、89C52、89C2051,89S51(RC),89S52(RC)等;*Philips(飞利浦)、华邦、Dallas(达拉斯)、Siemens(西门子)等公司...
51 开发板特点?51开发板能干什么51开发板也称51单片机实验板、51单片机学习板。是用于学习51型号的单片机的实验及学习器件,他是将51单片机常用的外围。比如流水灯,数码...
51单片机 支持什么芯片?1.通信芯片:PL2303--USB转TTL串口。MAX232---RS232转TTL2.实时时钟芯片,比较常用的有DS1302,PCF8563,DS12C8873.EEPROM存储芯片,如AT2...
AT89S52单片机和AT89C 51单片机 的区别?AT89S52是AT89C51的增强型,AT89S522比AT89C51,定时器多一个T2(这个东东强悍的很),RAM多128B,ROM多4K,中断多2个,多一个看门狗,在掉电、数据指针等方面还有.....
为什么 51单片机 P0口输出高电平时要选择合理上拉电阻?2、OC门电路必须使用上拉电阻,以提高输出的高电平值。3、为增强输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。4、在CMOS芯片上,为了防止静电造成...
51单片机 上三极管的名称?在51单片机中,常用的三极管有NPN型和PNP型两种。NPN型三极管由一层N型半导体夹在两层P型半导体之间,而PNP型三极管则由一层P型半导体夹在两层N型半导体之间。...